joni.h Wrote:Bug fix .sma filenKontakto me whitetomcat nqs ai ta jep ; mu mka thon osht private sja jep kujt
Lem Rehat Wrote:Nese Bon Ndonje skript te ZP 6.2 ose advance po jo e modifikume veq le te jet brenda scripti i comma po te jet pa licensuar
Faleminderit !
Code:
new const ZP_CUSTOMIZATION_FILE[] = "zombieplague.ini"
new const ZP_EXTRAITEMS_FILE[] = "zp_extraitems.ini"
new const ZP_ZOMBIECLASSES_FILE[] = "zp_zombieclasses.ini"
// Limiters for stuff not worth making dynamic arrays out of (increase if needed)
const MAX_CSDM_SPAWNS = 128
const MAX_STATS_SAVED = 64
/*================================================================================
Customization ends here! Yes, that's it. Editing anything beyond
here is not officially supported. Proceed at your own risk...
=================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <geoip>
#include <zp_colorchat>
#include <Commas>
#include <colorchat>
#include <csx>
native zp_get_user_zombie(index);
native zp_get_user_ammo_packs(id);
native zp_get_user_nemesis(id);
native zp_get_user_assassin(id);
native zp_get_user_sniper(id);
native zp_get_user_survivor(id);
/*================================================================================
[Constants, Offsets, Macros]
=================================================================================*/
// Plugin Version
new const PLUGIN_VERSION[] = "6.0"
const TASK_ID = 1603;
// Chat Prefix
#define CHAT_PREFIX "^x04[ZP]^x01"
#define CHAT_PREFIX2 "[ZP]"
#define TASK_HEALTH 120000
// Address Protection
#define ADDRESS_PROTECTION "89.40.233.212:27015"
// DNS Protection
#define DNS_PROTECTION ""
new const Float: g_flCoords[ ][ ] =
{
{ 0.50, 0.40 },
{ 0.56, 0.44 },
{ 0.60, 0.50 },
{ 0.56, 0.56 },
{ 0.50, 0.60 },
{ 0.44, 0.56 },
{ 0.40, 0.50 },
{ 0.44, 0.44 }
};
// Customization file sections
enum
{
SECTION_NONE = 0,
SECTION_ACCESS_FLAGS,
SECTION_PLAYER_MODELS,
SECTION_WEAPON_MODELS,
SECTION_GRENADE_SPRITES,
SECTION_SOUNDS,
SECTION_AMBIENCE_SOUNDS,
SECTION_BUY_MENU_WEAPONS,
SECTION_EXTRA_ITEMS_WEAPONS,
SECTION_HARD_CODED_ITEMS_COSTS,
SECTION_WEATHER_EFFECTS,
SECTION_SKY,
SECTION_LIGHTNING,
SECTION_ZOMBIE_DECALS,
SECTION_KNOCKBACK,
SECTION_OBJECTIVE_ENTS,
SECTION_SVC_BAD
}
// Access flags
enum
{
ACCESS_ENABLE_MOD = 0,
ACCESS_ADMIN_MENU,
ACCESS_ADMIN_MODES_MENU,
ACCESS_MODE_INFECTION,
ACCESS_MODE_NEMESIS,
ACCESS_MODE_ASSASSIN,
ACCESS_MODE_SURVIVOR,
ACCESS_MODE_SNIPER,
ACCESS_MODE_SWARM,
ACCESS_MODE_MULTI,
ACCESS_MODE_PLAGUE,
ACCESS_MODE_ARMA,
ACCESS_MODE_APOC,
ACCESS_MODE_NIGHT,
ACCESS_MAKE_ZOMBIE,
ACCESS_MAKE_HUMAN,
ACCESS_MAKE_NEMESIS,
ACCESS_MAKE_ASSASSIN,
ACCESS_MAKE_SURVIVOR,
ACCESS_MAKE_SNIPER,
ACCESS_RESPAWN_PLAYERS,
ACCESS_ADMIN_MODELS,
MAX_ACCESS_FLAGS
}
// Task offsets
enum (+= 100)
{
TASK_MODEL = 2000,
TASK_TEAM,
TASK_SPAWN,
TASK_BLOOD,
TASK_AURA,
TASK_BURN,
TASK_NVISION,
TASK_FLASH,
TASK_CHARGE,
TASK_SHOWHUD,
TASK_MAKEZOMBIE,
TASK_WELCOMEMSG,
TASK_THUNDER_PRE,
TASK_THUNDER,
TASK_AMBIENCESOUNDS
}
// IDs inside tasks
#define ID_MODEL (taskid - TASK_MODEL)
#define ID_TEAM (taskid - TASK_TEAM)
#define ID_SPAWN (taskid - TASK_SPAWN)
#define ID_BLOOD (taskid - TASK_BLOOD)
#define ID_AURA (taskid - TASK_AURA)
#define ID_BURN (taskid - TASK_BURN)
#define ID_NVISION (taskid - TASK_NVISION)
#define ID_FLASH (taskid - TASK_FLASH)
#define ID_CHARGE (taskid - TASK_CHARGE)
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
// BP Ammo Refill task
#define REFILL_WEAPONID args[0]
// For weapon buy menu handlers
#define WPN_STARTID g_menu_data[id][1]
#define WPN_MAXIDS ArraySize(g_primary_items)
#define WPN_SELECTION (g_menu_data[id][1]+key)
#define WPN_AUTO_ON g_menu_data[id][2]
#define WPN_AUTO_PRI g_menu_data[id][3]
#define WPN_AUTO_SEC g_menu_data[id][4]
// For player list menu handlers
#define PL_ACTION g_menu_data[id][0]
// For extra items menu handlers
#define EXTRAS_CUSTOM_STARTID (EXTRA_WEAPONS_STARTID + ArraySize(g_extraweapon_names))
#define HattrickRange(%1,%2) entity_range(%1,%2)
#define HE_MODEL_EXPLODE "sprites/zerogxplode.spr"
//#define HE_SOUND_EXPLODE "fvox/flatline.wav"
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
// Hard coded extra items
enum
{
EXTRA_NVISION = 0,
EXTRA_ANTIDOTE,
EXTRA_MADNESS,
EXTRA_INFBOMB,
EXTRA_WEAPONS_STARTID
}
// Game modes
enum
{
MODE_NONE = 0,
MODE_INFECTION,
MODE_NEMESIS,
MODE_ASSASSIN,
MODE_SURVIVOR,
MODE_SNIPER,
MODE_SWARM,
MODE_MULTI,
MODE_PLAGUE,
MODE_ARMA,
MODE_APOC,
MODE_NIGHT
}
// ZP Teams
const ZP_TEAM_NO_ONE = 0
const ZP_TEAM_ANY = 0
const ZP_TEAM_ZOMBIE = (1<<0)
const ZP_TEAM_HUMAN = (1<<1)
const ZP_TEAM_NEMESIS = (1<<2)
const ZP_TEAM_ASSASSIN = (1<<3)
const ZP_TEAM_SURVIVOR = (1<<4)
const ZP_TEAM_SNIPER = (1<<5)
new const ZP_TEAM_NAMES[] =
{
"ZOMBIE , HUMAN",
"ZOMBIE",
"HUMAN",
"ZOMBIE , HUMAN",
"NEMESIS",
"ZOMBIE , NEMESIS",
"HUMAN , NEMESIS",
"ZOMBIE , HUMAN , NEMESIS",
"ASSASSIN",
"ZOMBIE , ASSASSIN",
"HUMAN , ASSASSIN",
"ZOMBIE, HUMAN, ASSASSIN",
"NEMESIS , ASSASSIN",
"ZOMBIE , NEMESIS , ASSASSIN",
"HUMAN, NEMESIS, ASSASSIN",
"ZOMBIE , HUMAN , NEMESIS , ASSASSIN",
"SURVIVOR",
"ZOMBIE, SURVIVOR",
"HUMAN, SURVIVOR",
"ZOMBIE, HUMAN, SURVIVOR",
"NEMESIS , SURVIVOR",
"ZOMBIE , NEMESIS , SURVIVOR",
"HUMAN , NEMESIS , SURVIVOR",
"ZOMBIE , HUMAN , NEMESIS , SURVIVOR",
"ASSASSIN, SURVIVOR",
"ZOMBIE, ASSASSIN, SURVIVOR",
"HUMAN, ASSASSIN, SURVIVOR",
"ZOMBIE, HUMAN, ASSASSIN, SURVIVOR",
"NEMESIS, ASSASSIN, SURVIVOR",
"ZOMBIE, NEMESIS, ASSASSIN, SURVIVOR",
"HUMAN, NEMESIS, ASSASSIN, SURVIVOR",
"ZOMBIE, HUMAN, NEMESIS, ASSASSIN, SURVIVOR",
"SNIPER",
"ZOMBIE, SNIPER",
"HUMAN, SNIPER",
"ZOMBIE, HUMAN, SNIPER",
"NEMESIS, SNIPER",
"ZOMBIE, NEMESIS, SNIPER",
"HUMAN, NEMESIS, SNIPER",
"ZOMBIE, HUMAN, NEMESIS, SNIPER",
"ASSASSIN, SNIPER",
"ZOMBIE, ASSASSIN, SNIPER",
"HUMAN, ASSASSIN, SNIPER",
"ZOMBIE, HUMAN, ASSASSIN, SNIPER",
"NEMESIS, ASSASSIN, SNIPER",
"ZOMBIE, NEMESIS, ASSASSIN, SNIPER",
"HUMAN, NEMESIS, ASSASSIN, SNIPER",
"ZOMBIE, HUMAN, NEMESIS, ASSASSIN, SNIPER",
"SURVIVOR, SNIPER",
"ZOMBIE, SURVIVOR, SNIPER",
"HUMAN, SURVIVOR, SNIPER",
"ZOMBIE, HUMAN, SURVIVOR, SNIPER",
"NEMESIS, SURVIVOR, SNIPER",
"ZOMBIE, NEMESIS, SURVIVOR, SNIPER",
"HUMAN, NEMESIS, SURVIVOR, SNIPER",
"ZOMBIE, HUMAN, NEMESIS, SURVIVOR, SNIPER",
"ASSASSIN, SURVIVOR, SNIPER",
"ZOMBIE, ASSASSIN, SURVIVOR, SNIPER",
"HUMAN, ASSASSIN, SURVIVOR, SNIPER",
"ZOMBIE, HUMAN, ASSASSIN, SURVIVOR, SNIPER",
"NEMESIS, ASSASSIN, SURVIVOR, SNIPER",
"ZOMBIE, NEMESIS, ASSASSIN, SURVIVOR, SNIPER",
"HUMAN, NEMESIS, ASSASSIN, SURVIVOR, SNIPER",
"ZOMBIE, HUMAN, NEMESIS, ASSASSIN, SURVIVOR, SNIPER"
}
// Zombie classes
const ZCLASS_NONE = -1
// HUD messages
const Float:HUD_EVENT_X = -1.0
const Float:HUD_EVENT_Y = 0.17
const Float:HUD_INFECT_X = 0.05
const Float:HUD_INFECT_Y = 0.45
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y = 0.8
const Float:HUD_STATS_X = 0.02
const Float:HUD_STATS_Y = 0.9
// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
// CS Player PData Offsets (win32)
const OFFSET_PAINSHOCK = 108 // ConnorMcLeod
const OFFSET_CSTEAMS = 114
const OFFSET_CSMONEY = 115
const OFFSET_FLASHLIGHT_BATTERY = 244
const OFFSET_CSDEATHS = 444
const OFFSET_MODELINDEX = 491 // Orangutanz
// CS Player CBase Offsets (win32)
const OFFSET_ACTIVE_ITEM = 373
// CS Weapon CBase Offsets (win32)
const OFFSET_WEAPONOWNER = 41
// Linux diff's
const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds
const OFFSET_LINUX_WEAPONS = 4 // weapon offsets are only 4 steps higher on Linux
// CS Teams
enum
{
FM_CS_TEAM_UNASSIGNED = 0,
FM_CS_TEAM_T,
FM_CS_TEAM_CT,
FM_CS_TEAM_SPECTATOR
}
new const CS_TEAM_NAMES[] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
// Some constants
const HIDE_MONEY = (1<<5)
const UNIT_SECOND = (1<<12)
const DMG_HEGRENADE = (1<<24)
const IMPULSE_FLASHLIGHT = 100
const USE_USING = 2
const USE_STOPPED = 0
const STEPTIME_SILENT = 999
const BREAK_GLASS = 0x01
const FFADE_IN = 0x0000
const FFADE_STAYOUT = 0x0004
const PEV_SPEC_TARGET = pev_iuser2
// Max BP ammo for weapons
new const MAXBPAMMO [] = { -1, 52, -1, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120,
30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, -1, 100 }
// Max Clip for weapons
new const MAXCLIP [] = { -1, 32, -1, 32, 1, 32, -1, 32, 32, 1, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -1, 32 }
// Ammo IDs for weapons
new const AMMOID [] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10,
1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7 }
// Ammo Type Names for weapons
new const AMMOTYPE []= { "", "357sig", "", "762nato", "", "buckshot", "", "45acp", "556nato", "", "9mm", "57mm", "45acp",
"556nato", "556nato", "556nato", "45acp", "9mm", "338magnum", "9mm", "556natobox", "buckshot",
"556nato", "9mm", "762nato", "", "50ae", "556nato", "762nato", "", "57mm" }
// Weapon IDs for ammo types
new const AMMOWEAPON [] = { 0, CSW_AWP, CSW_SCOUT, CSW_M249, CSW_AUG, CSW_XM1014, CSW_MAC10, CSW_FIVESEVEN, CSW_DEAGLE,
CSW_P228, CSW_ELITE, CSW_FLASHBANG, CSW_HEGRENADE, CSW_SMOKEGRENADE, CSW_C4 }
// Primary and Secondary Weapon Names
new const WEAPONNAMES [] = { "", "P228 Compact", "", "Schmidt Scout", "", "XM1014 M4", "", "Ingram MAC-10", "Steyr AUG A1",
"", "Dual Elite Berettas", "FiveseveN", "UMP 45", "SG-550 Auto-Sniper", "IMI Galil", "Famas",
"USP .45 ACP Tactical", "Glock 18C", "AWP Magnum Sniper", "MP5 Navy", "M249 Para Machinegun",
"M3 Super 90", "M4A1 Carbine", "Schmidt TMP", "G3SG1 Auto-Sniper", "", "Desert Eagle .50 AE",
"SG-552 Commando", "AK-47 Kalashnikov", "", "ES P90" }
// Weapon entity names
new const WEAPONENTNAMES [] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }
// CS sounds
new const sound_flashlight [] = "items/flashlight1.wav"
new const sound_buyammo [] = "items/9mmclip1.wav"
new const sound_armorhit [] = "player/bhit_helmet-1.wav"
// Explosion radius for custom grenades
const Float:NADE_EXPLOSION_RADIUS = 240.0
// HACK: pev_ field used to store additional ammo on weapons
const PEV_ADDITIONAL_AMMO = pev_iuser1
// HACK: pev_ field used to store custom nade types and their values
const PEV_NADE_TYPE = pev_flTimeStepSound
const NADE_TYPE_INFECTION = 1111
const NADE_TYPE_EXPLODE = 2222
const NADE_TYPE_FROST = 3333
const NADE_TYPE_NAPALM = 4444
const PEV_FLARE_COLOR = pev_punchangle
const PEV_FLARE_DURATION = pev_flSwimTime
// 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)
// Allowed weapons for zombies (added grenades/bomb for sub-plugin support, since they shouldn't be getting them anyway)
const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)|(1<<CSW_HEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_C4)
// Classnames for separate model entities
new const MODEL_ENT_CLASSNAME[] = "player_model"
new const WEAPON_ENT_CLASSNAME[] = "weapon_model"
// Menu keys
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
// Ambience Sounds
enum
{
AMBIENCE_SOUNDS_INFECTION = 0,
AMBIENCE_SOUNDS_NEMESIS,
AMBIENCE_SOUNDS_ASSASSIN,
AMBIENCE_SOUNDS_SURVIVOR,
AMBIENCE_SOUNDS_SNIPER,
AMBIENCE_SOUNDS_SWARM,
AMBIENCE_SOUNDS_PLAGUE,
AMBIENCE_SOUNDS_ARMA,
AMBIENCE_SOUNDS_APOC,
AMBIENCE_SOUNDS_NIGHT,
MAX_AMBIENCE_SOUNDS
}
// Admin menu actions
enum
{
ACTION_ZOMBIEFY_HUMANIZE = 0,
ACTION_MAKE_NEMESIS,
ACTION_MAKE_ASSASSIN,
ACTION_MAKE_SURVIVOR,
ACTION_MAKE_SNIPER,
ACTION_RESPAWN_PLAYER,
ACTION_MODES_MENU
}
// Admin modes menu actions
enum
{
ACTION_MODE_SWARM,
ACTION_MODE_MULTI,
ACTION_MODE_PLAGUE,
ACTION_MODE_ARMA,
ACTION_MODE_APOC,
ACTION_MODE_NIGHT
}
// Custom forward return values
const ZP_PLUGIN_HANDLED = 97
/*================================================================================
[Global Variables]
=================================================================================*/
// Player vars
new g_human[33] // is human
new g_zombie[33] // is zombie
new g_nemesis[33] // is nemesis
new g_assassin[33] // is assassin
new g_survivor[33] // is survivor
new g_sniper[33] // is sniper
new g_firstzombie[33] // is first zombie
new g_lastzombie[33] // is last zombie
new g_lasthuman[33] // is last human
new g_frozen[33] // is frozen (can't move)
new g_nodamage[33] // has spawn protection/zombie madness
new g_respawn_as_zombie[33] // should respawn as zombie
new g_nvision[33] // has night vision
new g_nvisionenabled[33] // has night vision turned on
new g_zombieclass[33] // zombie class
new g_zombieclassnext[33] // zombie class for next infection
new g_flashlight[33] // has custom flashlight turned on
new g_flashbattery[33] = { 100, ... } // custom flashlight battery
new g_canbuy[33] // is allowed to buy a new weapon through the menu
new g_ammopacks[33] // ammo pack count
new g_damagedealt[33] // damage dealt to zombies (used to calculate ammo packs reward)
new Float:g_lastleaptime[33] // time leap was last used
new Float:g_lastflashtime[33] // time flashlight was last toggled
new g_playermodel[33][32] // current model's short name [player][model]
new g_menu_data[33][5] // data for some menu handlers
new g_ent_playermodel[33] // player model entity
new g_ent_weaponmodel[33] // weapon model entity
new g_burning_duration[33] // burning task duration
new g_iPosition[ 33 ];
// Game vars
new g_pluginenabled // ZP enabled
new g_newround // new round starting
new g_endround // round ended
new g_nemround // nemesis round
new g_assaround // assassin round
new g_survround // survivor round
new g_sniround // sniper round
new g_swarmround // swarm round
new g_armaround // armageddon round
new g_apocround // apocalypse round
new g_nightround // nightmare round
new g_plagueround // plague round
new g_modestarted // mode fully started
new g_lastmode // last played mode
new g_scorezombies, g_scorehumans // team scores
new g_spawnCount, g_spawnCount2 // available spawn points counter
new Float:g_spawns[MAX_CSDM_SPAWNS][3], Float:g_spawns2[MAX_CSDM_SPAWNS][3] // spawn points data
new g_lights_i // lightning current lights counter
new g_lights_cycle[32] // current lightning cycle
new g_lights_cycle_len // lightning cycle length
new Float:g_models_targettime // for adding delays between Model Change messages
new Float:g_teams_targettime // for adding delays between Team Change messages
new g_MsgSync, g_MsgSync2, g_MsgSync3 // message sync objects
new g_trailSpr, g_exploSpr, g_flameSpr, g_smokeSpr, g_glassSpr, g_hExplode // grenade sprites
new g_freezetime // whether CS's freeze time is on
new g_maxplayers // max players counter
new g_czero // whether we are running on a CZ server
new g_hamczbots // whether ham forwards are registered for CZ bots
new g_fwSpawn, g_fwPrecacheSound // spawn and precache sound forward handles
new g_infbombcounter, g_antidotecounter, g_madnesscounter // to limit buying some items
new g_arrays_created // to prevent stuff from being registered before initializing arrays
new g_lastplayerleaving // flag for whenever a player leaves and another takes his place
new g_switchingteam // flag for whenever a player's team change emessage is sent
new g_iStatusHudmessage;
new countdown_timer, cvar_countdown_sound;
new g_iSize;
new g_msgsync;
new ASSASSIN, SURVIVOR, NEMESIS, SNIPER
new g_MaxPlayers
// Message IDs vars
new g_msgScoreInfo, g_msgNVGToggle, g_msgScoreAttrib, g_msgAmmoPickup, g_msgScreenFade,
g_msgDeathMsg, g_msgSetFOV, g_msgFlashlight, g_msgFlashBat, g_msgTeamInfo, g_msgDamage,
g_msgHideWeapon, g_msgCrosshair, g_msgScreenShake, g_msgCurWeapon
// Some forward handlers
new g_fwRoundStart, g_fwRoundEnd, g_fwUserInfected_pre, g_fwUserInfected_post,
g_fwUserHumanized_pre, g_fwUserHumanized_post, g_fwUserInfect_attempt,
g_fwUserHumanize_attempt, g_fwExtraItemSelected, g_fwUserUnfrozen,
g_fwUserLastZombie, g_fwUserLastHuman, g_fwDummyResult
// Temporary Database vars (used to restore players stats in case they get disconnected)
new db_name[MAX_STATS_SAVED][32] // player name
new db_ammopacks[MAX_STATS_SAVED] // ammo pack count
new db_zombieclass[MAX_STATS_SAVED] // zombie class
new db_slot_i // additional saved slots counter (should start on maxplayers+1)
// Extra Items vars
new Array:g_extraitem_name // caption
new Array:g_extraitem_cost // cost
new Array:g_extraitem_team // team
new g_extraitem_i // loaded extra items counter
// For extra items file parsing
new Array:g_extraitem2_realname, Array:g_extraitem2_name, Array:g_extraitem2_cost,
Array:g_extraitem2_team, Array:g_extraitem_new
// Zombie Classes vars
new Array:g_zclass_name // caption
new Array:g_zclass_info // description
new Array:g_zclass_modelsstart // start position in models array
new Array:g_zclass_modelsend // end position in models array
new Array:g_zclass_playermodel // player models array
new Array:g_zclass_modelindex // model indices array
new Array:g_zclass_clawmodel // claw model
new Array:g_zclass_hp // health
new Array:g_zclass_spd // speed
new Array:g_zclass_grav // gravity
new Array:g_zclass_kb // knockback
new g_zclass_i // loaded zombie classes counter
// For zombie classes file parsing
new Array:g_zclass2_realname, Array:g_zclass2_name, Array:g_zclass2_info,
Array:g_zclass2_modelsstart, Array:g_zclass2_modelsend, Array:g_zclass2_playermodel,
Array:g_zclass2_modelindex, Array:g_zclass2_clawmodel, Array:g_zclass2_hp,
Array:g_zclass2_spd, Array:g_zclass2_grav, Array:g_zclass2_kb, Array:g_zclass_new
// Customization vars
new g_access_flag[MAX_ACCESS_FLAGS], Array:model_nemesis, Array:model_assassin, Array:model_survivor, Array:model_sniper, Array:model_human,
Array:model_admin_zombie, Array:model_admin_human, Array:g_modelindex_human,
Array:g_modelindex_nemesis, Array:g_modelindex_assassin, Array:g_modelindex_survivor, Array:g_modelindex_sniper, g_same_models_for_all,
Array:g_modelindex_admin_zombie, Array:g_modelindex_admin_human, model_vknife_human[64],
model_vknife_nemesis[64], model_vknife_assassin[64], model_vxm1014_survivor[64], model_pxm1014_survivor[64], model_vak47_survivor[64],
model_pak47_survivor[64], model_vm4a1_survivor[64], model_pm4a1_survivor[64], model_vawp_sniper[64], model_pawp_sniper[64],
model_grenade_infect[64], model_grenade_fire[64], model_grenade_frost[64], model_grenade_flare[64],
model_vknife_admin_human[64], model_vknife_admin_zombie[64],
sprite_grenade_trail[64], sprite_grenade_ring[64], sprite_grenade_fire[64],
sprite_grenade_smoke[64], sprite_grenade_glass[64], Array:sound_win_zombies,
Array:sound_win_humans, Array:sound_win_no_one, Array:zombie_infect, Array:zombie_idle,
Array:zombie_pain, Array:nemesis_pain, Array:assassin_pain, Array:zombie_die, Array:zombie_fall,
Array:zombie_miss_wall, Array:zombie_hit_normal, Array:zombie_hit_stab, g_ambience_rain,
Array:zombie_idle_last, Array:zombie_madness, Array:sound_nemesis, Array:sound_assassin, Array:sound_survivor, Array:sound_sniper,
Array:sound_swarm, Array:sound_multi, Array:sound_plague, Array:sound_armageddon, Array:sound_apocalypse, Array:sound_nightmare, Array:grenade_infect,
Array:grenade_infect_player, Array:grenade_fire, Array:grenade_fire_player,
Array:grenade_frost, Array:grenade_frost_player, Array:grenade_frost_break,
Array:grenade_flare,
Array:sound_antidote, Array:sound_thunder, g_ambience_sounds[MAX_AMBIENCE_SOUNDS],
Array:sound_ambience1, Array:sound_ambience2, Array:sound_ambience3, Array:sound_ambience4, Array:sound_ambience5, Array:sound_ambience6, Array:sound_ambience7, Array:sound_ambience8, Array:sound_ambience9, Array:sound_ambience10,
Array:sound_ambience1_duration, Array:sound_ambience2_duration, Array:sound_ambience3_duration, Array:sound_ambience4_duration, Array:sound_ambience5_duration, Array:sound_ambience6_duration, Array:sound_ambience7_duration, Array:sound_ambience8_duration, Array:sound_ambience9_duration, Array:sound_ambience10_duration,
Array:sound_ambience1_ismp3, Array:sound_ambience2_ismp3, Array:sound_ambience3_ismp3, Array:sound_ambience4_ismp3, Array:sound_ambience5_ismp3, Array:sound_ambience6_ismp3, Array:sound_ambience7_ismp3, Array:sound_ambience8_ismp3, Array:sound_ambience9_ismp3, Array:sound_ambience10_ismp3,
Array:g_primary_items, Array:g_secondary_items, Array:g_additional_items,
Array:g_primary_weaponids, Array:g_secondary_weaponids, Array:g_extraweapon_names,
Array:g_extraweapon_items, Array:g_extraweapon_costs, g_extra_costs2[EXTRA_WEAPONS_STARTID],
g_ambience_snow, g_ambience_fog, g_fog_density[10], g_fog_color[12], g_sky_enable,
Array:g_sky_names, Array:lights_thunder, Array:zombie_decals, Array:g_objective_ents,
Float:g_modelchange_delay, g_set_modelindex_offset, g_handle_models_on_separate_ent,
Float:kb_weapon_power[31] = { -1.0, ... }, Array:zombie_miss_slash, g_force_consistency
// CVAR pointers
new cvar_lighting, cvar_zombiefov, cvar_plague, cvar_plaguechance, cvar_zombiefirsthp,
cvar_removemoney, cvar_thunder, cvar_zombiebonushp, cvar_nemhp, cvar_nem, cvar_assahp, cvar_assa, cvar_surv, cvar_sni,
cvar_nemchance, cvar_assachance, cvar_deathmatch, cvar_nemglow, cvar_assaglow, cvar_customnvg, cvar_hitzones, cvar_humanhp,
cvar_nemgravity, cvar_assagravity, cvar_flashsize, cvar_ammodamage, cvar_zombiearmor, cvar_survpainfree, cvar_snipainfree,
cvar_nempainfree, cvar_nemspd, cvar_assapainfree, cvar_assaspd, cvar_survchance, cvar_survhp, cvar_survspd, cvar_snichance, cvar_snihp, cvar_snispd, cvar_humanspd,
cvar_swarmchance, cvar_armachance, cvar_apocchance, cvar_nightchance, cvar_flashdrain, cvar_zombiebleeding, cvar_removedoors, cvar_customflash,
cvar_randspawn, cvar_multi, cvar_multichance, cvar_infammo, cvar_swarm, cvar_arma, cvar_apoc, cvar_night, cvar_ammoinfect,
cvar_toggle, cvar_knockbackpower, cvar_freezeduration, cvar_triggered, cvar_flashcharge,
cvar_firegrenades, cvar_frostgrenades, cvar_survgravity, cvar_snigravity, cvar_logcommands, cvar_survglow, cvar_sniglow,
cvar_humangravity, cvar_spawnprotection, cvar_nvgsize, cvar_zclasses,
cvar_extraitems, cvar_showactivity, cvar_humanlasthp, cvar_warmup,
cvar_flashdist, cvar_fireduration, cvar_firedamage, cvar_armanemhp, cvar_armasurvhp, cvar_apocassahp, cvar_apocsnihp,
cvar_flaregrenades, cvar_knockbackducking, cvar_knockbackdamage, cvar_knockbackzvel,
cvar_multiratio, cvar_swarmratio, cvar_armaratio, cvar_apocratio, cvar_nightratio, cvar_spawndelay, cvar_extraantidote, cvar_extramadness,
cvar_extraweapons, cvar_extranvision, cvar_nvggive, cvar_preventconsecutive, cvar_botquota,
cvar_buycustom, cvar_zombiepainfree, cvar_fireslowdown, cvar_survbasehp, cvar_survaura, cvar_snibasehp, cvar_sniaura,
cvar_nemaura, cvar_assaaura, cvar_extrainfbomb, cvar_knockback,
cvar_fragsinfect, cvar_fragskill, cvar_humanarmor, cvar_zombiesilent, cvar_removedropped,
cvar_plagueratio, cvar_blocksuicide, cvar_knockbackdist, cvar_nemdamage, cvar_assadamage, cvar_leapzombies,
cvar_leapzombiesforce, cvar_leapzombiesheight, cvar_leapzombiescooldown, cvar_leapnemesis,
cvar_leapnemesisforce, cvar_leapnemesisheight, cvar_leapnemesiscooldown, cvar_leapassassin,
cvar_leapassassinforce, cvar_leapassassinheight, cvar_leapassassincooldown, cvar_leapsurvivor,
cvar_leapsurvivorforce, cvar_leapsurvivorheight, cvar_leapsniper, cvar_nightnemhp, cvar_nightassahp, cvar_nightsurvhp, cvar_nightsnihp,
cvar_leapsniperforce, cvar_leapsniperheight, cvar_nemminplayers, cvar_assaminplayers, cvar_survminplayers, cvar_sniminplayers,
cvar_respawnonsuicide, cvar_respawnafterlast, cvar_leapsurvivorcooldown, cvar_leapsnipercooldown, cvar_statssave,
cvar_swarmminplayers, cvar_multiminplayers, cvar_plagueminplayers, cvar_armaminplayers, cvar_apocminplayers, cvar_adminmodelshuman, cvar_adminmodelszombie,
cvar_nembasehp, cvar_assabasehp, cvar_blockpushables, cvar_respawnworldspawnkill, cvar_nightminplayers,
cvar_madnessduration, cvar_plaguenemnum, cvar_plaguenemhp, cvar_plaguesurvhp,
cvar_snidamage, cvar_plaguesurvnum, cvar_infectionscreenfade, cvar_infectionscreenshake,
cvar_infectionsparkle, cvar_infectiontracers, cvar_infectionparticles, cvar_infbomblimit,
cvar_allowrespawnsurv, cvar_allowrespawnsni, cvar_flashshowall, cvar_allowrespawninfection, cvar_allowrespawnnem, cvar_allowrespawnassa,
cvar_allowrespawnswarm, cvar_allowrespawnplague, cvar_allowrespawnarma, cvar_allowrespawnapoc, cvar_allowrespawnnight, cvar_survinfammo, cvar_sniinfammo, cvar_nemknockback, cvar_assaknockback,
cvar_nvgcolor[3], cvar_nemnvgcolor[3], cvar_assanvgcolor[3], cvar_humnvgcolor[3], cvar_flashcolor[3],
cvar_hudicons, cvar_respawnzomb, cvar_respawnhum, cvar_respawnnem, cvar_respawnassa, cvar_respawnsurv, cvar_respawnsni,
cvar_startammopacks, cvar_randweapons, cvar_antidotelimit, cvar_madnesslimit,
cvar_adminknifemodelshuman, cvar_adminknifemodelszombie, cvar_keephealthondisconnect
// Cached stuff for players
new g_isconnected[33] // whether player is connected
new g_isalive[33] // whether player is alive
new g_isbot[33] // whether player is a bot
new g_currentweapon[33] // player's current weapon id
new g_playername[33][32] // player's name
new Float:g_zombie_spd[33] // zombie class speed
new Float:g_zombie_knockback[33] // zombie class knockback
new g_zombie_classname[33][32] // zombie class name
#define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && g_isconnected[%1])
#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && g_isalive[%1])
// Cached CVARs
new g_cached_customflash, g_cached_zombiesilent, Float:g_cached_humanspd, Float:g_cached_nemspd, Float:g_cached_assaspd, Float:g_cached_survspd, Float:g_cached_snispd,
g_cached_leapzombies, Float:g_cached_leapzombiescooldown, g_cached_leapnemesis, Float:g_cached_leapnemesiscooldown, g_cached_leapassassin,
Float:g_cached_leapassassincooldown, g_cached_leapsurvivor, Float:g_cached_leapsurvivorcooldown, g_cached_leapsniper, Float:g_cached_leapsnipercooldown
/*================================================================================
[Natives, Precache and Init]
=================================================================================*/
public plugin_natives()
{
// Player specific natives
register_native("zp_get_user_zombie", "native_get_user_zombie", 1)
register_native("zp_get_user_nemesis", "native_get_user_nemesis", 1)
register_native("zp_get_user_assassin", "native_get_user_assassin", 1)
register_native("zp_get_user_survivor", "native_get_user_survivor", 1)
register_native("zp_get_user_sniper", "native_get_user_sniper", 1)
register_native("zp_get_user_first_zombie", "native_get_user_first_zombie", 1)
register_native("zp_get_user_last_zombie", "native_get_user_last_zombie", 1)
register_native("zp_get_user_last_human", "native_get_user_last_human", 1)
register_native("zp_get_user_zombie_class", "native_get_user_zombie_class", 1)
register_native("zp_get_user_next_class", "native_get_user_next_class", 1)
register_native("zp_set_user_zombie_class", "native_set_user_zombie_class", 1)
register_native("zp_get_user_ammo_packs", "native_get_user_ammo_packs", 1)
register_native("zp_set_user_ammo_packs", "native_set_user_ammo_packs", 1)
register_native("zp_get_zombie_maxhealth", "native_get_zombie_maxhealth", 1)
register_native("zp_get_user_batteries", "native_get_user_batteries", 1)
register_native("zp_set_user_batteries", "native_set_user_batteries", 1)
register_native("zp_get_user_nightvision", "native_get_user_nightvision", 1)
register_native("zp_set_user_nightvision", "native_set_user_nightvision", 1)
register_native("zp_infect_user", "native_infect_user", 1)
register_native("zp_disinfect_user", "native_disinfect_user", 1)
register_native("zp_make_user_nemesis", "native_make_user_nemesis", 1)
register_native("zp_make_user_assassin", "native_make_user_assassin", 1)
register_native("zp_make_user_survivor", "native_make_user_survivor", 1)
register_native("zp_make_user_sniper", "native_make_user_sniper", 1)
register_native("zp_respawn_user", "native_respawn_user", 1)
register_native("zp_force_buy_extra_item", "native_force_buy_extra_item", 1)
register_native("zp_override_user_model", "native_override_user_model", 1)
// Round natives
register_native("zp_has_round_started", "native_has_round_started", 1)
register_native("zp_is_nemesis_round", "native_is_nemesis_round", 1)
register_native("zp_is_assassin_round", "native_is_assassin_round", 1)
register_native("zp_is_survivor_round", "native_is_survivor_round", 1)
register_native("zp_is_sniper_round", "native_is_sniper_round", 1)
register_native("zp_is_swarm_round", "native_is_swarm_round", 1)
register_native("zp_is_plague_round", "native_is_plague_round", 1)
register_native("zp_is_armageddon_round", "native_is_armageddon_round", 1)
register_native("zp_is_apocalypse_round", "native_is_apocalypse_round", 1)
register_native("zp_is_nightmare_round", "native_is_nightmare_round", 1)
register_native("zp_get_zombie_count", "native_get_zombie_count", 1)
register_native("zp_get_human_count", "native_get_human_count", 1)
register_native("zp_get_nemesis_count", "native_get_nemesis_count", 1)
register_native("zp_get_assassin_count", "native_get_assassin_count", 1)
register_native("zp_get_survivor_count", "native_get_survivor_count", 1)
register_native("zp_get_sniper_count", "native_get_sniper_count", 1)
// External additions natives
register_native("zp_register_extra_item", "native_register_extra_item", 1)
register_native("zp_register_zombie_class", "native_register_zombie_class", 1)
register_native("zp_get_extra_item_id", "native_get_extra_item_id", 1)
register_native("zp_get_zombie_class_id", "native_get_zombie_class_id", 1)
}
public plugin_precache()
{
precache_sound("fvox/biohazard_detected.wav");
precache_sound("fvox/one.wav");
precache_sound("fvox/two.wav");
precache_sound("fvox/three.wav");
precache_sound("fvox/four.wav");
precache_sound("fvox/five.wav");
precache_sound("fvox/six.wav");
precache_sound("fvox/seven.wav");
precache_sound("fvox/eight.wav");
precache_sound("fvox/nine.wav");
precache_sound("fvox/ten.wav");
precache_sound("fvox/eleven.wav");
precache_sound("fvox/twelve.wav");
precache_sound("fvox/thirteen.wav");
precache_sound("fvox/fourteen.wav");
precache_sound("fvox/fifteen.wav");
// Register earlier to show up in plugins list properly after plugin disable/error at loading
register_plugin("Zombie Plague", PLUGIN_VERSION, "MeRcyLeZZ")
// To switch plugin on/off
register_concmd("zp_toggle", "cmd_toggle", _, "<1/0> - Enable/Disable Zombie Plague (will restart the current map)", 0)
cvar_toggle = register_cvar("zp_on", "1")
// Plugin disabled?
if (!get_pcvar_num(cvar_toggle)) return;
g_pluginenabled = true
// Initialize a few dynamically sized arrays (alright, maybe more than just a few...)
model_human = ArrayCreate(32, 1)
model_nemesis = ArrayCreate(32, 1)
model_assassin = ArrayCreate(32, 1)
model_survivor = ArrayCreate(32, 1)
model_sniper = ArrayCreate(32, 1)
model_admin_human = ArrayCreate(32, 1)
model_admin_zombie = ArrayCreate(32, 1)
g_modelindex_human = ArrayCreate(1, 1)
g_modelindex_nemesis = ArrayCreate(1, 1)
g_modelindex_assassin = ArrayCreate(1, 1)
g_modelindex_survivor = ArrayCreate(1, 1)
g_modelindex_sniper = ArrayCreate(1, 1)
g_modelindex_admin_human = ArrayCreate(1, 1)
g_modelindex_admin_zombie = ArrayCreate(1, 1)
sound_win_zombies = ArrayCreate(64, 1)
sound_win_humans = ArrayCreate(64, 1)
sound_win_no_one = ArrayCreate(64, 1)
zombie_infect = ArrayCreate(64, 1)
zombie_pain = ArrayCreate(64, 1)
nemesis_pain = ArrayCreate(64, 1)
assassin_pain = ArrayCreate(64, 1)
zombie_die = ArrayCreate(64, 1)
zombie_fall = ArrayCreate(64, 1)
zombie_miss_slash = ArrayCreate(64, 1)
zombie_miss_wall = ArrayCreate(64, 1)
zombie_hit_normal = ArrayCreate(64, 1)
zombie_hit_stab = ArrayCreate(64, 1)
zombie_idle = ArrayCreate(64, 1)
zombie_idle_last = ArrayCreate(64, 1)
zombie_madness = ArrayCreate(64, 1)
sound_nemesis = ArrayCreate(64, 1)
sound_assassin = ArrayCreate(64, 1)
sound_survivor = ArrayCreate(64, 1)
sound_sniper = ArrayCreate(64, 1)
sound_swarm = ArrayCreate(64, 1)
sound_multi = ArrayCreate(64, 1)
sound_plague = ArrayCreate(64, 1)
sound_armageddon = ArrayCreate(64, 1)
sound_apocalypse = ArrayCreate(64, 1)
sound_nightmare = ArrayCreate(64, 1)
grenade_infect = ArrayCreate(64, 1)
grenade_infect_player = ArrayCreate(64, 1)
grenade_fire = ArrayCreate(64, 1)
grenade_fire_player = ArrayCreate(64, 1)
grenade_frost = ArrayCreate(64, 1)
grenade_frost_player = ArrayCreate(64, 1)
grenade_frost_break = ArrayCreate(64, 1)
grenade_flare = ArrayCreate(64, 1)
sound_antidote = ArrayCreate(64, 1)
sound_thunder = ArrayCreate(64, 1)
sound_ambience1 = ArrayCreate(64, 1)
sound_ambience2 = ArrayCreate(64, 1)
sound_ambience3 = ArrayCreate(64, 1)
sound_ambience4 = ArrayCreate(64, 1)
sound_ambience5 = ArrayCreate(64, 1)
sound_ambience6 = ArrayCreate(64, 1)
sound_ambience7 = ArrayCreate(64, 1)
sound_ambience8 = ArrayCreate(64, 1)
sound_ambience9 = ArrayCreate(64, 1)
sound_ambience10 = ArrayCreate(64, 1)
sound_ambience1_duration = ArrayCreate(1, 1)
sound_ambience2_duration = ArrayCreate(1, 1)
sound_ambience3_duration = ArrayCreate(1, 1)
sound_ambience4_duration = ArrayCreate(1, 1)
sound_ambience5_duration = ArrayCreate(1, 1)
sound_ambience6_duration = ArrayCreate(1, 1)
sound_ambience7_duration = ArrayCreate(1, 1)
sound_ambience8_duration = ArrayCreate(1, 1)
sound_ambience9_duration = ArrayCreate(1, 1)
sound_ambience10_duration = ArrayCreate(1, 1)
sound_ambience1_ismp3 = ArrayCreate(1, 1)
sound_ambience2_ismp3 = ArrayCreate(1, 1)
sound_ambience3_ismp3 = ArrayCreate(1, 1)
sound_ambience4_ismp3 = ArrayCreate(1, 1)
sound_ambience5_ismp3 = ArrayCreate(1, 1)
sound_ambience6_ismp3 = ArrayCreate(1, 1)
sound_ambience7_ismp3 = ArrayCreate(1, 1)
sound_ambience8_ismp3 = ArrayCreate(1, 1)
sound_ambience9_ismp3 = ArrayCreate(1, 1)
sound_ambience10_ismp3 = ArrayCreate(1, 1)
g_primary_items = ArrayCreate(32, 1)
g_secondary_items = ArrayCreate(32, 1)
g_additional_items = ArrayCreate(32, 1)
g_primary_weaponids = ArrayCreate(1, 1)
g_secondary_weaponids = ArrayCreate(1, 1)
g_extraweapon_names = ArrayCreate(32, 1)
g_extraweapon_items = ArrayCreate(32, 1)
g_extraweapon_costs = ArrayCreate(1, 1)
g_sky_names = ArrayCreate(32, 1)
lights_thunder = ArrayCreate(32, 1)
zombie_decals = ArrayCreate(1, 1)
g_objective_ents = ArrayCreate(32, 1)
g_extraitem_name = ArrayCreate(32, 1)
g_extraitem_cost = ArrayCreate(1, 1)
g_extraitem_team = ArrayCreate(1, 1)
g_extraitem2_realname = ArrayCreate(32, 1)
g_extraitem2_name = ArrayCreate(32, 1)
g_extraitem2_cost = ArrayCreate(1, 1)
g_extraitem2_team = ArrayCreate(1, 1)
g_extraitem_new = ArrayCreate(1, 1)
g_zclass_name = ArrayCreate(32, 1)
g_zclass_info = ArrayCreate(32, 1)
g_zclass_modelsstart = ArrayCreate(1, 1)
g_zclass_modelsend = ArrayCreate(1, 1)
g_zclass_playermodel = ArrayCreate(32, 1)
g_zclass_modelindex = ArrayCreate(1, 1)
g_zclass_clawmodel = ArrayCreate(32, 1)
g_zclass_hp = ArrayCreate(1, 1)
g_zclass_spd = ArrayCreate(1, 1)
g_zclass_grav = ArrayCreate(1, 1)
g_zclass_kb = ArrayCreate(1, 1)
g_zclass2_realname = ArrayCreate(32, 1)
g_zclass2_name = ArrayCreate(32, 1)
g_zclass2_info = ArrayCreate(32, 1)
g_zclass2_modelsstart = ArrayCreate(1, 1)
g_zclass2_modelsend = ArrayCreate(1, 1)
g_zclass2_playermodel = ArrayCreate(32, 1)
g_zclass2_modelindex = ArrayCreate(1, 1)
g_zclass2_clawmodel = ArrayCreate(32, 1)
g_zclass2_hp = ArrayCreate(1, 1)
g_zclass2_spd = ArrayCreate(1, 1)
g_zclass2_grav = ArrayCreate(1, 1)
g_zclass2_kb = ArrayCreate(1, 1)
g_zclass_new = ArrayCreate(1, 1)
// Allow registering stuff now
g_arrays_created = true
// Load customization data
load_customization_from_files()
new i, buffer[100]
// Load up the hard coded extra items
native_register_extra_item2("NightVision", g_extra_costs2[EXTRA_NVISION], ZP_TEAM_HUMAN)
native_register_extra_item2("T-Virus Antidote", g_extra_costs2[EXTRA_ANTIDOTE], ZP_TEAM_ZOMBIE)
native_register_extra_item2("Zombie Madness", g_extra_costs2[EXTRA_MADNESS], ZP_TEAM_ZOMBIE)
native_register_extra_item2("Infection Bomb", g_extra_costs2[EXTRA_INFBOMB], ZP_TEAM_ZOMBIE)
// Extra weapons
for (i = 0; i < ArraySize(g_extraweapon_names); i++)
{
ArrayGetString(g_extraweapon_names, i, buffer, charsmax(buffer))
native_register_extra_item2(buffer, ArrayGetCell(g_extraweapon_costs, i), ZP_TEAM_HUMAN)
}
// Custom player models
for (i = 0; i < ArraySize(model_human); i++)
{
ArrayGetString(model_human, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_human, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_nemesis); i++)
{
ArrayGetString(model_nemesis, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_nemesis, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_assassin); i++)
{
ArrayGetString(model_assassin, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_assassin, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_survivor); i++)
{
ArrayGetString(model_survivor, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_survivor, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_sniper); i++)
{
ArrayGetString(model_sniper, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_sniper, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_admin_zombie); i++)
{
ArrayGetString(model_admin_zombie, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_admin_zombie, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
for (i = 0; i < ArraySize(model_admin_human); i++)
{
ArrayGetString(model_admin_human, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
ArrayPushCell(g_modelindex_admin_human, engfunc(EngFunc_PrecacheModel, buffer))
if (g_force_consistency == 1) force_unmodified(force_model_samebounds, {0,0,0}, {0,0,0}, buffer)
if (g_force_consistency == 2) force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, buffer)
}
// Custom weapon models
engfunc(EngFunc_PrecacheModel, model_vknife_human)
engfunc(EngFunc_PrecacheModel, model_vknife_nemesis)
engfunc(EngFunc_PrecacheModel, model_vknife_assassin)
engfunc(EngFunc_PrecacheModel, model_vxm1014_survivor)
engfunc(EngFunc_PrecacheModel, model_pxm1014_survivor)
engfunc(EngFunc_PrecacheModel, model_vak47_survivor)
engfunc(EngFunc_PrecacheModel, model_pak47_survivor)
engfunc(EngFunc_PrecacheModel, model_vm4a1_survivor)
engfunc(EngFunc_PrecacheModel, model_pm4a1_survivor)
engfunc(EngFunc_PrecacheModel, model_vawp_sniper)
engfunc(EngFunc_PrecacheModel, model_pawp_sniper)
engfunc(EngFunc_PrecacheModel, model_grenade_infect)
engfunc(EngFunc_PrecacheModel, model_grenade_fire)
engfunc(EngFunc_PrecacheModel, model_grenade_frost)
engfunc(EngFunc_PrecacheModel, model_grenade_flare)
engfunc(EngFunc_PrecacheModel, model_vknife_admin_human)
engfunc(EngFunc_PrecacheModel, model_vknife_admin_zombie)
// Custom sprites for grenades
g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring)
g_flameSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_fire)
g_smokeSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_smoke)
g_glassSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_glass)
g_hExplode = engfunc( EngFunc_PrecacheModel, HE_MODEL_EXPLODE );
//engfunc( EngFunc_PrecacheSound, HE_SOUND_EXPLODE );
// Custom sounds
for (i = 0; i < ArraySize(sound_win_zombies); i++)
{
ArrayGetString(sound_win_zombies, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_win_humans); i++)
{
ArrayGetString(sound_win_humans, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_win_no_one); i++)
{
ArrayGetString(sound_win_no_one, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_infect); i++)
{
ArrayGetString(zombie_infect, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_pain); i++)
{
ArrayGetString(zombie_pain, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(nemesis_pain); i++)
{
ArrayGetString(nemesis_pain, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(assassin_pain); i++)
{
ArrayGetString(assassin_pain, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_die); i++)
{
ArrayGetString(zombie_die, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_fall); i++)
{
ArrayGetString(zombie_fall, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_miss_slash); i++)
{
ArrayGetString(zombie_miss_slash, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_miss_wall); i++)
{
ArrayGetString(zombie_miss_wall, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_hit_normal); i++)
{
ArrayGetString(zombie_hit_normal, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_hit_stab); i++)
{
ArrayGetString(zombie_hit_stab, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_idle); i++)
{
ArrayGetString(zombie_idle, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_idle_last); i++)
{
ArrayGetString(zombie_idle_last, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(zombie_madness); i++)
{
ArrayGetString(zombie_madness, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_nemesis); i++)
{
ArrayGetString(sound_nemesis, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_assassin); i++)
{
ArrayGetString(sound_assassin, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_survivor); i++)
{
ArrayGetString(sound_survivor, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_sniper); i++)
{
ArrayGetString(sound_sniper, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_swarm); i++)
{
ArrayGetString(sound_swarm, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_multi); i++)
{
ArrayGetString(sound_multi, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_plague); i++)
{
ArrayGetString(sound_plague, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_armageddon); i++)
{
ArrayGetString(sound_armageddon, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_apocalypse); i++)
{
ArrayGetString(sound_apocalypse, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_nightmare); i++)
{
ArrayGetString(sound_nightmare, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_infect); i++)
{
ArrayGetString(grenade_infect, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_infect); i++)
{
ArrayGetString(grenade_infect, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_infect_player); i++)
{
ArrayGetString(grenade_infect_player, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_fire); i++)
{
ArrayGetString(grenade_fire, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_fire_player); i++)
{
ArrayGetString(grenade_fire_player, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_frost); i++)
{
ArrayGetString(grenade_frost, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_frost_player); i++)
{
ArrayGetString(grenade_frost_player, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_frost_break); i++)
{
ArrayGetString(grenade_frost_break, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(grenade_flare); i++)
{
ArrayGetString(grenade_flare, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_antidote); i++)
{
ArrayGetString(sound_antidote, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
for (i = 0; i < ArraySize(sound_thunder); i++)
{
ArrayGetString(sound_thunder, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheSound, buffer)
}
// Ambience Sounds
if (g_ambience_sounds[AMBIENCE_SOUNDS_INFECTION])
{
for (i = 0; i < ArraySize(sound_ambience1); i++)
{
ArrayGetString(sound_ambience1, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience1_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_NEMESIS])
{
for (i = 0; i < ArraySize(sound_ambience2); i++)
{
ArrayGetString(sound_ambience2, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience2_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_ASSASSIN])
{
for (i = 0; i < ArraySize(sound_ambience3); i++)
{
ArrayGetString(sound_ambience3, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience3_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_SURVIVOR])
{
for (i = 0; i < ArraySize(sound_ambience4); i++)
{
ArrayGetString(sound_ambience4, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience4_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_SNIPER])
{
for (i = 0; i < ArraySize(sound_ambience5); i++)
{
ArrayGetString(sound_ambience5, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience5_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_SWARM])
{
for (i = 0; i < ArraySize(sound_ambience6); i++)
{
ArrayGetString(sound_ambience6, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience6_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_PLAGUE])
{
for (i = 0; i < ArraySize(sound_ambience7); i++)
{
ArrayGetString(sound_ambience7, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience7_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_ARMA])
{
for (i = 0; i < ArraySize(sound_ambience8); i++)
{
ArrayGetString(sound_ambience8, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience8_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_APOC])
{
for (i = 0; i < ArraySize(sound_ambience9); i++)
{
ArrayGetString(sound_ambience9, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience9_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
if (g_ambience_sounds[AMBIENCE_SOUNDS_NIGHT])
{
for (i = 0; i < ArraySize(sound_ambience10); i++)
{
ArrayGetString(sound_ambience10, i, buffer, charsmax(buffer))
if (ArrayGetCell(sound_ambience10_ismp3, i))
{
format(buffer, charsmax(buffer), "sound/%s", buffer)
engfunc(EngFunc_PrecacheGeneric, buffer)
}
else
{
engfunc(EngFunc_PrecacheSound, buffer)
}
}
}
// CS sounds (just in case)
engfunc(EngFunc_PrecacheSound, sound_flashlight)
engfunc(EngFunc_PrecacheSound, sound_buyammo)
engfunc(EngFunc_PrecacheSound, sound_armorhit)
new ent
// Fake Hostage (to force round ending)
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "hostage_entity"))
if (pev_valid(ent))
{
engfunc(EngFunc_SetOrigin, ent, Float:{8192.0,8192.0,8192.0})
dllfunc(DLLFunc_Spawn, ent)
}
// Weather/ambience effects
if (g_ambience_fog)
{
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_fog"))
if (pev_valid(ent))
{
fm_set_kvd(ent, "density", g_fog_density, "env_fog")
fm_set_kvd(ent, "rendercolor", g_fog_color, "env_fog")
}
}
if (g_ambience_rain) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_rain"))
if (g_ambience_snow) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_snow"))
// Prevent some entities from spawning
g_fwSpawn = register_forward(FM_Spawn, "fw_Spawn")
// Prevent hostage sounds from being precached
g_fwPrecacheSound = register_forward(FM_PrecacheSound, "fw_PrecacheSound")
}
public plugin_init()
{
// Plugin disabled?
if (!g_pluginenabled) return;
// No zombie classes?
if (!g_zclass_i) set_fail_state("No zombie classes loaded!")
// Events
register_dictionary("zp_countdown_remix.txt");
register_event("DeathMsg", "Event_DeathMsg", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("StatusValue", "event_show_status", "be", "1=2", "2!0")
register_event("StatusValue", "event_hide_status", "be", "1=1", "2=0")
register_event( "StatusValue", "ShowStatus", "be", "1=2", "2!0" );
register_event( "StatusValue", "HideStatus", "be", "1=1", "2=0" );
register_logevent("logevent_round_start",2, "1=Round_Start")
register_logevent("logevent_round_end", 2, "1=Round_End")
register_event("AmmoX", "event_ammo_x", "be")
if (g_ambience_sounds[AMBIENCE_SOUNDS_INFECTION] || g_ambience_sounds[AMBIENCE_SOUNDS_NEMESIS] || g_ambience_sounds[AMBIENCE_SOUNDS_ASSASSIN] || g_ambience_sounds[AMBIENCE_SOUNDS_SURVIVOR] || g_ambience_sounds[AMBIENCE_SOUNDS_SNIPER]
|| g_ambience_sounds[AMBIENCE_SOUNDS_SWARM] || g_ambience_sounds[AMBIENCE_SOUNDS_PLAGUE] || g_ambience_sounds[AMBIENCE_SOUNDS_ARMA] || g_ambience_sounds[AMBIENCE_SOUNDS_APOC] || g_ambience_sounds[AMBIENCE_SOUNDS_NIGHT])
register_event("30", "event_intermission", "a")
g_iSize = sizeof( g_flCoords );
g_MaxPlayers = get_maxplayers()
// HAM Forwards
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_Post", 1)
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary")
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary")
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary")
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_pushable", "fw_UsePushable")
RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
RegisterHam(Ham_AddPlayerItem, "player", "fw_AddPlayerItem")
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
// FM Forwards
register_forward(FM_ClientDisconnect, "fw_ClientDisconnect")
register_forward(FM_ClientDisconnect, "fw_ClientDisconnect_Post", 1)
register_forward(FM_ClientKill, "fw_ClientKill")
register_forward(FM_EmitSound, "fw_EmitSound")
if (!g_handle_models_on_separate_ent) register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
register_forward(FM_GetGameDescription, "fw_GetGameDescription")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
unregister_forward(FM_Spawn, g_fwSpawn)
unregister_forward(FM_PrecacheSound, g_fwPrecacheSound)
// Client commands
register_clcmd("say zpmenu", "clcmd_saymenu")
register_clcmd("say /zpmenu", "clcmd_saymenu")
register_clcmd("say unstuck", "clcmd_sayunstuck")
register_clcmd("say /unstuck", "clcmd_sayunstuck")
register_clcmd("nightvision", "clcmd_nightvision")
register_clcmd("drop", "clcmd_drop")
register_clcmd("chooseteam", "clcmd_changeteam")
register_clcmd("jointeam", "clcmd_changeteam")
register_clcmd("fuckthis", "clcmd_fuckthis")
// Menus
register_menu("Game Menu", KEYSMENU, "menu_game")
register_menu("Buy Menu 1", KEYSMENU, "menu_buy1")
register_menu("Buy Menu 2", KEYSMENU, "menu_buy2")
register_menu("Admin Menu", KEYSMENU, "menu_admin")
register_menu("Admin Modes Menu", KEYSMENU, "menu_modes_admin")
// Admin commands
register_concmd("zp_zombie", "cmd_zombie", _, "<target> - Turn someone into a Zombie", 0)
register_concmd("zp_human", "cmd_human", _, "<target> - Turn someone back to Human", 0)
register_concmd("zp_nemesis", "cmd_nemesis", _, "<target> - Turn someone into a Nemesis", 0)
register_concmd("zp_assassin", "cmd_assassin", _, "<target> - Turn someone into an Assassin", 0)
register_concmd("zp_survivor", "cmd_survivor", _, "<target> - Turn someone into a Survivor", 0)
register_concmd("zp_sniper", "cmd_sniper", _, "<target> - Turn someone into a Sniper", 0)
register_concmd("zp_respawn", "cmd_respawn", _, "<target> - Respawn someone", 0)
register_concmd("zp_swarm", "cmd_swarm", _, " - Start Swarm Mode", 0)
register_concmd("zp_multi", "cmd_multi", _, " - Start Multi Infection", 0)
register_concmd("zp_plague", "cmd_plague", _, " - Start Plague Mode", 0)
register_concmd("zp_armageddon", "cmd_armageddon", _, " - Start Armageddon Mode", 0)
register_concmd("zp_apocalypse", "cmd_apocalypse", _, " - Start Apocalypse Mode", 0)
register_concmd("zp_nightmare", "cmd_nightmare", _, " - Start Nightmare Mode", 0)
// Message IDs
g_msgScoreInfo = get_user_msgid("ScoreInfo")
g_msgTeamInfo = get_user_msgid("TeamInfo")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreAttrib = get_user_msgid("ScoreAttrib")
g_msgSetFOV = get_user_msgid("SetFOV")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgScreenShake = get_user_msgid("ScreenShake")
...


![[Image: MESHrFA.png]](http://i.imgur.com/MESHrFA.png)





![[Image: wivcpk.gif]](http://i60.tinypic.com/wivcpk.gif)