Изменения гранат

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Если я удалю все гранаты (три ХЕшки) данным стоком

C-подобный:
stock void RemoveGrenade(int client)
{
    for(int i = 0; i < sizeof(sHeList); i++)
    {
        int iIndex = -1, owner;
        while ((iIndex = FindEntityByClassname(iIndex, sHeList[i])) >= 0)
        {
            if (!IsValidEdict(iIndex))
                return;
            owner = GetEntPropEnt(iIndex, Prop_Send, "m_hOwner");
            if (owner == client && RemovePlayerItem(client, iIndex))
                AcceptEntityInput(iIndex, "Kill");
        }
    }
}

То при проверки, будет выдавать теже 3 ХЕшки
C-подобный:
PrintTochat(client, "Гранат [%d]", GetEntProp(client, Prop_Send, "m_iAmmo", _, 11))

Как удалить гранаты так, что бы это было видно?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Nekro, а почему ты просто из 3-го слота все гранаты у игрока не отбираешь?
На кой ты делаешь поиск по всем энтити?
C-подобный:
stock void StripNades(int client)
{
    while(RemoveWeaponBySlot(client, 3)) {}
}

stock bool RemoveWeaponBySlot(int client, int slot)
{
    static int entity;
    if((entity = GetPlayerWeaponSlot(client, slot)) <= MaxClients)
    {
        RemovePlayerItem(client, entity);
        AcceptEntityInput(entity, "KillHierarchy");
    }
    return entity != -1;
}
Если нужно отобрать определённый тип гранат, то можно либо перед отбиранием проверить класс энтити.
Или же просто установить определённое количество в параметрах игрока.
C-подобный:
/*
Тип зарядов

    CS:S
HE            - 11
флешка        - 12
smoke        - 13

    CS:GO
HE            - 14
флешка        - 15
smoke        - 16
молотов        - 17
обманка        - 18
*/

int m_iAmmo;

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    if((m_iAmmo = FindSendPropInfo("CCSPlayer", "m_iAmmo")) < 1)
    {
        FormatEx(error, err_max, "Can't find offset 'CCSPlayer::m_iAmmo'");
        return APLRes_Failure;
    }

    return APLRes_Success;
}

stock void RemoveAmmo(int client, int type)
{
    SetEntData(client, (m_iAmmo + (type << 2)), 0, _, true);
}
 
Сверху Снизу