AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Invalid index -8 (count: 7) (https://forums.alliedmods.net/showthread.php?t=333789)

Carbonzxc 08-05-2021 14:36

Invalid index -8 (count: 7)
 
Hello,

i have a problem regarding a plugins array, i need help for fix that debug output ;

L 08/05/2021 - 21:35:31: Invalid index -8 (count: 7)
L 08/05/2021 - 21:35:31: [AMXX] Displaying debug trace (plugin "zp_addon_quests.amxx", version "29.05.2018")
L 08/05/2021 - 21:35:31: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 08/05/2021 - 21:35:31: [AMXX] [0] zp_addon_quests.sma::Show_MainMenu (line 152)
L 08/05/2021 - 21:35:31: [AMXX] [1] zp_addon_quests.sma::Handle_MainMenu (line 173)

Code:

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <zp_buymenu>

// -> Инфо о плагине <- //{
new g_Plugin[] = "[ZP] Quests";
new g_Version[] = "29.05.2018";
new g_Author[] = "vk.com/cs_jump";
// -> Инфо о плагине <- //}

//native zp_get_user_ptz(id, ptz)

const RIGHT_PER_PAGE = 8; // Игроков на одной странице (9 - далее | 0 - выход)
new g_iMenuPosition[33], Target[33];

enum _:DATA_LIST { Name[64], Description[64], Number[64], Type[64], Reward[64], Exp[64] }
new aDataLIST[DATA_LIST]
new Array:g_aList;
new g_iListSize;
new iKillerNum[33][15];

public plugin_init()
{
        register_plugin(g_Plugin, g_Version, g_Author);

        register_menucmd(register_menuid("Show_MainMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_MainMenu");

        register_clcmd("say /quests", "ClientCmd");
        register_clcmd("zp_quests", "ClientCmd");
        RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post");
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
}

public plugin_precache()
{
        new szCfgDir[64], szCfgFile[128];
        get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
// Получаем список Квестов
        formatex(szCfgFile, charsmax(szCfgFile), "%s/zp_quests.ini", szCfgDir);
        switch(file_exists(szCfgFile))
        {
                case 0:
                {
                        write_file(szCfgFile, "; Файл добавления квестов");
                        write_file(szCfgFile, "; ^"Название^" ^"Описание^" ^"Кол-во для награды^" ^"Тип^" ^"Награда Аммо^"");
                        write_file(szCfgFile, "; Типы:");
                        write_file(szCfgFile, "; 1 - Заражение");
                        write_file(szCfgFile, "; 2 - Убийство Зомби");
                        write_file(szCfgFile, "; 3 - Убийство первого Зомби");
                        write_file(szCfgFile, "; 4 - Убийство последнего Зомби");
                        write_file(szCfgFile, "; 5 - Убийство Дьявола");
                        write_file(szCfgFile, "; 6 - Убийство Выжившего");
                        write_file(szCfgFile, "; 7 - Нанесение Урона");
                        write_file(szCfgFile, "");
                        write_file(szCfgFile, "^"Убийца^" ^"Убить зомби^" ^"10^" ^"2^" ^"20^"");
                        write_file(szCfgFile, "^"Киллер^" ^"Убить зомби^" ^"15^" ^"2^" ^"30^"");
                        write_file(szCfgFile, "^"1-я Зараза^" ^"Убить первых зомби^" ^"5^" ^"3^" ^"40^"");
                        write_file(szCfgFile, "^"Последняя Зараза^" ^"Убить последних зомби^" ^"5^" ^"4^" ^"50^"");
                        write_file(szCfgFile, "^"Охотник^" ^"Убить выживших^" ^"5^" ^"6^" ^"70^"");
                        write_file(szCfgFile, "^"Мясник^" ^"Убить дьяволов^" ^"5^" ^"5^" ^"70^"");
                        write_file(szCfgFile, "^"Зараза^" ^"Заразить людей^" ^"15^" ^"1^" ^"20^"");
                        write_file(szCfgFile, "^"Токсичный^" ^"Заразить людей^" ^"25^" ^"1^" ^"40^"");
                        write_file(szCfgFile, "^"Ликвидатор^" ^"Нанести урона^" ^"100000^" ^"7^" ^"500^"");
                }
                case 1:
                {
                        new szBuffer[128], iLine, iLen;
                        g_aList = ArrayCreate(DATA_LIST);
                        while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
                        {
                                if(!iLen || szBuffer[0] == ';') continue;
                                parse
                                (
                                        szBuffer,
                                        aDataLIST[Name], charsmax(aDataLIST[Name]),
                                        aDataLIST[Description], charsmax(aDataLIST[Description]),
                                        aDataLIST[Number], charsmax(aDataLIST[Number]),
                                        aDataLIST[Type], charsmax(aDataLIST[Type]),
                                        aDataLIST[Reward], charsmax(aDataLIST[Reward]),
                                        aDataLIST[Exp], charsmax(aDataLIST[Exp])
                                );
                                ArrayPushArray(g_aList, aDataLIST);
                        }
                        g_iListSize = ArraySize(g_aList);
                }
        }
}

public plugin_natives()
{
        register_native("zp_open_quests", "ClientCmd", 1);
}

public zp_user_infected_pre(id, infector)
{
                iKillerNum[infector][1]++;
}

public Ham_PlayerKilled_Post(iVictim, iKiller)
{
        if(iVictim != iKiller)
        {
                if(zp_get_user_nemesis(iVictim)) iKillerNum[iKiller][5]++;
                else if(zp_get_user_survivor(iVictim)) iKillerNum[iKiller][6]++;
                else if(zp_get_user_first_zombie(iVictim)) iKillerNum[iKiller][3]++;
                else if(zp_get_user_last_zombie(iVictim)) iKillerNum[iKiller][4]++;
                else if(zp_get_user_zombie(iVictim)) iKillerNum[iKiller][2]++;
        }
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
        if (victim == attacker || zp_get_user_zombie(attacker))
                return HAM_IGNORED;

        iKillerNum[attacker][7] += floatround(damage)
        return HAM_IGNORED// HAM_SUPERCEDE;
}

public ClientCmd(id) return Show_MainMenu(id, g_iMenuPosition[id] = 0);
Show_MainMenu(id, iPos)
{

    //if(zp_get_user_ptz(id, 5)>=1) return PLUGIN_HANDLED;
       
        new iPlayersNum = g_iListSize;
        new iStart = iPos * RIGHT_PER_PAGE;
        if(iStart > iPlayersNum) iStart = iPlayersNum;
        iStart = iStart - (iStart % RIGHT_PER_PAGE);
        g_iMenuPosition[id] = iStart / RIGHT_PER_PAGE;
        new iEnd = iStart + RIGHT_PER_PAGE;
        if(iEnd > iPlayersNum) iEnd = iPlayersNum;
        new szMenu[512], iLen, iPagesNum = (iPlayersNum / RIGHT_PER_PAGE + ((iPlayersNum % RIGHT_PER_PAGE) ? 1 : 0));
        switch(iPagesNum)
        {
                case 0:
                {
                        UTIL_SayText(id, "!g[CSO] !yNo quest!t.");
                        return PLUGIN_HANDLED;
                }
                default: iLen = formatex(szMenu, charsmax(szMenu), "\r[CSO] \wQuests \r[%d|%d]^n^n", iPos + 1, iPagesNum);
        }
        new iKeys = (1<<9), b;
        for(new a = iStart; a < iEnd; a++)
        {
                ArrayGetArray(g_aList, a, aDataLIST);
                iKeys |= (1<<b);
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[%d]\w%s %s \r[%d\d|\r%s]^n", ++b, iKillerNum[id][str_to_num(aDataLIST[Type])] >= str_to_num(aDataLIST[Number]) ? "\w":"\d", aDataLIST[Name], iKillerNum[id][str_to_num(aDataLIST[Type])], aDataLIST[Number]);
        }
        for(new i = b; i < 8; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
        if(iEnd < iPlayersNum)
        {
                iKeys |= (1<<8);
                formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r[9]\w Next^n\r[0]\w %s", iPos ? "Back" : "Exit");
        }
        else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r[0]\w %s", iPos ? "Back" : "Exit");
        return show_menu(id, iKeys, szMenu, -1, "Show_MainMenu");
}

public Handle_MainMenu(id, iKey)
{
    //if(zp_get_user_ptz(id, 5)>=1) return PLUGIN_HANDLED;

        switch(iKey)
        {
                case 8: return Show_MainMenu(id, ++g_iMenuPosition[id]);
                case 9: return Show_MainMenu(id, --g_iMenuPosition[id]);
                default:
                {
                        Target[id] = g_iMenuPosition[id] * RIGHT_PER_PAGE + iKey;
                        ArrayGetArray(g_aList, Target[id], aDataLIST);
                        if(iKillerNum[id][str_to_num(aDataLIST[Type])] >= str_to_num(aDataLIST[Number]))
                        {
                                iKillerNum[id][str_to_num(aDataLIST[Type])] -= str_to_num(aDataLIST[Number]);
                                zp_cs_set_user_money(id, zp_cs_get_user_money(id) + str_to_num(aDataLIST[Reward]))
                                zp_set_user_exp(id, zp_get_user_exp(id) + str_to_num(aDataLIST[Exp]))
                                UTIL_SayText(id, "!g[CSO] !yYou completed the quest '!t%s!y' earned !g%d$ Money!y and !g%d Exp!y.", aDataLIST[Name], str_to_num(aDataLIST[Reward]), str_to_num(aDataLIST[Exp]));
                        }
                        else UTIL_SayText(id, "!g[CSO] !yYou must !t%s !g%d !ytime(s). You have left !t%d !ytime(s).", aDataLIST[Description], str_to_num(aDataLIST[Number]), str_to_num(aDataLIST[Number]) - iKillerNum[id][str_to_num(aDataLIST[Type])]);
                }
        }
        return Show_MainMenu(id, g_iMenuPosition[id]);
}

stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
        new szBuffer[190];
        if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
        else copy(szBuffer, charsmax(szBuffer), szMessage);
        while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
        while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
        while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
        switch(pPlayer)
        {
                case 0:
                {
                        for(new iPlayer = 1; iPlayer <= get_maxplayers(); iPlayer++)
                        {
                                engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, 76, {0.0, 0.0, 0.0}, iPlayer);
                                write_byte(iPlayer);
                                write_string(szBuffer);
                                message_end();
                        }
                }
                default:
                {
                        engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, 76, {0.0, 0.0, 0.0}, pPlayer);
                        write_byte(pPlayer);
                        write_string(szBuffer);
                        message_end();
                }
        }
}



All times are GMT -4. The time now is 02:35.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.