Description:
This is heroine class. An addition class for zombie escape mod. This plugin chooses a player randomly and gives him extra features for 1 round. Some of the features are:
- Speed.
- Gravity.
- Extra damage.
- Different model.
- Parachute.
- Knockback.
- Multijump.
- ze_heroine_min_zombies // Minimum players to start choosing random player to be heroine? (D: 3).
- ze_heroine_knockback // How much knockback does the heroine get? (D: 1.5).
- ze_heroine_speed // How much speed does the heroine gain? (D: 400) (Note: Check 'ze_set_human_speed_factor' usage.
- ze_heroine_gravity // How much will the heroine's gravity be? (D: 0.08) (Note: The value you set will be the heroine's gravity, no increase or decrease.
- ze_screen_fade // Allow screen fade on turning to heroine? (0 = Disable || 1 = Enable) (D: 1).
- ze_screen_fade_red // How much the red color will be? (D: 0).
- ze_screen_fade_green // How much the green color will be? (D: 150).
- ze_screen_fade_blue // How much the blue color will be? (D: 0).
- Uncomment to use parachute.
- //#define PARACHUTE
- Uncomment to use multijump.
- //#define MULTIJUMP
- Red color value used in the hud appears to notify server's players who the heroine is (D: 255).
- #define HUDMESSAGE_RED
- Green color value used in the hud appears to notify server's players who the heroine is (D: 255).
- #define HUDMESSAGE_GREEN
- Blue color value used in the hud appears to notify server's players who the heroine is (D: 255).
- #define HUDMESSAGE_BLUE
- Checks whether the player is heroine or not (id is player's index).
- native ze_is_user_heroine(id)
- Sets & unsets the player (id is player's index || if set = 1 --> set || if set = 0 --> unset).
- native ze_set_user_heroine(id, set)
- Spoiler!
Code:
- // Uncomment to use parachute
- //#define PARACHUTE
- // Uncomment to use multijump
- //#DEFINE MULTIJUMP
- #include <zombie_escape>
- #if defined PARACHUTE
- #include <ze_parachute>
- #endif
- #if defined MULTIJUMP
- #include <ze_multijump>
- #endif
- #define TASK_MAKE_HEROINE 20019419
- #define HUDMESSAGE_RED 255
- #define HUDMESSAGE_GREEN 255
- #define HUDMESSAGE_BLUE 255
- #define FFADE_IN 0x0000
- #define UNIT_SECOND (1<<12)
- enum {
- Red = 0,
- Green,
- Blue
- }
- new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
- new const szHeroineModel[][] = { "mummmy" }
- new bool:g_bHeroine[33]
- new Array:g_szHeroineModel
- new iHud, g_iMsgScreenFade
- new g_pCvarHeroineMinZombies,
- g_pCvarHeroineGravity,
- g_pCvarHeroineSpeed,
- g_pCvarHeroineKnockback,
- g_pCvarScreenFade,
- g_pCvarScreenFadeColor[3]
- public plugin_natives()
- {
- register_native("ze_is_user_heroine", "native_ze_is_user_heroine", 1)
- register_native("ze_set_user_heroine", "native_ze_set_user_heroine", 1)
- }
- public plugin_precache()
- {
- g_szHeroineModel = ArrayCreate(32, 1)
- amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Player Models", "HEROINE", g_szHeroineModel)
- new iIndex, PlayerModel[32], Model_Path[128]
- if (ArraySize(g_szHeroineModel) == 0)
- {
- for (iIndex = 0; iIndex < sizeof(szHeroineModel); iIndex++)
- ArrayPushString(g_szHeroineModel, szHeroineModel[iIndex])
- amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Player Models", "HEROINE", g_szHeroineModel)
- }
- for (iIndex = 0; iIndex < ArraySize(g_szHeroineModel); iIndex++)
- {
- ArrayGetString(g_szHeroineModel, iIndex, PlayerModel, charsmax(PlayerModel))
- formatex(Model_Path, charsmax(Model_Path), "models/player/%s/%s.mdl", PlayerModel, PlayerModel)
- precache_model(Model_Path)
- }
- }
- public plugin_init()
- {
- register_plugin("[ZE] Addons: Heroine", "1.2", "Jack GamePlay")
- RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage")
- g_pCvarHeroineMinZombies = register_cvar("ze_heroine_min_zombies", "3")
- g_pCvarHeroineSpeed = register_cvar("ze_heroine_speed", "400")
- g_pCvarHeroineGravity = register_cvar("ze_heroine_gravity", ".08")
- g_pCvarHeroineKnockback = register_cvar("ze_heroine_knockback", "600.0")
- g_pCvarScreenFade = register_cvar("ze_screen_fade", "1")
- g_pCvarScreenFadeColor[Red] = register_cvar("ze_screen_fade_red", "0")
- g_pCvarScreenFadeColor[Green] = register_cvar("ze_screen_fade_green", "150")
- g_pCvarScreenFadeColor[Blue] = register_cvar("ze_screen_fadeblue", "0")
- iHud = CreateHudSyncObj()
- g_iMsgScreenFade = get_user_msgid("ScreenFade")
- }
- public ze_zombie_appear()
- {
- set_task(5.0, "Make_Heroine_Task", TASK_MAKE_HEROINE)
- }
- public Make_Heroine_Task(taskid)
- {
- new id, Zombies = ze_get_zombies_number()
- if (Zombies < get_pcvar_num(g_pCvarHeroineMinZombies))
- {
- ze_colored_print(0, "!tThere must be at least !y[!g%i!y] !tzombies to activate special class!y.", get_pcvar_num(g_pCvarHeroineMinZombies))
- remove_task(taskid)
- return
- }
- id = GetRandomHeroine(random_num(1, Zombies))
- Set_User_Heroine(id)
- remove_task(taskid)
- return
- }
- public Set_User_Heroine(id)
- {
- new HeroineModel[32], Heroine_Name[32]
- if (!ze_is_user_zombie(id))
- ze_set_user_zombie(id)
- g_bHeroine[id] = true
- #if defined PARACHUTE
- ze_give_user_parachute(id)
- #endif
- #if defined MULTIJUMP
- ze_give_user_multijump(id)
- #endif
- if (get_pcvar_float(g_pCvarHeroineGravity) > 0.0)
- {
- set_entvar(id, var_gravity, get_pcvar_float(g_pCvarHeroineGravity))
- }
- if (get_pcvar_num(g_pCvarHeroineSpeed) > 0.0)
- {
- ze_set_zombie_speed(id, get_pcvar_num(g_pCvarHeroineSpeed))
- }
- ArrayGetString(g_szHeroineModel, random_num(0, ArraySize(g_szHeroineModel) - 1), HeroineModel, charsmax(HeroineModel))
- rg_set_user_model(id, HeroineModel)
- get_user_name(id, Heroine_Name, charsmax(Heroine_Name))
- set_hudmessage(HUDMESSAGE_RED, HUDMESSAGE_GREEN, HUDMESSAGE_BLUE, -1.0, 0.15, 1, 2.0, 2.0)
- ShowSyncHudMsg(0, iHud, "%s BECAME HEROIN!!!", Heroine_Name)
- ze_colored_print(id, "!tYou became !gHeroine!y.")
- if (get_pcvar_num(g_pCvarScreenFade))
- {
- message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id)
- write_short(UNIT_SECOND) // duration
- write_short(0) // hold time
- write_short(FFADE_IN) // fade type
- write_byte(get_pcvar_num(g_pCvarScreenFadeColor[Red])) // r
- write_byte(get_pcvar_num(g_pCvarScreenFadeColor[Green])) // g
- write_byte(get_pcvar_num(g_pCvarScreenFadeColor[Blue])) // b
- write_byte (255) // alpha
- message_end()
- }
- }
- public Unset_User_Heroine(id)
- {
- if (g_bHeroine[id])
- {
- g_bHeroine[id] = false
- if (get_pcvar_num(g_pCvarHeroineSpeed) > 0.0)
- {
- ze_reset_zombie_speed(id)
- }
- #if defined PARACHUTE
- ze_remove_user_parachute(id)
- #endif
- #if defined MULTIJUMP
- ze_remove_user_multijump(id)
- #endif
- }
- }
- public client_disconnected(id)
- {
- Unset_User_Heroine(id)
- remove_task(TASK_MAKE_HEROINE)
- }
- public ze_user_infected(victim)
- {
- if (!is_user_alive(victim))
- return
- Unset_User_Heroine(victim)
- }
- public ze_user_humanized(id)
- {
- if (!is_user_alive(id))
- return
- Unset_User_Heroine(id)
- }
- public Fw_TakeDamage(victim, inflector, attacker)
- {
- if (victim == attacker || !is_user_alive(victim) || !is_user_alive(attacker) || !attacker)
- return HC_CONTINUE
- if (g_bHeroine[victim] && get_pcvar_float(g_pCvarHeroineKnockback) > 0.0)
- {
- set_member(victim, m_flVelocityModifier, 1.0)
- static Float:flOrigin[3]
- pev(attacker, pev_origin, flOrigin)
- Set_Knockback(victim, flOrigin, get_pcvar_float(g_pCvarHeroineKnockback), 2)
- }
- return HC_CONTINUE
- }
- public ze_roundend()
- {
- for (new id = 0; id <= get_member_game(m_nMaxPlayers); id++)
- {
- if (!g_bHeroine[id])
- continue
- Unset_User_Heroine(id)
- remove_task(TASK_MAKE_HEROINE)
- }
- }
- public native_ze_is_user_heroine(id)
- {
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d).", id)
- return false
- }
- return g_bHeroine[id]
- }
- public native_ze_set_user_heroine(id, set)
- {
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d).", id)
- return false
- }
- if (!set)
- {
- if (!g_bHeroine[id])
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Player isn't heroine (%d).", id)
- return false
- }
- Unset_User_Heroine(id)
- return true
- }
- if (set)
- {
- if (g_bHeroine[id])
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Player is heroine (%d).", id)
- return false
- }
- Set_User_Heroine(id)
- return true
- }
- return false
- }
- stock GetRandomHeroine(target_index)
- {
- new iAliveZ, id
- for (id = 1; id <= get_member_game(m_nMaxPlayers); id++)
- {
- if (is_user_alive(id) && ze_is_user_zombie(id))
- iAliveZ++
- if (iAliveZ == target_index)
- return id
- }
- return -1
- }