Написание плагинов

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем доброй ночи, подскажите пожалуйста, почему граната горит не вся, а лишь 1 пиксель огня появляется на долю секунды
1732569059041.png
1732569066797.png
Код:
#include <sdktools_functions>
#include <sdktools_sound>
#include <sdkhooks>

int g_iGrenadeThrowerOffset;

public void OnPluginStart()
{
    g_iGrenadeThrowerOffset = FindSendPropInfo("CBaseCSGrenadeProjectile", "m_hThrower");
}

public Action Timer_EntityGrenade(Handle timer, any iEntity)
{
    if (IsValidEntity(iEntity))
    {
        int iClient = GetEntDataEnt2(iEntity, g_iGrenadeThrowerOffset);

        if (iClient > 0 && iClient <= MaxClients)
        {
            char sGrndProjectile[24];
            GetEdictClassname(iEntity, sGrndProjectile, sizeof(sGrndProjectile));
            if (strcmp(sGrndProjectile, "hegrenade_projectile") == 0) IgniteEntity(iEntity, 10.0, false, 45.0, false);
        }
    }

    return Plugin_Continue;
}


public void OnEntityCreated(int iEntity, const char[] sClassName)
{
    if (strcmp(sClassName, "hegrenade_projectile") == 0)
    {
        CreateTimer(0.0, Timer_EntityGrenade, iEntity, 2);
    }
}
 

DarkerZ

Участник
Сообщения
395
Реакции
175
Всем доброй ночи, подскажите пожалуйста, почему граната горит не вся, а лишь 1 пиксель огня появляется на долю секунды
Код:
#include <sdktools_functions>
#include <sdktools_sound>
#include <sdkhooks>

int g_iGrenadeThrowerOffset;

public void OnPluginStart()
{
    g_iGrenadeThrowerOffset = FindSendPropInfo("CBaseCSGrenadeProjectile", "m_hThrower");
}

public Action Timer_EntityGrenade(Handle timer, any iEntity)
{
    if (IsValidEntity(iEntity))
    {
        int iClient = GetEntDataEnt2(iEntity, g_iGrenadeThrowerOffset);

        if (iClient > 0 && iClient <= MaxClients)
        {
            char sGrndProjectile[24];
            GetEdictClassname(iEntity, sGrndProjectile, sizeof(sGrndProjectile));
            if (strcmp(sGrndProjectile, "hegrenade_projectile") == 0) IgniteEntity(iEntity, 10.0, false, 45.0, false);
        }
    }

    return Plugin_Continue;
}


public void OnEntityCreated(int iEntity, const char[] sClassName)
{
    if (strcmp(sClassName, "hegrenade_projectile") == 0)
    {
        CreateTimer(0.0, Timer_EntityGrenade, iEntity, 2);
    }
}
попробуй использовать ивент: weapon_fire. посмотри реализацию в zombie reloaded, там вроде как есть поджёг гранаты
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Всем доброй ночи, подскажите пожалуйста, почему граната горит не вся, а лишь 1 пиксель огня появляется на долю секунды
Код:
#include <sdktools_functions>
#include <sdktools_sound>
#include <sdkhooks>

int g_iGrenadeThrowerOffset;

public void OnPluginStart()
{
    g_iGrenadeThrowerOffset = FindSendPropInfo("CBaseCSGrenadeProjectile", "m_hThrower");
}

public Action Timer_EntityGrenade(Handle timer, any iEntity)
{
    if (IsValidEntity(iEntity))
    {
        int iClient = GetEntDataEnt2(iEntity, g_iGrenadeThrowerOffset);

        if (iClient > 0 && iClient <= MaxClients)
        {
            char sGrndProjectile[24];
            GetEdictClassname(iEntity, sGrndProjectile, sizeof(sGrndProjectile));
            if (strcmp(sGrndProjectile, "hegrenade_projectile") == 0) IgniteEntity(iEntity, 10.0, false, 45.0, false);
        }
    }

    return Plugin_Continue;
}


public void OnEntityCreated(int iEntity, const char[] sClassName)
{
    if (strcmp(sClassName, "hegrenade_projectile") == 0)
    {
        CreateTimer(0.0, Timer_EntityGrenade, iEntity, 2);
    }
}
Вроде еще есть в випке от Very Important Person
Можно там глянуть пример
 

babka68

Участник
Сообщения
2,124
Реакции
956
@alexnet Проверьте в этой версии присутствует данная проблема?
Оставлял чисто функционал как то, без настроек и прочего

