Плагин выдачи щита

Сообщения
49
Реакции
9
Всем привет!
По теории вероятности понял что сервер падает из-за плагина выдачи щита.
Плагин простой, но видимо в коде где-то косяк, что-то неправильно реализовано.
Подскажите пожалуйста, что изменить/подправить, что неправильно в коде.
Всем спасибо!
Код:
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

#define ACCESS_FLAG        ADMIN_LEVEL_H        // доступ

new bool:Shieldbloc[MAX_PLAYERS+1];

public plugin_init()
{
    register_plugin("Shit", "1.0", "Ready");
    register_clcmd("say /shit", "ClientCommand_Shit");
    register_clcmd("say_team /shit", "ClientCommand_Shit");
    register_clcmd("say /stop", "ClientCommand_Shitstop");
    register_clcmd("say_team /stop", "ClientCommand_Shitstop");
    RegisterHookChain(RG_CBasePlayer_Spawn, "Clientdropitem", 1);
    RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "fwdHasRestrictItemPre", false);
   
}

public client_putinserver(id)
{
    Shieldbloc[id] = false;
}

public client_disconnected(id)
{
    Shieldbloc[id] = false;
}

public ClientCommand_Shit(id)
{
    if(~get_user_flags(id) & ACCESS_FLAG)
    {
        client_print_color(id, print_team_default, "^4[Щит] У вас нет доступа покупки ^3супер щита^4!");
        return PLUGIN_HANDLED;
    }
    if(!is_user_alive(id))
    {
        client_print_color(id, print_team_default, "^4[Щит] Вы должны быть ^3живы^4!");
        return PLUGIN_HANDLED;
    }
    rg_drop_items_by_slot(id, InventorySlotType: 1);
    rg_give_shield(id);
    rg_give_item(id, "weapon_knife");
    Shieldbloc[id] = true;
    client_print_color(id, print_team_default, "^4[Щит] Вам выдан ^3щит^4!");
    return HC_CONTINUE;
}

public ClientCommand_Shitstop(id)
{
    Shieldbloc[id] = false;
}

public Clientdropitem(id)
{
    if(Shieldbloc[id])
    {
        rg_drop_items_by_slot(id, InventorySlotType: 1);
        rg_give_shield(id);
        rg_give_item(id, "weapon_knife");
        return PLUGIN_HANDLED;
    }
    return HC_CONTINUE;
}

public fwdHasRestrictItemPre(const id, const ItemID:item, ItemRestType:type)
{
    if((1 << any:item) && Shieldbloc[id])
    {
        if(type == ITEM_TYPE_BUYING)
            client_print(id, print_center, "*** Покупка запрещена! Вы Техник ***");
       
        rg_drop_items_by_slot(id, InventorySlotType: 1);
        return HC_SUPERCEDE;
    }
    return HC_CONTINUE;
}
 

Вложения

Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Rasul, вы бы хоть описали, при каких условиях происходит падение.

Подозреваю, что нужно добавить SetHookChainReturn(ATYPE_INTEGER, true) перед суперцидом в fwdHasRestrictItemPre()
Ну и return PLUGIN_HANDLED в Clientdropitem() смущает. Это выходит, суперцид.
 
Сообщения
49
Реакции
9
BlackSignature, при SetHookChainReturn(ATYPE_INTEGER, true); нельзя за тт поднять бомбу. Т.е если активирован режим щита, то с земли нельзя подобрать с4. Даже если выбросить щит, все равно не дает поднять.
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Rasul,
Код:
if((1 << any:item) && Shieldbloc[id])
--->
Код:
if((1 << any:item) && Shieldbloc[id] && item != ITEM_C4)
 
Сообщения
49
Реакции
9
BlackSignature, Большое спасибо! Все работает!
1 Дек 2018
BlackSignature, Привет! Подскажи пожалуйста последнюю деталь. Если активирован режим щит, то не дает купить оружие, даже если выбросить щит. Пишет "is not avilable for tour team to buy".
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Rasul,
Код:
client_print(id, print_center, "*** Покупка запрещена! Вы Техник ***");
--->
Код:
return HC_CONTINUE
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу