As vrea sa maresc hp-ul la toate clasele de zm cu 8000 la fiecare
Acesta este biohazard.sma
- | Afiseaza codul
/* Biohazard - Zombie Mod, Classic Infection with new modes * Author: cheap_suit, CO-Author: The YONTU * Credits: sDs|Aragon* */ #define PLUGIN_NAME "Biohazard - Zombie Mod" #define PLUGIN_VERSION "3.1" #define PLUGIN_AUTHOR "cheap_suit" #include < amxmodx > #include < amxmisc > #include < fakemeta > #include < hamsandwich > #include < xs > native get_user_golds( id ); native is_user_vip( id ); static const ServerLicensedIp[ ] = "192.168.69.108"; // Aici eliminati/adaugati slash-urile(//) din fata linii daca vreti sa fie activate/dezactivate #define ULTRA_BLOOD // Sare mai mult sange cand infectezi #define GRENADE_STATUS // Cand tii o grenada in mana in stanga sus va aparea o imagine specifica grenadei #define FOG_ENABLE 1 #define FOG_DENSITY "0.0025" #define FOG_COLOR "128 128 128" //"127 170 255" #define DEFAULT_PMODEL "models/player/bio30_zombie/bio30_zombie.mdl" // Zombie Model #define DEFAULT_WMODEL "models/player/bio30_zombie/claws_zombie.mdl" // Zombie Hands #define DEFAULT_HEALTH 400.0 // Health value #define DEFAULT_SPEED 290.0 // Speed value #define DEFAULT_GRAVITY 0.8 // Gravity multiplier #define DEFAULT_ATTACK 2.0 // Zombie damage multiplier #define DEFAULT_REGENDLY 0.18 // Regeneration delay value #define DEFAULT_KNOCKBACK 1.0 // Knockback multiplier #define DEFAULT_NOFLASH 1.0 // Set 1.0 for Zombie No flash #define DEFAULT_ONLYVIP 0.0 // Set 1.0 for Zombie Class Only VIP #define clamp_byte(%1) ( clamp( %1, 0, 255 ) ) #define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) ) #define FFADE_IN 0x0000 // Just here so we don't pass 0 into the function #define FFADE_OUT 0x0001 // Fade out (not in) #define FFADE_MODULATE 0x0002 // Modulate (don't blend) #define FFADE_STAYOUT 0x0004 // ignores the duration, stays faded out until new ScreenFade message received #define UNIT_SECOND (1<<12) #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 OFFSET_LASTPRIM 368 #define OFFSET_LASTSEC 369 #define OFFSET_LASTKNI 370 #define TASKID_COUNTDOWN 452 #define TASKID_STRIPNGIVE 698 #define TASKID_NEWROUND 641 #define TASKID_INITROUND 222 #define TASKID_STARTROUND 153 #define TASKID_BALANCETEAM 375 #define TASKID_UPDATESCR 264 #define TASKID_SPAWNDELAY 786 #define TASKID_WEAPONSMENU 564 #define TASKID_CHECKSPAWN 423 #define TASKID_CZBOTPDATA 312 #define TASK_GLOW_DIE 1212 #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 HAS_NVG (1<<0) #define ATTRIB_BOMB (1<<1) #define DMG_HEGRENADE (1<<24) #define MODEL_CLASSNAME "player_model" #define IMPULSE_FLASHLIGHT 100 #define MAX_SPAWNS 128 #define MAX_CLASSES 14 #define MAX_DATA 13 #define DATA_HEALTH 0 #define DATA_SPEED 1 #define DATA_GRAVITY 2 #define DATA_ATTACK 3 #define DATA_REGENDLY 4 #define DATA_KNOCKBACK 5 #define DATA_NOFLASH 6 #define DATA_ONLYVIP 7 #define fm_get_user_team(%1) get_pdata_int(%1, OFFSET_TEAM) #define fm_get_user_deaths(%1) get_pdata_int(%1, OFFSET_DEATH) #define fm_set_user_deaths(%1,%2) set_pdata_int(%1, OFFSET_DEATH, %2) #define fm_get_user_money(%1) get_pdata_int(%1, OFFSET_CSMONEY) #define fm_get_user_armortype(%1) get_pdata_int(%1, OFFSET_ARMOR) #define fm_set_user_armortype(%1,%2) set_pdata_int(%1, OFFSET_ARMOR, %2) #define fm_get_weapon_id(%1) get_pdata_int(%1, OFFSET_WEAPONTYPE, EXTRAOFFSET_WEAPONS) #define fm_get_weapon_ammo(%1) get_pdata_int(%1, OFFSET_CLIPAMMO, EXTRAOFFSET_WEAPONS) #define fm_set_weapon_ammo(%1,%2) set_pdata_int(%1, OFFSET_CLIPAMMO, %2, EXTRAOFFSET_WEAPONS) #define fm_reset_user_primary(%1) set_pdata_int(%1, OFFSET_PRIMARYWEAPON, 0) #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_user_model(%1,%2,%3) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, %1), "model", %2, %3) #define _random(%1) random_num(0, %1 - 1) #define AMMOWP_NULL (1<<0 | 1<<CSW_KNIFE | 1<<CSW_FLASHBANG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4) enum { MAX_CLIP = 0, MAX_AMMO } enum { MENU_PRIMARY = 1, MENU_SECONDARY } enum { CS_TEAM_UNASSIGNED = 0, CS_TEAM_T, CS_TEAM_CT, CS_TEAM_SPECTATOR } enum { CS_ARMOR_NONE = 0, CS_ARMOR_KEVLAR, CS_ARMOR_VESTHELM } enum { KBPOWER_357SIG = 0, KBPOWER_762NATO, KBPOWER_BUCKSHOT, KBPOWER_45ACP, KBPOWER_556NATO, KBPOWER_9MM, KBPOWER_57MM, KBPOWER_338MAGNUM, KBPOWER_556NATOBOX, KBPOWER_50AE } new g_zombie_weapname[] = "melee" new g_infection_name[] = "infection" // primary weapons (menu|game) new g_primaryweapons[][][] = { { "M4A1 Carbine", "weapon_m4a1" }, { "AK-47 Kalashnikov", "weapon_ak47" }, { "Steyr AUG A1", "weapon_aug" }, { "SG-552 Commando", "weapon_sg552" }, //{ "Galil", "weapon_galil" }, { "Famas", "weapon_famas" }, { "MP5 Navy", "weapon_mp5navy" }, { "XM1014 M4", "weapon_xm1014" }, { "M3 Super 90", "weapon_m3" }, //{ "P90", "weapon_p90" }, { "M249 Para Machinegun", "weapon_m249" }, { "SG-550 Auto-Sniper", "weapon_sg550" }, { "G3SG1 Auto-Sniper", "weapon_g3sg1" }, { "AWP Magnum Sniper", "weapon_awp" } } // secondary weapons (menu|game) new g_secondaryweapons[][][] = { { "Desert Eagle .50 AE", "weapon_deagle" }, { "USP .45 ACP Tactical", "weapon_usp" }, { "Dual Elite Berettas", "weapon_elite" }, { "Glock 18C", "weapon_glock18" } } // grenade loadout (game) new g_grenades[][] = { "weapon_hegrenade", "weapon_flashbang", "weapon_smokegrenade" } new Float:g_knockbackpower[] = { 3.0, // KBPOWER_357SIG 4.0, // KBPOWER_762NATO 9.5, // KBPOWER_BUCKSHOT 3.0, // KBPOWER_45ACP 4.5, // KBPOWER_556NATO 3.0, // KBPOWER_9MM 3.5, // KBPOWER_57MM 12.0, // KBPOWER_338MAGNUM 4.0, // KBPOWER_556NATOBOX 3.8 // KBPOWER_50AE } new g_appear_sounds[ ][ ] = { "Biohazard30/zombie_coming_1.wav", "Biohazard30/zombie_coming_2.wav", "Biohazard30/zombie_coming_3.wav", "Biohazard30/zombie_comeback.wav" } new g_survivor_win_sounds[][] = { "Biohazard30/survivor_win1.wav", "Biohazard30/survivor_win2.wav", "Biohazard30/survivor_win3.wav" } new g_zombie_win_sounds[][] = { "Biohazard30/zombie_win1.wav", "Biohazard30/zombie_win2.wav", "Biohazard30/zombie_win3.wav" } new g_scream_sounds[][] = { "Biohazard30/zombie_infec1.wav", "Biohazard30/zombie_infec2.wav", "Biohazard30/zombie_infec3.wav" } new g_zombie_miss_sounds[][] = { "zombie/claw_miss1.wav", "zombie/claw_miss2.wav" } new g_zombie_hit_sounds[][] = { "zombie/claw_strike1.wav", "zombie/claw_strike2.wav", "zombie/claw_strike3.wav" } new g_zombie_die_sounds[][] = { "Biohazard30/zombie_die1.wav", "Biohazard30/zombie_die2.wav", "Biohazard30/zombie_die3.wav", "Biohazard30/zombie_die4.wav", "Biohazard30/zombie_die5.wav" } new CountDownSounds[][] = { "Biohazard30/Countdown/timer01.wav", "Biohazard30/Countdown/timer02.wav", "Biohazard30/Countdown/timer03.wav", "Biohazard30/Countdown/timer04.wav", "Biohazard30/Countdown/timer05.wav", "Biohazard30/Countdown/timer06.wav", "Biohazard30/Countdown/timer07.wav", "Biohazard30/Countdown/timer08.wav", "Biohazard30/Countdown/timer09.wav", "Biohazard30/Countdown/timer10.wav" } new const g_weapon_ammo[ ][ ] = { { -1, -1 }, // NULL { 13, 52 }, // CSW_P228 { -1, -1 }, // NULL { 15, 75 }, // CSW_SCOUT { -1, -1 }, // CSW_HEGRENADE { 15, 30 }, // CSW_XM1014 { -1, -1 }, // CSW_C4 { 35, 140 }, // CSW_MAC10 { 40, 120 }, // CSW_AUG { -1, -1 }, // CSW_SMOKEGRENADE { 30, 150 }, // CSW_ELITE { 20, 100 }, // CSW_FIVESEVEN { 25, 100 }, // CSW_UMP45 { 40, 80 }, // CSW_SG550 { 40, 160 }, // CSW_GALIL { 30, 120 }, // CSW_FAMAS { 20, 160 }, // CSW_USP { 20, 120 }, // CSW_GLOCK18 { 3, 30 }, // CSW_AWP { 40, 120 }, // CSW_MP5NAVY { 100, 200 }, // CSW_M249 { 13, 39 }, // CSW_M3 { 45, 90 }, // CSW_M4A1 { 30, 120 }, // CSW_TMP { 20, 60 }, // CSW_G3SG1 { -1, -1 }, // CSW_FLASHBANG { 15, 45 }, // CSW_DEAGLE { 25, 125 }, // CSW_SG552 { 40, 120 }, // CSW_AK47 { -1, -1 }, // CSW_KNIFE { 50, 130 } // CSW_P90 } new const g_weapon_knockback[] = { -1, KBPOWER_357SIG, -1, KBPOWER_762NATO, -1, KBPOWER_BUCKSHOT, -1, KBPOWER_45ACP, KBPOWER_556NATO, -1, KBPOWER_9MM, KBPOWER_57MM, KBPOWER_45ACP, KBPOWER_556NATO, KBPOWER_556NATO, KBPOWER_556NATO, KBPOWER_45ACP, KBPOWER_9MM, KBPOWER_338MAGNUM, KBPOWER_9MM, KBPOWER_556NATOBOX, KBPOWER_BUCKSHOT, KBPOWER_556NATO, KBPOWER_9MM, KBPOWER_762NATO, -1, KBPOWER_50AE, KBPOWER_556NATO, KBPOWER_762NATO, -1, KBPOWER_57MM } new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED" , "TERRORIST" , "CT" , "SPECTATOR" } new const g_remove_entities[][] = { "func_bomb_target", "info_bomb_target", "hostage_entity", "monster_scientist", "func_hostage_rescue", "info_hostage_rescue", "info_vip_start", "func_vip_safetyzone", "func_escapezone", "func_buyzone" } new const g_dataname[][] = { "HEALTH", "SPEED", "GRAVITY", "ATTACK", "REGENDLY", "KNOCKBACK", "NOFLASH", "ONLYVIP" } new const g_teaminfo[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" } new SkyTermination[ ][ ] = { "bk", "dn", "ft", "lf", "rt", "up" } // Global Vars new CountDownDelay; new g_maxplayers; new g_spawncount; new g_buyzone; new g_botclient_pdata; new g_menuposition[33]; new g_player_weapons[33][2]; // Sync HUD new g_sync_hpdisplay; new g_sync_msgdisplay; // Forwards new g_fwd_spawn; new g_fwd_result; new g_fwd_infect; new g_fwd_gamestart; // Messages new g_msg_flashlight; new g_msg_teaminfo; new g_msg_scoreattrib; new g_msg_money; new g_msg_scoreinfo; new g_msg_deathmsg; new g_msg_screenfade; new Float:g_buytime; new Float:g_spawns[MAX_SPAWNS+1][9]; new Float:g_vecvel[3]; new Float:g_teams_targettime; new g_switchingteam; // Global Booleans without parametres new bool:g_brestorevel; new bool:g_infecting; new bool:g_gamestarted; new bool:g_roundstarted; new bool:g_roundended; new bool:g_czero; // Global Booleans with parametres new bool:g_disconnected[33]; // Is user Disconnected new bool:g_blockmodel[33]; // Block Model ? new bool:g_showmenu[33]; // Show menu ? new bool:g_menufailsafe[33]; // Show menu fail ? new bool:g_welcomemsg[33]; // Display welcom msg ? new bool:g_suicide[33]; // Is user suicided ? // Zombie Classes & Zombie Configuration new bool:g_zombie[33]; // Is user Zombie ? new bool:g_falling[33]; // Is user Touch floor ? new bool:g_preinfect[33]; // Is user preinfect ? new g_classcount; new g_class_name[MAX_CLASSES+1][32]; new g_class_desc[MAX_CLASSES+1][32]; new g_class_pmodel[MAX_CLASSES+1][64]; new g_class_wmodel[MAX_CLASSES+1][64]; new Float:g_class_data[MAX_CLASSES+1][MAX_DATA]; new g_player_class[33]; new Float:g_regendelay[33]; //new Float:g_hitdelay[33]; new g_mutate[33]; new g_victim[33]; new g_modelent[33]; // Cvars new cvar_randomspawn; new cvar_skyname; new cvar_autoteambalance[4]; new cvar_starttime; new cvar_countdown; new cvar_autonvg; new cvar_winsounds; new cvar_weaponsmenu; new cvar_lights; new cvar_killbonus; new cvar_enabled; new cvar_gamedescription; new cvar_botquota; new cvar_maxzombies; new cvar_flashbang; new cvar_buytime; new cvar_respawnaszombie; new cvar_punishsuicide; new cvar_infectmoney; new cvar_showtruehealth; new cvar_obeyarmor; new cvar_impactexplode; new cvar_caphealthdisplay; new cvar_zombie_hpmulti; new cvar_randomclass; new cvar_zombiemulti; new cvar_ammo; new cvar_killreward; new cvar_painshockfree; new cvar_zombie_class; // Knock back system new cvar_shootobjects; new cvar_pushpwr_weapon; new cvar_pushpwr_zombie; new cvar_knockback_duck; new cvar_knockback; new cvar_knockback_dist; new cvar_biohazard_icon; new cvar_entrie_class_vip; new cvar_zombie_appear_sound; #if defined GRENADE_STATUS // Cvars new cvar_status; new cvar_fire_icon; new cvar_fire_color; new cvar_frost_icon; new cvar_frost_color; new cvar_flare_icon; new cvar_flare_color; // Vars new g_StatusIcon; new g_GrenadeIcon[ 33 ][ 32 ]; #endif public plugin_precache() { new GetUserIp[ 25 ]; get_user_ip( 0, GetUserIp, sizeof( GetUserIp ) - 1, 1 ); if( equal( GetUserIp, ServerLicensedIp ) ) { register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR ); register_cvar( "bh_version", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER ); set_cvar_string( "bh_version", PLUGIN_VERSION ); cvar_enabled = register_cvar("bh_enabled", "1") if(!get_pcvar_num(cvar_enabled)) return cvar_gamedescription = register_cvar("bh_gamedescription", "Biohazard v3.1b") cvar_skyname = register_cvar("bh_skyname", "siv2") cvar_lights = register_cvar("bh_lights", "d") cvar_starttime = register_cvar("bh_starttime", "15.0") cvar_countdown = register_cvar("bh_countdown", "1") cvar_buytime = register_cvar("bh_buytime", "0") cvar_randomspawn = register_cvar("bh_randomspawn", "1") cvar_punishsuicide = register_cvar("bh_punishsuicide", "1") cvar_winsounds = register_cvar("bh_winsounds", "1") cvar_autonvg = register_cvar("bh_autonvg", "1") cvar_respawnaszombie = register_cvar("bh_respawnaszombie", "1") cvar_painshockfree = register_cvar("bh_painshockfree", "1") cvar_knockback = register_cvar("bh_knockback", "1") cvar_knockback_duck = register_cvar("bh_knockback_duck", "1") cvar_knockback_dist = register_cvar("bh_knockback_dist", "280.0") cvar_obeyarmor = register_cvar("bh_obeyarmor", "0") cvar_infectmoney = register_cvar("bh_infectionmoney", "1000") cvar_biohazard_icon = register_cvar("bh_biohazard_icon", "1") cvar_caphealthdisplay = register_cvar("bh_caphealthdisplay", "1") cvar_weaponsmenu = register_cvar("bh_weaponsmenu", "1") cvar_ammo = register_cvar("bh_ammo", "1") cvar_maxzombies = register_cvar("bh_maxzombies", "31") cvar_flashbang = register_cvar("bh_flashbang", "1") cvar_impactexplode = register_cvar("bh_impactexplode", "1") cvar_showtruehealth = register_cvar("bh_showtruehealth", "1") cvar_zombiemulti = register_cvar("bh_zombie_countmulti", "0.15") cvar_zombie_hpmulti = register_cvar("bh_zombie_hpmulti", "10000.0") cvar_zombie_class = register_cvar("bh_zombie_class", "1") cvar_randomclass = register_cvar("bh_randomclass", "1") cvar_killbonus = register_cvar("bh_kill_bonus", "1") cvar_killreward = register_cvar("bh_kill_reward", "2") cvar_shootobjects = register_cvar("bh_shootobjects", "1") cvar_pushpwr_weapon = register_cvar("bh_pushpwr_weapon", "2.0") cvar_pushpwr_zombie = register_cvar("bh_pushpwr_zombie", "5.0") cvar_entrie_class_vip = register_cvar("bh_entrie_class_only_vip", "0") cvar_zombie_appear_sound = register_cvar( "bh_zombie_appear_sound", "2" ); new file[64] get_configsdir(file, 63) format(file, 63, "%s/bh_cvars.cfg", file) if(file_exists(file)) server_cmd( "exec %s", file) new mapname[32] get_mapname(mapname, 31) register_spawnpoints(mapname) register_zombieclasses("bh_zombieclass.ini") register_dictionary("biohazard.txt") precache_model(DEFAULT_PMODEL) precache_model(DEFAULT_WMODEL) new i for(i = 0; i < g_classcount; i++) { precache_model(g_class_pmodel) precache_model(g_class_wmodel) } for( i = 0; i < sizeof g_appear_sounds; i++ ) precache_sound( g_appear_sounds[ i ] ); for(i = 0; i < sizeof g_zombie_miss_sounds; i++) precache_sound(g_zombie_miss_sounds) for(i = 0; i < sizeof g_zombie_hit_sounds; i++) precache_sound(g_zombie_hit_sounds) for(i = 0; i < sizeof g_scream_sounds; i++) precache_sound(g_scream_sounds) for(i = 0; i < sizeof g_zombie_die_sounds; i++) precache_sound(g_zombie_die_sounds) for(i = 0; i < sizeof g_zombie_win_sounds; i++) precache_sound(g_zombie_win_sounds) for(i = 0; i < sizeof CountDownSounds; i++) precache_sound(CountDownSounds) for(i = 0; i < sizeof g_survivor_win_sounds; i++) precache_sound(g_survivor_win_sounds) // Sky Changer new SkyName[ 32 ]; get_pcvar_string( cvar_skyname, SkyName, 31 ); if( strlen( SkyName ) > 0 ) set_cvar_string( "sv_skyname", SkyName ); for( i = 0; i < sizeof SkyTermination; ++i ) { new Sky[ 64 ]; formatex( Sky, sizeof( Sky ) - 1, "gfx/env/%s%s.tga", SkyName, SkyTermination[ i ] ); precache_generic( Sky ); } g_fwd_spawn = register_forward(FM_Spawn, "fwd_spawn") g_buyzone = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone")) if(g_buyzone) { dllfunc(DLLFunc_Spawn, g_buyzone) set_pev(g_buyzone, pev_solid, SOLID_NOT) } new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_bomb_target")) if(ent) { dllfunc(DLLFunc_Spawn, ent) set_pev(ent, pev_solid, SOLID_NOT) } #if FOG_ENABLE ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_fog")) if(ent) { fm_set_kvd(ent, "density", FOG_DENSITY, "env_fog") fm_set_kvd(ent, "rendercolor", FOG_COLOR, "env_fog") } #endif } } public plugin_init() { new GetUserIp[ 25 ]; get_user_ip( 0, GetUserIp, sizeof( GetUserIp ) - 1, 1 ); if( equal( GetUserIp, ServerLicensedIp ) ) { if(!get_pcvar_num(cvar_enabled)) return cvar_botquota = get_cvar_pointer("bot_quota") cvar_autoteambalance[0] = get_cvar_pointer("mp_autoteambalance") cvar_autoteambalance[1] = get_pcvar_num(cvar_autoteambalance[0]) set_pcvar_num(cvar_autoteambalance[0], 0) register_clcmd("jointeam", "cmd_jointeam") register_clcmd("say /class", "cmd_classmenu") register_clcmd("say_team /class", "cmd_classmenu") register_clcmd("say /guns", "cmd_enablemenu") register_clcmd("say_team /guns", "cmd_enablemenu") register_clcmd("say /help", "cmd_helpmotd") register_clcmd("amx_infect", "cmd_infectuser", ADMIN_BAN, "<name or #userid>") register_menu("Equipment", 1023, "action_equip") register_menu("Primary", 1023, "action_prim") register_menu("Secondary", 1023, "action_sec") unregister_forward(FM_Spawn, g_fwd_spawn) register_forward(FM_CmdStart, "fwd_cmdstart") register_forward(FM_EmitSound, "fwd_emitsound") register_forward(FM_GetGameDescription, "fwd_gamedescription") register_forward(FM_CreateNamedEntity, "fwd_createnamedentity") register_forward(FM_ClientKill, "fwd_clientkill") register_forward(FM_PlayerPreThink, "fwd_player_prethink") register_forward(FM_PlayerPreThink, "fwd_player_prethink_post", 1) register_forward(FM_PlayerPostThink, "fwd_player_postthink") register_forward(FM_SetClientKeyValue, "fwd_setclientkeyvalue") RegisterHam(Ham_TakeDamage, "player", "bacon_takedamage_player") RegisterHam(Ham_Killed, "player", "bacon_killed_player") RegisterHam(Ham_Spawn, "player", "bacon_spawn_player_post", 1) RegisterHam(Ham_TraceAttack, "player", "bacon_traceattack_player") RegisterHam(Ham_TraceAttack, "func_pushable", "bacon_traceattack_pushable") RegisterHam(Ham_Use, "func_tank", "bacon_use_tank") RegisterHam(Ham_Use, "func_tankmortar", "bacon_use_tank") RegisterHam(Ham_Use, "func_tankrocket", "bacon_use_tank") RegisterHam(Ham_Use, "func_tanklaser", "bacon_use_tank") RegisterHam(Ham_Use, "func_pushable", "bacon_use_pushable") RegisterHam(Ham_Touch, "func_pushable", "bacon_touch_pushable") RegisterHam(Ham_Touch, "weaponbox", "bacon_touch_weapon") RegisterHam(Ham_Touch, "armoury_entity", "bacon_touch_weapon") RegisterHam(Ham_Touch, "weapon_shield", "bacon_touch_weapon") RegisterHam(Ham_Touch, "grenade", "bacon_touch_grenade") RegisterHam(Ham_Item_Deploy , "weapon_knife", "bacon_claws_deploy_post", 1); register_message(get_user_msgid("Health"), "msg_health") register_message(get_user_msgid("TextMsg"), "msg_textmsg") register_message(get_user_msgid("SendAudio"), "msg_sendaudio") register_message(get_user_msgid("StatusIcon"), "msg_statusicon") register_message(get_user_msgid("ScoreAttrib"), "msg_scoreattrib") register_message(get_user_msgid("DeathMsg"), "msg_deathmsg") register_message(get_user_msgid("ScreenFade"), "msg_screenfade") register_message(get_user_msgid("TeamInfo"), "msg_teaminfo") register_message(get_user_msgid("ClCorpse"), "msg_clcorpse") register_message(get_user_msgid("WeapPickup"), "msg_weaponpickup") register_message(get_user_msgid("AmmoPickup"), "msg_ammopickup") register_event("TextMsg", "event_textmsg", "a", "2=#Game_will_restart_in") register_event("HLTV", "event_newround", "a", "1=0", "2=0") register_event("CurWeapon", "event_curweapon", "be", "1=1") register_event("ArmorType", "event_armortype", "be") register_event("Damage", "event_damage", "be") register_logevent("logevent_round_start", 2, "1=Round_Start") register_logevent("logevent_round_end", 2, "1=Round_End") g_msg_flashlight = get_user_msgid("Flashlight") g_msg_teaminfo = get_user_msgid("TeamInfo") g_msg_scoreattrib = get_user_msgid("ScoreAttrib") g_msg_scoreinfo = get_user_msgid("ScoreInfo") g_msg_deathmsg = get_user_msgid("DeathMsg") g_msg_money = get_user_msgid("Money") g_msg_screenfade = get_user_msgid("ScreenFade") g_fwd_infect = CreateMultiForward("event_infect", ET_IGNORE, FP_CELL, FP_CELL) g_fwd_gamestart = CreateMultiForward("event_gamestart", ET_IGNORE) g_sync_hpdisplay = CreateHudSyncObj() g_sync_msgdisplay = CreateHudSyncObj() g_maxplayers = get_maxplayers() new mod[3] get_modname(mod, 2) g_czero = (mod[0] == 'c' && mod[1] == 'z') ? true : false // Lights Map new lights[2] get_pcvar_string(cvar_lights, lights, 1) if(strlen(lights) > 0) { set_task(3.0, "task_lights", _, _, _, "b") set_cvar_num("sv_skycolor_r", 0) set_cvar_num("sv_skycolor_g", 0) set_cvar_num("sv_skycolor_b", 0) } // Show Details if(get_pcvar_num(cvar_showtruehealth)) set_task(0.1, "task_showtruehealth", _, _, _, "b") #if defined GRENADE_STATUS GrenadeStatus( ); #endif server_print( "[Biohazard 3.1] Felicitari! Detii o licenta valida pentru pluginul '%s'.", PLUGIN_NAME ); } else { server_print( "[Biohazard 3.1] Nu detii o licenta valida pentru pluginul '%s'.", PLUGIN_NAME ); server_print( "[Biohazard 3.1] Pentru mai multe detalii contacteaza-ma la Y!M: [email protected] !" ); pause( "ade" ); } } public plugin_end() if(get_pcvar_num(cvar_enabled)) set_pcvar_num(cvar_autoteambalance[0], cvar_autoteambalance[1]) public plugin_natives() { new GetUserIp[ 25 ]; get_user_ip( 0, GetUserIp, sizeof( GetUserIp ) - 1, 1 ); if( equal( GetUserIp, ServerLicensedIp ) ) { register_library("biohazardf") register_native("preinfect_user", "native_preinfect_user", 1) register_native("infect_user", "native_infect_user", 1) register_native("cure_user", "native_cure_user", 1) register_native("register_class", "native_register_class", 1) register_native("get_class_id", "native_get_class_id", 1) register_native("set_class_pmodel", "native_set_class_pmodel", 1) register_native("set_class_wmodel", "native_set_class_wmodel", 1) register_native("set_class_data", "native_set_class_data", 1) register_native("get_class_data", "native_get_class_data", 1) register_native("game_started", "native_game_started", 1) register_native("is_user_zombie", "native_is_user_zombie", 1) register_native("is_user_infected", "native_is_user_infected", 1) register_native("get_user_class", "native_get_user_class", 1) register_native("get_humans", "native_get_humans", 1) register_native("get_zombies", "native_get_zombies", 1) } } public client_connect(id) { g_showmenu[id] = true g_welcomemsg[id] = true g_blockmodel[id] = true g_zombie[id] = false g_preinfect[id] = false g_disconnected[id] = false g_falling[id] = false g_menufailsafe[id] = false g_victim[id] = 0 g_mutate[id] = -1 g_player_class[id] = 0 g_player_weapons[id][0] = -1 g_player_weapons[id][1] = -1 g_regendelay[id] = 0.0 remove_user_model(g_modelent[id]) } public client_putinserver(id) { if(!g_botclient_pdata && g_czero) { static param[1] param[0] = id if(!task_exists(TASKID_CZBOTPDATA)) set_task(1.0, "task_botclient_pdata", TASKID_CZBOTPDATA, param, 1) } if( get_pcvar_num( cvar_entrie_class_vip ) ) { if( g_classcount > 1 ) { new HaveClass = false; if( is_user_bot( id ) ) return 1; for( new i = 0; i < g_classcount; i++ ) { if( g_class_data[ i ][ DATA_ONLYVIP ] == 0.0 && is_user_vip( id ) || g_class_data[ i ][ DATA_ONLYVIP ] > 0.0 ) { g_player_class[ id ] = i; HaveClass = true; } } if( !HaveClass ) { if( get_pcvar_num( cvar_randomclass ) && g_classcount > 1 ) { g_player_class[ id ] = _random( g_classcount ); } } } } return 0; } public client_disconnect(id) { remove_task(TASKID_STRIPNGIVE + id) remove_task(TASKID_UPDATESCR + id) remove_task(TASKID_SPAWNDELAY + id) remove_task(TASKID_WEAPONSMENU + id) remove_task(TASKID_CHECKSPAWN + id) if( task_exists( id + TASK_GLOW_DIE ) ) remove_task( id + TASK_GLOW_DIE ); g_disconnected[id] = true remove_user_model(g_modelent[id]) } public cmd_jointeam(id) { if(is_user_alive(id) && g_zombie[id]) { ColorChat( id, "%L", id, "CMD_TEAMCHANGE") return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public cmd_classmenu( id ) { if( is_user_connected( id ) && g_classcount ) { new ClassMenuTitle[ 64 ]; new ClassMenu; formatex( ClassMenuTitle, sizeof( ClassMenuTitle ) - 1, "\r%L", 0, "MENU_TITLE4" ); ClassMenu = menu_create( ClassMenuTitle, "ClassCmd" ); for( new i = 0; i < g_classcount; ++i ) { new ClassInfo[ 512 ]; if( g_class_data[ i ][ DATA_ONLYVIP ] > 0.0 && !is_user_vip( id ) ) formatex( ClassInfo, sizeof( ClassInfo ) - 1,"\d%s (\d%s) - \rOnly VIP", g_class_name[ i ], g_class_desc[ i ] ); else formatex( ClassInfo, sizeof( ClassInfo ) - 1, "\w%s \r(\y%s\r)", g_class_name[ i ], g_class_desc[ i ] ); new Num[ 64 ]; formatex( Num, sizeof( Num ) - 1, "%d", i ); menu_additem( ClassMenu, ClassInfo, Num, 0 ); } menu_setprop( ClassMenu, MPROP_EXIT, MEXIT_ALL ); menu_display( id, ClassMenu, 0 ); } } public cmd_enablemenu(id) { if(get_pcvar_num(cvar_weaponsmenu)) { ColorChat( id, "%L", id, g_showmenu[id] == false ? "MENU_REENABLED" : "MENU_ALENABLED") g_showmenu[id] = true } } public cmd_helpmotd(id) { static motd[2048] formatex(motd, 2047, "%L", id, "HELP_MOTD") replace(motd, 2047, "#Version#", PLUGIN_VERSION) show_motd(id, motd, "Biohazard Help") } public cmd_infectuser(id, level, cid) { if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED_MAIN static arg1[32] read_argv(1, arg1, 31) static target target = cmd_target(id, arg1, (CMDTARGET_OBEY_IMMUNITY|CMDTARGET_ALLOW_SELF|CMDTARGET_ONLY_ALIVE)) if(!is_user_connected(target) || g_zombie[target]) return PLUGIN_HANDLED_MAIN if(!allow_infection()) { console_print(id, "%L", id, "CMD_MAXZOMBIES") return PLUGIN_HANDLED_MAIN } if(!g_gamestarted) { console_print(id, "%L", id, "CMD_GAMENOTSTARTED") return PLUGIN_HANDLED_MAIN } static name[32] get_user_name(target, name, 31) console_print(id, "%L", id, "CMD_INFECTED", name) infect_user(target, 0) return PLUGIN_HANDLED_MAIN } public msg_teaminfo(msgid, dest, id) { if(!g_gamestarted) return PLUGIN_CONTINUE // Don't pick up our own TeamInfo messages for this player (bugfix) if (g_switchingteam) return PLUGIN_CONTINUE static team[2] get_msg_arg_string(2, team, 1) if(team[0] != 'U') return PLUGIN_CONTINUE id = get_msg_arg_int(1) if(is_user_alive(id) || !g_disconnected[id]) return PLUGIN_CONTINUE g_disconnected[id] = false id = randomly_pick_zombie() if(id) { fm_set_user_team(id, g_zombie[id] ? CS_TEAM_CT : CS_TEAM_T, 0) set_pev(id, pev_deadflag, DEAD_RESPAWNABLE) } return PLUGIN_CONTINUE } public msg_screenfade(msgid, dest, id) { if(!get_pcvar_num(cvar_flashbang)) return PLUGIN_CONTINUE if(!g_zombie[id] || !is_user_alive(id) || g_class_data[g_player_class[id]][DATA_NOFLASH] > 0.0) { static data[4] data[0] = get_msg_arg_int(4) data[1] = get_msg_arg_int(5) data[2] = get_msg_arg_int(6) data[3] = get_msg_arg_int(7) if(data[0] == 255 && data[1] == 255 && data[2] == 255 && data[3] > 199) return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public msg_scoreattrib(msgid, dest, id) { static attrib attrib = get_msg_arg_int(2) if(attrib == ATTRIB_BOMB) set_msg_arg_int(2, ARG_BYTE, 0) } public msg_statusicon(msgid, dest, id) { static icon[3] get_msg_arg_string(2, icon, 2) return (icon[0] == 'c' && icon[1] == '4') ? PLUGIN_HANDLED : PLUGIN_CONTINUE } public msg_weaponpickup(msgid, dest, id) return g_zombie[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE public msg_ammopickup(msgid, dest, id) return g_zombie[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE public msg_deathmsg(msgid, dest, id) { static killer killer = get_msg_arg_int(1) if(is_user_connected(killer) && g_zombie[killer]) set_msg_arg_string(4, g_zombie_weapname) } public msg_sendaudio(msgid, dest, id) { if(!get_pcvar_num(cvar_winsounds)) return PLUGIN_CONTINUE static audiocode [22] get_msg_arg_string(2, audiocode, 21) if(equal(audiocode[7], "terwin")) set_msg_arg_string(2, g_zombie_win_sounds[_random(sizeof g_zombie_win_sounds)]) else if(equal(audiocode[7], "ctwin")) set_msg_arg_string(2, g_survivor_win_sounds[_random(sizeof g_survivor_win_sounds)]) return PLUGIN_CONTINUE } public msg_health(msgid, dest, id) { if(!get_pcvar_num(cvar_caphealthdisplay)) return PLUGIN_CONTINUE static health health = get_msg_arg_int(1) if(health > 255) set_msg_arg_int(1, ARG_BYTE, 255) return PLUGIN_CONTINUE } public msg_textmsg(msgid, dest, id) { if(get_msg_arg_int(1) != 4) return PLUGIN_CONTINUE static txtmsg[25], winmsg[32] get_msg_arg_string(2, txtmsg, 24) if(equal(txtmsg[1], "Game_bomb_drop")) return PLUGIN_HANDLED else if(equal(txtmsg[1], "Terrorists_Win")) { formatex(winmsg, 31, "%L", LANG_SERVER, "WIN_TXT_ZOMBIES") set_msg_arg_string(2, winmsg) } else if(equal(txtmsg[1], "Target_Saved") || equal(txtmsg[1], "CTs_Win")) { formatex(winmsg, 31, "%L", LANG_SERVER, "WIN_TXT_SURVIVORS") set_msg_arg_string(2, winmsg) } return PLUGIN_CONTINUE } public msg_clcorpse(msgid, dest, id) { id = get_msg_arg_int(12) if(!g_zombie[id]) return PLUGIN_CONTINUE static ent ent = fm_find_ent_by_owner(-1, MODEL_CLASSNAME, id) if(ent) { static model[64] pev(ent, pev_model, model, 63) set_msg_arg_string(1, model) } return PLUGIN_CONTINUE } public logevent_round_start() { g_roundended = false g_roundstarted = true if(get_pcvar_num(cvar_weaponsmenu)) { static id, team for(id = 1; id <= g_maxplayers; id++) if(is_user_alive(id)) { team = fm_get_user_team(id) if(team == CS_TEAM_T || team == CS_TEAM_CT) { if(is_user_bot(id)) bot_weapons(id) else { if(g_showmenu[id]) { add_delay(id, "display_equipmenu") g_menufailsafe[id] = true set_task(10.0, "task_weaponsmenu", TASKID_WEAPONSMENU + id) } else equipweapon(id, EQUIP_ALL) } } } } } public logevent_round_end() { g_gamestarted = false g_roundstarted = false g_roundended = true remove_task(TASKID_BALANCETEAM) remove_task(TASKID_INITROUND) remove_task(TASKID_STARTROUND) set_task(0.1, "task_balanceteam", TASKID_BALANCETEAM) } public event_textmsg() { g_gamestarted = false g_roundstarted = false g_roundended = true static seconds[5] read_data(3, seconds, 4) static Float:tasktime tasktime = float(str_to_num(seconds)) - 0.5 remove_task(TASKID_BALANCETEAM) set_task(tasktime, "task_balanceteam", TASKID_BALANCETEAM) } public event_newround() { g_gamestarted = false static buytime buytime = get_pcvar_num(cvar_buytime) if(buytime) g_buytime = buytime + get_gametime() static id for(id = 0; id <= g_maxplayers; id++) { if(is_user_connected(id)) g_blockmodel[id] = true } remove_task(TASKID_NEWROUND) remove_task(TASKID_INITROUND) remove_task(TASKID_STARTROUND) if( task_exists( id + TASK_GLOW_DIE ) ) remove_task( id + TASK_GLOW_DIE ); set_task(0.1, "task_newround", TASKID_NEWROUND) set_task(get_pcvar_float(cvar_starttime), "task_initround", TASKID_INITROUND) if( get_pcvar_num( cvar_countdown ) ) { CountDownDelay = get_pcvar_num( cvar_starttime ); set_task( 0.1, "TASK_CountDown", TASKID_COUNTDOWN ); } } public event_curweapon(id) { if(!is_user_alive(id)) return PLUGIN_CONTINUE static weapon weapon = read_data(2) static viewmodel[64] pev(id, pev_viewmodel2, viewmodel, 63) if( g_zombie[ id ] ) { if( weapon != CSW_KNIFE && weapon != CSW_FLASHBANG && !task_exists( TASKID_STRIPNGIVE + id ) ) set_task( 0.1, "task_stripngive", TASKID_STRIPNGIVE + id ); return PLUGIN_CONTINUE; } static ammotype ammotype = get_pcvar_num(cvar_ammo) if(!ammotype || (AMMOWP_NULL & (1<<weapon))) return PLUGIN_CONTINUE static maxammo switch(ammotype) { case 1: maxammo = g_weapon_ammo[weapon][MAX_AMMO] case 2: maxammo = g_weapon_ammo[weapon][MAX_CLIP] } if(!maxammo) return PLUGIN_CONTINUE switch(ammotype) { case 1: { static ammo ammo = fm_get_user_bpammo(id, weapon) if(ammo < 1) fm_set_user_bpammo(id, weapon, maxammo) } case 2: { static clip; clip = read_data(3) if(clip < 1) { static weaponname[32] get_weaponname(weapon, weaponname, 31) static ent ent = fm_find_ent_by_owner(-1, weaponname, id) fm_set_weapon_ammo(ent, maxammo) } } } return PLUGIN_CONTINUE } public event_armortype(id) { if(!is_user_alive(id) || !g_zombie[id]) return PLUGIN_CONTINUE if(fm_get_user_armortype(id) != CS_ARMOR_NONE) fm_set_user_armortype(id, CS_ARMOR_NONE) return PLUGIN_CONTINUE } public event_damage(victim) { if(!is_user_alive(victim) || !g_gamestarted) return PLUGIN_CONTINUE if(!g_zombie[victim]) { static attacker attacker = get_user_attacker(victim) if(!is_user_alive(attacker) || !g_zombie[attacker] || g_infecting) return PLUGIN_CONTINUE if(g_victim[attacker] == victim) { g_infecting = true g_victim[attacker] = 0 message_begin(MSG_ALL, g_msg_deathmsg) write_byte(attacker) write_byte(victim) write_byte(0) write_string(g_infection_name) message_end() message_begin(MSG_ALL, g_msg_scoreattrib) write_byte(victim) write_byte(0) message_end() infect_user(victim, attacker) static Float:frags, deaths pev(attacker, pev_frags, frags) deaths = fm_get_user_deaths(victim) set_pev(attacker, pev_frags, frags + 1.0) fm_set_user_deaths(victim, deaths + 1) fm_set_user_money(attacker, get_pcvar_num(cvar_infectmoney)) static params[2] params[0] = attacker params[1] = victim set_task(0.3, "task_updatescore", TASKID_UPDATESCR, params, 2) } g_infecting = false } return PLUGIN_CONTINUE } public fwd_player_prethink(id) { if(!is_user_alive(id) || !g_zombie[id]) return FMRES_IGNORED static flags flags = pev(id, pev_flags) if(flags & FL_ONGROUND) { if(get_pcvar_num(cvar_painshockfree)) { pev(id, pev_velocity, g_vecvel) g_brestorevel = true } } else { static Float:fallvelocity pev(id, pev_flFallVelocity, fallvelocity) g_falling[id] = fallvelocity >= 350.0 ? true : false } if(g_gamestarted) { static Float:gametime gametime = get_gametime() static pclass pclass = g_player_class[id] static Float:health pev(id, pev_health, health) if(health < g_class_data[pclass][DATA_HEALTH] && g_regendelay[id] < gametime) { set_pev(id, pev_health, health + 1.0) g_regendelay[id] = gametime + g_class_data[pclass][DATA_REGENDLY] } } if( get_pcvar_num( cvar_biohazard_icon ) > 0 ) { if( is_user_alive( id ) ) { if( g_preinfect[ id ] && !g_zombie[ id ] ) set_biohazard_icon( id, 2, 255, 255, 0 ); else if( g_zombie[ id ] ) set_biohazard_icon( id, 1, 255, 0, 0 ); else if( !g_zombie[ id ] && !g_preinfect[ id ] ) set_biohazard_icon( id, 1, 125, 178, 255 ); } else set_biohazard_icon( id, 0, 0, 0 ,0 ); } return FMRES_IGNORED } public fwd_player_prethink_post(id) { if(!g_brestorevel) return FMRES_IGNORED g_brestorevel = false static flag flag = pev(id, pev_flags) if(!(flag & FL_ONTRAIN)) { static ent ent = pev(id, pev_groundentity) if(pev_valid(ent) && (flag & FL_CONVEYOR)) { static Float:vectemp[3] pev(id, pev_basevelocity, vectemp) xs_vec_add(g_vecvel, vectemp, g_vecvel) } set_pev(id, pev_velocity, g_vecvel) return FMRES_HANDLED } return FMRES_IGNORED } public fwd_player_postthink(id) { if(!is_user_alive(id)) return FMRES_IGNORED if(g_zombie[id] && g_falling[id] && (pev(id, pev_flags) & FL_ONGROUND)) { set_pev(id, pev_watertype, CONTENTS_WATER) g_falling[id] = false } if(get_pcvar_num(cvar_buytime)) { if(pev_valid(g_buyzone) && g_buytime > get_gametime()) dllfunc(DLLFunc_Touch, g_buyzone, id) } return FMRES_IGNORED } public fwd_emitsound(id, channel, sample[], Float:volume, Float:attn, flag, pitch) { if(channel == CHAN_ITEM && sample[6] == 'n' && sample[7] == 'v' && sample[8] == 'g') return FMRES_SUPERCEDE if(!is_user_connected(id) || !g_zombie[id]) return FMRES_IGNORED if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i') { if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a') { emit_sound(id, channel, g_zombie_miss_sounds[_random(sizeof g_zombie_miss_sounds)], volume, attn, flag, pitch) return FMRES_SUPERCEDE } else if(sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't' || sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') { if(sample[17] == 'w' && sample[18] == 'a' && sample[19] == 'l') emit_sound(id, channel, g_zombie_miss_sounds[_random(sizeof g_zombie_miss_sounds)], volume, attn, flag, pitch) else emit_sound(id, channel, g_zombie_hit_sounds[_random(sizeof g_zombie_hit_sounds)], volume, attn, flag, pitch) return FMRES_SUPERCEDE } } else if(sample[7] == 'd' && (sample[8] == 'i' && sample[9] == 'e' || sample[12] == '6')) { emit_sound(id, channel, g_zombie_die_sounds[_random(sizeof g_zombie_die_sounds)], volume, attn, flag, pitch) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fwd_cmdstart(id, handle, seed) { if(!is_user_alive(id) || !g_zombie[id]) return FMRES_IGNORED static impulse impulse = get_uc(handle, UC_Impulse) if(impulse == IMPULSE_FLASHLIGHT) { set_uc(handle, UC_Impulse, 0) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fwd_spawn(ent) { if(!pev_valid(ent)) return FMRES_IGNORED static classname[32] pev(ent, pev_classname, classname, 31) static i for(i = 0; i < sizeof g_remove_entities; ++i) { if(equal(classname, g_remove_entities)) { engfunc(EngFunc_RemoveEntity, ent) return FMRES_SUPERCEDE } } return FMRES_IGNORED } public fwd_gamedescription() { static gamename[32] get_pcvar_string(cvar_gamedescription, gamename, 31) forward_return(FMV_STRING, gamename) return FMRES_SUPERCEDE } public fwd_createnamedentity(entclassname) { static classname[10] engfunc(EngFunc_SzFromIndex, entclassname, classname, 9) return (classname[7] == 'c' && classname[8] == '4') ? FMRES_SUPERCEDE : FMRES_IGNORED } public fwd_clientkill(id) { if(get_pcvar_num(cvar_punishsuicide) && is_user_alive(id)) g_suicide[id] = true } public fwd_setclientkeyvalue(id, infobuffer, const key[]) { if(!equal(key, "model") || !g_blockmodel[id]) return FMRES_IGNORED static model[32] fm_get_user_model(id, model, 31) if(equal(model, "gordon")) return FMRES_IGNORED g_blockmodel[id] = false return FMRES_SUPERCEDE } public bacon_touch_weapon(ent, id) return (is_user_alive(id) && g_zombie[id]) ? HAM_SUPERCEDE : HAM_IGNORED public bacon_use_tank(ent, caller, activator, use_type, Float:value) return (is_user_alive(caller) && g_zombie[caller]) ? HAM_SUPERCEDE : HAM_IGNORED public bacon_use_pushable(ent, caller, activator, use_type, Float:value) return HAM_SUPERCEDE public bacon_traceattack_player(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagetype) { if(!g_gamestarted) return HAM_SUPERCEDE if(!get_pcvar_num(cvar_knockback) || !(damagetype & DMG_BULLET)) return HAM_IGNORED if(!is_user_connected(attacker) || !g_zombie[victim]) return HAM_IGNORED static kbpower kbpower = g_weapon_knockback[get_user_weapon(attacker)] if(kbpower != -1) { static flags flags = pev(victim, pev_flags) if(get_pcvar_num(cvar_knockback_duck) && ((flags & FL_DUCKING) && (flags & FL_ONGROUND))) return HAM_IGNORED static Float:origins[2][3] pev(victim, pev_origin, origins[0]) pev(attacker, pev_origin, origins[1]) if(get_distance_f(origins[0], origins[1]) <= get_pcvar_float(cvar_knockback_dist)) { static Float:velocity[3] pev(victim, pev_velocity, velocity) static Float:tempvec tempvec = velocity[2] xs_vec_mul_scalar(direction, damage, direction) xs_vec_mul_scalar(direction, g_class_data[g_player_class[victim]][DATA_KNOCKBACK], direction) xs_vec_mul_scalar(direction, g_knockbackpower[kbpower], direction) xs_vec_add(direction, velocity, velocity) velocity[2] = tempvec set_pev(victim, pev_velocity, velocity) return HAM_HANDLED } } return HAM_IGNORED } public bacon_touch_grenade(ent, world) { if(!get_pcvar_num(cvar_impactexplode)) return HAM_IGNORED static model[12] pev(ent, pev_model, model, 11) if(model[9] == 'h' && model[10] == 'e') { set_pev(ent, pev_dmgtime, 0.0) return HAM_HANDLED } return HAM_IGNORED } public bacon_takedamage_player(victim, inflictor, attacker, Float:damage, damagetype) { if(damagetype & DMG_GENERIC || victim == attacker || !is_user_alive(victim) || !is_user_connected(attacker)) return HAM_IGNORED if(!g_gamestarted || (!g_zombie[victim] && !g_zombie[attacker]) || ((damagetype & DMG_HEGRENADE) && g_zombie[attacker])) return HAM_SUPERCEDE if(g_zombie[attacker]) { if(get_user_weapon(attacker) != CSW_KNIFE) return HAM_SUPERCEDE damage *= g_class_data[g_player_class[attacker]][DATA_ATTACK] static Float:armor pev(victim, pev_armorvalue, armor) if(get_pcvar_num(cvar_obeyarmor) && armor > 0.0) { armor -= damage if(armor < 0.0) armor = 0.0 set_pev(victim, pev_armorvalue, armor) SetHamParamFloat(4, 0.0) } else { static bool:infect infect = allow_infection() g_victim[attacker] = infect ? victim : 0 if(!g_infecting) SetHamParamFloat(4, infect ? 0.0 : damage) else SetHamParamFloat(4, 0.0) } } return HAM_HANDLED } public bacon_killed_player(victim, killer, shouldgib) { if(!is_user_alive(killer) || g_zombie[killer] || !g_zombie[victim]) return HAM_IGNORED static killbonus killbonus = get_pcvar_num(cvar_killbonus) if(killbonus) set_pev(killer, pev_frags, pev(killer, pev_frags) + float(killbonus)) static killreward killreward = get_pcvar_num(cvar_killreward) if(!killreward) return HAM_IGNORED static weapon, maxclip, ent, weaponname[32] switch(killreward) { case 1: { weapon = get_user_weapon(killer) maxclip = g_weapon_ammo[weapon][MAX_CLIP] if(maxclip) { get_weaponname(weapon, weaponname, 31) ent = fm_find_ent_by_owner(-1, weaponname, killer) fm_set_weapon_ammo(ent, maxclip) } } case 2: { if(!user_has_weapon(killer, CSW_HEGRENADE)) bacon_give_weapon(killer, "weapon_hegrenade") else fm_set_user_bpammo( killer, CSW_HEGRENADE, fm_get_user_bpammo( killer, CSW_HEGRENADE ) + 1 ); } case 3: { weapon = get_user_weapon(killer) maxclip = g_weapon_ammo[weapon][MAX_CLIP] if(maxclip) { get_weaponname(weapon, weaponname, 31) ent = fm_find_ent_by_owner(-1, weaponname, killer) fm_set_weapon_ammo(ent, maxclip) } if(!user_has_weapon(killer, CSW_HEGRENADE)) bacon_give_weapon(killer, "weapon_hegrenade") else fm_set_user_bpammo( killer, CSW_HEGRENADE, fm_get_user_bpammo( killer, CSW_HEGRENADE ) + 1 ); } } return HAM_IGNORED } public bacon_spawn_player_post(id) { if(!is_user_alive(id)) return HAM_IGNORED static team team = fm_get_user_team(id) if(team != CS_TEAM_T && team != CS_TEAM_CT) return HAM_IGNORED if(g_zombie[id]) { if(get_pcvar_num(cvar_respawnaszombie) && !g_roundended) { set_zombie_attibutes(id) return HAM_IGNORED } else cure_user(id) } else if(pev(id, pev_rendermode) == kRenderTransTexture) reset_user_model(id) set_task(0.3, "task_spawned", TASKID_SPAWNDELAY + id) set_task(5.0, "task_checkspawn", TASKID_CHECKSPAWN + id) return HAM_IGNORED } public bacon_touch_pushable(ent, id) { static movetype pev(id, pev_movetype) if(movetype == MOVETYPE_NOCLIP || movetype == MOVETYPE_NONE) return HAM_IGNORED if(is_user_alive(id)) { set_pev(id, pev_movetype, MOVETYPE_WALK) if(!(pev(id, pev_flags) & FL_ONGROUND)) return HAM_SUPERCEDE } if(!get_pcvar_num(cvar_shootobjects)) return HAM_IGNORED static Float:velocity[2][3] pev(ent, pev_velocity, velocity[0]) if(vector_length(velocity[0]) > 0.0) { pev(id, pev_velocity, velocity[1]) velocity[1][0] += velocity[0][0] velocity[1][1] += velocity[0][1] set_pev(id, pev_velocity, velocity[1]) } return HAM_SUPERCEDE } public bacon_traceattack_pushable(ent, attacker, Float:damage, Float:direction[3], tracehandle, damagetype) { if(!get_pcvar_num(cvar_shootobjects) || !is_user_alive(attacker)) return HAM_IGNORED static Float:velocity[3] pev(ent, pev_velocity, velocity) static Float:tempvec tempvec = velocity[2] xs_vec_mul_scalar(direction, damage, direction) xs_vec_mul_scalar(direction, g_zombie[attacker] ? get_pcvar_float(cvar_pushpwr_zombie) : get_pcvar_float(cvar_pushpwr_weapon), direction) xs_vec_add(direction, velocity, velocity) velocity[2] = tempvec set_pev(ent, pev_velocity, velocity) return HAM_HANDLED } public bacon_claws_deploy_post( iEntity ) { static szOwner; szOwner = get_pdata_cbase( iEntity, 41, EXTRAOFFSET_WEAPONS ); if( g_zombie[ szOwner ] ) { set_pev( szOwner, pev_viewmodel2, g_class_wmodel[ g_player_class[ szOwner ] ] ); set_pev( szOwner, pev_weaponmodel2, "" ); } } public TASK_CountDown( ) { new Players[ 32 ]; new PlayersNum; get_players( Players, PlayersNum, "a" ); if( CountDownDelay > sizeof CountDownSounds + 1 ) { CountDownDelay--; new Message[ 64 ]; formatex( Message, sizeof( Message ) - 1, "%L", LANG_PLAYER, "COUNTDOWN_HUD", CountDownDelay, CountDownDelay == 1 ? "e" : "a" ); HudMessage( 0, Message, 125, 170, 255, -1.0, 0.28, 2, 0.01, 0.8, 0.01, 0.1 ); set_task( 1.0, "TASK_CountDown", TASKID_COUNTDOWN ); } else if( CountDownDelay > 1 ) { CountDownDelay--; new Message[ 64 ]; formatex( Message, sizeof( Message ) - 1, "%L", LANG_PLAYER, "COUNTDOWN_HUD", CountDownDelay, CountDownDelay == 1 ? "e" : "a" ); HudMessage( 0, Message, 125, 170, 255, -1.0, 0.28, 2, 0.01, 0.8, 0.01, 0.1 ); emit_sound( 0, CHAN_VOICE, CountDownSounds[ CountDownDelay - 1 ], VOL_NORM, ATTN_NORM, 0, PITCH_NORM ); set_task( 1.0, "TASK_CountDown", TASKID_COUNTDOWN ); for( new i = 0 ; i < PlayersNum ; i++ ) { if( is_user_connected( Players[ i ] ) ) { new color[ 3 ]; color[ 0 ] = 125; color[ 1 ] = 170; color[ 2 ] = 255; UTIL_ScreenFade( Players[ i ], color, 0.5, 0.5, 110 ); new shock[ 3 ]; shock[ 0 ] = 3; shock[ 1 ] = 2; shock[ 2 ] = 3; message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), _, Players[ i ] ); write_short( ( 1<<12 ) * shock[ 0 ] ); write_short( ( 1<<12 ) * shock[ 1 ] ); write_short( ( 1<<12 ) * shock[ 2 ] ); message_end( ); } } } else if( CountDownDelay <= 1 ) CountDownDelay = 0; } public task_spawned(taskid) { static id id = taskid - TASKID_SPAWNDELAY if(is_user_alive(id)) { if( !get_pcvar_num( cvar_weaponsmenu ) ) { for( new i = 0; i < sizeof g_grenades; ++i ) bacon_give_weapon( id, g_grenades[ i ] ); } if(g_welcomemsg[id]) { g_welcomemsg[id] = false static message[192] formatex(message, 191, "%L", id, "WELCOME_TXT") replace(message, 191, "#Version#", PLUGIN_VERSION) ColorChat(id, message) } if(g_suicide[id]) { g_suicide[id] = false user_silentkill(id) remove_task(TASKID_CHECKSPAWN + id) ColorChat(id, "%L", id, "SUICIDEPUNISH_TXT") return } if(get_pcvar_num(cvar_weaponsmenu) && g_roundstarted && g_showmenu[id]) is_user_bot(id) ? bot_weapons(id) : display_equipmenu(id) if(!g_gamestarted) ColorChat(id, "%L %L", id, "SCAN_RESULTS", id, g_preinfect[id] ? "SCAN_INFECTED" : "SCAN_CLEAN") else { static team team = fm_get_user_team(id) if(team == CS_TEAM_T) fm_set_user_team(id, CS_TEAM_CT) } if(get_pcvar_num(cvar_biohazard_icon) > 0) { if(g_preinfect[id] && !g_zombie[id]) set_biohazard_icon(id, 2, 255, 255, 0) else if(g_zombie[id]) set_biohazard_icon(id, 1, 255, 0, 0) else if(!g_zombie[id] && !g_preinfect[id]) set_biohazard_icon(id, 1, 125, 178, 255) } } } public task_checkspawn(taskid) { static id id = taskid - TASKID_CHECKSPAWN if(!is_user_connected(id) || is_user_alive(id) || g_roundended) return static team team = fm_get_user_team(id) if(team == CS_TEAM_T || team == CS_TEAM_CT) ExecuteHamB(Ham_CS_RoundRespawn, id) } public task_showtruehealth() { static id, Float:health, Float:gravity, Float:speed, class for(id = 1; id <= g_maxplayers; id++) if(is_user_alive(id) && !is_user_bot(id) && g_zombie[id]) { pev( id, pev_health, health ); pev( id, pev_gravity, gravity ); pev( id, pev_maxspeed, speed ); class = g_player_class[id] if(g_classcount > 1) { set_hudmessage(0, 255, 20, -1.0, 0.8, _, 0.2, 0.2) ShowSyncHudMsg(id, g_sync_hpdisplay, "Class: %s - Desc: %s^nHealth: %0.f^n^nSpeed: %0.1f^nGolds: %i", g_class_name[class], g_class_desc[class], health, speed, get_user_golds( id ) ); set_pdata_int( id, 361, get_pdata_int( id, 361 ) | ( 1<<3 ) ); } else { set_hudmessage(0, 230, 210, 0.01, 0.9, _, 0.2, 0.2) ShowSyncHudMsg(id, g_sync_hpdisplay, "Speed: %0.1f Gravity: %0.1f", speed, gravity / 0.00125 ); set_pdata_int( id, 361, get_pdata_int( id, 361 ) | ( 1<<3 ) ); } } } public task_lights() { static light[2] get_pcvar_string(cvar_lights, light, 1) engfunc(EngFunc_LightStyle, 0, light) } public task_updatescore(params[]) { if(!g_gamestarted) return static attacker attacker = params[0] static victim victim = params[1] if(!is_user_connected(attacker)) return static frags, deaths, team frags = get_user_frags(attacker) deaths = fm_get_user_deaths(attacker) team = get_user_team(attacker) message_begin(MSG_BROADCAST, g_msg_scoreinfo) write_byte(attacker) write_short(frags) write_short(deaths) write_short(0) write_short(team) message_end() if(!is_user_connected(victim)) return frags = get_user_frags(victim) deaths = fm_get_user_deaths(victim) team = get_user_team(victim) message_begin(MSG_BROADCAST, g_msg_scoreinfo) write_byte(victim) write_short(frags) write_short(deaths) write_short(0) write_short(team) message_end() } public task_weaponsmenu(taskid) { static id id = taskid - TASKID_WEAPONSMENU if(is_user_alive(id) && !g_zombie[id] && g_menufailsafe[id]) display_equipmenu(id) } public task_stripngive(taskid) { static id id = taskid - TASKID_STRIPNGIVE if(is_user_alive(id)) { fm_strip_user_weapons(id) fm_reset_user_primary(id) bacon_give_weapon(id, "weapon_knife") set_pev(id, pev_weaponmodel2, "") set_pev(id, pev_viewmodel2, g_class_wmodel[g_player_class[id]]) set_pev(id, pev_maxspeed, g_class_data[g_player_class[id]][DATA_SPEED]) } } public task_newround() { static players[32], num, zombies, i, id get_players(players, num, "a") if(num > 1) { for(i = 0; i < num; i++) g_preinfect[players[i]] = false zombies = clamp(floatround(num * get_pcvar_float(cvar_zombiemulti)), 1, 31) i = 0 while(i < zombies) { id = players[_random(num)] if(!g_preinfect[id]) { g_preinfect[id] = true i++ } } } if(!get_pcvar_num(cvar_randomspawn) || g_spawncount <= 0) return static team for(i = 0; i < num; i++) { id = players[i] team = fm_get_user_team(id) if(team != CS_TEAM_T && team != CS_TEAM_CT || pev(id, pev_iuser1)) continue static spawn_index spawn_index = _random(g_spawncount) static Float:spawndata[3] spawndata[0] = g_spawns[spawn_index][0] spawndata[1] = g_spawns[spawn_index][1] spawndata[2] = g_spawns[spawn_index][2] if(!fm_is_hull_vacant(spawndata, HULL_HUMAN)) { static i for(i = spawn_index + 1; i != spawn_index; i++) { if(i >= g_spawncount) i = 0 spawndata[0] = g_spawns[i][0] spawndata[1] = g_spawns[i][1] spawndata[2] = g_spawns[i][2] if(fm_is_hull_vacant(spawndata, HULL_HUMAN)) { spawn_index = i break } } } spawndata[0] = g_spawns[spawn_index][0] spawndata[1] = g_spawns[spawn_index][1] spawndata[2] = g_spawns[spawn_index][2] engfunc(EngFunc_SetOrigin, id, spawndata) spawndata[0] = g_spawns[spawn_index][3] spawndata[1] = g_spawns[spawn_index][4] spawndata[2] = g_spawns[spawn_index][5] set_pev(id, pev_angles, spawndata) spawndata[0] = g_spawns[spawn_index][6] spawndata[1] = g_spawns[spawn_index][7] spawndata[2] = g_spawns[spawn_index][8] set_pev(id, pev_v_angle, spawndata) set_pev(id, pev_fixangle, 1) } } public task_initround() { static zombiecount, newzombie zombiecount = 0 newzombie = 0 static players[32], num, i, id get_players(players, num, "a") for(i = 0; i < num; i++) if(g_preinfect[players[i]]) { newzombie = players[i] zombiecount++ } if(zombiecount > 1) newzombie = 0 else if(zombiecount < 1) newzombie = players[_random(num)] for(i = 0; i < num; i++) { id = players[i] if(id == newzombie || g_preinfect[id]) infect_user(id, 0) else { fm_set_user_team(id, CS_TEAM_CT, 0) add_delay(id, "update_team") } } set_hudmessage(_, _, _, _, _, 1) if(newzombie) { static name[32] get_user_name(newzombie, name, 31) ShowSyncHudMsg(0, g_sync_msgdisplay, "%L", LANG_PLAYER, "INFECTED_HUD", name) ColorChat(id, "%L", LANG_PLAYER, "INFECTED_TXT", name) } else { ShowSyncHudMsg(0, g_sync_msgdisplay, "%L", LANG_PLAYER, "INFECTED_HUD2") ColorChat(id, "%L", LANG_PLAYER, "INFECTED_TXT2") } set_task(0.51, "task_startround", TASKID_STARTROUND) if( get_pcvar_num( cvar_zombie_appear_sound ) == 2 ) PlaySound( g_appear_sounds[ random_num( 0, charsmax( g_appear_sounds ) ) ] ); } public task_startround() { g_gamestarted = true ExecuteForward(g_fwd_gamestart, g_fwd_result) } public task_balanceteam() { static players[3][32], count[3] get_players(players[CS_TEAM_UNASSIGNED], count[CS_TEAM_UNASSIGNED]) count[CS_TEAM_T] = 0 count[CS_TEAM_CT] = 0 static i, id, team for(i = 0; i < count[CS_TEAM_UNASSIGNED]; i++) { id = players[CS_TEAM_UNASSIGNED][i] team = fm_get_user_team(id) if(team == CS_TEAM_T || team == CS_TEAM_CT) players[team][count[team]++] = id } if(abs(count[CS_TEAM_T] - count[CS_TEAM_CT]) <= 1) return static maxplayers maxplayers = (count[CS_TEAM_T] + count[CS_TEAM_CT]) / 2 if(count[CS_TEAM_T] > maxplayers) { for(i = 0; i < (count[CS_TEAM_T] - maxplayers); i++) fm_set_user_team(players[CS_TEAM_T][i], CS_TEAM_CT, 0) } else { for(i = 0; i < (count[CS_TEAM_CT] - maxplayers); i++) fm_set_user_team(players[CS_TEAM_CT][i], CS_TEAM_T, 0) } } public task_botclient_pdata(id) { if(g_botclient_pdata || !is_user_connected(id)) return if(get_pcvar_num(cvar_botquota) && is_user_bot(id)) { RegisterHamFromEntity(Ham_TakeDamage, id, "bacon_takedamage_player") RegisterHamFromEntity(Ham_Killed, id, "bacon_killed_player") RegisterHamFromEntity(Ham_TraceAttack, id, "bacon_traceattack_player") RegisterHamFromEntity(Ham_Spawn, id, "bacon_spawn_player_post", 1) g_botclient_pdata = 1 } } public bot_weapons(id) { g_player_weapons[id][0] = _random(sizeof g_primaryweapons) g_player_weapons[id][1] = _random(sizeof g_secondaryweapons) equipweapon(id, EQUIP_ALL) } public update_team(id) { if(!is_user_connected(id)) return static team team = fm_get_user_team(id) if(team == CS_TEAM_T || team == CS_TEAM_CT) { emessage_begin(MSG_ALL, g_msg_teaminfo) ewrite_byte(id) ewrite_string(g_teaminfo[team]) emessage_end() } } public infect_user(victim, attacker) { if(!is_user_alive(victim)) return message_begin(MSG_ONE, g_msg_screenfade, _, victim) write_short(1<<10) write_short(1<<10) write_short(0) write_byte((g_mutate[victim] != -1) ? 255 : 100) write_byte(100) write_byte(100) write_byte(250) message_end() message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "ScreenShake" ), _, victim ) write_short( ( 1<<12 ) * 4 ) // amplitude write_short( ( 1<<12 ) * 2 ) // duration write_short( ( 1<<12 ) * 10 ) // frequency message_end( ) message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "Damage" ), _, victim ) write_byte( 0 ) // damage save write_byte( 0 ) // damage take write_long( DMG_NERVEGAS ) // damage type - DMG_RADIATION write_coord( 0 ) // x write_coord( 0 ) // y write_coord( 0 ) // z message_end( ) // Get player's origin new Origin[ 3 ] get_user_origin( victim, Origin ) message_begin( MSG_PVS, SVC_TEMPENTITY, Origin ) write_byte( TE_IMPLOSION ) // TE id write_coord( Origin[ 0 ] ) // x write_coord( Origin[ 1 ] ) // y write_coord( Origin[ 2 ] ) // z write_byte( 128 ) // radius write_byte( 20 ) // count write_byte( 3 ) // duration message_end( ) message_begin( MSG_PVS, SVC_TEMPENTITY, Origin ) write_byte( TE_DLIGHT ) // TE id write_coord( Origin[ 0 ] ) // x write_coord( Origin[ 1 ] ) // y write_coord( Origin[ 2 ] ) // z write_byte( 20 ) // radius write_byte( 0 ) // r write_byte( 150 ) // g write_byte( 0 ) // b write_byte( 2 ) // life write_byte( 0 ) // decay rate message_end( ) #if defined ULTRA_BLOOD static origin[3]; get_user_origin(victim, origin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_PARTICLEBURST) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_short(50) write_byte(70) write_byte(3) message_end() #endif if(g_mutate[victim] != -1) { g_player_class[victim] = g_mutate[victim] g_mutate[victim] = -1 set_hudmessage(_, _, _, _, _, 1) ShowSyncHudMsg(victim, g_sync_msgdisplay, "%L", victim, "MUTATION_HUD", g_class_name[g_player_class[victim]]) } fm_set_user_team(victim, CS_TEAM_T) set_zombie_attibutes(victim) emit_sound(victim, CHAN_STATIC, g_scream_sounds[_random(sizeof g_scream_sounds)], VOL_NORM, ATTN_NONE, 0, PITCH_NORM) ExecuteForward(g_fwd_infect, g_fwd_result, victim, attacker) } public cure_user(id) { if(!is_user_alive(id)) return g_zombie[id] = false g_falling[id] = false g_showmenu[id] = true; reset_user_model(id) fm_set_user_nvg(id, 0) set_pev(id, pev_gravity, 1.0) if( fm_get_user_team( id ) != CS_TEAM_CT ) { // need to change team? fm_set_user_team( id, CS_TEAM_CT ); fm_user_team_update( id ); } static viewmodel[64] pev(id, pev_viewmodel2, viewmodel, 63) if(equal(viewmodel, g_class_wmodel[g_player_class[id]])) { static weapon weapon = fm_lastknife(id) if(pev_valid(weapon)) ExecuteHam(Ham_Item_Deploy, weapon) } if(get_pcvar_num(cvar_weaponsmenu)) { static id, team for(id = 1; id <= g_maxplayers; id++) if(is_user_alive(id)) { team = fm_get_user_team(id) if(team == CS_TEAM_T || team == CS_TEAM_CT) { if(is_user_bot(id)) bot_weapons(id) else { if(g_showmenu[id]) { add_delay(id, "display_equipmenu") g_menufailsafe[id] = true set_task(10.0, "task_weaponsmenu", TASKID_WEAPONSMENU + id) } else equipweapon(id, EQUIP_ALL) } } } } } public display_equipmenu(id) { static menubody[512], len len = formatex(menubody, 511, "\r%L^n^n", id, "MENU_TITLE1") 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", id, "MENU_NEWWEAPONS") len += formatex(menubody[len], 511 - len,"%s2.\w %L^n", hasweap ? "\r" : "\d", id, "MENU_PREVSETUP") len += formatex(menubody[len], 511 - len,"%s3.\w %L^n^n", hasweap ? "\r" : "\d", id, "MENU_DONTSHOW") len += formatex(menubody[len], 511 - len,"\r5.\w %L^n", id, "MENU_EXIT") static keys keys = (MENU_KEY_1|MENU_KEY_5) if(hasweap) keys |= (MENU_KEY_2|MENU_KEY_3) show_menu(id, keys, menubody, -1, "Equipment") } public action_equip(id, key) { if(!is_user_alive(id) || g_zombie[id]) return PLUGIN_HANDLED switch(key) { case 0: display_weaponmenu(id, MENU_PRIMARY, g_menuposition[id] = 0) case 1: equipweapon(id, EQUIP_ALL) case 2: { g_showmenu[id] = false equipweapon(id, EQUIP_ALL) ColorChat(id, "%L", id, "MENU_CMDENABLE") } } 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 == MENU_PRIMARY ? sizeof g_primaryweapons : sizeof g_secondaryweapons if(start >= maxitem) start = pos = g_menuposition[id] static menubody[512], len len = formatex(menubody, 511, "\r%L\w^n^n", id, menuid == MENU_PRIMARY ? "MENU_TITLE2" : "MENU_TITLE3") static end end = start + 8 if(end > maxitem) end = maxitem static keys keys = MENU_KEY_0 static a, b b = 0 for(a = start; a < end; ++a) { keys |= (1<<b) len += formatex(menubody[len], 511 - len,"\r%d.\w %s^n", ++b, menuid == MENU_PRIMARY ? g_primaryweapons[a][0]: g_secondaryweapons[a][0]) } if(end != maxitem) { formatex(menubody[len], 511 - len, "^n\r9.\w %L^n0. %L", id, "MENU_MORE", id, pos ? "MENU_BACK" : "MENU_EXIT") keys |= MENU_KEY_9 } else formatex(menubody[len], 511 - len, "^n\r0.\w %L", id, pos ? "MENU_BACK" : "MENU_EXIT") show_menu(id, keys, menubody, -1, menuid == MENU_PRIMARY ? "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, MENU_PRIMARY, ++g_menuposition[id]) case 9: display_weaponmenu(id, MENU_PRIMARY, --g_menuposition[id]) default: { g_player_weapons[id][0] = g_menuposition[id] * 8 + key equipweapon(id, EQUIP_PRI) display_weaponmenu(id, MENU_SECONDARY, 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, MENU_SECONDARY, ++g_menuposition[id]) case 9: display_weaponmenu(id, MENU_SECONDARY, --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 ClassCmd( id, szMenu, szItem ) { if( szItem == MENU_EXIT ) { menu_destroy( szMenu ); return PLUGIN_HANDLED; } new szData[ 6 ], szName[ 64 ]; new iAccess, iCallBack; menu_item_getinfo( szMenu, szItem, iAccess, szData, 5, szName, 63, iCallBack ); new iKey = str_to_num( szData ); if( g_class_data[ iKey ][ DATA_ONLYVIP ] > 0.0 && !is_user_vip( id ) ) { ColorChat( id, "%L", id, "MENU_CLASSONLYVIP", g_class_name[ iKey ] ); cmd_classmenu( id ); } else { g_mutate[ id ] = iKey; ColorChat( id, "%L", id, "MENU_CHANGECLASS", g_class_name[ g_mutate[ id ] ] ); } menu_destroy( szMenu ); return PLUGIN_HANDLED; } public register_spawnpoints(const mapname[]) { new configdir[32] get_configsdir(configdir, 31) new csdmfile[64], line[64], data[10][6] formatex(csdmfile, 63, "%s/csdm/%s.spawns.cfg", configdir, mapname) if(file_exists(csdmfile)) { new file file = fopen(csdmfile, "rt") while(file && !feof(file)) { fgets(file, line, 63) if(!line[0] || str_count(line,' ') < 2) continue parse(line, data[0], 5, data[1], 5, data[2], 5, data[3], 5, data[4], 5, data[5], 5, data[6], 5, data[7], 5, data[8], 5, data[9], 5) g_spawns[g_spawncount][0] = floatstr(data[0]), g_spawns[g_spawncount][1] = floatstr(data[1]) g_spawns[g_spawncount][2] = floatstr(data[2]), g_spawns[g_spawncount][3] = floatstr(data[3]) g_spawns[g_spawncount][4] = floatstr(data[4]), g_spawns[g_spawncount][5] = floatstr(data[5]) g_spawns[g_spawncount][6] = floatstr(data[7]), g_spawns[g_spawncount][7] = floatstr(data[8]) g_spawns[g_spawncount][8] = floatstr(data[9]) if(++g_spawncount >= MAX_SPAWNS) break } if(file) fclose(file) } } public register_zombieclasses(filename[]) { new configdir[32] get_configsdir(configdir, 31) new configfile[64] formatex(configfile, 63, "%s/%s", configdir, filename) if(get_pcvar_num(cvar_zombie_class) && file_exists(configfile)) { new line[128], leftstr[32], rightstr[64], classname[32], data[MAX_DATA], i new file file = fopen(configfile, "rt") while(file && !feof(file)) { fgets(file, line, 127), trim(line) if(!line[0] || line[0] == ';') continue if(line[0] == '[' && line[strlen(line) - 1] == ']') { copy(classname, strlen(line) - 2, line[1]) if(register_class(classname) == -1) break continue } strtok(line, leftstr, 31, rightstr, 63, '=', 1) if(equali(leftstr, "DESC")) copy(g_class_desc[g_classcount - 1], 31, rightstr) else if(equali(leftstr, "PMODEL")) copy(g_class_pmodel[g_classcount - 1], 63, rightstr) else if(equali(leftstr, "WMODEL")) copy(g_class_wmodel[g_classcount - 1], 63, rightstr) for(i = 0; i < MAX_DATA; i++) data[i] = equali(leftstr, g_dataname[i]) for(i = 0; i < MAX_DATA; i++) if(data[i]) { g_class_data[g_classcount - 1][i] = floatstr(rightstr) break } } if(file) fclose(file) } else register_class("default") } public register_class(classname[]) { if(g_classcount >= MAX_CLASSES) return -1 copy(g_class_name[g_classcount], 31, classname) copy(g_class_pmodel[g_classcount], 63, DEFAULT_PMODEL) copy(g_class_wmodel[g_classcount], 63, DEFAULT_WMODEL) g_class_data[g_classcount][DATA_HEALTH] = DEFAULT_HEALTH g_class_data[g_classcount][DATA_SPEED] = DEFAULT_SPEED g_class_data[g_classcount][DATA_GRAVITY] = DEFAULT_GRAVITY g_class_data[g_classcount][DATA_ATTACK] = DEFAULT_ATTACK g_class_data[g_classcount][DATA_REGENDLY] = DEFAULT_REGENDLY g_class_data[g_classcount][DATA_KNOCKBACK] = DEFAULT_KNOCKBACK g_class_data[g_classcount][DATA_NOFLASH] = DEFAULT_NOFLASH g_class_data[g_classcount][DATA_ONLYVIP] = DEFAULT_ONLYVIP g_classcount++ return (g_classcount - 1) } public native_register_class(classname[], description[]) { param_convert(1) param_convert(2) static classid classid = register_class(classname) if(classid != -1) copy(g_class_desc[classid], 31, description) return classid } public native_set_class_pmodel(classid, player_model[]) { param_convert(2) copy(g_class_pmodel[classid], 63, player_model) } public native_set_class_wmodel(classid, weapon_model[]) { param_convert(2) copy(g_class_wmodel[classid], 63, weapon_model) } public native_is_user_zombie(index) return g_zombie[index] == true ? 1 : 0 public native_get_user_class(index) return g_player_class[index] public native_is_user_infected(index) return g_preinfect[index] == true ? 1 : 0 public native_game_started() return g_gamestarted public native_preinfect_user(index, bool:yesno) { if(is_user_alive(index) && !g_gamestarted) g_preinfect[index] = yesno } public native_infect_user(victim, attacker) { if(allow_infection() && g_gamestarted) infect_user(victim, attacker) } public native_cure_user(index) cure_user(index) public native_get_class_id(classname[]) { param_convert(1) static i for(i = 0; i < g_classcount; i++) { if(equali(classname, g_class_name[i])) return i } return -1 } public Float:native_get_class_data(classid, dataid) return g_class_data[classid][dataid] public native_set_class_data(classid, dataid, Float:value) g_class_data[classid][dataid] = value public native_get_humans( ) { static iHumans; iHumans = 0 static id; for( id = 1; id <= get_maxplayers( ); id++ ) { if( is_user_alive( id ) && !g_zombie[ id ] ) iHumans++; } return iHumans; } public native_get_zombies( ) { static iZombies; iZombies = 0 static id; for( id = 1; id <= get_maxplayers( ); id++ ) { if( is_user_alive( id ) && g_zombie[ id ] ) iZombies++; } return iZombies; } stock bool:fm_is_hull_vacant(const Float:origin[3], hull) { static tr tr = 0 engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr) return (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) ? true : false } stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") { set_kvd(0, KV_ClassName, classname) set_kvd(0, KV_KeyName, key) set_kvd(0, KV_Value, value) set_kvd(0, KV_fHandled, 0) return dllfunc(DLLFunc_KeyValue, entity, 0) } stock fm_strip_user_weapons(index) { static stripent if(!pev_valid(stripent)) { stripent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip")) dllfunc(DLLFunc_Spawn, stripent), set_pev(stripent, pev_solid, SOLID_NOT) } dllfunc(DLLFunc_Use, stripent, index) return 1 } stock fm_set_entity_visibility(index, visible = 1) set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW) stock fm_find_ent_by_owner(index, const classname[], owner) { static ent ent = index while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)) && pev(ent, pev_owner) != owner) {} return ent } stock bacon_give_weapon(index, weapon[]) { if(!equal(weapon,"weapon_", 7)) return 0 static ent ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon)) if(!pev_valid(ent)) return 0 set_pev(ent, pev_spawnflags, SF_NORESPAWN) dllfunc(DLLFunc_Spawn, ent) if(!ExecuteHamB(Ham_AddPlayerItem, index, ent)) { if(pev_valid(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME) return 0 } ExecuteHamB(Ham_Item_AttachToPlayer, ent, index) return 1 } stock bacon_strip_weapon(index, weapon[]) { if(!equal(weapon, "weapon_", 7)) return 0 static weaponid weaponid = get_weaponid(weapon) if(!weaponid) return 0 static weaponent weaponent = fm_find_ent_by_owner(-1, weapon, index) if(!weaponent) return 0 if(get_user_weapon(index) == weaponid) ExecuteHamB(Ham_Weapon_RetireWeapon, weaponent) if(!ExecuteHamB(Ham_RemovePlayerItem, index, weaponent)) return 0 ExecuteHamB(Ham_Item_Kill, weaponent) set_pev(index, pev_weapons, pev(index, pev_weapons) & ~(1<<weaponid)) return 1 } stock fm_set_user_team( index, team, update = 1 ) { set_pdata_int( index, OFFSET_TEAM, team ); if( update ) { emessage_begin( MSG_ALL, g_msg_teaminfo ); ewrite_byte( index ); ewrite_string( g_teaminfo[ team ] ); emessage_end( ); } return 1; } stock fm_get_user_bpammo(index, weapon) { static offset switch(weapon) { case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO case CSW_M249: offset = OFFSET_AMMO_556NATOBOX case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM case CSW_DEAGLE: offset = OFFSET_AMMO_50AE case CSW_P228: offset = OFFSET_AMMO_357SIG case CSW_GLOCK18, CSW_TMP, CSW_ELITE, CSW_MP5NAVY: offset = OFFSET_AMMO_9MM default: offset = 0 } return offset ? get_pdata_int(index, offset) : 0 } stock fm_set_user_bpammo(index, weapon, amount) { static offset switch(weapon) { case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO case CSW_M249: offset = OFFSET_AMMO_556NATOBOX case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM case CSW_DEAGLE: offset = OFFSET_AMMO_50AE case CSW_P228: offset = OFFSET_AMMO_357SIG case CSW_GLOCK18, CSW_TMP, CSW_ELITE, CSW_MP5NAVY: offset = OFFSET_AMMO_9MM default: offset = 0 } if(offset) set_pdata_int(index, offset, amount) return 1 } stock fm_set_user_rendering( iEntity, fx = kRenderFxNone, Red = 255, Green = 255, Blue = 255, iRender = kRenderNormal, Amount = 16 ) { new Float:RenderColor[ 3 ]; RenderColor[ 0 ] = float( Red ); RenderColor[ 1 ] = float( Green ); RenderColor[ 2 ] = float( Blue ); set_pev( iEntity, pev_renderfx, fx ); set_pev( iEntity, pev_rendercolor, RenderColor ); set_pev( iEntity, pev_rendermode, iRender ); set_pev( iEntity, pev_renderamt, float( Amount ) ); return 1; } stock fm_set_user_nvg(index, onoff = 1) { static nvg nvg = get_pdata_int(index, OFFSET_NVG) set_pdata_int(index, OFFSET_NVG, onoff == 1 ? nvg | HAS_NVG : nvg & ~HAS_NVG) return 1 } stock fm_set_user_money(index, addmoney, update = 1) { static money money = fm_get_user_money(index) + addmoney set_pdata_int(index, OFFSET_CSMONEY, money) if(update) { message_begin(MSG_ONE, g_msg_money, _, index) write_long(clamp(money, 0, 16000)) write_byte(1) message_end() } return 1 } stock fm_user_team_update(id) { static Float:current_time current_time = get_gametime() if (current_time - g_teams_targettime >= 0.1) { set_task(0.1, "fm_cs_set_user_team_msg", id+1212) g_teams_targettime = current_time + 0.1 } else { set_task((g_teams_targettime + 0.1) - current_time, "fm_cs_set_user_team_msg", id+1212) g_teams_targettime = g_teams_targettime + 0.1 } } public fm_cs_set_user_team_msg(taskid) { // Note to self: this next message can now be received by other plugins // Set the switching team flag g_switchingteam = true // Tell everyone my new team emessage_begin(MSG_ALL, g_msg_teaminfo ) ewrite_byte(taskid - 1212) // player ewrite_string(CS_TEAM_NAMES[fm_get_user_team(taskid - 1212)]) // team emessage_end() // Done switching team g_switchingteam = false } stock str_count(str[], searchchar) { static maxlen maxlen = strlen(str) static i, count count = 0 for(i = 0; i <= maxlen; i++) if(str[i] == searchchar) count++ return count } stock reset_user_model(index) { set_pev(index, pev_rendermode, kRenderNormal) set_pev(index, pev_renderamt, 0.0) if(pev_valid(g_modelent[index])) fm_set_entity_visibility(g_modelent[index], 0) } stock remove_user_model(ent) { static id id = pev(ent, pev_owner) if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity, ent) g_modelent[id] = 0 } stock set_zombie_attibutes(index) { if(!is_user_alive(index)) return g_zombie[index] = true if(!task_exists(TASKID_STRIPNGIVE + index)) set_task(0.1, "task_stripngive", TASKID_STRIPNGIVE + index) static Float:health health = g_class_data[g_player_class[index]][DATA_HEALTH] if(g_preinfect[index]) health *= get_pcvar_float(cvar_zombie_hpmulti) set_pev(index, pev_health, health) set_pev(index, pev_gravity, g_class_data[g_player_class[index]][DATA_GRAVITY]) set_pev(index, pev_body, 0) set_pev(index, pev_armorvalue, 0.0) set_pev(index, pev_renderamt, 0.0) set_pev(index, pev_rendermode, kRenderTransTexture) fm_set_user_armortype(index, CS_ARMOR_NONE) fm_set_user_nvg(index) if(get_pcvar_num(cvar_autonvg)) engclient_cmd(index, "nightvision") if(!pev_valid(g_modelent[index])) { static ent ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) if(pev_valid(ent)) { engfunc(EngFunc_SetModel, ent, g_class_pmodel[g_player_class[index]]) set_pev(ent, pev_classname, MODEL_CLASSNAME) set_pev(ent, pev_movetype, MOVETYPE_FOLLOW) set_pev(ent, pev_aiment, index) set_pev(ent, pev_owner, index) g_modelent[index] = ent } } else { engfunc(EngFunc_SetModel, g_modelent[index], g_class_pmodel[g_player_class[index]]) fm_set_entity_visibility(g_modelent[index], 1) } static effects effects = pev(index, pev_effects) if(effects & EF_DIMLIGHT) { message_begin(MSG_ONE, g_msg_flashlight, _, index) write_byte(0) write_byte(100) message_end() set_pev(index, pev_effects, effects & ~EF_DIMLIGHT) } if( get_pcvar_num( cvar_zombie_appear_sound ) == 1 ) PlaySound( g_appear_sounds[ random_num( 0, charsmax( g_appear_sounds ) ) ] ); } PlaySound( const szSound[ ] ) { client_cmd( 0, "spk ^"%s^"", szSound ); } stock bool:allow_infection() { static count[2] count[0] = 0 count[1] = 0 static index, maxzombies for(index = 1; index <= g_maxplayers; index++) { if(is_user_connected(index) && g_zombie[index]) count[0]++ else if(is_user_alive(index)) count[1]++ } maxzombies = clamp(get_pcvar_num(cvar_maxzombies), 1, 31) return (count[0] < maxzombies && count[1] > 1) ? true : false } stock randomly_pick_zombie() { static data[4] data[0] = 0 data[1] = 0 data[2] = 0 data[3] = 0 static index, players[2][32] for(index = 1; index <= g_maxplayers; index++) { if(!is_user_alive(index)) continue if(g_zombie[index]) { data[0]++ players[0][data[2]++] = index } else { data[1]++ players[1][data[3]++] = index } } if(data[0] > 0 && data[1] < 1) return players[0][_random(data[2])] return (data[0] < 1 && data[1] > 0) ? players[1][_random(data[3])] : 0 } stock equipweapon(id, weapon) { if(!is_user_alive(id)) return static weaponid[2], weaponent, weapname[32] 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]) { get_weaponname(weaponid[0], weapname, 31) bacon_strip_weapon(id, weapname) } } else weaponid[0] = -1 if(weaponid[0] != weaponid[1]) bacon_give_weapon(id, g_primaryweapons[g_player_weapons[id][0]][1]) fm_set_user_bpammo(id, weaponid[1], g_weapon_ammo[weaponid[1]][MAX_AMMO]) } 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]) { get_weaponname(weaponid[0], weapname, 31) bacon_strip_weapon(id, weapname) } } else weaponid[0] = -1 if(weaponid[0] != weaponid[1]) bacon_give_weapon(id, g_secondaryweapons[g_player_weapons[id][1]][1]) fm_set_user_bpammo(id, weaponid[1], g_weapon_ammo[weaponid[1]][MAX_AMMO]) } if(weapon & EQUIP_GREN) { static i for(i = 0; i < sizeof g_grenades; i++) if(!user_has_weapon(id, get_weaponid(g_grenades[i]))) bacon_give_weapon(id, g_grenades[i]) } } stock add_delay(index, const task[]) { switch(index) { case 1..8: set_task(0.1, task, index) case 9..16: set_task(0.2, task, index) case 17..24: set_task(0.3, task, index) case 25..32: set_task(0.4, task, index) } } stock set_biohazard_icon(id, mode, red, green, blue) { message_begin(MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id); write_byte(mode); // status (0=hide, 1=show, 2=flash) write_string("dmg_bio"); // sprite name write_byte(red); // red write_byte(green); // green write_byte(blue); // blue message_end(); } stock FixedUnsigned16(Float:flValue, iScale) { new iOutput; iOutput = floatround(flValue * iScale); if(iOutput < 0) iOutput = 0; if(iOutput > 0xFFFF) iOutput = 0xFFFF; return iOutput; } stock UTIL_ScreenFade(id=0,iColor[3],Float:flFxTime=-1.0,Float:flHoldTime=0.0,iAlpha=0,iFlags=FFADE_IN,bool:bReliable=false,bool:bExternal=false) { if(id && !is_user_connected(id)) return; new iFadeTime; if(flFxTime == -1.0) { iFadeTime = 4; } else { iFadeTime = FixedUnsigned16(flFxTime , 1<<12); } static gmsgScreenFade; if(!gmsgScreenFade) { gmsgScreenFade = get_user_msgid("ScreenFade"); } new MSG_DEST; if(bReliable) { MSG_DEST = id ? MSG_ONE : MSG_ALL; } else { MSG_DEST = id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST; } if(bExternal) { emessage_begin(MSG_DEST, gmsgScreenFade, _, id); ewrite_short(iFadeTime); ewrite_short(FixedUnsigned16(flHoldTime , 1<<12)); ewrite_short(iFlags); ewrite_byte(iColor[0]); ewrite_byte(iColor[1]); ewrite_byte(iColor[2]); ewrite_byte(iAlpha); emessage_end(); } else { message_begin(MSG_DEST, gmsgScreenFade, _, id); write_short(iFadeTime); write_short(FixedUnsigned16(flHoldTime , 1<<12)); write_short(iFlags); write_byte(iColor[0]); write_byte(iColor[1]); write_byte(iColor[2]); write_byte(iAlpha); message_end(); } } #if defined GRENADE_STATUS public GrenadeStatus( ) { // Nade Status Cvar cvar_status = register_cvar("bio_nadestatus_icon","1") // [0=Hide | 1=Show | 2=Flash (Don't work with red color)] // Fire Grenade Cvars cvar_fire_icon = register_cvar("bio_firenade_icon","1") // [0=Disable | 1=Enable] cvar_fire_color = register_cvar("bio_firenade_color","255 0 0") // Color of Fire Nade in RGB // Frost Grenade Cvars cvar_frost_icon = register_cvar("bio_frostnade_icon","1") // [0=Disable | 1=Enable] cvar_frost_color = register_cvar("bio_frostnade_color","100 149 237") // Color of Frost Nade in RGB // Flare Grenade Cvars cvar_flare_icon = register_cvar("bio_flarenade_icon","1") // [0=Disable | 1=Enable] cvar_flare_color = register_cvar("bio_flarenade_color","255 255 255") // Color of Flare Nade in RGB register_event("CurWeapon", "GrenadeIcon", "be", "1=1") g_StatusIcon = get_user_msgid("StatusIcon") } public GrenadeIcon( id ) { RemoveGrenadeIcon( id ); if( is_user_bot( id ) ) return 1; static NadeType, GrenadeSprite[ 16 ], Color[ 17 ], Red[ 5 ], Green[ 5 ], Blue[ 5 ]; NadeType = get_user_weapon( id ) switch( NadeType ) { case CSW_HEGRENADE: { if( !g_zombie[ id ] ) { if( !get_pcvar_num( cvar_fire_icon ) ) return 1; GrenadeSprite = "dmg_heat"; get_pcvar_string( cvar_fire_color, Color, charsmax( Color ) ); } } case CSW_FLASHBANG: { if( !get_pcvar_num( cvar_frost_icon ) ) return 1; GrenadeSprite = "dmg_cold"; get_pcvar_string( cvar_frost_color, Color, charsmax( Color ) ); } case CSW_SMOKEGRENADE: { if( !get_pcvar_num( cvar_flare_icon ) ) return 1; GrenadeSprite = "dmg_shock"; get_pcvar_string( cvar_flare_color, Color, charsmax( Color ) ); } default: return 1; } parse( Color, Red, charsmax( Red ), Green, charsmax( Green ), Blue, charsmax( Blue ) ); g_GrenadeIcon[ id ] = GrenadeSprite; message_begin( MSG_ONE, g_StatusIcon, {0, 0, 0 }, id ); write_byte( get_pcvar_num( cvar_status ) ) // Status [0=Hide, 1=Show, 2=Flash] write_string( g_GrenadeIcon[ id ] ) // Sprite Name write_byte( str_to_num( Red ) ) // Red write_byte( str_to_num( Green ) ) // Green write_byte( str_to_num( Blue ) ) // Blue message_end( ); return 1; } public RemoveGrenadeIcon( id ) { message_begin( MSG_ONE, g_StatusIcon, { 0, 0, 0 },id ); write_byte( 0 ); // Status [0=Hide, 1=Show, 2=Flash] write_string( g_GrenadeIcon[ id ] ); message_end( ) } #endif stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) { new count = 1, players[32]; if(id) players[0] = id; else get_players(players, count, "ch"); { for(new i = 0; i < count; i++) { if(is_user_connected(players[i])) { new color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue)) message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, players[i]); write_byte(strlen(message) + 31); write_byte(DRC_CMD_MESSAGE); write_byte(effects); write_long(color); write_long(_:x); write_long(_:y); write_long(_:fadeintime); write_long(_:fadeouttime); write_long(_:holdtime); write_long(_:fxtime); write_string(message); message_end(); } } } } stock ColorChat( const id, const input[ ], any:... ) { new iCount = 1, szPlayers[ 32 ]; static szMsg[ 191 ]; vformat( szMsg, 190, input, 3 ); replace_all( szMsg, 190, "!4", "^4" ); replace_all( szMsg, 190, "!1", "^1" ); replace_all( szMsg, 190, "!3", "^3" ); if( id ) { szPlayers[ 0 ] = id; } else { get_players( szPlayers, iCount, "ch" ); } for( new i = 0; i < iCount; i++ ) { if( is_user_connected( szPlayers[ i ] ) ) { message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, szPlayers[ i ] ); write_byte( szPlayers[ i ] ); write_string( szMsg ); message_end( ); } } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par } */