Member
|
08-05-2021
, 14:36
Invalid index -8 (count: 7)
|
#1
|
Hello,
i have a problem regarding a plugins array, i need help for fix that debug output ;
L 08/05/2021 - 21 5 1: Invalid index -8 (count: 7)
L 08/05/2021 - 21 5 1: [AMXX] Displaying debug trace (plugin "zp_addon_quests.amxx", version "29.05.2018")
L 08/05/2021 - 21 5 1: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 08/05/2021 - 21 5 1: [AMXX] [0] zp_addon_quests.sma::Show_MainMenu (line 152)
L 08/05/2021 - 21 5 1: [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();
}
}
}
|
|