Senior Member
Join Date: Aug 2017
Location: Kyiv
|
03-07-2018
, 12:34
Re: Multimod Plugin
|
#568
|
Noticed a mistake.If the Administrator to log in to the server and enter the command amx_votemod and assuring not to go for the team CT or T
PHP Code:
Displaying debug trace (plugin "multimod.amxx") Run time error 4: index out of bounds ColorChat.inc::ColorChat multimod.sma::check_vote
And then, after voting for Mod-no voting for the card
If for example to do a reset of the card, then there is no error
How to fix?Help
PHP Code:
#include <amxmodx> #include <amxmisc> #include <ColorChat> #include <fakemeta> #include <fakemeta_util>
#define PLUGIN_NAME "MultiMod Manager" #define PLUGIN_AUTHOR "JoRoPiTo" #define PLUGIN_VERSION "2.2"
#define AMX_MULTIMOD "amx_multimod" #define AMX_PLUGINS "amxx_plugins" #define AMX_MAPCYCLE "mapcyclefile" #define AMX_LASTCYCLE "lastmapcycle"
#define AMX_DEFAULTCYCLE "mapcycle.txt" #define AMX_DEFAULTPLUGINS "addons/amxmodx/configs/plugins.ini" #define AMX_BASECONFDIR "addons/amxmodx/configs/multimod"
#define TASK_VOTEMOD 2487002 #define TASK_CHVOMOD 2487004 #define MAXMODS 10 #define LSTRING 193 #define SSTRING 33
new g_menuname[] = "MENU NAME" new g_votemodcount[MAXMODS] new g_modnames[MAXMODS][SSTRING] // Per-mod Mod Names new g_filemaps[MAXMODS][LSTRING] // Per-mod Maps Files new g_fileplugins[MAXMODS][LSTRING] // Per-mod Plugin Files
new g_fileconf[LSTRING] new g_coloredmenus new g_modcount = -1 // integer with configured mods count new g_alreadyvoted new gp_allowedvote new g_nextmodid new g_currentmodid new g_multimod[SSTRING] new g_nextmap[SSTRING] new g_currentmod[SSTRING] new g_confdir[LSTRING]
new gp_mintime new gp_voteanswers new gp_timelimit
new gp_mode new gp_mapcyclefile
// galileo specific cvars new gp_galileo_nommapfile new gp_galileo_votemapfile
public plugin_init() { new MenuName[63]
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_cvar("MultiModManager", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY) register_dictionary("mapchooser.txt") register_dictionary("multimod.txt")
gp_mode = register_cvar("amx_multimod_mode", "0") // 0=auto; 1=mapchooser; 2=galileo gp_mintime = register_cvar("amx_mintime", "10") gp_allowedvote = register_cvar("amx_multimod_voteallowed", "0")
get_configsdir(g_confdir, charsmax(g_confdir))
register_clcmd("amx_votemod", "start_vote", ADMIN_MAP, "Vote for the next mod") register_clcmd("say nextmod", "user_nextmod") register_clcmd("say_team nextmod", "user_nextmod") register_clcmd("say currentmod", "user_currentmod") register_clcmd("say /votemod", "user_votemod") register_clcmd("say_team /votemod", "user_votemod")
format(MenuName, charsmax(MenuName), "%L", LANG_PLAYER, "MM_VOTE") register_menucmd(register_menuid(g_menuname), 1023, "player_vote") g_coloredmenus = colored_menus() }
public plugin_cfg() { gp_voteanswers = get_cvar_pointer("amx_vote_answers") gp_timelimit = get_cvar_pointer("mp_timelimit") gp_mapcyclefile = get_cvar_pointer(AMX_MAPCYCLE)
if(!get_pcvar_num(gp_mode)) { if(find_plugin_byfile("mapchooser_multimod.amxx") != -1) set_pcvar_num(gp_mode, 1) else if(find_plugin_byfile("galileo.amxx") != -1) set_pcvar_num(gp_mode, 2) } get_localinfo(AMX_MULTIMOD, g_multimod, charsmax(g_multimod)) load_cfg()
if(!equal(g_currentmod, g_multimod) || (g_multimod[0] == 0)) { set_multimod(0) get_firstmap(0) server_print("Server restart - First Run") server_cmd("changelevel %s", g_nextmap) } else { server_cmd("exec %s", g_fileconf) } }
public load_cfg() { new szData[LSTRING] new szFilename[LSTRING]
formatex(szFilename, charsmax(szFilename), "%s/%s", AMX_BASECONFDIR, "multimod.ini")
new f = fopen(szFilename, "rt") new szTemp[SSTRING],szModName[SSTRING], szTag[SSTRING], szCfg[SSTRING] while(!feof(f)) { fgets(f, szData, charsmax(szData)) trim(szData) if(!szData[0] || szData[0] == ';' || (szData[0] == '/' && szData[1] == '/')) continue
if(szData[0] == '[') { g_modcount++ replace_all(szData, charsmax(szData), "[", "") replace_all(szData, charsmax(szData), "]", "")
strtok(szData, szModName, charsmax(szModName), szTemp, charsmax(szTemp), ':', 0) strtok(szTemp, szTag, charsmax(szTag), szCfg, charsmax(szCfg), ':', 0)
if(equal(szModName, g_multimod)) { formatex(g_fileconf, 192, "%s/%s", AMX_BASECONFDIR, szCfg) copy(g_currentmod, charsmax(g_currentmod), szModName) g_currentmodid = g_modcount server_print("%L", LANG_PLAYER, "MM_WILL_BE", g_multimod, szTag, szCfg) } formatex(g_modnames[g_modcount], 32, "%s", szModName) formatex(g_filemaps[g_modcount], 192, "%s/%s-maps.ini", AMX_BASECONFDIR, szTag) formatex(g_fileplugins[g_modcount], 192, "%s/%s-plugins.ini", AMX_BASECONFDIR, szTag) server_print("Мод Загружен: %s %s %s", g_modnames[g_modcount], g_filemaps[g_modcount], g_fileconf) } } fclose(f) set_task(10.0, "check_task", TASK_VOTEMOD, "", 0, "b") }
public get_firstmap(modid) { new ilen
if(!file_exists(g_filemaps[modid])) get_mapname(g_nextmap, charsmax(g_nextmap)) else read_file(g_filemaps[modid], 0, g_nextmap, charsmax(g_nextmap), ilen) }
public set_multimod(modid) { server_print("Setting multimod to %i - %s", modid, g_modnames[modid]) set_localinfo("amx_multimod", g_modnames[modid]) server_cmd("localinfo amxx_plugins ^"^"") server_cmd("localinfo lastmapcycle ^"^"") set_localinfo(AMX_PLUGINS, file_exists(g_fileplugins[modid]) ? g_fileplugins[modid] : AMX_DEFAULTPLUGINS) set_localinfo(AMX_LASTCYCLE, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE) set_pcvar_string(gp_mapcyclefile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE)
switch(get_pcvar_num(gp_mode)) { case 2: { if(gp_galileo_nommapfile) set_pcvar_string(gp_galileo_nommapfile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE)
if(gp_galileo_votemapfile) set_pcvar_string(gp_galileo_votemapfile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE) } case 1: { callfunc_begin("plugin_init", "mapchooser_multimod.amxx"); callfunc_end(); } } }
public check_task() { new timeleft = get_timeleft() if(timeleft < 1 || timeleft > 40) return
start_vote() }
public SetBlackScreenFade(fade) { new time, hold, flags; static iMsgScreenFade; if(!iMsgScreenFade) iMsgScreenFade = get_user_msgid("ScreenFade"); switch (fade) { case 1: { time = 1; hold = 1; flags = 4; } case 2: { time = 4096; hold = 1024; flags = 1; } default: { time = 4096; hold = 1024; flags = 2; } }
message_begin(MSG_BROADCAST, iMsgScreenFade); write_short(time); write_short(hold); write_short(flags); write_byte(0); write_byte(0); write_byte(0); write_byte(255); message_end(); }
public start_vote() {
new players[32], iCount, player; get_players(players, iCount, "ah");
for (new i; i < iCount; i++) { player = players[i];
set_pev(player, pev_flags, pev(player, pev_flags) | FL_FROZEN) fm_set_user_godmode(player, 1); }
SetBlackScreenFade(2); set_task(1.0, "SetBlackScreenFade", 1); g_alreadyvoted = true remove_task(TASK_VOTEMOD) remove_task(TASK_CHVOMOD)
new menu[512], mkeys, iPercent, i new pos = format(menu, 511, g_coloredmenus ? "\y%L:\w^n^n" : "%L:^n^n", LANG_PLAYER, "MM_CHOOSE")
for(i=0; i<= g_modcount; i++) {
pos += format(menu[pos], 511, "\r%d.\w %s\d \y•\w \r%d\w \y%%\w^n^n", i + 1, g_modnames[i], iPercent) g_votemodcount[i] = 0 mkeys |= (1<<i) }
new szMenuName[63] formatex(szMenuName, charsmax(szMenuName), "%L", LANG_PLAYER, "MM_VOTE") server_print("show menu %s %s %i", menu, g_menuname, mkeys) show_menu(0, mkeys, menu, 15, g_menuname) client_cmd(0, "spk Vote/golosovanie_start")
set_task(15.0, "check_vote", TASK_CHVOMOD) return }
public user_nextmod(id) { #if AMXX_VERSION_NUM < 183 ColorChat(0, RED, "^4Следующий Мод: ^3%s", g_modnames[g_nextmodid]) #else client_print_color(0, print_team_red, "^4Следующий Мод: ^3%s", g_modnames[g_nextmodid]) #endif //client_print(0, print_chat, "%L", LANG_PLAYER, "MM_NEXTMOD", g_modnames[g_nextmodid]) return PLUGIN_HANDLED }
public user_currentmod(id) { #if AMXX_VERSION_NUM < 183 ColorChat(0, RED, "^4Следующий Мод: ^3%s", g_currentmod) #else client_print_color(0, print_team_red, "^4Следующий Мод: ^3%s", g_currentmod) #endif //client_print(0, print_chat, "%L", LANG_PLAYER, "MM_NEXTMOD", g_currentmod) return PLUGIN_HANDLED }
public user_votemod(id) { if(gp_allowedvote) return PLUGIN_HANDLED
if(g_alreadyvoted) { #if AMXX_VERSION_NUM < 183 ColorChat(0, RED, "^4Голосование за Мод закончено.Следующий Мод ^3%s", g_modnames[g_nextmodid]) #else client_print_color(0, print_team_red, "^4Голосование за Мод закончено.Следующий Мод ^3%s", g_modnames[g_nextmodid]) #endif //client_print(0, print_chat, "%L", LANG_PLAYER, "MM_VOTEMOD", g_modnames[g_nextmodid]) return PLUGIN_HANDLED }
new Float:elapsedTime = get_pcvar_float(gp_timelimit) - (float(get_timeleft()) / 60.0) new Float:minTime minTime = get_pcvar_float(gp_mintime)
if(elapsedTime < minTime) { client_print(0, print_chat, "%L", LANG_PLAYER, "MM_PL_WAIT", floatround(minTime - elapsedTime, floatround_ceil)) return PLUGIN_HANDLED }
new timeleft = get_timeleft() if(timeleft < 180) return PLUGIN_HANDLED
start_vote() return PLUGIN_HANDLED }
public player_vote(id, key) { if(key <= g_modcount) { if(get_pcvar_num(gp_voteanswers)) { new player[SSTRING] get_user_name(id, player, charsmax(player)) #if AMXX_VERSION_NUM < 183 ColorChat(0, RED, "^4%s ^1выбрал ^3%s", player, g_modnames[key]) #else client_print_color(0, print_team_red, "^4%s ^1выбрал ^3%s", player, g_modnames[key]) #endif //client_print(0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", player, g_modnames[key]) } g_votemodcount[key]++ } }
public check_vote() { new b = random(g_modcount) for(new a = 0; a <= g_modcount; a++) if(g_votemodcount[b] < g_votemodcount[a]) b = a
#if AMXX_VERSION_NUM < 183 ColorChat(0, RED, "^4Голосование за Мод закончено.Следующий Мод ^3%s", g_modnames[b]) #else client_print_color(0, print_team_red, "^4Голосование за Мод закончено.Следующий Мод ^3%s", g_modnames[b]) #endif //client_print(0, print_chat, "%L", LANG_PLAYER, "MM_VOTEMOD", g_modnames[b]) server_print("%L", LANG_PLAYER, "MM_VOTEMOD", g_modnames[b]) if(b != g_currentmodid) set_multimod(b)
callfunc_begin("doVoteNextmap", "mapchooser_multimod.amxx"); callfunc_end(); g_nextmodid = b }
Last edited by MayroN; 03-07-2018 at 12:47.
|
|