[Помощь] awp limit

Сообщения
58
Реакции
25
Помог
4 раз(а)
Ругается на 54 строку из-за невалидной ентити. Подскажите как правильно сделать или может в целом как-то улучшить код

Код:
#include <amxmodx>
#include <reapi>

#define CURRENT_ROUND (get_member_game(m_iTotalRoundsPlayed) + 1)
#define BLOCK_MAPS    "awp_", "aim_", "fy_", "35hp", "$2000$", "dm_", "he_", "cs_deagle5"    //    Блокируемые карты


new const g_szConfigName[] = "awp_limit";
new g_iSnipersMax, g_iSnipersMin, g_iFirstRound
new HookChain: Hook_HasRestrictItem;


public plugin_init(){
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

    bind_pcvar_num(create_cvar(
        "snipers_max",
        "3",
        .description = "Максимальное количество awp в команде"),
        g_iSnipersMax);

    bind_pcvar_num(create_cvar(
        "snipers_min",
        "10",
        .description = "Минимальное число игроков, при котором можно купить awp"),
        g_iSnipersMin);

    bind_pcvar_num(create_cvar(
        "snipers_firstround",
        "3",
        .description = "С какого раунда разрешить покупать awp"),
        g_iFirstRound);

    DisableHookChain(Hook_HasRestrictItem = RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "CBasePlayer_HasRestrictItem"));

    block_maps();

    AutoExecConfig(true, g_szConfigName);
}

public CBasePlayer_HasRestrictItem(const id, const ItemID:item, const ItemRestType:type)
{
    if(ItemID != ITEM_AWP) return HC_CONTINE;
  
    if(!check_awp_num(id, item)){
        SetHookChainReturn(ATYPE_BOOL, true);
        return HC_SUPERCEDE;
    }
    else
        return HC_CONTINUE;
}
public check_awp_num(const id, const ItemID:item){
    new players[MAX_PLAYERS], pnum, iAwpNum;
    new iTeam = get_member(id, m_iTeam);

    if(iTeam == TEAM_TERRORIST) get_players(players, pnum, "ach", "TERRORIST");
    else if(iTeam == TEAM_CT) get_players(players, pnum, "ach", "CT");

    for(new i; i < pnum; i++)
        if(user_has_weapon(players[i], CSW_AWP))
            iAwpNum++
  
    if(g_iFirstRound > CURRENT_ROUND){
        client_print_color(id, print_team_default, "[^4Сервер^1] ^4Взять ^3AWP ^4с %d-го раунда!",g_iFirstRound);
        return false;
    }
    else if(g_iSnipersMin > pnum){
        client_print(id, print_center, "*Запрещено если на сервере играет меньше %d игроков!*", g_iSnipersMin)
        return false;
    }
    else if( iAwpNum >= g_iSnipersMax){
        client_print(id, print_center, "*Превышен лимит снайперок в команде!*")
        return false;
    }
      
    return true;
}
public block_maps(){
    new map[32];
    new BlockMap[][] = { BLOCK_MAPS };
    rh_get_mapname(map, charsmax(map));
    for(new i; i < sizeof BlockMap; i++){
        if(containi(map, BlockMap[i]) != -1) {
            return;
        }
    }
    EnableHookChain(Hook_HasRestrictItem);
}
 
Последнее редактирование:
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
xramer, зачем регать+отключать хук, а потом снова включать, если не отрезало в block_maps()? можно просто регать в нём же.

Ругается на 54 строку из-за невалидной ентити.
Код:
-if(ItemID != ITEM_AWP) return HC_CONTINE;
+if(ItemID != ITEM_AWP || !is_user_connected(id)) return HC_CONTINE;
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
BlackSignature, в этом хуке не нужен же is_user_connected
 

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

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