Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <zombieplague>
- #include <engine>
- #include <fun>
- #include <fakemeta>
- #include <hamsandwich>
- #include <amx_settings_api>
- #include <cs_maxspeed_api>
- #include <cs_player_models_api>
- #include <cs_weap_models_api>
- #include <cs_ham_bots_api>
- #include <zp50_core>
- #define LIBRARY_GRENADE_FROST "zp50_grenade_frost"
- #include <zp50_grenade_frost>
- #define LIBRARY_GRENADE_FIRE "zp50_grenade_fire"
- #include <zp50_grenade_fire>
- // Settings file
- new const ZP_SETTINGS_FILE[] = "zombieplague.ini"
- // Default models
- new const models_predator_player[][] = { "predator_boss" }
- new const models_predator_claw[][] = { "models/zombie_plague/v_knife_zombie.mdl" }
- #define PLAYERMODEL_MAX_LENGTH 32
- #define MODEL_MAX_LENGTH 640
- // Custom models
- new Array:g_models_predator_player
- new Array:g_models_predator_claw
- #define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
- #define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
- #define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
- #define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))
- new g_MaxPlayers
- new g_Ispredator
- new g_currentweapon[33]
- new cvar_predator_health, cvar_predator_base_health, cvar_predator_speed, cvar_predator_gravity
- new cvar_predator_kill_explode
- new cvar_predator_grenade_frost, cvar_predator_grenade_fire, cvar_predator_damage, cvar_predator_damage2
- new cvar_predator_glow
- public plugin_init()
- {
- register_plugin("[ZP] Class: Predator", ZP_VERSION_STRING, "AntiChrist")
- RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
- RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage")
- RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
- RegisterHamBots(Ham_Killed, "fw_PlayerKilled")
- register_forward(FM_ClientDisconnect, "fw_ClientDisconnect_Post", 1)
- register_event("Damage", "Damage", "b", "2!=0")
- g_MaxPlayers = get_maxplayers()
- cvar_predator_health = register_cvar("zp_predator_health", "0")
- cvar_predator_base_health = register_cvar("zp_predator_base_health", "2000")
- cvar_predator_speed = register_cvar("zp_predator_speed", "1.2")
- cvar_predator_gravity = register_cvar("zp_predator_gravity", "0.4")
- cvar_predator_damage = register_cvar("zp_predator_damage", "150.0")
- cvar_predator_damage2 = register_cvar("zp_predator_damage2", "50.0")
- cvar_predator_kill_explode = register_cvar("zp_predator_kill_explode", "1")
- cvar_predator_glow = register_cvar("zp_predator_glow", "1")
- cvar_predator_grenade_frost = register_cvar("zp_predator_grenade_frost", "0")
- cvar_predator_grenade_fire = register_cvar("zp_predator_grenade_fire", "1")
- }
- public plugin_precache()
- {
- // Initialize arrays
- g_models_predator_player = ArrayCreate(PLAYERMODEL_MAX_LENGTH, 1)
- g_models_predator_claw = ArrayCreate(MODEL_MAX_LENGTH, 1)
- // Load from external file
- amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Player Models", "PREDATOR", g_models_predator_player)
- amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Weapon Models", "V_KNIFE ASSASSIN", g_models_predator_claw)
- // If we couldn't load from file, use and save default ones
- new index
- if (ArraySize(g_models_predator_player) == 0)
- {
- for (index = 0; index < sizeof models_predator_player; index++)
- ArrayPushString(g_models_predator_player, models_predator_player[index])
- // Save to external file
- amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Player Models", "PREDATOR", g_models_predator_player)
- }
- if (ArraySize(g_models_predator_claw) == 0)
- {
- for (index = 0; index < sizeof models_predator_claw; index++)
- ArrayPushString(g_models_predator_claw, models_predator_claw[index])
- // Save to external file
- amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Weapon Models", "V_KNIFE ASSASSIN", g_models_predator_claw)
- }
- // Precache models
- new player_model[PLAYERMODEL_MAX_LENGTH], model[MODEL_MAX_LENGTH], model_path[128]
- for (index = 0; index < ArraySize(g_models_predator_player); index++)
- {
- ArrayGetString(g_models_predator_player, index, player_model, charsmax(player_model))
- formatex(model_path, charsmax(model_path), "models/player/%s/%s.mdl", player_model, player_model)
- precache_model(model_path)
- // Support modelT.mdl files
- formatex(model_path, charsmax(model_path), "models/player/%s/%sT.mdl", player_model, player_model)
- if (file_exists(model_path)) precache_model(model_path)
- }
- for (index = 0; index < ArraySize(g_models_predator_claw); index++)
- {
- ArrayGetString(g_models_predator_claw, index, model, charsmax(model))
- precache_model(model)
- }
- }
- public plugin_natives()
- {
- register_library("zp50_class_predator")
- register_native("zp_class_predator_get", "native_class_predator_get")
- register_native("zp_class_predator_set", "native_class_predator_set")
- register_native("zp_class_predator_get_count", "native_class_predator_get_count")
- set_module_filter("module_filter")
- set_native_filter("native_filter")
- }
- public module_filter(const module[])
- {
- if (equal(module, LIBRARY_GRENADE_FROST) || equal(module, LIBRARY_GRENADE_FIRE))
- return PLUGIN_HANDLED;
- return PLUGIN_CONTINUE;
- }
- public native_filter(const name[], index, trap)
- {
- if (!trap)
- return PLUGIN_HANDLED;
- return PLUGIN_CONTINUE;
- }
- public fw_ClientDisconnect_Post(id)
- {
- // Reset flags AFTER disconnect (to allow checking if the player was assassin before disconnecting)
- flag_unset(g_Ispredator, id)
- if (get_pcvar_num(cvar_predator_glow))
- set_user_rendering(id)
- }
- // Ham Take Damage Forward
- public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
- {
- g_currentweapon[attacker] = read_data(2)
- // Non-player damage or self damage
- if (victim == attacker || !is_user_alive(attacker))
- return HAM_IGNORED;
- // Nemesis attacking human
- if (flag_get(g_Ispredator, attacker) && !zp_core_is_zombie(victim))
- {
- // Ignore nemesis damage override if damage comes from a 3rd party entity
- // (to prevent this from affecting a sub-plugin's rockets e.g.)
- if (inflictor == attacker && g_currentweapon[attacker] == CSW_KNIFE && get_user_button(attacker) & IN_ATTACK2)
- {
- // Set nemesis damage
- SetHamParamFloat(4, get_pcvar_float(cvar_predator_damage))
- return HAM_HANDLED;
- }
- else
- {
- SetHamParamFloat(4, get_pcvar_float(cvar_predator_damage2))
- return HAM_HANDLED;
- }
- }
- }
- // Ham Player Killed Forward
- public fw_PlayerKilled(victim, attacker, shouldgib)
- {
- if (flag_get(g_Ispredator, victim))
- {
- // assassin explodes!
- if (get_pcvar_num(cvar_predator_kill_explode))
- SetHamParamInteger(3, 2)
- }
- }
- public zp_fw_grenade_frost_pre(id)
- {
- // Prevent frost for assassin
- if (flag_get(g_Ispredator, id) && !get_pcvar_num(cvar_predator_grenade_frost))
- return PLUGIN_HANDLED;
- return PLUGIN_CONTINUE;
- }
- public zp_fw_grenade_fire_pre(id)
- {
- // Prevent burning for assassin
- if (flag_get(g_Ispredator, id) && !get_pcvar_num(cvar_predator_grenade_fire))
- return PLUGIN_HANDLED;
- return PLUGIN_CONTINUE;
- }
- public zp_fw_core_spawn_post(id)
- {
- if (flag_get(g_Ispredator, id))
- {
- // Remove assassin flag
- flag_unset(g_Ispredator, id)
- }
- if (get_pcvar_num(cvar_predator_glow))
- set_user_rendering(id)
- }
- public zp_fw_core_cure(id, attacker)
- {
- if (flag_get(g_Ispredator, id))
- {
- // Remove assassin flag
- flag_unset(g_Ispredator, id)
- }
- if (get_pcvar_num(cvar_predator_glow))
- set_user_rendering(id)
- }
- public zp_fw_core_infect_post(id, attacker)
- {
- // Apply assassin attributes?
- if (!flag_get(g_Ispredator, id))
- return;
- // Health
- if (get_pcvar_num(cvar_predator_health) == 0)
- set_user_health(id, get_pcvar_num(cvar_predator_base_health) * GetAliveCount())
- else
- set_user_health(id, get_pcvar_num(cvar_predator_health))
- // Gravity
- set_user_gravity(id, get_pcvar_float(cvar_predator_gravity))
- // Speed
- cs_set_player_maxspeed_auto(id, get_pcvar_float(cvar_predator_speed))
- // Apply assassin player model
- new player_model[PLAYERMODEL_MAX_LENGTH]
- ArrayGetString(g_models_predator_player, random_num(0, ArraySize(g_models_predator_player) - 1), player_model, charsmax(player_model))
- cs_set_player_model(id, player_model)
- // Apply assassin claw model
- new model[MODEL_MAX_LENGTH]
- ArrayGetString(g_models_predator_claw, random_num(0, ArraySize(g_models_predator_claw) - 1), model, charsmax(model))
- cs_set_player_view_model(id, CSW_KNIFE, model)
- // assassin glow
- if (get_pcvar_num(cvar_predator_glow))
- set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 5)
- }
- public native_class_predator_get(plugin_id, num_params)
- {
- new id = get_param(1)
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
- return -1;
- }
- return flag_get_boolean(g_Ispredator, id);
- }
- public native_class_predator_set(plugin_id, num_params)
- {
- new id = get_param(1)
- if (!is_user_alive(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
- return false;
- }
- if (flag_get(g_Ispredator, id))
- {
- log_error(AMX_ERR_NATIVE, "[ZP] Player already a predator (%d)", id)
- return false;
- }
- flag_set(g_Ispredator, id)
- zp_core_force_infect(id)
- return true;
- }
- public native_class_predator_get_count(plugin_id, num_params)
- {
- return GetpredatorCount();
- }
- // 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 assassin Count -returns alive assassin number-
- GetpredatorCount()
- {
- new ipredator, id
- for (id = 1; id <= g_MaxPlayers; id++)
- {
- if (is_user_alive(id) && flag_get(g_Ispredator, id))
- ipredator++
- }
- return ipredator;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement