eklenti oynanan mapları "ze_playedmaps.ini" içine ekliyor oylamada o listede ise oylamıyor taki listedeki son harita kalana kadar mantığı ile yazılmış eklenti ancak 1 el önceki map yada 2 el önceki map veya listenin ilk 20 haritası vs oylamada çıkıyor.Problem nerede düzeltme şansımız varmıdır.
PHP Kod:
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <zombie_escape>
#include <amx_settings_api>
#pragma compress 1
#define PLUGIN "Map Vote System"
#define VERSION "FINAL"
#define AUTHOR "Jenessee"
new Array:Array_hours, Array:Array_modes, Array:Array_mapMinute, Array:Array_mapBunny, Array:Array_mapJump, Array:Array_mapParachute, Array:Array_expMultiplier, Array:Array_tokenMultiplier;
new Array:Array_mapNames, Array:Array_mapMode;
new Array:Array_mapsPlayed, Array:Array_modesPlayed;
new Array:ArrayHours, Array:ArrayInstaVote;
new startHour;
new Array:Array_mapsSelected, Array:Array_mapsSelectedName;
new bool:menuActive[MAX_PLAYERS + 1];
new mapMenu = INVALID_HANDLE;
new voteTime;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary(LANGUAGE_FILE);
new hour[4]; get_time("%H", hour, charsmax(hour));
startHour = str_to_num(hour);
if(startHour == 0) startHour = -1;
new mapName[32]; get_mapname(mapName, charsmax(mapName));
ArrayHours = ArrayCreate(1, 1);
ArrayInstaVote = ArrayCreate(1, 1);
Array_hours = ArrayCreate(1, 1);
Array_modes = ArrayCreate(1, 1);
Array_expMultiplier = ArrayCreate(1, 1);
Array_tokenMultiplier = ArrayCreate(1, 1);
Array_mapMinute = ArrayCreate(1, 1);
Array_mapBunny = ArrayCreate(1, 1);
Array_mapJump = ArrayCreate(1, 1);
Array_mapParachute = ArrayCreate(1, 1);
Load_Hours_Modes();
Array_mapsPlayed = ArrayCreate(32, 1);
Array_modesPlayed = ArrayCreate(32, 1);
Load_Old_Maps();
Array_mapNames = ArrayCreate(32, 1);
Array_mapMode = ArrayCreate(32, 1);
Load_Mode_Maps();
if(ArraySize(Array_modes))
{
new bool:found;
new Array:modes = Array:ArrayGetCell(Array_modes, ArraySize(Array_modes)-1);
if(ArraySize(modes))
{
for(new arrayIndex = 0, modPlayed[32]; arrayIndex < ArraySize(modes); arrayIndex++)
{
ArrayGetString(modes, arrayIndex, modPlayed, charsmax(modPlayed));
for(new index = 0, mapName2[32], modName2[32]; index < ArraySize(Array_mapNames); index++)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
if(equal(mapName, mapName2))
{
ArrayGetString(Array_mapMode, index, modName2, charsmax(modName2));
if(equal(modPlayed, modName2))
{
for(new index2 = ArraySize(Array_mapsPlayed)-1, mapPlayed2[32], modPlayed2[32]; index2 >= 0; index2--)
{
ArrayGetString(Array_modesPlayed, index2, modPlayed2, charsmax(modPlayed2));
ArrayGetString(Array_mapsPlayed, index2, mapPlayed2, charsmax(mapPlayed2));
if(equal(mapPlayed2, mapName2) && equal(modPlayed2, modName2))
{
found = true;
}
}
if(!found)
{
ArrayPushString(Array_mapsPlayed, mapName);
ArrayPushString(Array_modesPlayed, modPlayed);
Save_Map_Played(true);
}
found = false;
}
}
}
}
}
}
ArrayClear(Array_mapNames);
ArrayClear(Array_mapMode);
if(equali(mapName, "fy_iceworld16"))
{
remove_task(TASK_MAP_TIMELEFT, 1);
remove_task(TASK_MAP_TIMEEND, 1);
Load_Hours_Modes();
Load_Mode_Maps();
if(ArraySize(Array_modes))
{
new Array:modes = Array:ArrayGetCell(Array_modes, ArraySize(Array_modes)-1);
if(ArraySize(modes))
{
for(new arrayIndex = 0, modPlayed[32]; arrayIndex < ArraySize(modes); arrayIndex++)
{
ArrayGetString(modes, arrayIndex, modPlayed, charsmax(modPlayed));
for(new index = ArraySize(Array_mapNames)-1, mapName2[32], modName2[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
ArrayGetString(Array_mapMode, index, modName2, charsmax(modName2));
for(new index2 = ArraySize(Array_mapsPlayed)-1, mapPlayed2[32], modPlayed2[32]; index2 >= 0; index2--)
{
ArrayGetString(Array_modesPlayed, index2, modPlayed2, charsmax(modPlayed2));
ArrayGetString(Array_mapsPlayed, index2, mapPlayed2, charsmax(mapPlayed2));
if(equal(mapPlayed2, mapName2) && equal(modPlayed2, modName2))
{
ArrayDeleteItem(Array_mapNames, index);
ArrayDeleteItem(Array_mapMode, index);
}
}
}
}
}
}
if(!ArraySize(Array_mapNames))
{
Save_Map_Played(false);
Load_Mode_Maps();
}
if(!ArraySize(Array_mapNames))
{
return;
}
new Array:Array_MapNames = ArrayCreate(32, 1);
for(new index = ArraySize(Array_mapNames)-1; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName, charsmax(mapName));
if(ArrayFindString(Array_MapNames, mapName) != -1)
continue;
ArrayPushString(Array_MapNames, mapName);
}
if(ArraySize(Array_MapNames))
{
ArrayGetString(Array_MapNames, random_num(0, ArraySize(Array_MapNames)-1), mapName, charsmax(mapName));
server_cmd("amx_map %s", mapName);
plugin_end();
}
ArrayDestroy(Array_MapNames);
return;
}
set_task(5.0, "Task_Check_TimeLeft", TASK_MAP_TIMELEFT, .flags = "b");
}
public plugin_end()
{
Load_Hours_Modes();
if(ArraySize(Array_mapBunny))
{
if(ArrayGetCell(Array_mapBunny, ArraySize(Array_mapBunny)-1) > 0)
{
server_cmd("ze_bunny 1");
} else {
server_cmd("ze_bunny 0");
}
}
if(ArraySize(Array_mapJump))
{
if(ArrayGetCell(Array_mapJump, ArraySize(Array_mapJump)-1) > 0)
{
server_cmd("ze_triplejump 1");
} else {
server_cmd("ze_triplejump 0");
}
}
if(ArraySize(Array_mapParachute))
{
if(ArrayGetCell(Array_mapParachute, ArraySize(Array_mapParachute)-1) > 0)
{
server_cmd("ze_parachute 1");
} else {
server_cmd("ze_parachute 0");
}
}
if(ArraySize(Array_tokenMultiplier))
{
server_cmd("ze_token_multiplier %0.1f", Float:ArrayGetCell(Array_tokenMultiplier, ArraySize(Array_tokenMultiplier)-1));
}
if(ArraySize(Array_expMultiplier))
{
server_cmd("ze_exp_multiplier %0.1f", Float:ArrayGetCell(Array_expMultiplier, ArraySize(Array_expMultiplier)-1));
}
if(ArraySize(Array_mapMinute))
{
server_cmd("mp_timelimit %i", ArrayGetCell(Array_mapMinute, ArraySize(Array_mapMinute)-1));
}
}
public Task_Check_TimeLeft()
{
new hour[4]; get_time("%H", hour, charsmax(hour));
new currentHour = str_to_num(hour);
if(currentHour == 0) currentHour = -1;
if(startHour != currentHour)
{
new arrayIndex;
if((arrayIndex = ArrayFindValue(ArrayHours, currentHour)) != -1)
{
if(ArrayGetCell(ArrayInstaVote, arrayIndex) > 0)
{
remove_task(TASK_MAP_TIMELEFT, 1);
set_task(1.0, "Task_Map_TimeEnd", TASK_MAP_TIMEEND, .flags = "b");
server_cmd("mp_timelimit 0");
return;
}
}
}
if(get_timeleft() <= 0 || get_timeleft() > 10)
return;
remove_task(TASK_MAP_TIMELEFT, 1);
set_task(1.0, "Task_Map_TimeEnd", TASK_MAP_TIMEEND, .flags = "b");
server_cmd("mp_timelimit 0");
}
public Task_Map_TimeEnd(){}
public OnRoundStateChanged(const roundStates:oldState, const roundStates:newState)
{
switch(newState)
{
case ROUND_DRAW, ROUND_HUMANWIN, ROUND_ZOMBIEWIN:
{
if(task_exists(TASK_MAP_TIMEEND, 1))
{
remove_task(TASK_MAP_TIMEEND, 1);
Load_Hours_Modes();
Load_Mode_Maps();
if(ArraySize(Array_modes))
{
new Array:modes = Array:ArrayGetCell(Array_modes, ArraySize(Array_modes)-1);
if(ArraySize(modes))
{
for(new arrayIndex = 0, modPlayed[32]; arrayIndex < ArraySize(modes); arrayIndex++)
{
ArrayGetString(modes, arrayIndex, modPlayed, charsmax(modPlayed));
for(new index = ArraySize(Array_mapNames)-1, mapName2[32], modName2[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
ArrayGetString(Array_mapMode, index, modName2, charsmax(modName2));
for(new index2 = ArraySize(Array_mapsPlayed)-1, mapPlayed2[32], modPlayed2[32]; index2 >= 0; index2--)
{
ArrayGetString(Array_modesPlayed, index2, modPlayed2, charsmax(modPlayed2));
ArrayGetString(Array_mapsPlayed, index2, mapPlayed2, charsmax(mapPlayed2));
if(equal(mapPlayed2, mapName2) && equal(modPlayed2, modName2))
{
ArrayDeleteItem(Array_mapNames, index);
ArrayDeleteItem(Array_mapMode, index);
}
}
}
}
}
}
if(!ArraySize(Array_mapNames))
{
Save_Map_Played(false);
Load_Mode_Maps();
}
if(!ArraySize(Array_mapNames))
{
server_cmd("mp_timelimit 1");
return;
}
Create_Map_Menu();
if(mapMenu != INVALID_HANDLE)
{
set_task(1.0, "Task_Map_VoteTime", TASK_MAP_TIMEEND, .flags = "b");
for(new arrayIndex = ArraySize(Array_PlayerList_Connected())-1, playerIndex; arrayIndex >= 0; arrayIndex--)
{
playerIndex = ArrayGetCell(Array_PlayerList_Connected(), arrayIndex);
menuActive[playerIndex] = true;
Show_MapMenu(playerIndex);
}
}
}
}
}
}
public Show_MapMenu(const clientIndex)
{
if(!is_player_connected(clientIndex) || !menuActive[clientIndex])
return;
menu_setprop(mapMenu, MPROP_TITLE, fmt("%L", clientIndex, "MENU_MAP_TITLE", voteTime));
menu_setprop(mapMenu, MPROP_BACKNAME, fmt("\w%L", clientIndex, "MENU_BACK"));
menu_setprop(mapMenu, MPROP_NEXTNAME, fmt("\w%L", clientIndex, "MENU_NEXT"));
menu_setprop(mapMenu, MPROP_EXITNAME, fmt("\w%L", clientIndex, "MENU_EXIT"));
menu_display(clientIndex, mapMenu);
}
public Task_Map_VoteTime()
{
if(--voteTime <= 0)
{
remove_task(TASK_MAP_TIMEEND, 1);
new mapName[32], biggest = -1;
for(new index = 0; index < ArraySize(Array_mapsSelected); index++)
{
if(biggest == -1 || biggest < ArrayGetCell(Array_mapsSelected, index))
{
biggest = ArrayGetCell(Array_mapsSelected, index);
ArrayGetString(Array_mapsSelectedName, index, mapName, charsmax(mapName));
}
}
if(biggest == -1)
{
server_cmd("mp_timelimit 1");
} else {
for(new arrayIndex = ArraySize(Array_PlayerList_Connected())-1, playerIndex; arrayIndex >= 0; arrayIndex--)
{
playerIndex = ArrayGetCell(Array_PlayerList_Connected(), arrayIndex);
new modesName[128];
for(new index = ArraySize(Array_mapNames)-1, modeName2[32], mapName2[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
if(!equal(mapName, mapName2))
continue;
ArrayGetString(Array_mapMode, index, modeName2, charsmax(modeName2));
if(strlen(modesName)) format(modesName, charsmax(modesName), "%s, %L", modesName, playerIndex, modeName2);
else formatex(modesName, charsmax(modesName), "%L", playerIndex, modeName2);
}
Color_Chat(playerIndex, 0, "!g[%s]!n %L", Mod_Name, playerIndex, "MENU_MAP_CHANGING", mapName, biggest, modesName);
}
set_task(3.0, "Task_Change_Level", TASK_MAP_TIMEEND);
}
return;
}
for(new arrayIndex = ArraySize(Array_PlayerList_Connected())-1, playerIndex; arrayIndex >= 0; arrayIndex--)
{
playerIndex = ArrayGetCell(Array_PlayerList_Connected(), arrayIndex);
Show_MapMenu(playerIndex);
}
}
public Task_Change_Level()
{
new mapName[32], biggest = -1;
for(new index = 0; index < ArraySize(Array_mapsSelected); index++)
{
if(biggest == -1 || biggest < ArrayGetCell(Array_mapsSelected, index))
{
biggest = ArrayGetCell(Array_mapsSelected, index);
ArrayGetString(Array_mapsSelectedName, index, mapName, charsmax(mapName));
}
}
server_cmd("amx_map %s", mapName);
plugin_end();
}
Load_Old_Maps()
{
new path[64]; get_configsdir(path, charsmax(path));
format(path, charsmax(path), "%s/%s", path, OLDMAPS_FILE);
if(!file_exists(path))
{
return;
}
ArrayClear(Array_mapsPlayed);
ArrayClear(Array_modesPlayed);
new modeName[32];
new linedata[1024], File = fopen(path, "rt");
while(File && !feof(File))
{
fgets(File, linedata, charsmax(linedata));
replace(linedata, charsmax(linedata), "^n", "");
if(!linedata[0] || linedata[0] == ';') continue;
if(linedata[0] == '[')
{
copyc(linedata, charsmax(linedata), linedata[1], ']')
copy(modeName, charsmax(modeName), linedata);
continue;
}
ArrayPushString(Array_mapsPlayed, linedata);
ArrayPushString(Array_modesPlayed, modeName);
}
if(File) fclose(File);
}
Load_Mode_Maps()
{
new path[64]; get_configsdir(path, charsmax(path));
format(path, charsmax(path), "%s/%s", path, MODES_FILE);
if (!file_exists(path))
{
new Error[100]; formatex(Error, charsmax(Error), "[AMXX] Can't read file (%s)", path);
set_fail_state(Error);
return;
}
ArrayClear(Array_mapNames);
ArrayClear(Array_mapMode);
new modeName[32];
new linedata[1024], key[64], value[960], File = fopen(path, "rt");
while(File && !feof(File))
{
fgets(File, linedata, charsmax(linedata));
replace(linedata, charsmax(linedata), "^n", "");
if(!linedata[0] || linedata[0] == ';') continue;
if(linedata[0] == '[')
{
copyc(linedata, charsmax(linedata), linedata[1], ']')
copy(modeName, charsmax(modeName), "");
if(!ArraySize(Array_modes))
continue;
if(ArrayFindString(Array:ArrayGetCell(Array_modes, ArraySize(Array_modes)-1), linedata) == -1)
{
continue;
}
copy(modeName, charsmax(modeName), linedata);
continue;
}
if(!strlen(modeName))
continue;
if(linedata[0] == '_')
{
strtok(linedata[1], key, charsmax(key), value, charsmax(value), '=');
trim(key);
trim(value);
if(str_to_num(value))
{
ArrayPushString(Array_mapNames, key);
ArrayPushString(Array_mapMode, modeName);
}
}
}
if(File) fclose(File);
}
Load_Hours_Modes()
{
new path[64]; get_configsdir(path, charsmax(path));
format(path, charsmax(path), "%s/%s", path, HOURS_FILE);
if (!file_exists(path))
{
new Error[100]; formatex(Error, charsmax(Error), "[AMXX] Can't read file (%s)", path);
set_fail_state(Error);
return;
}
new hour[4]; get_time("%H", hour, charsmax(hour))
new currentHour = str_to_num(hour);
new modeHour;
ArrayClear(ArrayHours);
ArrayClear(ArrayInstaVote);
new Array:ArrayModes = ArrayCreate(1, 1);
new Array:ArrayExp = ArrayCreate(1, 1);
new Array:ArrayToken = ArrayCreate(1, 1);
new Array:ArrayBunny = ArrayCreate(1, 1);
new Array:ArrayJump = ArrayCreate(1, 1);
new Array:ArrayParachute = ArrayCreate(1, 1);
new Array:ArrayMapMinutes = ArrayCreate(1, 1);
new linedata[1024], File = fopen(path, "rt");
while(File && !feof(File))
{
fgets(File, linedata, charsmax(linedata));
replace(linedata, charsmax(linedata), "^n", "");
if(!linedata[0] || linedata[0] == ';') continue;
if(linedata[0] == '[')
{
copyc(linedata, charsmax(linedata), linedata[1], ']')
modeHour = clamp(str_to_num(linedata), 0, 24);
if(modeHour == 0) modeHour = -1;
if(ArrayFindValue(ArrayHours, modeHour) == -1)
{
new arrayIndex = ArrayPushCell(ArrayHours, modeHour);
new Array:Array_modeHours = ArrayCreate(32, 1);
amx_load_setting_string_arr(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "MODES", Array_modeHours);
ArrayPushCell(ArrayModes, Array_modeHours);
new instaVote; amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "INSTA VOTE", instaVote);
if(instaVote == 0) instaVote = -1;
ArrayPushCell(ArrayInstaVote, instaVote);
new Float:expMultiplier; amx_load_setting_float(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "EXP MULTIPLIER", expMultiplier);
if(expMultiplier == 0.0) expMultiplier = -1.0;
ArrayPushCell(ArrayExp, expMultiplier);
new Float:tokenMultiplier; amx_load_setting_float(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "TOKEN MULTIPLIER", tokenMultiplier);
if(tokenMultiplier == 0.0) tokenMultiplier = -1.0;
ArrayPushCell(ArrayToken, tokenMultiplier);
new minute; amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "MAP MINUTE", minute);
if(minute == 0) minute = -1;
ArrayPushCell(ArrayMapMinutes, minute);
new bunny; amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "BUNNY ACTIVE", bunny);
if(bunny == 0) bunny = -1;
ArrayPushCell(ArrayBunny, bunny);
new jump; amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "TRIPLE JUMP ACTIVE", jump);
if(jump == 0) jump = -1;
ArrayPushCell(ArrayJump, jump);
new parachute; amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "PARACHUTE ACTIVE", parachute);
if(parachute == 0) parachute = -1;
ArrayPushCell(ArrayParachute, parachute);
new Array:Array_modeHours2 = ArrayCreate(32, 1);
if(amx_load_setting_string_arr(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "MODES2", Array_modeHours2) && ArraySize(Array_modeHours2))
{
new bool:sameMod;
if(ArraySize(Array_hours))
{
if(modeHour == ArrayGetCell(Array_hours, ArraySize(Array_hours)-1))
{
sameMod = true;
}
}
if(sameMod)
{
new Float:expMultiplier2;
if(amx_load_setting_float(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "EXP MULTIPLIER2", expMultiplier2))
{
if(expMultiplier2 == 0.0) expMultiplier2 = -1.0;
ArrayDeleteItem(ArrayExp, arrayIndex);
ArrayPushCell(ArrayExp, expMultiplier2);
}
new Float:tokenMultiplier2;
if(amx_load_setting_float(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "TOKEN MULTIPLIER2", tokenMultiplier2))
{
if(tokenMultiplier2 == 0.0) tokenMultiplier2 = -1.0;
ArrayDeleteItem(ArrayToken, arrayIndex);
ArrayPushCell(ArrayToken, tokenMultiplier2);
}
new minute2;
if(amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "MAP MINUTE2", minute2))
{
if(minute2 == 0) minute2 = -1;
ArrayDeleteItem(ArrayMapMinutes, arrayIndex);
ArrayPushCell(ArrayMapMinutes, minute2);
}
new bunny2;
if(amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "BUNNY ACTIVE2", bunny2))
{
if(bunny2 == 0) bunny2 = -1;
ArrayDeleteItem(ArrayBunny, arrayIndex);
ArrayPushCell(ArrayBunny, bunny2);
}
new jump2;
if(amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "TRIPLE JUMP ACTIVE2", jump2))
{
if(jump2 == 0) jump2 = -1;
ArrayDeleteItem(ArrayJump, arrayIndex);
ArrayPushCell(ArrayJump, jump2);
}
new parachute2;
if(amx_load_setting_int(HOURS_FILE, fmt("%i", modeHour == -1 ? 0 : modeHour), "PARACHUTE ACTIVE2", parachute2))
{
if(parachute2 == 0) parachute2 = -1;
ArrayDeleteItem(ArrayParachute, arrayIndex);
ArrayPushCell(ArrayParachute, parachute2);
}
new Array:ArrayModesDelete = Array:ArrayGetCell(ArrayModes, arrayIndex);
ArrayDestroy(ArrayModesDelete);
ArrayDeleteItem(ArrayModes, arrayIndex);
ArrayPushCell(ArrayModes, Array_modeHours2);
} else {
ArrayDestroy(Array_modeHours2);
}
} else {
ArrayDestroy(Array_modeHours2);
}
}
}
}
if(File) fclose(File);
ArrayClear(Array_hours);
ArrayClear(Array_mapMinute);
ArrayClear(Array_expMultiplier);
ArrayClear(Array_tokenMultiplier);
ArrayClear(Array_mapBunny);
ArrayClear(Array_mapJump);
ArrayClear(Array_mapParachute);
for(new arrayIndex = ArraySize(Array_modes)-1, Array:deleteArrays; arrayIndex >= 0; arrayIndex--)
{
deleteArrays = Array:ArrayGetCell(Array_modes, arrayIndex);
ArrayDestroy(deleteArrays);
}
ArrayClear(Array_modes);
if(ArraySize(ArrayHours))
{
for(new searchValue = -1, arrayIndex; searchValue <= 24; searchValue++)
{
if(searchValue == 0)
continue;
if((arrayIndex = ArrayFindValue(ArrayHours, searchValue)) == -1)
continue;
ArrayPushCell(Array_hours, ArrayGetCell(ArrayHours, arrayIndex));
ArrayPushCell(Array_mapMinute, arrayIndex);
}
new selectedArray = NULLENT;
new arrayIndex;
for(arrayIndex = 0; arrayIndex < ArraySize(Array_hours); arrayIndex++)
{
if(currentHour < ArrayGetCell(Array_hours, arrayIndex))
continue;
selectedArray = ArrayGetCell(Array_mapMinute, arrayIndex);
}
if(selectedArray == NULLENT)
{
arrayIndex = ArraySize(Array_hours)-1;
selectedArray = ArrayGetCell(Array_mapMinute, arrayIndex);
}
ArrayClear(Array_hours);
ArrayClear(Array_mapMinute);
ArrayPushCell(Array_hours, ArrayGetCell(ArrayHours, selectedArray));
ArrayPushCell(Array_expMultiplier, Float:ArrayGetCell(ArrayExp, selectedArray));
ArrayPushCell(Array_tokenMultiplier, Float:ArrayGetCell(ArrayToken, selectedArray));
ArrayPushCell(Array_mapMinute, ArrayGetCell(ArrayMapMinutes, selectedArray));
ArrayPushCell(Array_mapBunny, ArrayGetCell(ArrayBunny, selectedArray));
ArrayPushCell(Array_mapJump, ArrayGetCell(ArrayJump, selectedArray));
ArrayPushCell(Array_mapParachute, ArrayGetCell(ArrayParachute, selectedArray));
new Array:saveModes = ArrayClone(Array:ArrayGetCell(ArrayModes, selectedArray));
ArrayPushCell(Array_modes, saveModes);
}
ArrayDestroy(ArrayExp);
ArrayDestroy(ArrayToken);
ArrayDestroy(ArrayMapMinutes);
ArrayDestroy(ArrayBunny);
ArrayDestroy(ArrayJump);
ArrayDestroy(ArrayParachute);
for(new arrayIndex = ArraySize(ArrayModes)-1, Array:deleteArrays; arrayIndex >= 0; arrayIndex--)
{
deleteArrays = Array:ArrayGetCell(ArrayModes, arrayIndex);
ArrayDestroy(deleteArrays);
}
ArrayDestroy(ArrayModes);
}
Save_Map_Played(bool:Save)
{
new path[64]; get_configsdir(path, charsmax(path));
format(path, charsmax(path), "%s", path);
if(!(dir_exists(path)))
{
mkdir(path);
}
format(path, charsmax(path), "%s/%s", path, OLDMAPS_FILE);
delete_file(path);
if(!Save)
{
new iFile = fopen(path, "a+");
if(iFile)
{
for(new arrayIndex = ArraySize(Array_mapsPlayed)-1, mapPlayed[32], modPlayed[32]; arrayIndex >= 0; arrayIndex--)
{
ArrayGetString(Array_modesPlayed, arrayIndex, modPlayed, charsmax(modPlayed));
if(ArraySize(Array_modes))
{
if(ArrayFindString(Array:ArrayGetCell(Array_modes, ArraySize(Array_modes)-1), modPlayed) != -1)
{
ArrayDeleteItem(Array_mapsPlayed, arrayIndex);
ArrayDeleteItem(Array_modesPlayed, arrayIndex);
continue;
}
}
ArrayGetString(Array_mapsPlayed, arrayIndex, mapPlayed, charsmax(mapPlayed));
fprintf(iFile, "^n[%s]^n", modPlayed);
fprintf(iFile, "%s^n", mapPlayed);
}
fclose(iFile);
return;
}
}
new iFile = fopen(path, "a+");
if(iFile)
{
for(new arrayIndex = ArraySize(Array_mapsPlayed)-1, mapPlayed[32], modPlayed[32]; arrayIndex >= 0; arrayIndex--)
{
ArrayGetString(Array_mapsPlayed, arrayIndex, mapPlayed, charsmax(mapPlayed));
ArrayGetString(Array_modesPlayed, arrayIndex, modPlayed, charsmax(modPlayed));
fprintf(iFile, "^n[%s]^n", modPlayed);
fprintf(iFile, "%s^n", mapPlayed);
}
fclose(iFile);
}
}
Create_Map_Menu()
{
Array_mapsSelected = ArrayCreate(6, 1);
Array_mapsSelectedName = ArrayCreate(32, 1);
voteTime = 15;
new menuTitle[64]; formatex(menuTitle, charsmax(menuTitle), "-");
mapMenu = menu_create(menuTitle, "MenuHandle_Map");
new iCallback = menu_makecallback("MenuCallback_Map");
new Array:Array_MapNames = ArrayCreate(32, 1);
for(new index = ArraySize(Array_mapNames)-1, mapName[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName, charsmax(mapName));
if(ArrayFindString(Array_MapNames, mapName) != -1)
continue;
ArrayPushString(Array_MapNames, mapName);
}
menu_additem(mapMenu, "-", "one", _, iCallback);
new mapName[32], index, mapCount = min(5, ArraySize(Array_MapNames));
while(index < mapCount)
{
ArrayGetString(Array_MapNames, random_num(0, ArraySize(Array_MapNames)-1), mapName, charsmax(mapName));
if(ArrayFindString(Array_mapsSelectedName, mapName) != -1)
continue;
menu_additem(mapMenu, mapName, fmt("%i", index), _, iCallback);
ArrayPushString(Array_mapsSelectedName, mapName);
ArrayPushCell(Array_mapsSelected, 0);
index++;
}
ArrayDestroy(Array_MapNames);
menu_setprop(mapMenu, MPROP_EXIT, MEXIT_NEVER);
}
public MenuCallback_Map(const clientIndex, const iMenu, const Item)
{
new szInfo[6];
menu_item_getinfo(iMenu, Item, _, szInfo, charsmax(szInfo), _, _, _);
new mapName[32];
if(equal(szInfo, "one"))
{
new biggest = -1;
for(new index = 0; index < ArraySize(Array_mapsSelected); index++)
{
if(biggest == -1 || biggest < ArrayGetCell(Array_mapsSelected, index))
{
biggest = ArrayGetCell(Array_mapsSelected, index);
ArrayGetString(Array_mapsSelectedName, index, mapName, charsmax(mapName));
}
}
if(biggest == -1) menu_item_setname(iMenu, Item, fmt("%L", clientIndex, "MENU_MAP_NO_MAP_REGISTERED"));
else
{
new modesName[128];
for(new index = ArraySize(Array_mapNames)-1, modeName2[32], mapName2[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
if(!equal(mapName, mapName2))
continue;
ArrayGetString(Array_mapMode, index, modeName2, charsmax(modeName2));
if(strlen(modesName)) format(modesName, charsmax(modesName), "%s, %L", modesName, clientIndex, modeName2);
else formatex(modesName, charsmax(modesName), "%L", clientIndex, modeName2);
}
menu_item_setname(iMenu, Item, fmt("%s \y(%i) \r(%s)", mapName, biggest, modesName));
}
return ITEM_DISABLED;
}
new mapIndex = str_to_num(szInfo);
ArrayGetString(Array_mapsSelectedName, mapIndex, mapName, charsmax(mapName));
new modesName[128];
for(new index = ArraySize(Array_mapNames)-1, modeName2[32], mapName2[32]; index >= 0; index--)
{
ArrayGetString(Array_mapNames, index, mapName2, charsmax(mapName2));
if(!equal(mapName, mapName2))
continue;
ArrayGetString(Array_mapMode, index, modeName2, charsmax(modeName2));
if(strlen(modesName)) format(modesName, charsmax(modesName), "%s, %L", modesName, clientIndex, modeName2);
else formatex(modesName, charsmax(modesName), "%L", clientIndex, modeName2);
}
menu_item_setname(iMenu, Item, fmt("%s \y(%i) \r(%s)", mapName, ArrayGetCell(Array_mapsSelected, mapIndex), modesName));
return ITEM_ENABLED;
}
public MenuHandle_Map(const clientIndex, const iMenu, const iItem)
{
if(!is_player_connected(clientIndex) || !voteTime)
return;
if(iItem == MENU_EXIT || iItem < 0)
{
return;
}
new szData[6]; menu_item_getinfo(iMenu, iItem, _, szData, charsmax(szData), _, _, _);
new mapIndex = str_to_num(szData);
new mapName[32]; ArrayGetString(Array_mapsSelectedName, mapIndex, mapName, charsmax(mapName));
new selectCount = ArrayGetCell(Array_mapsSelected, mapIndex)+1;
menuActive[clientIndex] = false;
ArraySetCell(Array_mapsSelected, mapIndex, selectCount);
for(new arrayIndex = ArraySize(Array_PlayerList_Connected())-1, playerIndex; arrayIndex >= 0; arrayIndex--)
{
playerIndex = ArrayGetCell(Array_PlayerList_Connected(), arrayIndex);
Color_Chat(playerIndex, 0, "!g[%s]!n %L", Mod_Name, playerIndex, "MENU_MAP_SELECTED", clientIndex, mapName, selectCount);
Show_MapMenu(playerIndex);
}
}
)

