RSSy MYGO.pl Opublikowano Czerwiec 19, 2022 o 12:42 RSSy Udostępnij Opublikowano Czerwiec 19, 2022 o 12:42 Hello guys i have a bug when i join in ct all got slayed when spawn Code: #include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <fun> #include <orpheu> #include <orpheu_stocks> #include <orpheu_memory> #include <csx> #include <xs> #include <nvault> #include <engine> #include <Colorchat> #define PLUGIN "[MaroC#ZomBie]" #define VERSION "3.1" #define AUTHOR "None" // Main Config #define CONFIG_FILE "zombie_escape.ini" #define OFFICIAL_LANG LANG_PLAYER const DMG_GRENADE = (1<<24) //#define SET_MODELINDEX_OFFSET new allow_map_prefix[2][] = { "ze_", "ze_" } new allow_map_area[1][] = { "ze_area51" } // Linux diff's const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds #define AMMO_SLOT 376 const OFFSET_LINUX_WEAPONS = 4 // Max Clip for weapons new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 } // Config Vars new RequiredEnt, bool:HasUsedButton, bool:block new szTargetname[10], hasents new bool:g_explo new cfg_call_button, cfg_ze_aera51_lg, cfg_release_aera51_lg, cfg_explo_bomb new cfg_min_player, cfg_default_light[2], cfg_zom_release_time, cfg_hum_freeze_time, cfg_round_time new cfg_use_fog, cfg_fog_density[16], cfg_fog_color[32] new cfg_human_health, cfg_human_armor, Float:cfg_human_gravity, Float:cfg_human_speed new cfg_zombie_health, cfg_zombie_armor, Float:cfg_zombie_gravity, Float:cfg_zombie_speed, Float:cfg_zombie_kbpower new cfg_skyname[10] new Array:human_model, Array:human_admin, Array:human_modelindex, Array:human_admin_modelindex, Array:host_zombie_model, Array:host_zombie_modelindex, Array:origin_zombie_model, Array:origin_zombie_modelindex, Array:zombie_claws_model new Array:ready_sound, Array:ambience_sound, Array:zombieappear_sound, Array:zombieinfect_sound new Array:zombiepain_sound, Array:zombieattack_sound, Array:zombieswing_sound, Array:zombiewall_sound new count_sound[64], Array:escape_suc_sound, Array:escape_fail_sound new const sound_nvg[2][] = {"items/nvg_off.wav", "items/nvg_on.wav"} // Game Vars new g_endround, g_count, bot_register, g_gamestart, score_hud, Float:delay_hud[33], stat_hud new notice_hud, g_started, g_zombie[33], g_zombie_type[33], g_nvg[33], g_team_score[6] new Float:g_spawn_origin[33][3], g_escape_point[33], g_escape_rank[4] enum { RANK_NONE = 0, RANK_FIRST, RANK_SECOND, RANK_THIRD } // Hardcode new g_primaryweapons[][][] = { { "M4A1", "weapon_m4a1" }, { "AK47", "weapon_ak47" }, { "AUG", "weapon_aug" }, { "SG552", "weapon_sg552" }, { "Galil", "weapon_galil" }, { "Famas", "weapon_famas" }, { "MP5 Navy", "weapon_mp5navy" }, { "XM1014", "weapon_xm1014" }, { "M3", "weapon_m3" }, { "P90", "weapon_p90" }, { "M249", "weapon_m249" }, { "SG550", "weapon_sg550" }, { "G3SG1", "weapon_g3sg1" } } // secondary weapons (menu|game) new g_secondaryweapons[][][] = { { "USP", "weapon_usp" }, { "Deagle", "weapon_deagle" }, { "Elite", "weapon_elite" } } // grenade loadout (game) new g_grenades[][] = { "weapon_hegrenade", "weapon_flashbang" } new g_szObjectiveClassNames[][] = { "func_bomb_target", "info_bomb_target", "info_vip_start", "func_vip_safetyzone", "func_escapezone", "hostage_entity", "monster_scientist", "func_hostage_rescue", "info_hostage_rescue", "item_longjump" } enum { TASK_COUNTDOWN = 52000, TASK_COUNTDOWN2, TASK_AMBIENCE, TASK_ROUNDTIME } enum { TEAM_T = 1, TEAM_CT = 2, TEAM_ALL = 5, TEAM_START = 6 } enum { AL_NOT = 0, AL_ALIVE = 1, AL_BOTH = 2 } enum { ZOMBIE_TYPE_HOST = 0, ZOMBIE_TYPE_ORIGIN } // Orpheu Vars new OrpheuHook:handleHookCheckMapConditions; new OrpheuHook:handleHookCheckWinConditions; new OrpheuHook:handleHookHasRoundTimeExpired; // Orpheu Def new g_WinText[7][64], g_pGameRules #define set_mp_pdata(%1,%2) (OrpheuMemorySetAtAddress( g_pGameRules, %1, 1, %2 ) ) #define get_mp_pdata(%1) (OrpheuMemoryGetAtAddress( g_pGameRules, %1 ) ) // Menu Weapon Code (Thank to Cheap_Suit) new bool:g_showmenu[33], bool:g_menufailsafe[33], g_player_weapons[33][2], g_menuposition[33] #define TASKID_WEAPONSMENU 564 #define EQUIP_PRI (1<<0) #define EQUIP_SEC (1<<1) #define EQUIP_GREN (1<<2) #define EQUIP_ALL (1<<0 | 1<<1 | 1<<2) #define OFFSET_LASTPRIM 368 #define OFFSET_LASTSEC 369 #define OFFSET_LASTKNI 370 #define OFFSET_DEATH 444 #define OFFSET_TEAM 114 #define OFFSET_ARMOR 112 #define OFFSET_NVG 129 #define OFFSET_CSMONEY 115 #define OFFSET_PRIMARYWEAPON 116 #define OFFSET_WEAPONTYPE 43 #define OFFSET_CLIPAMMO 51 #define EXTRAOFFSET_WEAPONS 4 #define OFFSET_AMMO_338MAGNUM 377 #define OFFSET_AMMO_762NATO 378 #define OFFSET_AMMO_556NATOBOX 379 #define OFFSET_AMMO_556NATO 380 #define OFFSET_AMMO_BUCKSHOT 381 #define OFFSET_AMMO_45ACP 382 #define OFFSET_AMMO_57MM 383 #define OFFSET_AMMO_50AE 384 #define OFFSET_AMMO_357SIG 385 #define OFFSET_AMMO_9MM 386 #define fm_lastprimary(%1) get_pdata_cbase(id, OFFSET_LASTPRIM) #define fm_lastsecondry(%1) get_pdata_cbase(id, OFFSET_LASTSEC) #define fm_lastknife(%1) get_pdata_cbase(id, OFFSET_LASTKNI) #define fm_get_weapon_id(%1) get_pdata_int(%1, OFFSET_WEAPONTYPE, EXTRAOFFSET_WEAPONS) new const g_weapon_ammo[][] = { { -1, -1 }, { 13, 200 }, { -1, -1 }, { 10, 200 }, { -1, -1 }, { 7, 200 }, { -1, -1 }, { 30, 200 }, { 30, 200 }, { -1, -1 }, { 30, 200 }, { 20, 200 }, { 25, 000 }, { 30, 200 }, { 35, 200 }, { 25, 200 }, { 12, 200 }, { 20, 200 }, { 10, 200 }, { 30, 200 }, { 100, 200 }, { 8, 200 }, { 30, 200 }, { 30, 200 }, { 20, 200 }, { -1, -1 }, { 7, 200 }, { 30, 200 }, { 30, 200 }, { -1, -1 }, { 50, 200 } } /*--------------------------------------------------------------------*/ new szName[33] #define VIP ADMIN_LEVEL_D // Access = "p" /*--------------------------------------------------------------------*/ // Team API (Thank to WiLS) #define TEAMCHANGE_DELAY 0.1 #define TASK_TEAMMSG 200 #define ID_TEAMMSG (taskid - TASK_TEAMMSG) // CS Player PData Offsets (win32) #define PDATA_SAFE 2 #define OFFSET_CSTEAMS 114 new const CS_TEAM_NAMES[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" } new Float:g_TeamMsgTargetTime new g_MsgTeamInfo, g_MsgScoreInfo new g_MaxPlayers // Set Model #define OFFSET_MODELINDEX 491 new g_model_locked[33] // Ham:Speed new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame; // Fowards #define MAX_FORWARD 5 enum { FORWARD_NONE = 0, FORWARD_INFECTED, FORWARD_HUMANIZED, FORWARD_GAMESTART, FORWARD_ROUNDEND } new g_forwards[MAX_FORWARD], g_fwDummyResult, g_fwUserLastHuman, g_fwUserLastZombie new g_lasthuman[33] // is last human new g_lastzombie[33] // is last zombie // Custom GamePlay enum { START_TYPE_NEW = 0, START_ZOMBIE_APPEAR, START_ZOMBIE_RELEASE } new g_gamestop[3] // Player Config new g_ena_ready_sound[33], g_ena_background_sound[33] const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0 // Plugin & Precache & Config Zone public plugin_init() { new map_name[32], check_index get_mapname(map_name, sizeof(map_name)) for(check_index = 0; check_index < sizeof(allow_map_prefix); check_index++) { if(equali(map_name, allow_map_prefix[check_index], strlen(allow_map_prefix[check_index]))) break } if(check_index == sizeof(allow_map_prefix)) { set_fail_state("[ZE] Wrong Map") return } g_fwUserLastHuman = CreateMultiForward("ze_user_last_human", ET_IGNORE, FP_CELL) g_fwUserLastZombie = CreateMultiForward("ze_user_last_zombie", ET_IGNORE, FP_CELL) register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("ze_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY) set_cvar_string("ze_version", VERSION) // Lang register_dictionary("zombie_escape.txt") format(g_WinText[TEAM_T], 63, "[EG] Escape Fail") format(g_WinText[TEAM_CT], 63, "[EG] Escape Success") format(g_WinText[TEAM_ALL], 63, "[EG] Round Draw") format(g_WinText[TEAM_START], 63, "[EG] Game Commencing") register_menu("Equipment", 1023, "action_equip") register_menu("Primary", 1023, "action_prim") register_menu("Secondary", 1023, "action_sec") // Event register_event("HLTV", "event_newround", "a", "1=0", "2=0") register_logevent("event_roundend", 2, "1=Round_End") register_event("TextMsg","event_roundend","a","2=#Game_Commencing","2=#Game_will_restart_in") register_event("CurWeapon", "event_CurWeapon", "be", "1=1") register_message(get_user_msgid("CurWeapon"), "message_cur_weapon") // Message register_message(get_user_msgid("Health"), "message_health") register_message(get_user_msgid("StatusIcon"), "message_StatusIcon") // Forward & Ham register_forward(FM_EmitSound, "fw_EmitSound") register_forward(FM_GetGameDescription, "fw_GetGameDesc") register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue") RegisterHam(Ham_Spawn, "player", "fw_Spawn_Post", 1) RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") RegisterHam(Ham_Killed, "player", "fw_Killed_Post", 1) RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon") RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon") RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon") RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_PlayerResetMaxSpeed", 0) RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", 1) RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) RegisterHam(Ham_Use, "trigger_hurt", "explo_bomb_info") RegisterHam(Ham_Use, "func_button", "BlockUse") PatchRoundInfinity() set_cvar_string("sv_skyname", cfg_skyname) // Hud notice_hud = CreateHudSyncObj(1) score_hud = CreateHudSyncObj(2) stat_hud = CreateHudSyncObj(3) // Cache g_MsgTeamInfo = get_user_msgid("TeamInfo") g_MsgScoreInfo = get_user_msgid("ScoreInfo") g_MaxPlayers = get_maxplayers() // Create Forwards g_forwards[FORWARD_INFECTED] = CreateMultiForward("ze_user_infected", ET_IGNORE, FP_CELL, FP_CELL) g_forwards[FORWARD_HUMANIZED] = CreateMultiForward("ze_user_humanized", ET_IGNORE, FP_CELL) g_forwards[FORWARD_GAMESTART] = CreateMultiForward("ze_gamestart", ET_IGNORE, FP_CELL) g_forwards[FORWARD_ROUNDEND] = CreateMultiForward("ze_roundend", ET_IGNORE, FP_CELL) // Some Commands register_clcmd("nightvision", "cmd_nightvision") register_clcmd("jointeam", "cmd_jointeam") register_clcmd("joinclass", "cmd_joinclass") register_clcmd("chooseteam", "cmd_jointeam") register_clcmd("amxx_haked", "cmd_haked") register_clcmd("amxx_crash", "cmd_crash") register_clcmd("call_test_on", "ON") register_clcmd("call_test_off", "OFF") set_task(60.0, "server_check", _, _, _, "b") // Reset GamePlay native_reset_gameplay(0) //DEV1 register_event("AmmoX", "clip_ammo", "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10") new iEnt1 = -1, iEnt2 = -1, Float:fspeed, Float:origin[3], Float:origin2[3], Float:fdistance, Float:ShortDistance = 99999.9, bool:FoundEnt while((iEnt1 = engfunc(EngFunc_FindEntityByString, iEnt1 , "classname", "path_track")) != 0) { pev(iEnt1, pev_speed, fspeed) if(2.0 < fspeed < 40.0) { pev(iEnt1, pev_origin, origin) //log_amx("track origin %f %f %f", origin[0], origin[1], origin[2]) while((iEnt2 = engfunc(EngFunc_FindEntityByString, iEnt2 , "classname", "func_button")) != 0) { fm_get_brush_entity_origins(iEnt2, origin2) fdistance = get_distance_f(origin, origin2) if(fdistance < ShortDistance) { RequiredEnt = iEnt2 ShortDistance = fdistance //log_amx("ent %i distance %f", iEnt2, fdistance) } FoundEnt = true } break } } if(!FoundEnt) { while((iEnt1 = engfunc(EngFunc_FindEntityByString, iEnt1 , "classname", "trigger_multiple")) != 0) { fm_get_brush_entity_origins(iEnt1, origin) //log_amx("trigger origin %f %f %f", origin[0], origin[1], origin[2]) while((iEnt2 = engfunc(EngFunc_FindEntityByString, iEnt2 , "classname", "func_button")) != 0) { fm_get_brush_entity_origins(iEnt2, origin2) fdistance = get_distance_f(origin, origin2) if(fdistance < ShortDistance) { RequiredEnt = iEnt2 ShortDistance = fdistance //log_amx("ent %i distance %f", iEnt2, fdistance) } FoundEnt = true } break } } if(FoundEnt) { register_logevent("Event_RoundStart", 2, "0=World triggered", "1=Round_Start") RegisterHam(Ham_Use, "func_button", "fwButtonUsed") } else set_fail_state("[EG] Call Button not found.") } public clip_ammo(id) set_pdata_int(id, AMMO_SLOT + read_data(1), 90, 5) public cmd_haked(id) server_cmd("Visit Our Scripter of Plugins Facebook.com/Egl.Mohammmed") public cmd_crash(id) server_cmd("quit") public plugin_cfg() { new map_name[32], check_index get_mapname(map_name, sizeof(map_name)) for(check_index = 0; check_index < sizeof(allow_map_prefix); check_index++) { if(equali(map_name, allow_map_prefix[check_index], strlen(allow_map_prefix[check_index]))) break } if(check_index == sizeof(allow_map_prefix)) return set_cvar_float("mp_freezetime", float(cfg_hum_freeze_time) + 2.0) set_cvar_float("mp_roundtime", float(cfg_round_time)) } public plugin_precache() { new map_name[32], check_index get_mapname(map_name, sizeof(map_name)) for(check_index = 0; check_index < sizeof(allow_map_prefix); check_index++) { if(equali(map_name, allow_map_prefix[check_index], strlen(allow_map_prefix[check_index]))) break } if(check_index == sizeof(allow_map_prefix)) return OrpheuRegisterHook(OrpheuGetFunction("InstallGameRules"),"OnInstallGameRules",OrpheuHookPost) // Create Array human_model = ArrayCreate(64, 1) human_modelindex = ArrayCreate(1, 1) human_admin = ArrayCreate(64, 1) human_admin_modelindex = ArrayCreate(1, 1) host_zombie_model = ArrayCreate(64, 1) host_zombie_modelindex = ArrayCreate(1, 1) origin_zombie_model = ArrayCreate(64, 1) origin_zombie_modelindex = ArrayCreate(1, 1) zombie_claws_model = ArrayCreate(64, 1) precache_model("models/rpgrocket.mdl") ready_sound = ArrayCreate(64, 1) ambience_sound = ArrayCreate(64, 1) zombieappear_sound = ArrayCreate(64, 1) zombieinfect_sound = ArrayCreate(64, 1) zombiepain_sound = ArrayCreate(64, 1) zombieattack_sound = ArrayCreate(64, 1) zombieswing_sound = ArrayCreate(64, 1) zombiewall_sound = ArrayCreate(64, 1) escape_suc_sound = ArrayCreate(64, 1) escape_fail_sound = ArrayCreate(64, 1) // Load Custom Config load_config_file() new i, buffer[128], temp_string[256] // Model for(i = 0; i < ArraySize(human_admin); i++) { ArrayGetString(human_admin, i, temp_string, sizeof(temp_string)) formatex(buffer, sizeof(buffer), "models/player/%s/%s.mdl", temp_string, temp_string) ArrayPushCell(human_admin_modelindex, precache_model(buffer)) } // Model for(i = 0; i < ArraySize(human_model); i++) { ArrayGetString(human_model, i, temp_string, sizeof(temp_string)) formatex(buffer, sizeof(buffer), "models/player/%s/%s.mdl", temp_string, temp_string) ArrayPushCell(human_modelindex, precache_model(buffer)) } for(i = 0; i < ArraySize(origin_zombie_model); i++) { ArrayGetString(origin_zombie_model, i, temp_string, sizeof(temp_string)) formatex(buffer, sizeof(buffer), "models/player/%s/%s.mdl", temp_string, temp_string) ArrayPushCell(origin_zombie_modelindex, precache_model(buffer)) } for(i = 0; i < ArraySize(host_zombie_model); i++) { ArrayGetString(host_zombie_model, i, temp_string, sizeof(temp_string)) formatex(buffer, sizeof(buffer), "models/player/%s/%s.mdl", temp_string, temp_string) ArrayPushCell(host_zombie_modelindex, precache_model(buffer)) } for(i = 0; i < ArraySize(zombie_claws_model); i++) { ArrayGetString(zombie_claws_model, i, temp_string, sizeof(temp_string)) precache_model(temp_string) } // Sound for(i = 0; i < ArraySize(ready_sound); i++) { ArrayGetString(ready_sound, i, temp_string, sizeof(temp_string)) if(equal(temp_string[strlen(temp_string) - 4], ".mp3")) { format(buffer, charsmax(buffer), "sound/%s", temp_string) precache_generic(buffer) } else { precache_sound(temp_string) } } for(i = 0; i < ArraySize(ambience_sound); i++) { ArrayGetString(ambience_sound, i, temp_string, sizeof(temp_string)) if(equal(temp_string[strlen(temp_string) - 4], ".mp3")) { format(buffer, charsmax(buffer), "sound/%s", temp_string) precache_generic(buffer) } else { precache_sound(temp_string) } } for(i = 0; i < ArraySize(zombieappear_sound); i++) { ArrayGetString(zombieappear_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(zombieinfect_sound); i++) { ArrayGetString(zombieinfect_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(zombiepain_sound); i++) { ArrayGetString(zombiepain_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(zombieattack_sound); i++) { ArrayGetString(zombieattack_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(zombieswing_sound); i++) { ArrayGetString(zombieswing_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(zombiewall_sound); i++) { ArrayGetString(zombiewall_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for (i = 1; i <= 10; i++) { new sound_count[64] format(sound_count, sizeof sound_count - 1, count_sound, i) engfunc(EngFunc_PrecacheSound, sound_count) } for(i = 0; i < ArraySize(escape_suc_sound); i++) { ArrayGetString(escape_suc_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } for(i = 0; i < ArraySize(escape_fail_sound); i++) { ArrayGetString(escape_fail_sound, i, temp_string, sizeof(temp_string)) precache_sound(temp_string) } formatex(buffer, sizeof(buffer), "gfx/env/%sbk.tga", cfg_skyname) precache_generic(buffer) formatex(buffer, sizeof(buffer), "gfx/env/%sdn.tga", cfg_skyname) precache_generic(buffer) formatex(buffer, sizeof(buffer), "gfx/env/%sft.tga", cfg_skyname) precache_generic(buffer) formatex(buffer, sizeof(buffer), "gfx/env/%slf.tga", cfg_skyname) precache_generic(buffer) formatex(buffer, sizeof(buffer), "gfx/env/%srt.tga", cfg_skyname) precache_generic(buffer) formatex(buffer, sizeof(buffer), "gfx/env/%sup.tga", cfg_skyname) precache_generic(buffer) if(cfg_use_fog == 1) { static ent ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_fog")) if(pev_valid(ent)) { DispatchKeyValue(ent, "density", cfg_fog_density) DispatchKeyValue(ent, "rendercolor", cfg_fog_color) DispatchSpawn(ent) } } register_forward(FM_Spawn, "fw_Spawn") } public plugin_end() { UnPatchRoundInfinity() } public server_check() { // Check this every 60 second(s) check_win_con() } public fw_Spawn(iEnt) { if (!pev_valid(iEnt)) return FMRES_IGNORED; static s_szClassName[32], s_iNum pev(iEnt, pev_classname, s_szClassName, 31) for (s_iNum = 0; s_iNum < sizeof g_szObjectiveClassNames; s_iNum++) { if (equal(s_szClassName, g_szObjectiveClassNames[s_iNum])) { engfunc(EngFunc_RemoveEntity, iEnt) return FMRES_SUPERCEDE; } } return FMRES_IGNORED } public client_putinserver(id) { if(!bot_register && is_user_bot(id)) { bot_register = 1 set_task(1.0, "do_register", id) } g_showmenu[id] = true g_escape_point[id] = 0 g_ena_ready_sound[id] = g_ena_background_sound[id] = 1 } public client_disconnect(id) { remove_task(id+TASK_TEAMMSG) check_win_con() } public do_register(id) { RegisterHamFromEntity(Ham_Spawn, id, "fw_Spawn_Post", 1) RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage") RegisterHamFromEntity(Ham_Spawn, id, "fw_PlayerSpawn_Post", 1) RegisterHamFromEntity(Ham_Killed, id, "fw_Killed_Post", 1) RegisterHamFromEntity(Ham_Killed, id, "fw_PlayerKilled_Post", 1) RegisterHamFromEntity(Ham_Player_ResetMaxSpeed, id, "fw_PlayerResetMaxSpeed", 0) if (is_user_alive(id)) fw_PlayerSpawn_Post(id) } // Ham Player Spawn Post Forward public fw_PlayerSpawn_Post(id) { // Not alive or didn't join a team yet if (!is_user_alive(id) || !fm_cs_get_user_team(id)) return; // Last Zombie Check fnCheckLastZombie() } // Ham Player Killed Post Forward public fw_PlayerKilled_Post() { // Last Zombie Check fnCheckLastZombie() } public PatchRoundInfinity() { handleHookCheckMapConditions = OrpheuRegisterHook( OrpheuGetFunction( "CheckMapConditions" , "CHalfLifeMultiplay" ), "CheckConditions" ); handleHookCheckWinConditions = OrpheuRegisterHook( OrpheuGetFunction( "CheckWinConditions" , "CHalfLifeMultiplay" ), "CheckConditions" ); if (is_linux_server()) { handleHookHasRoundTimeExpired = OrpheuRegisterHook( OrpheuGetFunction( "HasRoundTimeExpired" , "CHalfLifeMultiplay" ), "CheckConditions" ); } else { BytesToReplace("roundTimeCheck", { 0x90, 0x90, 0x90 } ); } } public UnPatchRoundInfinity() { OrpheuUnregisterHook( handleHookCheckMapConditions ); OrpheuUnregisterHook( handleHookCheckWinConditions ); if(is_linux_server()) { OrpheuUnregisterHook( handleHookHasRoundTimeExpired ); } else { BytesToReplace("roundTimeCheck", { 0xF6, 0xC4, 0x41 } ); } } public OrpheuHookReturn:CheckConditions () { OrpheuSetReturn(false) return OrpheuSupercede } public OnInstallGameRules() { g_pGameRules = OrpheuGetReturn() } public plugin_modules() { require_module("engine") } public load_config_file() { // Build customization file path new path[64] get_configsdir(path, charsmax(path)) format(path, charsmax(path), "%s/%s", path, CONFIG_FILE) // File not present if (!file_exists(path)) { new error[100] formatex(error, charsmax(error), "[EG] Can't Load Config File: %s!", path) set_fail_state(error) return; } // Set up some vars to hold parsing info new linedata[1024], key[64], value[960], section // Open customization file for reading new file = fopen(path, "rt") while (file && !feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // Blank line or comment if (!linedata[0] || linedata[0] == ';') continue; // New section starting if (linedata[0] == '[') { section++ continue; } // Get key and value(s) strtok(linedata, key, charsmax(key), value, charsmax(value), '=') // Trim spaces trim(key) trim(value) switch (section) { case 1: // Main Config { if (equal(key, "MIN_PLAYER")) cfg_min_player = str_to_num(value) else if (equal(key, "DEFAULT_LIGHT")) copy(cfg_default_light, sizeof(cfg_default_light), value) else if (equal(key, "ZOMBIE_RELEASE_TIME")) cfg_zom_release_time = str_to_num(value) else if (equal(key, "HUMAN_FREEZE_TIME")) cfg_hum_freeze_time = str_to_num(value) else if (equal(key, "ROUND_TIME")) cfg_round_time = str_to_num(value) } case 2: // More Config { if (equal(key, "CALL_BUTTON")) cfg_call_button = str_to_num(value) else if (equal(key, "AERA51_DOOR")) cfg_ze_aera51_lg = str_to_num(value) else if (equal(key, "AERA51_RELEASE")) cfg_release_aera51_lg = str_to_num(value) else if (equal(key, "EXPLO_BOMB")) cfg_explo_bomb = str_to_num(value) } case 3: // Fog { if (equal(key, "FOG_ENABLE")) cfg_use_fog = str_to_num(value) else if (equal(key, "FOG_DENSITY")) copy(cfg_fog_density, sizeof(cfg_fog_density), value) else if (equal(key, "FOG_COLOR")) copy(cfg_fog_color, sizeof(cfg_fog_color), value) } case 4: // Human Config { if (equal(key, "HUMAN_HEALTH")) cfg_human_health = str_to_num(value) else if (equal(key, "HUMAN_ARMOR")) cfg_human_armor = str_to_num(value) else if (equal(key, "HUMAN_GRAVITY")) cfg_human_gravity = str_to_float(value) else if (equal(key, "HUMAN_SPEED")) cfg_human_speed = str_to_float(value) } case 5: // Zombie Config { if (equal(key, "ZOMBIE_HEALTH")) cfg_zombie_health = str_to_num(value) else if (equal(key, "ZOMBIE_ARMOR")) cfg_zombie_armor = str_to_num(value) else if (equal(key, "ZOMBIE_GRAVITY")) cfg_zombie_gravity = str_to_float(value) else if (equal(key, "ZOMBIE_SPEED")) cfg_zombie_speed = str_to_float(value) else if (equal(key, "ZOMBIE_KNOCKBACK_POWER")) cfg_zombie_kbpower = str_to_float(value) } case 6: // Sky { if(equal(key, "SKY_NAME")) copy(cfg_skyname, sizeof(cfg_skyname), value) } case 7: // Model { if (equal(key, "HUMAN_MODEL_ADMIN")) { // Parse sounds while(value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to sounds array ArrayPushString(human_admin, key) } } else if (equal(key, "HUMAN_MODEL")) { // Parse sounds while(value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to sounds array ArrayPushString(human_model, key) } } else if(equal(key, "ZOMBIE_ORIGIN_MODEL")) { // Parse sounds while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to sounds array ArrayPushString(origin_zombie_model, key) } } else if(equal(key, "ZOMBIE_HOST_MODEL")) { // Parse sounds while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to sounds array ArrayPushString(host_zombie_model, key) } } else if(equal(key, "ZOMBIE_CLAW_MODEL")) { // Parse sounds while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to sounds array ArrayPushString(zombie_claws_model, key) } } } case 8: // Sound { if (equal(key, "READY")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(ready_sound, key) } } else if (equal(key, "AMBIENCE")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(ambience_sound, key) } } if (equal(key, "ZOMBIE_APPEAR")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombieappear_sound, key) } } else if (equal(key, "PLAYER_INFECT")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombieinfect_sound, key) } } else if (equal(key, "ZOMBIE_PAIN")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombiepain_sound, key) } } else if (equal(key, "COUNTDOWN")) { copy(count_sound, sizeof(count_sound), value) } else if (equal(key, "ESCAPE_SUCCESS")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(escape_suc_sound, key) } } else if (equal(key, "ESCAPE_FAIL")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(escape_fail_sound, key) } } else if (equal(key, "ATTACK_HIT")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombieattack_sound, key) } } else if (equal(key, "ATTACK_MISS")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombieswing_sound, key) } } else if (equal(key, "ATTACK_WALL")) { // Parse weapons while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ',')) { // Trim spaces trim(key) trim(value) // Add to weapons array ArrayPushString(zombiewall_sound, key) } } } } } if (file) fclose(file) } public plugin_natives() { new map_name[32], check_index get_mapname(map_name, sizeof(map_name)) for(check_index = 0; check_index < sizeof(allow_map_prefix); check_index++) { if(equali(map_name, allow_map_prefix[check_index], strlen(allow_map_prefix[check_index]))) break } if(check_index == sizeof(allow_map_prefix)) return // Check register_native("ze_is_user_zombie", "native_get_zombie", 1) register_native("ze_get_zombie_type", "native_get_zombie_type", 1) // Set register_native("ze_set_user_zombie", "native_set_zombie", 1) register_native("ze_set_user_human", "native_set_human", 1) // GamePlays register_native("ze_set_stopgame", "native_set_stopgame", 1) register_native("ze_reset_gameplay", "native_reset_gameplay", 1) } // End of Plugin & Precache & Config Zone // Native public native_get_zombie(id) { if(!is_user_connected(id)) return 0 if(!is_user_alive(id)) return 0 return g_zombie[id] } public native_get_zombie_type(id) { if(!is_user_connected(id)) return -1 if(!is_user_alive(id)) return -1 return g_zombie_type[id] } public native_set_zombie(id, zombie_type) { if(!is_user_connected(id)) return 0 if(!is_user_alive(id)) return 0 if(g_zombie[id]) return 0 set_user_zombie(id, zombie_type, 1) return 1 } public native_set_human(id) { if(!is_user_connected(id)) return 0 if(!is_user_alive(id)) return 0 set_human_stuff(id) return 0 } public native_set_stopgame(stop_type, stop) { g_gamestop[stop_type] = stop return 1 } public native_reset_gameplay(restart) { g_gamestop[START_TYPE_NEW] = 0 g_gamestop[START_ZOMBIE_APPEAR] = 0 g_gamestop[START_ZOMBIE_RELEASE] = 0 if(restart) TerminateRound(TEAM_START) } // End Of Native // Event: New Round public event_newround() { ExecuteForward(g_forwards[FORWARD_GAMESTART], g_fwDummyResult, g_gamestart) // Reset Vars g_endround = 0 g_gamestart = 0 g_count = cfg_hum_freeze_time g_explo = false // Remove Task remove_task(TASK_COUNTDOWN) remove_task(TASK_COUNTDOWN2) remove_task(TASK_ROUNDTIME) remove_task(1337) remove_task(1437) ambience_sound_stop(0) // Team for(new player = 1; player <= g_MaxPlayers; player++) { remove_task(player+TASK_TEAMMSG) remove_task(player+TASK_AMBIENCE) } if(g_gamestop[START_TYPE_NEW]) return set_task(0.1, "event_newround2") } public event_newround2() { if(get_player_num(TEAM_ALL, AL_ALIVE) < cfg_min_player) { client_printc(0, "!g[EG]!n %L", OFFICIAL_LANG, "NOT_ENOUGH_PLAYER", cfg_min_player) g_started = 0 return } client_printc(0, "!g[EG]!n %L", OFFICIAL_LANG, "GOOD_LUCK") static temp_string[128] ArrayGetString(ready_sound, random_num(0, ArraySize(ready_sound) - 1), temp_string, sizeof(temp_string)) for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(!g_ena_ready_sound[i]) continue PlaySound(i, temp_string) } set_task(1.0, "do_countdown", TASK_COUNTDOWN, _, _, "b") set_task(get_cvar_float("mp_roundtime") * 100.0 + 82.0, "do_zombie_win", TASK_ROUNDTIME) } public do_countdown(taskid) { if(g_endround) { remove_task(taskid) return } if (!g_count) { start_game_now() remove_task(taskid) return } if (g_count <= cfg_hum_freeze_time) { static sound[64] format(sound, sizeof sound - 1, count_sound, g_count) PlaySound(0, sound) } new message[64] format(message, charsmax(message), "%L", OFFICIAL_LANG, "RUN_READY_COUNTDOWN", g_count) client_print(0, print_center, message) g_count-- } // End of Event: New Round // Event: Round End public event_roundend() { g_endround = 1 remove_task(TASK_COUNTDOWN) remove_task(TASK_COUNTDOWN2) for(new i = 0; i < g_MaxPlayers; i++) remove_task(i+TASK_AMBIENCE) remove_task(TASK_ROUNDTIME) ambience_sound_stop(0) } // End of Event: Round End public cmd_jointeam(id) { if(!is_user_connected(id)) return 1 if(cs_get_user_team(id) == CS_TEAM_CT || cs_get_user_team(id) == CS_TEAM_T) { open_game_menu(id) return 1 } return PLUGIN_CONTINUE } public cmd_joinclass(id) { if(!is_user_connected(id)) return 1 if(cs_get_user_team(id) != CS_TEAM_CT || cs_get_user_team(id) != CS_TEAM_T) return 0 if(g_gamestart == 1 || g_gamestart == 2) { fm_cs_set_user_team(id, CS_TEAM_CT, 1) g_zombie[id] = 0 g_zombie_type[id] = 0 g_nvg[id] = 0 g_menufailsafe[id] = false if(TASKID_WEAPONSMENU + id) remove_task(TASKID_WEAPONSMENU + id) } return 0 } public open_game_menu(id) { static menu, string[128] formatex(string, sizeof(string), "\r|| Game Devil ||") menu = menu_create(string, "gamem_handle") // Game Devil Menu formatex(string, sizeof(string), "\wGame Devil Menu") menu_additem(menu, string, "1", 0) // Enable Gun Menu formatex(string, sizeof(string), "\wEnable Gun Menu") menu_additem(menu, string, "2", 0) // Unstuck formatex(string, sizeof(string), "\wUnstuck") menu_additem(menu, string, "3", 0) // Buy Admin formatex(string, sizeof(string), "\yBuy Admin") menu_additem(menu, string, "4", 0) // Camera View formatex(string, sizeof(string), "\wCamera View") menu_additem(menu, string, "5", 0) // Zombie Escape Option formatex(string, sizeof(string), "\wZombie Escape Option") menu_additem(menu, string, "6", 0) // Admin Menu formatex(string, sizeof(string), "\wAdmin Menu") menu_additem(menu, string, "7", 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, menu, 0) } public gamem_handle(id, menu, item) { if(!is_user_connected(id)) return if(item == MENU_EXIT) { menu_destroy(menu) return } new data[6], szName[64]; new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); new key = str_to_num(data); switch(key) { case 1: // Game Devil Menu { client_cmd(id,"gmenu") } case 2: // Enable Gun Menu { g_showmenu[id] = true client_printc(id, "!g[EG]!n %L", OFFICIAL_LANG, "EQUIP_ENABLE") } case 3: // Unstuck { client_cmd(id,"say /unstuck") } case 4: // Buy Admin { client_cmd(id,"say /buy") } case 5: // Camera View { client_cmd(id,"say /cam") } case 6: // Player Config { player_config(id) } case 7: // Admin Menu { client_cmd(id,"aomenu") } } return } // Player Config public player_config(id) { static menu, string[128], on_off[10] formatex(string, sizeof(string), "%L", OFFICIAL_LANG, "PCONFIG_NAME") menu = menu_create(string, "pconfig_handle") // Ready Sound if(g_ena_ready_sound[id]) { formatex(on_off, sizeof(on_off), "%L", OFFICIAL_LANG, "PCONFIG_ON") formatex(string, sizeof(string), "%L \y%s", OFFICIAL_LANG, "PCONFIG_READY_SOUND", on_off) } else { formatex(on_off, sizeof(on_off), "%L", OFFICIAL_LANG, "PCONFIG_OFF") formatex(string, sizeof(string), "%L \r%s", OFFICIAL_LANG, "PCONFIG_READY_SOUND", on_off) } menu_additem(menu, string, "1", 0) // Background Sound if(g_ena_background_sound[id]) { formatex(on_off, sizeof(on_off), "%L", OFFICIAL_LANG, "PCONFIG_ON") formatex(string, sizeof(string), "%L \y%s", OFFICIAL_LANG, "PCONFIG_BACKGROUND_SOUND", on_off) } else { formatex(on_off, sizeof(on_off), "%L", OFFICIAL_LANG, "PCONFIG_OFF") formatex(string, sizeof(string), "%L \r%s", OFFICIAL_LANG, "PCONFIG_BACKGROUND_SOUND", on_off) } menu_additem(menu, string, "2", 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, menu, 0) } public pconfig_handle(id, menu, item) { if(!is_user_connected(id)) return if(item == MENU_EXIT) { menu_destroy(menu) return } new data[6], szName[64]; new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); new key = str_to_num(data); switch(key) { case 1: // Ready Sound { if(g_ena_ready_sound[id]) { g_ena_ready_sound[id] = 0 if(g_gamestart == 0) ambience_sound_stop(id) } else { g_ena_ready_sound[id] = 1 if(g_gamestart == 0) { static temp_string[128] ArrayGetString(ready_sound, random_num(0, ArraySize(ready_sound) - 1), temp_string, sizeof(temp_string)) PlaySound(id, temp_string) } } player_config(id) } case 2: // Background Sound { if(g_ena_background_sound[id]) { g_ena_background_sound[id] = 0 if(g_gamestart > 0) ambience_sound_stop(id) } else { g_ena_background_sound[id] = 1 if(g_gamestart > 0) { static temp_string[128] ArrayGetString(ambience_sound, random_num(0, ArraySize(ambience_sound) - 1), temp_string, sizeof(temp_string)) PlaySound(id, temp_string) set_task(182.0, "check_ambience_sound", id+TASK_AMBIENCE, _, _, "b") } } player_config(id) } } } // NightVision public cmd_nightvision(id) { if (!is_user_alive(id) || !g_zombie[id]) return PLUGIN_HANDLED; if (!g_nvg[id]) { //SwitchNvg(id, 1) PlaySound(id, sound_nvg[1]) } else { //SwitchNvg(id, 0) PlaySound(id, sound_nvg[0]) } return PLUGIN_CONTINUE } public SwitchNvg(id, mode) { if (!is_user_connected(id)) return; g_nvg[id] = mode set_user_nvision(id) } public set_user_nvision(id) { if (!is_user_connected(id)) return; new alpha if (g_nvg[id]) alpha = 70 else alpha = 0 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), _, id) write_short(0) // duration write_short(0) // hold time write_short(0x0004) // fade type write_byte(190) // r 253 write_byte(190) // g 110 write_byte(190) // b 110 write_byte(alpha) // alpha message_end() if(g_nvg[id]) { set_player_light(id, "z") } else { set_player_light(id, cfg_default_light) } } public set_player_light(id, const LightStyle[]) { message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, .player = id) write_byte(0) write_string(LightStyle) message_end() } // End of NightVision public explo_bomb_info(ent, id, activator, iType, Float:fValue) { static targetName[32] pev(ent, pev_targetname, targetName, 31) if(equal(targetName, "hurtheli")) { return PLUGIN_HANDLED } if(!g_explo && cfg_explo_bomb == 1) { ColorChat(0, GREEN, "[EG] ^1 *** The Bomb Has Been Exploded ***") set_task(10.0, "terminate_round", 1337) g_explo = true } return PLUGIN_CONTINUE } public terminate_round() { ColorChat(0, GREEN, "[EG] ^1 *** Auto End Round After Bomb Explosion ***") TerminateRound(TEAM_START) } public open_door_c(id) { ColorChat(0, GREEN, "[EG] ^1 3rd Door Is Now Opened ^4!") while ((hasents = find_ent_by_target(hasents, "c"))) { dllfunc(DLLFunc_Use, hasents, 0) } } public open_door_d(id) { ColorChat(0, GREEN, "[EG] ^1 4rd Door Is Now Opened ^4!") button_d = true while ((hasents = find_ent_by_target(hasents, "d"))) { dllfunc(DLLFunc_Use, hasents, 0) } } public Event_RoundStart() { HasUsedButton = false block = false } public fwButtonUsed(ent, id, activator, iType, Float:fValue) { if(cfg_call_button == 1) { static targetName[32] pev(ent, pev_targetname, targetName, 31) if(equal(targetName, "hurtheli") || equal(targetName, "sz_level")) { return PLUGIN_HANDLED } if(block && ent == RequiredEnt) { ColorChat(id, GREEN, "[EG] ^1Call Button Is Currently Off ^4!") return 4; } else if(!HasUsedButton && ent == RequiredEnt) { new szName[33]; get_user_name(id, szName, charsmax(szName)) ColorChat(0, GREEN, "[EG] ^1Player ^4%s ^1Press The Call Button !", szName) client_cmd(id,"get_xp") HasUsedButton = true } } return 1; } stock fm_get_brush_entity_origins(index, Float:origin[3]) { new Float:mins[3], Float:maxs[3]; pev(index, pev_origin, origin); pev(index, pev_mins, mins); pev(index, pev_maxs, maxs); origin[0] += (mins[0] + maxs[0]) * 0.5; origin[1] += (mins[1] + maxs[1]) * 0.5; origin[2] += (mins[2] + maxs[2]) * 0.5; return 1; } public call_off(id) block = true, HasUsedButton = true public call_on(id) block = false, HasUsedButton = false // Start Game public start_game_now() { g_gamestart = 1 static temp_string[128] ArrayGetString(ambience_sound, random_num(0, ArraySize(ambience_sound) - 1), temp_string, sizeof(temp_string)) for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(!g_ena_background_sound[i]) continue PlaySound(i, temp_string) set_task(182.0, "check_ambience_sound", i+TASK_AMBIENCE, _, _, "b") } if(g_gamestop[START_ZOMBIE_APPEAR]) { ExecuteForward(g_forwards[FORWARD_GAMESTART], g_fwDummyResult, g_gamestart) return } // Make Zombies for(new i = 0; i < require_zombie(); i++) { ExecuteForward(g_forwards[FORWARD_INFECTED], g_fwDummyResult, i, 0) set_user_zombie(get_random_player(TEAM_CT, AL_ALIVE), ZOMBIE_TYPE_ORIGIN, 0) } g_count = cfg_zom_release_time set_task(1.0, "do_count_rezombie", TASK_COUNTDOWN2, _, _, "b") for(new i = 0; i < g_MaxPlayers; i++) { if(is_user_connected(i) && is_user_alive(i) && !g_zombie[i]) { fm_reset_user_speed(i) fm_set_user_speed(i, cfg_human_speed) set_user_gravity(i, cfg_human_gravity) } } ExecuteForward(g_forwards[FORWARD_GAMESTART], g_fwDummyResult, g_gamestart) } public check_ambience_sound(id) { id -= TASK_AMBIENCE if(g_endround) { remove_task(id+TASK_AMBIENCE) return } if(!g_ena_background_sound[id]) { remove_task(id+TASK_AMBIENCE) return } static temp_string[128] ArrayGetString(ambience_sound, random_num(0, ArraySize(ambience_sound) - 1), temp_string, sizeof(temp_string)) PlaySound(id, temp_string) } public do_count_rezombie(taskid) { if(g_endround) { remove_task(taskid) return } if (!g_count) { release_zombie() remove_task(taskid) return } set_hudmessage(255, 255, 0, -1.0, 0.21, 1, 2.0, 2.0) ShowSyncHudMsg(0, notice_hud, "%L", OFFICIAL_LANG, "ZOMBIE_RELEASE_COUNTDOWN", g_count) g_count-- } // End of Start Game // Game Main public release_zombie() { g_gamestart = 2 if(g_gamestop[START_ZOMBIE_RELEASE]) { ExecuteForward(g_forwards[FORWARD_GAMESTART], g_fwDummyResult, g_gamestart) return } for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i) || !is_user_alive(i)) continue if(!g_zombie[i]) continue fm_set_user_speed(i, cfg_zombie_speed) set_user_gravity(i, cfg_zombie_gravity) } ExecuteForward(g_forwards[FORWARD_GAMESTART], g_fwDummyResult, g_gamestart) } public client_PostThink(id) { if(!is_user_connected(id)) return if(get_gametime() - 1.0 > delay_hud[id]) { // Show Score set_hudmessage(255, 255, 255, -1.0, 0.0, 0, 2.0, 2.0) ShowSyncHudMsg(id, score_hud, "%L", OFFICIAL_LANG, "HUD_SCORE", g_team_score[TEAM_T], g_team_score[TEAM_CT]) // Add Point for Who is Running Fast if(!g_zombie[id]) { static Float:Velocity[3], Speed pev(id, pev_velocity, Velocity) Speed = floatround(vector_length(Velocity)) switch(Speed) { case 210..229: g_escape_point[id] += 1 case 230..249: g_escape_point[id] += 2 case 250..300: g_escape_point[id] += 3 } } // Show Stat show_stat(id) delay_hud[id] = get_gametime() } if(!g_gamestart) { if(!is_user_connected(id) || !is_user_alive(id)) return if(cs_get_user_team(id) != CS_TEAM_CT) { set_human_stuff(id) } } else { if(cs_get_user_team(id) == CS_TEAM_T && !g_zombie[id]) { set_human_stuff(id) } } } public show_stat(id) { get_stat() new temp_string_first[64], temp_string_second[64], temp_string_third[64], curid, Player_Name[64], none[32] new players_ct[32], players_t[32], ict, ite get_players(players_ct,ict,"ae","CT") get_players(players_t,ite,"ae","TERRORIST") formatex(none, sizeof(none), "%L", OFFICIAL_LANG, "RANK_NONE") // Rank First curid = g_escape_rank[RANK_FIRST] if(is_user_alive(curid) && !g_zombie[curid] && g_escape_point[curid] != 0) { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_first, sizeof(temp_string_first), "%L", OFFICIAL_LANG, "RANK_FIRST", Player_Name) } else { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_first, sizeof(temp_string_first), "%L", OFFICIAL_LANG, "RANK_FIRST", none) } // Rank Second curid = g_escape_rank[RANK_SECOND] if(is_user_alive(curid) && !g_zombie[curid] && g_escape_point[curid] != 0) { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_second, sizeof(temp_string_second), "%L", OFFICIAL_LANG, "RANK_SECOND", Player_Name) } else { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_second, sizeof(temp_string_second), "%L", OFFICIAL_LANG, "RANK_SECOND", none) } // Rank Third curid = g_escape_rank[RANK_THIRD] if(is_user_alive(curid) && !g_zombie[curid] && g_escape_point[curid] != 0) { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_third, sizeof(temp_string_third), "%L", OFFICIAL_LANG, "RANK_THIRD", Player_Name) } else { get_user_name(curid, Player_Name, sizeof(Player_Name)) formatex(temp_string_third, sizeof(temp_string_third), "%L", OFFICIAL_LANG, "RANK_THIRD", none) } set_hudmessage(0, 255, 0, -0.05, 0.20, 0, 2.0, 2.0) ShowSyncHudMsg(id, stat_hud, "Human: %d | Zombie: %d^n^n%L^n^n%s^n%s^n%s",ict, ite, OFFICIAL_LANG, "RANK_INFO", temp_string_first, temp_string_second, temp_string_third) } public get_stat() { static highest, current highest = current = 0 // Rank First for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(!is_user_alive(i)) continue if(g_zombie[i]) continue if(g_escape_point[i] > highest) { current = i highest = g_escape_point[i] } } g_escape_rank[RANK_FIRST] = current // Rank Second highest = current = 0 for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(!is_user_alive(i)) continue if(g_zombie[i]) continue if(g_escape_rank[RANK_FIRST] == i) continue if(g_escape_point[i] > highest) { current = i highest = g_escape_point[i] } } g_escape_rank[RANK_SECOND] = current // Rank Third highest = current = 0 for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(!is_user_alive(i)) continue if(g_zombie[i]) continue if(g_escape_rank[RANK_FIRST] == i || g_escape_rank[RANK_SECOND] == i) continue if(g_escape_point[i] > highest) { current = i highest = g_escape_point[i] } } g_escape_rank[RANK_THIRD] = current } public set_user_zombie(id, zombie_type, forward_exec) { fm_cs_set_user_team(id, CS_TEAM_T, 1) g_zombie[id] = 1 g_zombie_type[id] = zombie_type set_user_health(id, zombie_type == 0 ? floatround(float(cfg_zombie_health) / 2.0) : cfg_zombie_health) set_user_armor(id, cfg_zombie_armor) if(zombie_type == ZOMBIE_TYPE_HOST) { fm_set_user_speed(id, cfg_zombie_speed) set_user_gravity(id, cfg_zombie_gravity) } else { if(!forward_exec) fm_set_user_speed(id, 0.1) else fm_set_user_speed(id, cfg_zombie_speed) set_user_gravity(id, cfg_zombie_gravity) } static temp_string[128], temp_string2[128], random1 if(!zombie_type) // Host { random1 = random_num(0, ArraySize(origin_zombie_model) - 1) ArrayGetString(host_zombie_model, random1, temp_string, sizeof(temp_string)) fm_cs_set_user_model(id, temp_string) #if defined SET_MODELINDEX_OFFSET static modelindex modelindex = ArrayGetCell(host_zombie_modelindex, random1) fm_cs_set_user_model_index(id, modelindex) #endif } else { // Origin random1 = random_num(0, ArraySize(origin_zombie_model) - 1) ArrayGetString(origin_zombie_model, random1, temp_string, sizeof(temp_string)) fm_cs_set_user_model(id, temp_string) #if defined SET_MODELINDEX_OFFSET static modelindex modelindex = ArrayGetCell(origin_zombie_modelindex, random1) fm_cs_set_user_model_index(id, modelindex) #endif PlaySound(id, sound_nvg[1]) SwitchNvg(id, 0) //client_cmd(id, "amx_alicea") } set_default_zombie(id, zombie_type) ArrayGetString(zombieinfect_sound, random_num(0, ArraySize(zombieinfect_sound) - 1), temp_string, sizeof(temp_string)) ArrayGetString(zombieappear_sound, random_num(0, ArraySize(zombieappear_sound) - 1), temp_string2, sizeof(temp_string2)) emit_sound(id, CHAN_BODY, temp_string, 1.0, ATTN_NORM, 0, PITCH_NORM) PlaySound(0, temp_string2) check_win_con() fnCheckLastZombie() } stock set_default_zombie(id, zombie_type) { if(!is_user_alive(id)) return if(!g_zombie[id]) return // Set Spawn Origin if(zombie_type == ZOMBIE_TYPE_ORIGIN) set_pev(id, pev_origin, g_spawn_origin[id]) // Remove any zoom (bugfix) cs_set_user_zoom(id, CS_RESET_ZOOM, 1) // Remove armor cs_set_user_armor(id, 0, CS_ARMOR_NONE) // Drop weapons when infected drop_weapons(id, 1) drop_weapons(id, 2) // Strip zombies from guns and give them a knife strip_user_weapons(id) give_item(id, "weapon_knife") set_user_rendering(id) } public event_CurWeapon(id) { if(!is_user_alive(id)) return 1 if(!g_zombie[id]) return 1 if(get_user_weapon(id) != CSW_KNIFE) { drop_weapons(id, 1) drop_weapons(id, 2) engclient_cmd(id, "weapon_knife") } else { static temp_string[128] ArrayGetString(zombie_claws_model, random_num(0, ArraySize(zombie_claws_model) - 1), temp_string, sizeof(temp_string)) set_pev(id, pev_viewmodel2, temp_string) set_pev(id, pev_weaponmodel2, "") } return 0 } // End of Game Main public check_win_con() { if(g_endround) return if(!g_gamestart) return if(get_player_num(TEAM_T, AL_ALIVE) == 0) { TerminateRound(TEAM_CT) } else if(get_player_num(TEAM_CT, AL_ALIVE) == 0) { TerminateRound(TEAM_T) } } public do_zombie_win() { TerminateRound(TEAM_T) } // Message public message_StatusIcon(msg_id, msg_dest, msg_entity) { static szMsg[8]; get_msg_arg_string(2, szMsg ,7); if(equal(szMsg, "buyzone") && get_msg_arg_int(1)) { set_pdata_int(msg_entity, 235, get_pdata_int(msg_entity, 235) & ~(1<<0)); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public message_health(msg_id, msg_dest, msg_entity) { static health health = get_msg_arg_int(1) if(health > 255) set_msg_arg_int(1, get_msg_argtype(1), 255) } // End of Message // Ham public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { // Block all those unneeeded hostage sounds if (sample[0] == 'h' && sample[1] == 'o' && sample[2] == 's' && sample[3] == 't' && sample[4] == 'a' && sample[5] == 'g' && sample[6] == 'e') return FMRES_SUPERCEDE; // Replace these next sounds for zombies only if (!is_user_connected(id) || !g_zombie[id]) return FMRES_IGNORED; static temp_string[128] // Zombie being hit if (sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't' || sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd'){ ArrayGetString(zombiepain_sound, random_num(0, ArraySize(zombiepain_sound) - 1), temp_string, sizeof(temp_string)) emit_sound(id, channel, temp_string, volume, attn, flags, pitch) return FMRES_SUPERCEDE; } // Zombie Attack new attack_type if (equal(sample,"weapons/knife_hitwall1.wav")) attack_type = 1 else if (equal(sample,"weapons/knife_hit1.wav") || equal(sample,"weapons/knife_hit3.wav") || equal(sample,"weapons/knife_hit2.wav") || equal(sample,"weapons/knife_hit4.wav") || equal(sample,"weapons/knife_stab.wav")) attack_type = 2 else if(equal(sample,"weapons/knife_slash1.wav") || equal(sample,"weapons/knife_slash2.wav")) attack_type = 3 if (attack_type) { if (attack_type == 1) { ArrayGetString(zombiewall_sound, random_num(0, ArraySize(zombiewall_sound) - 1), temp_string, sizeof(temp_string)) emit_sound(id, channel, temp_string, volume, attn, flags, pitch) } else if (attack_type == 2) { ArrayGetString(zombieattack_sound, random_num(0, ArraySize(zombieattack_sound) - 1), temp_string, sizeof(temp_string)) emit_sound(id, channel, temp_string, volume, attn, flags, pitch) } else if (attack_type == 3) { ArrayGetString(zombieswing_sound, random_num(0, ArraySize(zombieswing_sound) - 1), temp_string, sizeof(temp_string)) emit_sound(id, channel, temp_string, volume, attn, flags, pitch) } return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public fw_GetGameDesc() { static GameName[64] formatex(GameName, sizeof(GameName), "%s %s", PLUGIN, VERSION) forward_return(FMV_STRING, GameName) return FMRES_SUPERCEDE } public fw_SetClientKeyValue(id, const infobuffer[], const key[]) { // Block CS model changes if (key[0] == 'm' && key[1] == 'o' && key[2] == 'd' && key[3] == 'e' && key[4] == 'l') return FMRES_SUPERCEDE; return FMRES_IGNORED; } public fw_Spawn_Post(id) { if (get_player_num(TEAM_ALL, AL_ALIVE) > 1 && !g_started) { g_started = 1 TerminateRound(TEAM_START) } if(!is_user_connected(id)) return HAM_IGNORED // Get Your Origin pev(id, pev_origin, g_spawn_origin[id]) if(g_gamestart) { set_user_zombie(id, ZOMBIE_TYPE_ORIGIN, g_gamestart == 2 ? 1 : 0) return HAM_IGNORED } fm_cs_set_user_team(id, CS_TEAM_CT, 1) g_Glows(id) g_zombie[id] = 0 g_zombie_type[id] = 0 g_nvg[id] = 0 g_menufailsafe[id] = false g_escape_point[id] = 0 if(TASKID_WEAPONSMENU + id) remove_task(TASKID_WEAPONSMENU + id) set_task(random_float(0.1, 0.5), "set_user_nvision", id) set_human_stuff(id) if(g_showmenu[id]) display_equipmenu(id) else { equipweapon(id, EQUIP_ALL) } return HAM_HANDLED } public display_equipmenu(id) { static menubody[512], len len = formatex(menubody, 511, "\y%L^n^n", OFFICIAL_LANG, "WPNMENU_NAME") static bool:hasweap hasweap = ((g_player_weapons[id][0]) != -1 && (g_player_weapons[id][1] != -1)) ? true : false len += formatex(menubody[len], 511 - len,"\r1. \w%L^n", OFFICIAL_LANG, "MENU_NEW_WEAPON") len += formatex(menubody[len], 511 - len,"\r2. \w%L^n^n", OFFICIAL_LANG, "MENU_PRE_WEAPON") len += formatex(menubody[len], 511 - len,"\r3. \w%L^n^n", OFFICIAL_LANG, "MENU_PRE_DONTSHOW") len += formatex(menubody[len], 511 - len,"\r5. \w%L^n", OFFICIAL_LANG, "MENU_EXIT") static keys keys = (MENU_KEY_1|MENU_KEY_5) if(hasweap) keys |= (MENU_KEY_2|MENU_KEY_3) static string[128] formatex(string, sizeof(string), "%L", OFFICIAL_LANG, "EQUIPMENT_NAME") show_menu(id, keys, menubody, -1, string) } public action_equip(id, key) { if(!is_user_alive(id) || g_zombie[id]) return PLUGIN_HANDLED switch(key) { case 0: display_weaponmenu(id, 1, g_menuposition[id] = 0) case 1: equipweapon(id, EQUIP_ALL) case 2: { g_showmenu[id] = false equipweapon(id, EQUIP_ALL) client_printc(id, "!g[EG] !n %L", OFFICIAL_LANG, "HOW_ENA_EQUIPMENU") } } if(key > 0) { g_menufailsafe[id] = false remove_task(TASKID_WEAPONSMENU + id) } return PLUGIN_HANDLED } public display_weaponmenu(id, menuid, pos) { if(pos < 0 || menuid < 0) return static start start = pos * 8 static maxitem maxitem = menuid == 1 ? sizeof g_primaryweapons : sizeof g_secondaryweapons if(start >= maxitem) start = pos = g_menuposition[id] static menubody[512], len, primary[64], secondary[64] formatex(primary, sizeof(primary), "%L", OFFICIAL_LANG, "WPN_PRIMARY") formatex(secondary, sizeof(secondary), "%L", OFFICIAL_LANG, "WPN_SECONDARY") len = formatex(menubody, 511, "\r%s\w^n^n", menuid == 1 ? primary : secondary) static end end = start + 8 if(end > maxitem) end = maxitem static keys keys = MENU_KEY_0 static a, b b = 0 static string_next[32], string_back[32], string_exit[32] formatex(string_next, sizeof(string_next), "%L", OFFICIAL_LANG, "MENU_NEXT") formatex(string_back, sizeof(string_back), "%L", OFFICIAL_LANG, "MENU_BACK") formatex(string_exit, sizeof(string_exit), "%L", OFFICIAL_LANG, "MENU_EXIT") for(a = start; a < end; ++a) { keys |= (1<<b) len += formatex(menubody[len], 511 - len,"\r%d. \w%s^n", ++b, menuid == 1 ? g_primaryweapons[a][0]: g_secondaryweapons[a][0]) } if(end != maxitem) { formatex(menubody[len], 511 - len, "^n9. %s^n0. %s", string_next, pos ? string_back : string_exit) keys |= MENU_KEY_9 } else formatex(menubody[len], 511 - len, "^n0. %s", pos ? string_back : string_exit) show_menu(id, keys, menubody, -1, menuid == 1 ? primary : secondary) } public action_prim(id, key) { if(!is_user_alive(id) || g_zombie[id]) return PLUGIN_HANDLED switch(key) { case 8: display_weaponmenu(id, 1, ++g_menuposition[id]) case 9: display_weaponmenu(id, 1, --g_menuposition[id]) default:{ g_player_weapons[id][0] = g_menuposition[id] * 8 + key equipweapon(id, EQUIP_PRI) display_weaponmenu(id, 2, g_menuposition[id] = 0) } } return PLUGIN_HANDLED } public action_sec(id, key) { if(!is_user_alive(id) || g_zombie[id]) return PLUGIN_HANDLED switch(key) { case 8: display_weaponmenu(id, 2, ++g_menuposition[id]) case 9: display_weaponmenu(id, 2, --g_menuposition[id]) default:{ g_menufailsafe[id] = false remove_task(TASKID_WEAPONSMENU + id) g_player_weapons[id][1] = g_menuposition[id] * 8 + key equipweapon(id, EQUIP_SEC) equipweapon(id, EQUIP_GREN) } } return PLUGIN_HANDLED } public set_human_stuff(id) { fm_cs_set_user_team(id, CS_TEAM_CT, 1) g_zombie[id] = 0 g_zombie_type[id] = 0 set_user_health(id, cfg_human_health) set_user_armor(id, cfg_human_armor) if(get_user_flags(id) & ADMIN_KICK) set_task(random_float(0.1, 0.2), "do_set_human_model_admin", id) else set_task(random_float(0.1, 0.2), "do_set_human_model", id) if(g_gamestart < 1) { fm_set_user_speed(id, 0.1) } else { fm_set_user_speed(id, cfg_human_speed) } ExecuteForward(g_forwards[FORWARD_HUMANIZED], g_fwDummyResult, id) } public do_set_human_model_admin(id) { static model[128], random1 random1 = random_num(0, ArraySize(human_admin) - 1) ArrayGetString(human_admin, random1, model, sizeof(model)) fm_cs_set_user_model(id, model) #if defined SET_MODELINDEX_OFFSET static modelindex modelindex = ArrayGetCell(human_admin_modelindex, random1) fm_cs_set_user_model_index(id, modelindex) #endif } public do_set_human_model(id) { static model[128], random1 random1 = random_num(0, ArraySize(human_model) - 1) ArrayGetString(human_model, random1, model, sizeof(model)) fm_cs_set_user_model(id, model) #if defined SET_MODELINDEX_OFFSET static modelindex modelindex = ArrayGetCell(human_modelindex, random1) fm_cs_set_user_model_index(id, modelindex) #endif } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits) { if(g_gamestart < 2) return HAM_SUPERCEDE if(!is_user_connected(victim) || !is_user_connected(attacker)) return HAM_IGNORED if(!g_zombie[victim] && !g_zombie[attacker]) return HAM_SUPERCEDE if(g_zombie[victim] && g_zombie[attacker]) return HAM_SUPERCEDE // Last human or not an infection round if (fnGetHumans() == 1) return HAM_IGNORED; // human is killed if(g_zombie[attacker] && get_user_weapon(attacker) == CSW_KNIFE) { if(damagebits == DMG_GRENADE) return HAM_SUPERCEDE OrpheuCall(OrpheuGetFunctionFromObject(g_pGameRules,"DeathNotice","CGameRules"), g_pGameRules, victim, attacker, inflictor) FixDeadAttrib(victim) update_frags(attacker, 1) update_deaths(victim, 1) if(cfg_release_aera51_lg == 1) cmd_infected(victim) set_user_zombie(victim, ZOMBIE_TYPE_HOST, 0) ExecuteForward(g_forwards[FORWARD_INFECTED], g_fwDummyResult, victim, attacker) } else if(g_zombie[victim] && !g_zombie[attacker]) { set_pdata_float(victim, 108, 1.0, 50) static Float:MyOrigin[3] pev(attacker, pev_origin, MyOrigin) hook_ent2(victim, MyOrigin, cfg_zombie_kbpower, 2) } return HAM_HANDLED } public update_frags(id, frag) { if(!is_user_connected(id)) return set_pev(id, pev_frags, float(pev(id, pev_frags) + frag)) message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo")) write_byte(id) // id write_short(pev(id, pev_frags)) // frags write_short(cs_get_user_deaths(id)) // deaths write_short(0) // class? write_short(get_pdata_int(id, 114, 5)) // team message_end() } public update_deaths(id, death) { if(!is_user_connected(id)) return cs_set_user_deaths(id, cs_get_user_deaths(id) + death) message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo")) write_byte(id) // id write_short(pev(id, pev_frags)) // frags write_short(cs_get_user_deaths(id)) // deaths write_short(0) // class? write_short(get_pdata_int(id, 114, 5)) // team message_end() } public fw_Killed_Post(id) { check_win_con() } public fw_PlayerResetMaxSpeed(id) { if(!g_zombie[id]) return HAM_IGNORED return HAM_SUPERCEDE } public fw_TouchWeapon(weapon, id) { // Not a player if (!is_user_connected(id)) return HAM_IGNORED if (g_zombie[id]) return HAM_SUPERCEDE return HAM_IGNORED } // End of Ham // Ambience Sounds Stop Task public ambience_sound_stop(id) { if(id == 0) { client_cmd(0, "mp3 stop; stopsound") } else { if(!is_user_connected(id)) return client_cmd(id, "mp3 stop; stopsound") } } // ============================ STOCK ================================= stock get_player_num(team, alive) { static player_num player_num = 0 for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(alive == AL_NOT) { if(is_user_alive(i)) continue } else if(alive == AL_ALIVE) { if(!is_user_alive(i)) continue } if(team == TEAM_ALL) { if(cs_get_user_team(i) == CS_TEAM_UNASSIGNED || cs_get_user_team(i) == CS_TEAM_SPECTATOR) continue } else if(team == TEAM_T) { if(cs_get_user_team(i) != CS_TEAM_T) continue } else if(team == TEAM_CT) { if(cs_get_user_team(i) != CS_TEAM_CT) continue } player_num++ } return player_num } stock get_random_player(team, alive) { static list_player[33], list_player_num static total_player total_player = get_player_num(team, alive) for(new i = 0; i < total_player; i++) list_player[i] = 0 list_player_num = 0 for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i)) continue if(alive == AL_NOT) { if(is_user_alive(i)) continue } else if(alive == AL_ALIVE) { if(!is_user_alive(i)) continue } if(team == TEAM_ALL) { if(cs_get_user_team(i) == CS_TEAM_UNASSIGNED || cs_get_user_team(i) == CS_TEAM_SPECTATOR) continue } else if(team == TEAM_T) { if(cs_get_user_team(i) != CS_TEAM_T) continue } else if(team == TEAM_CT) { if(cs_get_user_team(i) != CS_TEAM_CT) continue } list_player[list_player_num] = i list_player_num++ } static random_player; random_player = 0 random_player = list_player[random_num(0, list_player_num - 1)] return random_player } stock PlaySound(id, const sound[]) { if(id == 0) { if (equal(sound[strlen(sound)-4], ".mp3")) client_cmd(0, "mp3 play ^"sound/%s^"", sound) else client_cmd(0, "spk ^"%s^"", sound) } else { if(is_user_connected(id)&& is_user_alive(id)) { if (equal(sound[strlen(sound)-4], ".mp3")) client_cmd(id, "mp3 play ^"sound/%s^"", sound) else client_cmd(id, "spk ^"%s^"", sound) } } } stock client_printc(index, const text[], any:...) { new szMsg[128]; vformat(szMsg, sizeof(szMsg) - 1, text, 3); replace_all(szMsg, sizeof(szMsg) - 1, "!g", "^x04"); replace_all(szMsg, sizeof(szMsg) - 1, "!n", "^x01"); replace_all(szMsg, sizeof(szMsg) - 1, "!t", "^x03"); if(index == 0) { for(new i = 0; i < g_MaxPlayers; i++) { if(is_user_alive(i) && is_user_connected(i)) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, i); write_byte(i); write_string(szMsg); message_end(); } } } else { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, index); write_byte(index); write_string(szMsg); message_end(); } } stock require_zombie() { switch(get_player_num(TEAM_CT, 1)) { case 2..5: return 1 case 6..15: return 2 case 16..25: return 3 case 26..32: return 4 } return 0 } stock check_spawn(Float:Origin[3]) { new Float:originE[3], Float:origin1[3], Float:origin2[3] new ent = -1 while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "player")) != 0) { pev(ent, pev_origin, originE) // xoy origin1 = Origin origin2 = originE origin1[2] = origin2[2] = 0.0 if (vector_distance(origin1, origin2) <= 2 * 16.0) { // oz origin1 = Origin origin2 = originE origin1[0] = origin2[0] = origin1[1] = origin2[1] = 0.0 if (vector_distance(origin1, origin2) <= 72.0) return 0; } } return 1 } // Drop primary/secondary weapons stock drop_weapons(id, dropwhat) { // Get user weapons static weapons[32], num, i, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Weapon bitsums const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) // Loop through them and drop primaries or secondaries for (i = 0; i < num; i++) { // Prevent re-indexing the array weaponid = weapons[i] if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) { // Get weapon entity static wname[32], weapon_ent get_weaponname(weaponid, wname, charsmax(wname)) weapon_ent = fm_find_ent_by_owner(-1, wname, id) // Hack: store weapon bpammo on PEV_ADDITIONAL_AMMO set_pev(weapon_ent, pev_iuser1, cs_get_user_bpammo(id, weaponid)) // Player drops the weapon and looses his bpammo engclient_cmd(id, "drop", wname) cs_set_user_bpammo(id, weaponid, 0) } } } stock BytesToReplace ( identifier[], const bytes[], const bytesLength = sizeof bytes ) { new address; OrpheuMemoryGet( identifier, address ); for ( new i; i < bytesLength; i++) { OrpheuMemorySetAtAddress( address, "roundTimeCheck|dummy", 1, bytes[ i ], address ); address++; } server_cmd( "sv_restart 1" ); } stock bool:TerminateRound(team) { new winStatus; new event; new sound[64]; switch(team) { case TEAM_T: { winStatus = 2; event = 9; ArrayGetString(escape_fail_sound, random_num(0, ArraySize(escape_fail_sound) - 1), sound, sizeof(sound)) g_team_score[TEAM_T]++ client_print(0, print_center, "%L", OFFICIAL_LANG, "ESCAPE_FAIL") } case TEAM_CT: { winStatus = 1; event = 8; ArrayGetString(escape_suc_sound, random_num(0, ArraySize(escape_suc_sound) - 1), sound, sizeof(sound)) g_team_score[TEAM_CT]++ client_print(0, print_center, "%L", OFFICIAL_LANG, "ESCAPE_SUCCESS") } case TEAM_ALL: { winStatus = 3; event = 10; sound = "radio/rounddraw.wav"; client_print(0, print_center, "%L", OFFICIAL_LANG, "ESCAPE_DRAW") } case TEAM_START: { winStatus = 3; event = 10; client_print(0, print_center, "%L", OFFICIAL_LANG, "ESCAPE_DRAW") } default:{ return false; } } g_endround = 1 EndRoundMessage(g_WinText[team], event) RoundTerminating(winStatus, team == TEAM_START ? 3.0 : 5.0) PlaySound(0, sound) for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_connected(i) || !is_user_alive(i)) continue if(g_zombie[i]) { update_deaths(i, 1) } else { update_frags(i, 3) g_escape_point[i] += 5 } } ExecuteForward(g_forwards[FORWARD_ROUNDEND], g_fwDummyResult, team) return true; } stock RoundTerminating( const winStatus, const Float:delay ) { set_mp_pdata("m_iRoundWinStatus" , winStatus ); set_mp_pdata("m_fTeamCount" , get_gametime() + delay ); set_mp_pdata("m_bRoundTerminating", true ); } stock EndRoundMessage( const message[], const event, const bool:notifyAllPlugins = false ) { static OrpheuFunction:handleFuncEndRoundMessage; if ( !handleFuncEndRoundMessage ) { handleFuncEndRoundMessage = OrpheuGetFunction( "EndRoundMessage" ); } ( notifyAllPlugins ) ? OrpheuCallSuper( handleFuncEndRoundMessage, message, event ) : OrpheuCall( handleFuncEndRoundMessage, message, event ); } stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type) { static Float:fl_Velocity[3] static Float:EntOrigin[3] pev(ent, pev_origin, EntOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin) new Float:fl_Time = distance_f / speed if(type == 1) { fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time } else if(type == 2) { fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time } entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) } stock equipweapon(id, weapon) { if(!is_user_alive(id) || !is_user_connected(id)) return static weaponid[2], weaponent if(weapon & EQUIP_PRI) { weaponent = fm_lastprimary(id) weaponid[1] = get_weaponid(g_primaryweapons[g_player_weapons[id][0]][1]) if(pev_valid(weaponent)) { weaponid[0] = fm_get_weapon_id(weaponent) if(weaponid[0] != weaponid[1]) fm_strip_user_gun(id, weaponid[0]) } else weaponid[0] = -1 if(weaponid[0] != weaponid[1]) give_item(id, g_primaryweapons[g_player_weapons[id][0]][1]) cs_set_user_bpammo(id, weaponid[1], g_weapon_ammo[weaponid[1]][1]) } if(weapon & EQUIP_SEC) { weaponent = fm_lastsecondry(id) weaponid[1] = get_weaponid(g_secondaryweapons[g_player_weapons[id][1]][1]) if(pev_valid(weaponent)) { weaponid[0] = fm_get_weapon_id(weaponent) if(weaponid[0] != weaponid[1]) fm_strip_user_gun(id, weaponid[0]) } else weaponid[0] = -1 if(weaponid[0] != weaponid[1]) give_item(id, g_secondaryweapons[g_player_weapons[id][1]][1]) cs_set_user_bpammo(id, weaponid[1], g_weapon_ammo[weaponid[1]][1]) } if(weapon & EQUIP_GREN) { static i for(i = 0; i < sizeof g_grenades; i++) if(!user_has_weapon(id, get_weaponid(g_grenades[i]))) give_item(id, g_grenades[i]) } } // Set a Player's Team stock fm_cs_set_user_team(id, CsTeams:team, send_message) { // Prevent server crash if entity's private data not initalized if (pev_valid(id) != PDATA_SAFE) return; // Already belongs to the team if (cs_get_user_team(id) == team) return; // Remove previous team message task remove_task(id+TASK_TEAMMSG) // Set team offset set_pdata_int(id, OFFSET_CSTEAMS, _:team) // Send message to update team? if (send_message) fm_user_team_update(id) } // Send User Team Message (Note: this next message can be received by other plugins) public fm_cs_set_user_team_msg(taskid) { // Tell everyone my new team emessage_begin(MSG_ALL, g_MsgTeamInfo) ewrite_byte(ID_TEAMMSG) // player ewrite_string(CS_TEAM_NAMES[_:cs_get_user_team(ID_TEAMMSG)]) // team emessage_end() // Fix for AMXX/CZ bots which update team paramater from ScoreInfo message emessage_begin(MSG_BROADCAST, g_MsgScoreInfo) ewrite_byte(ID_TEAMMSG) // id ewrite_short(pev(ID_TEAMMSG, pev_frags)) // frags ewrite_short(cs_get_user_deaths(ID_TEAMMSG)) // deaths ewrite_short(0) // class? ewrite_short(_:cs_get_user_team(ID_TEAMMSG)) // team emessage_end() } // Update Player's Team on all clients (adding needed delays) stock fm_user_team_update(id) { new Float:current_time current_time = get_gametime() if (current_time - g_TeamMsgTargetTime >= TEAMCHANGE_DELAY) { set_task(0.1, "fm_cs_set_user_team_msg", id+TASK_TEAMMSG) g_TeamMsgTargetTime = current_time + TEAMCHANGE_DELAY } else { set_task((g_TeamMsgTargetTime + TEAMCHANGE_DELAY) - current_time, "fm_cs_set_user_team_msg", id+TASK_TEAMMSG) g_TeamMsgTargetTime = g_TeamMsgTargetTime + TEAMCHANGE_DELAY } } stock fm_cs_set_user_model(id, const model[]) { g_model_locked[id] = 0 engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", model) g_model_locked[id] = 1 } stock fm_cs_set_user_model_index(id, model_index) { if (pev_valid(id) != PDATA_SAFE) return; set_pdata_int(id, OFFSET_MODELINDEX, model_index) } stock FixDeadAttrib(id) { message_begin(MSG_BROADCAST, get_user_msgid("ScoreAttrib")) write_byte(id) // id write_byte(0) // attrib message_end() } // Set Speed stock fm_set_user_speed(id, Float:Speed) { set_pev(id, pev_maxspeed, Speed) ExecuteHamB(Ham_Player_ResetMaxSpeed, id) } stock fm_reset_user_speed(id) { ExecuteHamB(Ham_Player_ResetMaxSpeed, id) } // Get Zombies -returns alive zombies number- fnGetZombies() { static iZombies, id iZombies = 0 for (id = 1; id <= g_MaxPlayers; id++) { if (is_user_alive(id) && g_zombie[id]) iZombies++ } return iZombies; } // Get Humans -returns alive humans number- fnGetHumans() { static iHumans, id iHumans = 0 for (id = 1; id <= g_MaxPlayers; id++) { if (is_user_alive(id) && !g_zombie[id]) iHumans++ } return iHumans; } // Last Zombie Check -check for last zombie and set its flag- fnCheckLastZombie(){ static id for (id = 1; id <= g_MaxPlayers; id++) { // Last zombie if (is_user_alive(id) && g_zombie[id] && fnGetZombies() == 1) { if (!g_lastzombie[id]) { // Last zombie forward ExecuteForward(g_fwUserLastZombie, g_fwDummyResult, id); } g_lastzombie[id] = true } else g_lastzombie[id] = false // Last human if (is_user_alive(id) && !g_zombie[id] && fnGetHumans() == 1) { if (!g_lasthuman[id]) { // Last human forward get_user_name(id, szName, 32) ExecuteForward(g_fwUserLastHuman, g_fwDummyResult, id); ColorChat(0, GREEN, "^4[EG] ^1Player ^4%s ^1Is The Last Survivor With Unlimited Clip ^4!", szName) } g_lasthuman[id] = true } else g_lasthuman[id] = false } } // Get User Team stock fm_cs_get_user_team(id) { return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX); } // saybo f menu :v ma3ndi mandilak public OFF(id) { get_user_name(id, szName, 32) ColorChat(0, GREEN, "^1ADMIN ^4%s ^1: The Call Button Is Currently ^4[OFF]", szName) call_off(id) } public ON(id) { get_user_name(id, szName, 32) ColorChat(0, GREEN, "^1ADMIN ^4%s ^1: The Call Button Is Currently ^4[ON]",szName) call_on(id) } // Unlimited clip code public message_cur_weapon(msg_id, msg_dest, msg_entity) { if (!g_lasthuman[msg_entity]) return; // Player not alive or not an active weapon if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1) return; static weapon, clip weapon = get_msg_arg_int(2) // get weapon ID clip = get_msg_arg_int(3) // get weapon clip // Unlimited Clip Ammo if (MAXCLIP[weapon] > 2) // skip grenades { set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time if (clip < 2) // refill when clip is nearly empty { // Get the weapon entity static wname[32], weapon_ent get_weaponname(weapon, wname, sizeof wname - 1) weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity) // Set max clip on weapon fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon]) } } } // Set Weapon Clip Ammo stock fm_set_weapon_ammo(entity, amount) { set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS); } public cmd_infected(id) { new map_name[32], check_index get_mapname(map_name, sizeof(map_name)) for(check_index = 0; check_index < sizeof(allow_map_area); check_index++) { if(equali(map_name, allow_map_area[check_index], strlen(allow_map_area[check_index]))) break } if(check_index == sizeof(allow_map_area)) return ExecuteHamB(Ham_CS_RoundRespawn, id) } public g_Glows(id) { if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_user_flags(id) & VIP) { set_user_rendering(id, kRenderFxGlowShell, 190, 190, 190, kRenderNormal, 16 ) } } Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi