Ошибка в консоле amxx

nevzorov77

Пользователь
Регистрация
8 Фев 2018
Сообщения
68
Симпатии
6
#1
OS
Linux
Amx Mod X
AMXX 1.8.3-dev
Билд
-
ReGamedll
-
Metamod
-
Meta модули
-
Плагины
-
Amxx Модули
-
Ошибка
-
Здравствуйте , подскажите почему ошибку выбивает и как её поправить?

[AMXX] Displaying debug trace (plugin "INFO.amxx", version "1.0") [AMXX] Run time error 4: index out of bounds [AMXX] [0] 01aa17fc4fb876198884836a710513e4.sma::BlockVoice (line 87) [AMXX] Displaying debug trace (plugin "INFO.amxx", version "1.0") [AMXX] Run time error 4: index out of bounds

Сам исходник плагина.


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

#define VIP_ACCESS ADMIN_BAN

#define TIME_FOR_INFO 10.0 // Время после смерти, через которое живые не услышат игрока

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

#define is_user_vip(%0) (get_user_flags(%0) & VIP_ACCESS)

new bool:g_bBlockVoice[MAX_PLAYERS + 1];
new g_iUserAlive[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("Time for info", "1.0", "neugomon /// eL");
    
    RegisterHookChain(RG_CBasePlayer_Spawn, "fwdPlayerSpawnPost", true);
    RegisterHookChain(RG_CBasePlayer_Killed, "fwdPlayerKilledPost", true);
    
    register_forward(FM_Voice_SetClientListening, "FwdSetClientListening", false);
}

public client_putinserver(id)
{
    if(is_user_vip(id))
    {
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = false;
    }
    else
    {
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = true;       
    }
}   

public fwdPlayerSpawnPost(id)
{
    if(is_user_vip(id)) return;
    
    g_iUserAlive[id] = is_user_alive(id);
    if(g_iUserAlive[id])
        g_bBlockVoice[id] = false;
}

public fwdPlayerKilledPost(const id)
{
        if(is_user_vip(id)) return;
        
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = false;
        
        g_iUserAlive[id] = 0;
        set_hudmessage(70, 150, 0, -1.0, 0.3, 1, 3.0, 3.0, TIME_FOR_INFO);
        show_hudmessage(id, "У вас 10 секунд чтобы дать информацию игрокам.");
        set_task(TIME_FOR_INFO, "BlockVoice", id+32137);
}

public FwdSetClientListening(iReciever, iSender)
{
    if(iSender != iReciever && g_bBlockVoice[iSender] && g_iUserAlive[iReciever])
    {   
        engfunc(EngFunc_SetClientListening, iReciever, iSender, false);
        forward_return(FMV_CELL, false);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public BlockVoice(id)
{
id-=32173;
    if(!g_iUserAlive[id])
    {
        g_bBlockVoice[id] = true;
        set_hudmessage(255, 100, 0, -1.0, 0.25, 1, 8.0, 8.0, 0.1, 0.5, 4);
        show_hudmessage(id, "Живые товарищи по команде^n больше не слышат вас.");
    }   
}
 

nevzorov77

Пользователь
Регистрация
8 Фев 2018
Сообщения
68
Симпатии
6
#3
В спавн алив выше вип.
В дисконнекте очищать таск.
Я плохо понимаю данную терминологию , прошу объяснить более понятнее , если конечно не сложно. Для меня amxx , как для тебя 20 выходов силы сделать на турнике :Comando:
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
446
Симпатии
260
#6
кешировать алив это глупость а не более
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
446
Симпатии
260
#8
nevzorov77,
C++:
#include <amxmodx>
#include <fakemeta>
#include <dhudmessage>
#include <reapi>

#define VIP_ACCESS ADMIN_BAN

#define TIME_FOR_INFO 10.0 // Время после смерти, через которое живые не услышат игрока

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

#define is_user_vip(%0) (get_user_flags(%0) & VIP_ACCESS)

const DELAY_TASK_ID = 32173;

new bool:g_bBlockVoice[MAX_PLAYERS + 1];
new g_iUserAlive[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("Time for info", "1.0", "neugomon /// eL");
    
    RegisterHookChain(RG_CBasePlayer_Spawn, "fwdPlayerSpawnPost", true);
    RegisterHookChain(RG_CBasePlayer_Killed, "fwdPlayerKilledPost", true);
    
    register_forward(FM_Voice_SetClientListening, "FwdSetClientListening", false);
}

public client_putinserver(id)
{
    if(is_user_vip(id))
    {
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = false;
    }
    else
    {
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = true;       
    }
}   

public fwdPlayerSpawnPost(id)
{
    if(is_user_vip(id)) return;
    
    g_iUserAlive[id] = is_user_alive(id);
    if(g_iUserAlive[id])
        g_bBlockVoice[id] = false;
}

public fwdPlayerKilledPost(const id)
{
        if(is_user_vip(id)) return;
        
        g_iUserAlive[id] = false;
        g_bBlockVoice[id] = false;
        
        g_iUserAlive[id] = 0;
        set_hudmessage(70, 150, 0, -1.0, 0.3, 1, 3.0, 3.0, TIME_FOR_INFO);
        show_hudmessage(id, "У вас 10 секунд чтобы дать информацию игрокам.");
        set_task(TIME_FOR_INFO, "BlockVoice", id+DELAY_TASK_ID);
}

public FwdSetClientListening(iReciever, iSender)
{
    if(iSender != iReciever && g_bBlockVoice[iSender] && g_iUserAlive[iReciever])
    {   
        engfunc(EngFunc_SetClientListening, iReciever, iSender, false);
        forward_return(FMV_CELL, false);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public BlockVoice(id)
{
    id-=DELAY_TASK_ID;
    if(!g_iUserAlive[id])
    {
        g_bBlockVoice[id] = true;
        set_hudmessage(255, 100, 0, -1.0, 0.25, 1, 8.0, 8.0, 0.1, 0.5, 4);
        show_hudmessage(id, "Живые товарищи по команде^n больше не слышат вас.");
    }   
}