|
Стаж: 12 лет
Сообщений: 65
Благодарностей: 14
Полезность: 129
|
Помогите исправить ошибки в коде, пожалуйста. Всё уже перепробовал, не знаю что делать. Ошибки пишутся каждые 1-2 секунды в консоль и log сервера. На новой версии Metamod v1.21p37 сервер с этими ошибками не падает, на старой версии Metamod 1.19p32 сервер падает. Казалось бы, ну пишутся ошибки и хрен с ними. Но если кто не знает ZombiePlague v4.3 Fix5a не стабильно работает на новой версии Metamod в плане карт с турелями, т.е. если на новой версии Metamod поставить карту например zm_gorod_new или zm_deko2 и выстрелить с пушки то сервер падает. Поэтому мне и нужно исправить все это дело. Логи с сервера: CODE [AMXX] Displaying debug trace (plugin "zp_buymenu_level.amxx") [AMXX] Run time error 4: index out of bounds [AMXX] [0] zp_buymenu_level.sma::native_get_exp_current (line 337) Unhandled dynamic native error [AMXX] Displaying debug trace (plugin "zombie_plague40.amxx") [AMXX] Run time error 10: native error (native "zp_get_exp_current") [AMXX] [0] zombie_plague40.sma::ShowHUD (line 9513) Часть кода ZombiePlague v4.3 Fix5a с 9513 строкой (Не выкладываю весь, потому что в плагине более 12.000 строк): Код:
// Spectating someone else? if (id != ID_SHOWHUD) { // Show name, health, class, and ammo packs set_dhudmessage(255, 255, 255, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, false) show_dhudmessage(ID_SHOWHUD, "%L %s^nHP: %d - %L %s", ID_SHOWHUD, "SPECTATING", g_playername[id], pev(id, pev_health), ID_SHOWHUD, "CLASS_CLASS", class) } else { // Show health, class and ammo packs set_dhudmessage(red, blue, green, HUD_STATS_X, -0.04, 0, 6.0, 1.1, 0.0, 0.0, false) show_dhudmessage(ID_SHOWHUD, "%L: %d - %L %s ^nУровень: %d | Опыт: %d/%d", id, "ZOMBIE_ATTRIB1", pev(ID_SHOWHUD, pev_health), ID_SHOWHUD, "CLASS_CLASS", class, zp_get_user_level(ID_SHOWHUD), zp_get_user_exp(ID_SHOWHUD), zp_get_exp_current(ID_SHOWHUD)) } } Плагин с Level (Код плагина сместился на 1 строку, поэтому ошибка не в 337, а в 338 строке): Код:
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <hamsandwich> #include <zombieplague>
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
native zp_cs_get_user_money(id) native zp_cs_set_user_money(id, value)
new pcvar_exp_zombiekill new pcvar_exp_nemesiskill new pcvar_money_nemesiskill new pcvar_exp_survivorkill new pcvar_money_survivorkill new pcvar_exp_infect new pcvar_exp_humankill new pcvar_damage_for_xp
new Float:g_PlayerDamage[33]
enum (+= 100) { TASK_SHOWHUD = 10 }
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MEN U_KEY_8|MENU_KEY_9|MENU_KEY_0
new const g_szStatsLevel[ ] = { 0, // 0 100, // 1 200, // 2 300, // 3 400, // 4 500, // 5 600, // 6 700, // 7 800, // 8 900, // 9 1000, // 10 1100, // 11 1200, // 12 1300, // 13 1400, // 14 1500, // 15 1600, // 16 1700, // 17 1800, // 18 1900, // 19 2000, // 20 2100, // 21 2200, // 22 2300, // 23 2400, // 24 2500, // 25 2600, // 26 2700, // 27 2800, // 28 2900, // 29 3000, // 30 3100, // 31 3200, // 32 3300, // 33 3400, // 34 3500, // 35 3600, // 36 3700, // 37 3800, // 38 3900, // 39 4000, // 40 };
const Float:HUD_STATS_X = 0.02; const Float:HUD_STATS_Y = 0.9025; const Float:HUD_SPECT_X = -1.0; const Float:HUD_SPECT_Y = 0.8;
enum _:ELevelData { g_iLevelNum = 1, g_iExpNum
} new g_pDataBuySystem[ 33 ][ ELevelData ];
new g_ChoosenLevel[33]
public plugin_init( ) { register_plugin("[ZP] Level System", "1.3", "edit kiryxapro") RegisterHam( Ham_Killed, "player", "CBasePlayer__Killed_Pre", .Post = true ); RegisterHam( Ham_TakeDamage, "player", "fwTakeDamage" )
register_clcmd("level_set", "LevelMenu") pcvar_exp_zombiekill = register_cvar("zbm_exp_zombiekill", "1") pcvar_exp_nemesiskill = register_cvar("zbm_exp_nemesiskill", "10") pcvar_money_nemesiskill = register_cvar("zbm_money_nemesiskill", "10000") pcvar_exp_survivorkill = register_cvar("zbm_exp_survivorkill", "10") pcvar_money_survivorkill = register_cvar("zbm_money_survivorkill", "10000") pcvar_exp_infect = register_cvar("zbm_exp_infect", "1") pcvar_exp_humankill = register_cvar("zbm_exp_humankill", "1") pcvar_damage_for_xp = register_cvar("zbm_exp_damage", "1000") register_menu("set_level" , KEYSMENU , "level_handler") register_dictionary("zp_buy.txt") }
public plugin_natives( ) { register_native("zp_get_user_exp", "native_get_exp", 1); register_native("zp_set_user_exp", "native_set_exp", 1); register_native("zp_get_user_level", "native_get_level", 1); register_native("zp_set_user_level", "native_set_level", 1); register_native("zp_get_exp_current", "native_get_exp_current", 1); register_native("zp_get_exp_last", "native_get_exp_last", 1); }
public LevelMenu(id) { if (!(get_user_flags(id) & ADMIN_LEVEL_A)) return PLUGIN_HANDLED; if (!g_ChoosenLevel[id]) g_ChoosenLevel[id] = 1 static menu[2048 char] , len len = 0 len += formatex(menu[len], charsmax(menu) - len, "\rТекущий левел: %d^n^n", g_ChoosenLevel[id]) len += formatex(menu[len], charsmax(menu) - len, "\r1. \wУвеличить левел^n") len += formatex(menu[len], charsmax(menu) - len, "\r2. \wУменьшить левел^n") len += formatex(menu[len], charsmax(menu) - len, "\r3. \wУстановить левел^n") len += formatex(menu[len], charsmax(menu) - len, "^n\r0. \wВыход") set_pdata_int(id , 205, 0, 5) show_menu(id, KEYSMENU, menu, -1, "set_level") return PLUGIN_HANDLED }
public level_handler(id, key) { switch( key ) { case 0: { if (g_ChoosenLevel[id] >= sizeof(g_szStatsLevel) - 1) ChatColor(id, "^4[ZP] ^1Максимальный уровень - ^3%d^1!", sizeof(g_szStatsLevel) - 1) else g_ChoosenLevel[id]+=1; LevelMenu(id) } case 1: { if (g_ChoosenLevel[id] <= 1) ChatColor(id, "^4[ZP] ^1Минимальный уровень - 1!") else g_ChoosenLevel[id]-=1; LevelMenu(id) } case 2: { MenuPlayer(id) } } }
public MenuPlayer(id) { new i_Menu = menu_create("\rВыберите игрока", "menu_handle")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10], text[128]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++) { i_Player = s_Players[i] get_user_name(i_Player, s_Name, charsmax(s_Name)) num_to_str(i_Player, s_Player, charsmax(s_Player))
formatex(text, charsmax(text), "%s", s_Name) menu_additem(i_Menu, text, s_Player, 0) } menu_setprop(i_Menu, MPROP_EXITNAME, "Выход") menu_setprop(i_Menu, MPROP_NEXTNAME, "Далее") menu_setprop(i_Menu, MPROP_BACKNAME, "Назад") menu_display(id, i_Menu, 0) }
public menu_handle(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED }
new s_Data[6], s_Name[64], i_Access, i_Callback menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Player = str_to_num(s_Data) native_set_level(i_Player, g_ChoosenLevel[id]) native_set_exp(i_Player, g_szStatsLevel[g_ChoosenLevel[id] - 1]) new name[32] get_user_name(i_Player, name, 31) ChatColor(id, "^4[ZP] ^1Игроку ^3%s ^1установлен ^3%d ^1уровень.", name, g_ChoosenLevel[id]) menu_destroy(menu) return PLUGIN_HANDLED }
public plugin_cfg( ) { new inifile[128] get_localinfo("amxx_configsdir", inifile, 127) add(inifile, 127, "/zp_buymenu.cfg") server_cmd("exec %s", inifile) }
public CBasePlayer__Killed_Pre( pevVictim, pevKiller ) { if( !is_user_alive( pevKiller) ) return HAM_IGNORED;
new szName[ 32 ] get_user_name(pevKiller, szName, 31)
if( g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] >= sizeof( g_szStatsLevel ) ) return HAM_IGNORED;
if( zp_get_user_zombie( pevVictim ) ) { if( zp_get_user_nemesis( pevVictim ) ) { g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += get_pcvar_num(pcvar_exp_nemesiskill) zp_cs_set_user_money( pevKiller , zp_cs_get_user_money( pevKiller ) + get_pcvar_num(pcvar_money_nemesiskill) ) ChatColor(0, "%L", LANG_PLAYER, "NEM_LOOSEROUND", szName, get_pcvar_num(pcvar_money_nemesiskill), get_pcvar_num(pcvar_exp_nemesiskill)) } else { g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += get_pcvar_num(pcvar_exp_zombiekill); } } else { if( zp_get_user_survivor( pevVictim ) ) { g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += get_pcvar_num(pcvar_exp_survivorkill) zp_cs_set_user_money( pevKiller , zp_cs_get_user_money( pevKiller ) + get_pcvar_num(pcvar_money_survivorkill) ) ChatColor(0, "%L", LANG_PLAYER, "SURV_LOOSEROUND", szName, get_pcvar_num(pcvar_money_survivorkill), get_pcvar_num(pcvar_exp_survivorkill)) } else { g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += get_pcvar_num(pcvar_exp_humankill) } }
if ((g_pDataBuySystem[pevKiller][g_iLevelNum] == (sizeof(g_szStatsLevel) - 1)) && (g_pDataBuySystem[pevKiller][g_iExpNum] >= g_szStatsLevel[ g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] ])) g_pDataBuySystem[pevKiller][g_iExpNum] = g_szStatsLevel[ g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] ] else { while( g_pDataBuySystem[ pevKiller ][ g_iExpNum ] >= g_szStatsLevel[ g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] ] ) g_pDataBuySystem[ pevKiller ][ g_iLevelNum ]++; }
return HAM_IGNORED; }
public fwTakeDamage(id, inflictor, attacker, Float:damage) { if (!get_pcvar_num(pcvar_damage_for_xp)) return; if (id == attacker || !is_user_alive(attacker)) return; if( g_pDataBuySystem[ attacker ][ g_iLevelNum ] >= sizeof( g_szStatsLevel ) ) return; if (!zp_get_user_zombie(attacker)) { g_PlayerDamage[attacker] += floatround(damage) while (g_PlayerDamage[attacker] > get_pcvar_num(pcvar_damage_for_xp)) { g_pDataBuySystem[ attacker ][ g_iExpNum ] += 1; g_PlayerDamage[attacker] -= get_pcvar_num(pcvar_damage_for_xp) } } if ((g_pDataBuySystem[attacker][g_iLevelNum] == (sizeof(g_szStatsLevel) - 1)) && (g_pDataBuySystem[attacker][g_iExpNum] >= g_szStatsLevel[ g_pDataBuySystem[ attacker ][ g_iLevelNum ] ])) g_pDataBuySystem[attacker][g_iExpNum] = g_szStatsLevel[ g_pDataBuySystem[ attacker ][ g_iLevelNum ] ] else { while( g_pDataBuySystem[ attacker ][ g_iExpNum ] >= g_szStatsLevel[ g_pDataBuySystem[ attacker ][ g_iLevelNum ] ] ) g_pDataBuySystem[ attacker ][ g_iLevelNum ]++; } }
public zp_user_infected_post(id, iInfector) { if( g_pDataBuySystem[ iInfector ][ g_iLevelNum ] >= sizeof( g_szStatsLevel ) ) return; g_pDataBuySystem[ iInfector ][ g_iExpNum ] += get_pcvar_num(pcvar_exp_infect)
if ((g_pDataBuySystem[iInfector][g_iLevelNum] == (sizeof(g_szStatsLevel) - 1)) && (g_pDataBuySystem[iInfector][g_iExpNum] >= g_szStatsLevel[ g_pDataBuySystem[ iInfector ][ g_iLevelNum ] ])) g_pDataBuySystem[iInfector][g_iExpNum] = g_szStatsLevel[ g_pDataBuySystem[ iInfector ][ g_iLevelNum ] ] else { while( g_pDataBuySystem[ iInfector ][ g_iExpNum ] >= g_szStatsLevel[ g_pDataBuySystem[ iInfector ][ g_iLevelNum ] ] ) g_pDataBuySystem[ iInfector ][ g_iLevelNum ]++; } }
public native_set_level(pPlayer,value) g_pDataBuySystem[pPlayer][g_iLevelNum] = value; public native_set_exp(pPlayer,value) g_pDataBuySystem[pPlayer][g_iExpNum] = value; public native_get_exp(pPlayer) return g_pDataBuySystem[pPlayer][g_iExpNum]; public native_get_level(pPlayer) return g_pDataBuySystem[pPlayer][g_iLevelNum]; public native_get_exp_current(pPlayer) return g_szStatsLevel[ g_pDataBuySystem[pPlayer][g_iLevelNum]]; public native_get_exp_last(pPlayer) return g_szStatsLevel[g_pDataBuySystem[pPlayer][g_iLevelNum-1]];
stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color
if (id) players[0] = id; else get_players(players, count, "ch") { for (new i; i < count; i++) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } }
|