#include #include #include #include #include #include #define PLUGIN "[ZP]Nemesis Sound" #define AUTHOR "Vendetta" #define VERSION "1.0" new const ZP_SETTINGS_FILE[] = "zombieplague.ini" new const sound_nemesis_die[][] = { "zombie_plague/nemesis_die1.wav" } new const sound_nemesis_fall[][] = { "zombie_plague/nemesis_fall1.wav" } new const sound_nemesis_miss_slash[][] = { "weapons/knife_slash1.wav" , "weapons/knife_slash2.wav" } new const sound_nemesis_miss_wall[][] = { "weapons/knife_hitwall1.wav" } new const sound_nemesis_hit_normal[][] = { "weapons/knife_hit1.wav" , "weapons/knife_hit2.wav" , "weapons/knife_hit3.wav" , "weapons/knife_hit4.wav" } new const sound_nemesis_hit_stab[][] = { "weapons/knife_stab.wav" } new const sound_nemesis_idle[][] = { "nihilanth/nil_now_die.wav" } #define SOUND_MAX_LENGTH 64 new Array:g_sound_nemesis_die new Array:g_sound_nemesis_fall new Array:g_sound_nemesis_miss_slash new Array:g_sound_nemesis_miss_wall new Array:g_sound_nemesis_hit_normal new Array:g_sound_nemesis_hit_stab new Array:g_sound_nemesis_idle #define TASK_IDLE_SOUNDS 100 #define ID_IDLE_SOUNDS (taskid - TASK_IDLE_SOUNDS) public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_forward(FM_EmitSound, "fw_EmitSound") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHamBots(Ham_Killed, "fw_PlayerKilled") } public plugin_precache() { g_sound_nemesis_die = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_fall = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_miss_slash = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_miss_wall = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_hit_normal = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_hit_stab = ArrayCreate(SOUND_MAX_LENGTH, 1) g_sound_nemesis_idle = ArrayCreate(SOUND_MAX_LENGTH, 1) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS DIE", g_sound_nemesis_die) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS FALL", g_sound_nemesis_fall) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS MISS SLASH", g_sound_nemesis_miss_slash) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS MISS WALL", g_sound_nemesis_miss_wall) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS HIT NORMAL", g_sound_nemesis_hit_normal) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS HIT STAB", g_sound_nemesis_hit_stab) amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS IDLE", g_sound_nemesis_idle) new index if (ArraySize(g_sound_nemesis_die) == 0) { for (index = 0; index < sizeof sound_nemesis_die; index++) ArrayPushString(g_sound_nemesis_die, sound_nemesis_die[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS DIE", g_sound_nemesis_die) } if (ArraySize(g_sound_nemesis_fall) == 0) { for (index = 0; index < sizeof sound_nemesis_fall; index++) ArrayPushString(g_sound_nemesis_fall, sound_nemesis_fall[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS FALL", g_sound_nemesis_fall) } if (ArraySize(g_sound_nemesis_miss_slash) == 0) { for (index = 0; index < sizeof sound_nemesis_miss_slash; index++) ArrayPushString(g_sound_nemesis_miss_slash, sound_nemesis_miss_slash[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS MISS SLASH", g_sound_nemesis_miss_slash) } if (ArraySize(g_sound_nemesis_miss_wall) == 0) { for (index = 0; index < sizeof sound_nemesis_miss_wall; index++) ArrayPushString(g_sound_nemesis_miss_wall, sound_nemesis_miss_wall[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS MISS WALL", g_sound_nemesis_miss_wall) } if (ArraySize(g_sound_nemesis_hit_normal) == 0) { for (index = 0; index < sizeof sound_nemesis_hit_normal; index++) ArrayPushString(g_sound_nemesis_hit_normal, sound_nemesis_hit_normal[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS HIT NORMAL", g_sound_nemesis_hit_normal) } if (ArraySize(g_sound_nemesis_hit_stab) == 0) { for (index = 0; index < sizeof sound_nemesis_hit_stab; index++) ArrayPushString(g_sound_nemesis_hit_stab, sound_nemesis_hit_stab[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS HIT STAB", g_sound_nemesis_hit_stab) } if (ArraySize(g_sound_nemesis_idle) == 0) { for (index = 0; index < sizeof sound_nemesis_idle; index++) ArrayPushString(g_sound_nemesis_idle, sound_nemesis_idle[index]) // Save to external file amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "NEMESIS IDLE", g_sound_nemesis_idle) } new sound[SOUND_MAX_LENGTH] if (zp_get_user_nemesis(index)) { for (index = 0; index < ArraySize(g_sound_nemesis_die); index++) { ArrayGetString(g_sound_nemesis_die, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_fall); index++) { ArrayGetString(g_sound_nemesis_fall, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_miss_slash); index++) { ArrayGetString(g_sound_nemesis_miss_slash, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_miss_wall); index++) { ArrayGetString(g_sound_nemesis_miss_wall, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_hit_normal); index++) { ArrayGetString(g_sound_nemesis_hit_normal, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_hit_stab); index++) { ArrayGetString(g_sound_nemesis_hit_stab, index, sound, charsmax(sound)) precache_sound(sound) } for (index = 0; index < ArraySize(g_sound_nemesis_idle); index++) { ArrayGetString(g_sound_nemesis_idle, index, sound, charsmax(sound)) precache_sound(sound) } } } public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if (!is_user_connected(id) || !zp_get_user_nemesis(id)) return FMRES_IGNORED; static sound[SOUND_MAX_LENGTH] if (sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a'))) { ArrayGetString(g_sound_nemesis_die, random_num(0, ArraySize(g_sound_nemesis_die) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } if (sample[10] == 'f' && sample[11] == 'a' && sample[12] == 'l' && sample[13] == 'l') { ArrayGetString(g_sound_nemesis_fall, random_num(0, ArraySize(g_sound_nemesis_fall) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i') { if (sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a') { ArrayGetString(g_sound_nemesis_miss_slash, random_num(0, ArraySize(g_sound_nemesis_miss_slash) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't') { if (sample[17] == 'w') { ArrayGetString(g_sound_nemesis_miss_wall, random_num(0, ArraySize(g_sound_nemesis_miss_wall) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } else { ArrayGetString(g_sound_nemesis_hit_normal, random_num(0, ArraySize(g_sound_nemesis_hit_normal) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } } if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') { ArrayGetString(g_sound_nemesis_hit_stab, random_num(0, ArraySize(g_sound_nemesis_hit_stab) - 1), sound, charsmax(sound)) emit_sound(id, channel, sound, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } } return FMRES_IGNORED; } public fw_PlayerKilled(victim, attacker, shouldgib) { remove_task(victim+TASK_IDLE_SOUNDS) } public client_disconnect(id) { remove_task(id+TASK_IDLE_SOUNDS) } public zp_user_infected_post(id, attacker) { remove_task(id+TASK_IDLE_SOUNDS) if (zp_get_user_nemesis(id)) { set_task(random_float(50.0, 70.0), "nemesis_idle_sounds", id+TASK_IDLE_SOUNDS, _, _, "b") } } public zp_user_humanized_post(id, attacker) { remove_task(id+TASK_IDLE_SOUNDS) } public nemesis_idle_sounds(taskid) { static sound[SOUND_MAX_LENGTH] { ArrayGetString(g_sound_nemesis_idle, random_num(0, ArraySize(g_sound_nemesis_idle) - 1), sound, charsmax(sound)) emit_sound(ID_IDLE_SOUNDS, CHAN_VOICE, sound, 1.0, ATTN_NORM, 0, PITCH_NORM) } }