When I try to test the plugin, it crashes the game
When I try to test the plugin I made some changes it crashes the game
PHP Code:
/*================================================================================ ---------------------------------- -*- [ZP] Game Mode: NightMare -*- ---------------------------------- This plugin is part of Zombie Plague Mod and is distributed under the terms of the GNU General Public License. Check ZP_ReadMe.txt for details. ================================================================================*/
#include <amxmodx> #include <fun> #include <amx_settings_api> #include <cs_teams_api> #include <zp50_gamemodes> #include <zp50_class_nemesis> #include <zp50_class_assassin> #include <zp50_class_survivor> #include <zp50_class_sniper> #include <zp50_class_plasma> #include <zp50_class_knifer> #include <zp50_class_dragon> #include <zp50_class_nightcrawler> #include <zp50_deathmatch>
// Settings file new const ZP_SETTINGS_FILE[] = "zombieplague.ini"
// Default sounds new const sound_nightmare[][] = { "zombie_plague/nemesis1.wav" , "zombie_plague/survivor1.wav" }
#define SOUND_MAX_LENGTH 64
new Array:g_sound_nightmare
// HUD messages #define HUD_EVENT_X -1.0 #define HUD_EVENT_Y 0.17 #define HUD_EVENT_R 255 #define HUD_EVENT_G 50 #define HUD_EVENT_B 20
new g_MaxPlayers new g_HudSync
new cvar_nightmare_chance, cvar_nightmare_min_players //new cvar_nightmare_ratio new cvar_nightmare_nem_hp_multi, cvar_nightmare_surv_hp_multi, cvar_nightmare_sniper_hp_multi, cvar_nightmare_kni_hp_multi, cvar_nightmare_plasm_hp_multi, cvar_nightmare_drag_hp_multi, cvar_nightmare_nigh_hp_multi, new cvar_nightmare_allow_respawn
public plugin_precache() { // Register game mode at precache (plugin gets paused after this) register_plugin("[ZP] Game Mode: NightMare", ZP_VERSION_STRING, "***Gho$t***") zp_gamemodes_register("NightMare Mode") // Create the HUD Sync Objects g_HudSync = CreateHudSyncObj() g_MaxPlayers = get_maxplayers() cvar_nightmare_chance = register_cvar("zp_nightmare_chance", "30") cvar_nightmare_min_players = register_cvar("zp_nightmare_min_players", "0") cvar_nightmare_ratio = register_cvar("zp_nightmare_ratio", "0.5") cvar_nightmare_nem_hp_multi = register_cvar("zp_nightmare_nem_hp_multi", "0.25") cvar_nightmare_surv_hp_multi = register_cvar("zp_nightmare_surv_hp_multi", "0.25") cvar_nightmare_sniper_hp_multi = register_cvar("zp_nightmare_sniper_hp_multi", "0.25") cvar_nightmare_kni_hp_multi = register_cvar("zp_nightmare_knife_hp_multi", "0.25") cvar_nightmare_drag_hp_multi = register_cvar("zp_nightmare_dragon_hp_multi", "1.0") cvar_nightmare_plasm_hp_multi = register_cvar("zp_nightmare_plasma_hp_multi", "1.0") cvar_nightmare_nigh_hp_multi = register_cvar("zp_nightmare_nightcrawler_hp_multi", "1.0") cvar_nightmare_show_hud = register_cvar("zp_nightmare_show_hud", "1") cvar_nightmare_sounds = register_cvar("zp_nightmare_sounds", "1") cvar_nightmare_allow_respawn = register_cvar("zp_nightmare_allow_respawn", "0") // Initialize arrays g_sound_nightmare = ArrayCreate(SOUND_MAX_LENGTH, 1) // Load from external file amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "ROUND NIGHTMARE", g_sound_nightmare) // If we couldn't load custom sounds from file, use and save default ones new index if (ArraySize(g_sound_nightmare) == 0) { for (index = 0; index < sizeof sound_nightmare; index++) ArrayPushString(g_sound_nightmare, sound_nightmare[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "ROUND NIGHTMARE", g_sound_nightmare) } // Precache sounds new sound[SOUND_MAX_LENGTH] for (index = 0; index < ArraySize(g_sound_nightmare); index++) { ArrayGetString(g_sound_nightmare, index, sound, charsmax(sound)) if (equal(sound[strlen(sound)-4], ".mp3")) { format(sound, charsmax(sound), "sound/%s", sound) precache_generic(sound) } else precache_sound(sound) } }
// Deathmatch module's player respawn forward public zp_fw_deathmatch_respawn_pre(id) { // Respawning allowed? if (!get_pcvar_num(cvar_nightmare_allow_respawn)) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; }
public zp_fw_gamemodes_choose_pre(game_mode_id, skipchecks) { if (!skipchecks) { // Random chance if (random_num(1, get_pcvar_num(cvar_nightmare_chance)) != 1) return PLUGIN_HANDLED; // Min players if (GetAliveCount() < get_pcvar_num(cvar_nightmare_min_players)) return PLUGIN_HANDLED; } // Game mode allowed return PLUGIN_CONTINUE; }
public zp_fw_gamemodes_start() { // Calculate player counts new id, alive_count = GetAliveCount() new survivor_count = floatround(alive_count * 0.20, floatround_ceil) //new nemesis_count = floatround(alive_count * 0.20, floatround_ceil) //new sniper_count = floatround(alive_count * 0.10, floatround_ceil) //new knife_count = floatround(alive_count * 0.15, floatround_ceil) //new plasma_count = floatround(alive_count * 0.10, floatround_ceil) //new dragon_count = floatround(alive_count * 0.15, floatround_ceil) //new nightcrawler_count = floatround(alive_count * 0.10, floatround_ceil) new nemesis_count = survivor_count new sniper_count = survivor_count new knife_count = survivor_count new plasma_count = survivor_count new dragon_count = survivor_count new nightcrawler_count = survivor_count // Turn specified amount of players into Survivors new iSurvivors, iMaxSurvivors = survivor_count while (iSurvivors < iMaxSurvivors) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor? if (zp_class_survivor_get(id)) continue; // If not, turn him into one zp_class_survivor_set(id) iSurvivors++ // Apply survivor health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_surv_hp_multi))) } // Turn specified amount of players into Nemesis new iNemesis, iMaxNemesis = nemesis_count while (iNemesis < iMaxNemesis) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id)) continue; // If not, turn him into one zp_class_nemesis_set(id) iNemesis++ // Apply nemesis health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_nem_hp_multi))) } // Turn specified amount of players into Snipers new iSnipers, iMaxSnipers = sniper_count while (iSnipers < iMaxSnipers) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id) || zp_class_sniper_get(id) || zp_class_knifer_get(id) || zp_class_plasma_get(id) || zp_class_dragon_get(id) || zp_class_nightcrawler_get(id)) continue; // If not, turn him into one zp_class_sniper_set(id) iSnipers++ // Apply sniper health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_sniper_hp_multi))) } // Turn specified amount of players into Knifer new iKnife, iMaxKnife = knife_count while (iKnife < iMaxKnife) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id) || zp_class_sniper_get(id) || zp_class_knifer_get(id) || zp_class_plasma_get(id) || zp_class_dragon_get(id) || zp_class_nightcrawler_get(id)) continue; // If not, turn him into one zp_class_knifer_set(id) iKnife++ // Apply Knife health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_kni_hp_multi))) } // Turn specified amount of players into Knifer new iPlasma, iMaxPlasma = plasma_count while (iPlasma < iMaxPlasma) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id) || zp_class_sniper_get(id) || zp_class_knifer_get(id) || zp_class_plasma_get(id) || zp_class_dragon_get(id) || zp_class_nightcrawler_get(id)) continue; // If not, turn him into one zp_class_plasma_set(id) iPlasma++ // Apply Plasma health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_plasm_hp_multi))) } // Turn specified amount of players into Knifer new iDragon, iMaxDragon = dragon_count while (iDragon < iMaxDragon) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id) || zp_class_sniper_get(id) || zp_class_knifer_get(id) || zp_class_plasma_get(id) || zp_class_dragon_get(id) || zp_class_nightcrawler_get(id)) continue; // If not, turn him into one zp_class_dragon_set(id) iDragon++ // Apply Dragon health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_drag_hp_multi))) } // Turn specified amount of players into Knifer new iNightCrawler, iMaxNightCrawler = nightcrawler_count while (iNightCrawler < iMaxNightCrawler) { // Choose random guy id = GetRandomAlive(random_num(1, alive_count)) // Already a survivor or nemesis? if (zp_class_survivor_get(id) || zp_class_nemesis_get(id) || zp_class_sniper_get(id) || zp_class_knifer_get(id) || zp_class_plasma_get(id) || zp_class_dragon_get(id) || zp_class_nightcrawler_get(id)) continue; // If not, turn him into one zp_class_nightcrawler_set(id) iNightCrawler++ // Apply NightCrawler health multiplier set_user_health(id, floatround(get_user_health(id) * get_pcvar_float(cvar_nightmare_nigh_hp_multi))) } // Play Armageddon sound if (get_pcvar_num(cvar_nightmare_sounds)) { new sound[SOUND_MAX_LENGTH] ArrayGetString(g_sound_nightmare, random_num(0, ArraySize(g_sound_nightmare) - 1), sound, charsmax(sound)) PlaySoundToClients(sound) } if (get_pcvar_num(cvar_nightmare_show_hud)) { // Show Armageddon HUD notice set_hudmessage(HUD_EVENT_R, HUD_EVENT_G, HUD_EVENT_B, HUD_EVENT_X, HUD_EVENT_Y, 1, 0.0, 5.0, 1.0, 1.0, -1) ShowSyncHudMsg(0, g_HudSync, "NightMare Mode", LANG_PLAYER, "NOTICE_NIGHTMARE") } }
// Plays a sound on clients PlaySoundToClients(const sound[]) { if (equal(sound[strlen(sound)-4], ".mp3")) client_cmd(0, "mp3 play ^"sound/%s^"", sound) else client_cmd(0, "spk ^"%s^"", sound) }
// Get Alive Count -returns alive players number- GetAliveCount() { new iAlive, id for (id = 1; id <= g_MaxPlayers; id++) { if (is_user_alive(id)) iAlive++ } return iAlive; }
// Get Random Alive -returns index of alive player number target_index - GetRandomAlive(target_index) { new iAlive, id for (id = 1; id <= g_MaxPlayers; id++) { if (is_user_alive(id)) iAlive++ if (iAlive == target_index) return id; } return -1; }
|