C-подобный:
#include <cstrike>
#include <sdktools_functions>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =
{
    name = "Replacing Bot",
    author = "babka68",
    description = "Игрок может заменить бота",
    version = "1.0",
    url = "https://vk.com/zakazserver68"
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    if (buttons & IN_USE && !IsPlayerAlive(client))
    {
        int team_client = GetClientTeam(client);
        
        static int i = 0; i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        if (i > 0 && IsFakeClient(i))
        {
            int teami = GetClientTeam(i);
            
            if (team_client == teami)
            {
                static float pos[3];
                GetClientAbsOrigin(i, pos);
                
                KickClient(i);
                CS_RespawnPlayer(client);
                
                TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            }
        }
    }
    return Plugin_Continue;
}
 

alexnet

Участник
Сообщения
82
Реакции
3
@alexnet Проверьте в этой версии присутствует данная проблема?
Оставлял чисто функционал как то, без настроек и прочего

C-подобный:
#include <cstrike>
#include <sdktools_functions>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =
{
    name = "Replacing Bot",
    author = "babka68",
    description = "Игрок может заменить бота",
    version = "1.0",
    url = "https://vk.com/zakazserver68"
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    if (buttons & IN_USE && !IsPlayerAlive(client))
    {
        int team_client = GetClientTeam(client);
       
        static int i = 0; i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        if (i > 0 && IsFakeClient(i))
        {
            int teami = GetClientTeam(i);
           
            if (team_client == teami)
            {
                static float pos[3];
                GetClientAbsOrigin(i, pos);
               
                KickClient(i);
                CS_RespawnPlayer(client);
               
                TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            }
        }
    }
    return Plugin_Continue;
}
к сожалению проблема осталась
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@alexnet, емнип, там нужно с радаром как-то взаимодействовать после кика бота, т.к. сам движок игры этим не озабочен
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
@alexnet, емнип, там нужно с радаром как-то взаимодействовать после кика бота, т.к. сам движок игры этим не озабочен
Правильно, просто каждый тик обнову делать для всех и все, а если такие как у него плагины используются, лучше вообщем сделать вместе для оптимизации
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@KiKiEEKi, там только метку бота удалить один раз после кика, возможно.

Хотя я по радару и не помню ничего особо
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Добрый вечер, подскажите пожалуйста, почему звук не кешируется (SV_StartSound: not precashed (0))
Код:
g_sKillSound[64];

Звук берется из конфига, вот строка с получением звука из конфига: 
hKV.GetString("kill_card_sound", g_sKillSound, sizeof(g_sKillSound));

public void OnMapStart()
{
    char sBuffer[256];
    if (g_sKillSound[0])
    {
        PrecacheSound(g_sKillSound, true);
        Format(sBuffer, sizeof(sBuffer), "sound/%s", g_sKillSound);
        AddFileToDownloadsTable(sBuffer);
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@7pElllHuK, ты добавь сообщение для дебага, когда на старте карты проверяется содержимое переменной.
Может в этот момент ещё нет значения у переменной?

И точно у папки имя «sound» должно быть, а не «sounds»?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
@7pElllHuK, ты добавь сообщение для дебага, когда на старте карты проверяется содержимое переменной.
Может в этот момент ещё нет значения у переменной?

И точно у папки имя «sound» должно быть, а не «sounds»?
Имя папки sound, проверил, Добавлял дебаг, переменная не пустая, сам звук воспроизводится и качается, но выдает эту ошибку в консоли на сервере
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Полный путь до папки получается cstrike\sound\sound ?
просто cstrike/sound, в конфиге путь к звуку указывается без папки sound, для этого в плагине есть Format, который подставит sound за владельца сервера
 

anonim8

Участник
Сообщения
26
Реакции
7
Папку sound не надо прописывать т.к. с нее и идет поиск пути файла для кеширования
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Папку sound не надо прописывать т.к. с нее и идет поиск пути файла для кеширования
Кеширование идет До подстановки папки sound (в коде видно), уже после кеширования идет подстановка папки и закачка звука игроку
 

DarkerZ

Участник
Сообщения
395
Реакции
175
Кеширование идет До подстановки папки sound (в коде видно), уже после кеширования идет подстановка папки и закачка звука игроку
C-подобный:
public void OnMapStart()
{
    g_iSTSound = FindStringTable("soundprecache");
}
...
AddToStringTable(g_iSTSound, sFile);
PrecacheSound(sFile, false);
sFile без sound/
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@DarkerZ, код для CS:GO, что ли?
Это там были проблемы со звуками, что в StringTable вручную засовывать файлы требовалось.
 
Сверху Снизу