Advertisement
diasleon

zeli

Mar 29th, 2015
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.22 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <fakemeta_util>
  6. #include <cstrike>
  7. #include <hamsandwich>
  8. #include <fun>
  9. #include <xs>
  10. #include <infinitygame>
  11.  
  12. #define PLUGIN "Zombie Elimination"
  13. #define VERSION "1.0"
  14. #define AUTHOR "Joseph Rias de Dias Pendragon Leon"
  15.  
  16. // =============== Game Config
  17. #define GAME_FOLDER "ZombieElimination"
  18. #define LANG_FILE "ZombieElimination.txt"
  19.  
  20. #define MIN_PLAYER 2
  21. #define COUNTDOWN_TIME 0 // 20 Seconds
  22. #define ENV_LIGHT "f"
  23. #define ENV_WEATHER 0 // 0 - Disable | 1 - Rain | 2 - Snow
  24. #define ENV_FOG_DENSITY 10 // 0 ~ 100
  25. #define ENV_FOG_COLOR "0 255 0"
  26. #define ENV_SKY "neb6"
  27.  
  28. #define BASE_CLASSNAME "teambase"
  29. #define HUMANBASE_HEALTH 100.0
  30. #define ZOMBIEBASE_HEALTH 200.0
  31.  
  32. #define HEALTHBAR_SPR "sprites/zombie_elimination/healthbar.spr"
  33.  
  34. new const HumanBase_Model[] = "models/zombie_elimination/HumanBase.mdl"
  35. new const ZombieBase_Model[] = "models/zombie_elimination/ZombieBase.mdl"
  36.  
  37. new const StartSound[] = "zombie_elimination/ZB4_Start.wav"
  38. new const CountSound[] = "zombie_elimination/count/%i.wav"
  39.  
  40. new const ZombieBase_HitSound[3][] =
  41. {
  42. "zombie_elimination/base/hive_hit1.wav",
  43. "zombie_elimination/base/hive_hit2.wav",
  44. "zombie_elimination/base/hive_hit3.wav"
  45. }
  46.  
  47. new const ZombieBase_DeathSound[3][] =
  48. {
  49. "zombie_elimination/base/hive_death1.wav",
  50. "zombie_elimination/base/hive_death2.wav",
  51. "zombie_elimination/base/zombie_base_death.wav"
  52. }
  53.  
  54. new const HumanBase_DeathSound1[] = "zombie_elimination/base/armory_death1.wav"
  55. new const HumanBase_DeathSound2[] = "zombie_elimination/base/armory_death2.wav"
  56.  
  57. new const Human_WinSound[] = "zombie_elimination/win_human_2.wav"
  58. new const Zombie_WinSound[] = "zombie_elimination/win_zombi_2.wav"
  59.  
  60. new const Zombie_DeathSpr[] = "sprites/zombie_elimination/zomb_death.spr"
  61. new const Tutorial_MessageSound[] = "zombie_elimination/tutorial_message.wav"
  62.  
  63. new const LevelUpH_Sound[] = "zombie_elimination/h_levelup.wav"
  64. new const LevelUpZ_Sound[] = "zombie_elimination/z_levelup.wav"
  65.  
  66. #define MAX_LEVEL 10
  67. new const Level_Experience[MAX_LEVEL+1] =
  68. {
  69. 150,
  70. 250,
  71. 350,
  72. 475,
  73. 600,
  74. 650,
  75. 715,
  76. 790,
  77. 900,
  78. 1100,
  79.  
  80. 999999
  81. }
  82.  
  83. #define KILL_SP 3
  84. #define KILL_EXP 10
  85.  
  86. // =============== End of: Game Config
  87. #define GAME_LANG LANG_SERVER
  88.  
  89. #define HUD_WIN_X -1.0
  90. #define HUD_WIN_Y 0.20
  91.  
  92. #define NOTICE_X -1.0
  93. #define NOTICE_Y 0.25
  94.  
  95. new GameName[64] = "Zombie Elimination"
  96.  
  97. // Marcros
  98. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
  99. #define Set_BitVar(%1,%2) (%1 |= (1 << (%2 & 31)));
  100. #define UnSet_BitVar(%1,%2) (%1 &= ~(1 << (%2 & 31)));
  101.  
  102. // Task
  103. #define TASK_COUNTDOWN 283151
  104. #define TASK_BASEDEATH 283152
  105.  
  106. // Block Round Event
  107. new g_BlockedObj_Forward
  108. new g_BlockedObj[15][32] =
  109. {
  110. "func_bomb_target",
  111. "info_bomb_target",
  112. "info_vip_start",
  113. "func_vip_safetyzone",
  114. "func_escapezone",
  115. "hostage_entity",
  116. "monster_scientist",
  117. "func_hostage_rescue",
  118. "info_hostage_rescue",
  119. "env_fog",
  120. "env_rain",
  121. "env_snow",
  122. "item_longjump",
  123. "func_vehicle",
  124. "func_buyzone"
  125. }
  126.  
  127. new const SoundNVG[2][] = { "items/nvg_off.wav", "items/nvg_on.wav"}
  128. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  129. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  130. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  131. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  132. "weapon_ak47", "weapon_knife", "weapon_p90" }
  133.  
  134. enum
  135. {
  136. TEAM_NONE = 0,
  137. TEAM_ZOMBIE,
  138. TEAM_HUMAN
  139. }
  140.  
  141. // Shared Code
  142. #define PDATA_SAFE 2
  143. const OFFSET_PLAYER_LINUX = 5
  144. const OFFSET_WEAPON_LINUX = 4
  145. const OFFSET_WEAPONOWNER = 41
  146.  
  147. // Vars
  148. new g_GameAvailable, g_GameStart, g_GameEnd, g_Joined, g_DataLoad, g_CountTime, g_TeamScore[3]
  149. new g_HumanBase, g_ZombieBase, g_IsZombie, g_SkillPoint[33], g_Level[33], g_Experience[33]
  150. new Float:g_CTSpawn_Point[64][3], Float:g_TSpawn_Point[64][3], g_CTSpawn_Count, g_TSpawn_Count
  151. new g_FogColor[3]
  152. new g_MaxPlayers, g_BaseCreation, m_iBlood[2], g_iSprLightning, g_MsgScreenShake, g_Exp_SprID,
  153. g_GibModelID, g_ZombieDeath_SprId, g_Hud_Notice, g_MsgHideWeapon, g_Hud_Game
  154.  
  155. // Map Configs
  156. new Float:MyOrigin[3], Float:MyAngles[3], Float:g_HumanBar_Dis[33], Float:g_ZombieBar_Dis[33]
  157. new g_HumanBar, g_ZombieBar
  158. new Float:ZombieBase_Origin[3], Float:HumanBase_Origin[3]
  159. new Float:ZombieBase_Angles[3], Float:HumanBase_Angles[3]
  160.  
  161. // Safety
  162. new g_HamBot
  163. new g_IsConnected, g_IsAlive, g_PlayerWeapon[33]
  164.  
  165. public plugin_init()
  166. {
  167. register_plugin(PLUGIN, VERSION, AUTHOR)
  168.  
  169. register_dictionary(LANG_FILE)
  170. Register_SafetyFunc()
  171.  
  172. // Event
  173. register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
  174. register_event("TextMsg", "Event_RoundRestart", "a", "2=#Game_will_restart_in")
  175. register_logevent("Event_RoundStart", 2, "1=Round_Start")
  176. register_logevent("Event_RoundEnd", 2, "1=Round_End")
  177. register_event("ResetHUD", "Event_ResetHUD", "b")
  178.  
  179. // Forward
  180. register_think("healthbar", "fw_HealthBar_Think")
  181. register_think(BASE_CLASSNAME, "fw_Base_Think")
  182. /*
  183. register_forward(FM_GetGameDescription, "fw_GetGameDesc")
  184. register_forward(FM_EmitSound, "fw_EmitSound")
  185. register_forward(FM_TraceLine, "fw_TraceLine")
  186. register_forward(FM_TraceHull, "fw_TraceHull")*/
  187. unregister_forward(FM_Spawn, g_BlockedObj_Forward)
  188. register_forward(FM_AddToFullPack, "fw_CapitalSaigon_Post", 1)
  189.  
  190. // Hamsandwich
  191. RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
  192. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", 1)
  193. RegisterHam(Ham_TakeDamage, "player", "fw_PlayerTakeDamage")
  194. RegisterHam(Ham_TraceAttack, "player", "fw_PlayerTraceAttack")
  195. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary")
  196. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary")
  197. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary")
  198. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary")
  199. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  200. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  201. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  202. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  203. RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
  204. RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
  205. RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
  206. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  207. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  208.  
  209. // Message
  210. register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
  211. register_message(get_user_msgid("TeamScore"), "Message_TeamScore")
  212. register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse")
  213. register_message(g_MsgHideWeapon, "Message_HideWeapon")
  214.  
  215. // CMD ?
  216. register_clcmd("nightvision", "CMD_NightVision")
  217. register_clcmd("radio1", "CMD_Radio")
  218. register_clcmd("radio2", "CMD_Radio")
  219. register_clcmd("radio3", "CMD_Radio")
  220.  
  221. // Team Mananger
  222. register_clcmd("chooseteam", "CMD_JoinTeam")
  223. register_clcmd("jointeam", "CMD_JoinTeam")
  224. register_clcmd("joinclass", "CMD_JoinTeam")
  225.  
  226. // Get Message
  227. /*
  228. g_MsgScreenFade = get_user_msgid("ScreenFade")
  229. g_MsgBarTime = get_user_msgid("BarTime")
  230. g_MsgScoreAttrib = get_user_msgid("ScoreAttrib")
  231. g_MsgFlashlight = get_user_msgid("Flashlight")*/
  232. g_MsgScreenShake = get_user_msgid("ScreenShake")
  233. g_MsgHideWeapon = get_user_msgid("HideWeapon")
  234. g_MaxPlayers = get_maxplayers()
  235. g_Hud_Notice = CreateHudSyncObj(1)
  236. g_Hud_Game = CreateHudSyncObj(2)
  237.  
  238. // Forwards
  239. /*
  240. g_Forwards[FW_TRANSGHOST_PRE] = CreateMultiForward("gf_user_transghost_pre", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL)
  241. g_Forwards[FW_TRANSGHOST_POST] = CreateMultiForward("gf_user_transghost_post", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL)
  242. g_Forwards[FW_USER_SPAWN] = CreateMultiForward("gf_user_spawn", ET_IGNORE, FP_CELL)
  243. g_Forwards[FW_USER_DIED] = CreateMultiForward("gf_user_died", ET_IGNORE, FP_CELL, FP_CELL)
  244. g_Forwards[FW_USER_NVG] = CreateMultiForward("gf_user_nvg", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL)
  245. g_Forwards[FW_ROUND_NEW] = CreateMultiForward("gf_round_new", ET_IGNORE)
  246. g_Forwards[FW_ROUND_START] = CreateMultiForward("gf_round_start", ET_IGNORE)
  247. g_Forwards[FW_GAME_START] = CreateMultiForward("gf_game_start", ET_IGNORE)
  248. g_Forwards[FW_ROUND_END] = CreateMultiForward("gf_round_end", ET_IGNORE)
  249. g_Forwards[FW_ROUND_TIME] = CreateMultiForward("gf_round_time", ET_IGNORE, FP_CELL)*/
  250.  
  251. // Collect Spawns Point
  252. Collect_SpawnPoint()
  253.  
  254. formatex(GameName, sizeof(GameName), "%L", GAME_LANG, "GAME_NAME")
  255. IG_EndRound_Block(true, true)
  256.  
  257. register_clcmd("say /test", "Test")
  258. register_clcmd("zeli_base_origin", "BaseOrigin_Handle", ADMIN_ADMIN)
  259. }
  260.  
  261. public Test(id)
  262. {
  263. Level_GainExp(id, 100, 1)
  264. }
  265.  
  266. public plugin_precache()
  267. {
  268. new BufferB[128], i
  269.  
  270. precache_model(HumanBase_Model)
  271. precache_model(ZombieBase_Model)
  272. precache_model(HEALTHBAR_SPR)
  273.  
  274. precache_sound(StartSound)
  275. for(i = 1; i <= 10; i++)
  276. {
  277. formatex(BufferB, charsmax(BufferB), CountSound, i);
  278. precache_sound(BufferB);
  279. }
  280. for(i = 0; i < sizeof(ZombieBase_HitSound); i++) precache_sound(ZombieBase_HitSound[i])
  281. for(i = 0; i < sizeof(ZombieBase_DeathSound); i++) precache_sound(ZombieBase_DeathSound[i])
  282. precache_sound(HumanBase_DeathSound1)
  283. precache_sound(HumanBase_DeathSound2)
  284.  
  285. precache_sound(Human_WinSound)
  286. precache_sound(Zombie_WinSound)
  287.  
  288. g_ZombieDeath_SprId = precache_model(Zombie_DeathSpr)
  289. precache_sound(Tutorial_MessageSound)
  290.  
  291. precache_sound(LevelUpZ_Sound)
  292. precache_sound(LevelUpH_Sound)
  293.  
  294. // Preache custom sky files
  295. formatex(BufferB, charsmax(BufferB), "gfx/env/%sbk.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  296. formatex(BufferB, charsmax(BufferB), "gfx/env/%sdn.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  297. formatex(BufferB, charsmax(BufferB), "gfx/env/%sft.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  298. formatex(BufferB, charsmax(BufferB), "gfx/env/%slf.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  299. formatex(BufferB, charsmax(BufferB), "gfx/env/%srt.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  300. formatex(BufferB, charsmax(BufferB), "gfx/env/%sup.tga", ENV_SKY); engfunc(EngFunc_PrecacheGeneric, BufferB)
  301.  
  302. // Weather
  303. new Weather; Weather = ENV_WEATHER
  304. new Buffer2[16]
  305.  
  306. if(Weather == 1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_rain"))
  307. else if(Weather == 2) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_snow"))
  308.  
  309. parse(ENV_FOG_COLOR, Buffer2[0], 7, Buffer2[1], 7, Buffer2[2], 7)
  310. g_FogColor[0] = str_to_num(Buffer2[0])
  311. g_FogColor[1] = str_to_num(Buffer2[1])
  312. g_FogColor[2] = str_to_num(Buffer2[2])
  313.  
  314. // Cache
  315. m_iBlood[0] = precache_model("sprites/blood.spr")
  316. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  317. g_iSprLightning = precache_model("sprites/laserbeam.spr")
  318. g_Exp_SprID = precache_model("sprites/zombie_elimination/he_efx12.spr")
  319. g_GibModelID = precache_model("models/metalplategibs.mdl")
  320.  
  321. // Register Forward
  322. g_BlockedObj_Forward = register_forward(FM_Spawn, "fw_BlockedObj_Spawn")
  323.  
  324. // Handle Map
  325. Read_MapConfig()
  326. }
  327.  
  328. public plugin_cfg()
  329. {
  330. // Default Cvars
  331. set_cvar_num("mp_limitteams", 1)
  332. set_cvar_num("mp_autoteambalance", 0)
  333. set_cvar_num("sv_maxspeed", 999)
  334. set_cvar_num("mp_freezetime", COUNTDOWN_TIME + 2)
  335.  
  336. set_cvar_num("mp_flashlight", 1)
  337.  
  338. set_cvar_num("sv_skycolor_r", 0)
  339. set_cvar_num("sv_skycolor_g", 0)
  340. set_cvar_num("sv_skycolor_b", 0)
  341.  
  342. // Exec
  343. server_exec()
  344. set_cvar_string("sv_skyname", ENV_SKY)
  345.  
  346. // New Round
  347. Event_NewRound()
  348. }
  349.  
  350. public fw_BlockedObj_Spawn(ent)
  351. {
  352. if (!pev_valid(ent))
  353. return FMRES_IGNORED
  354.  
  355. static Ent_Classname[64]
  356. pev(ent, pev_classname, Ent_Classname, sizeof(Ent_Classname))
  357.  
  358. for(new i = 0; i < sizeof g_BlockedObj; i++)
  359. {
  360. if (equal(Ent_Classname, g_BlockedObj[i]))
  361. {
  362. engfunc(EngFunc_RemoveEntity, ent)
  363. return FMRES_SUPERCEDE
  364. }
  365. }
  366.  
  367. return FMRES_IGNORED
  368. }
  369.  
  370. public Read_MapConfig()
  371. {
  372. new Path[128]; get_configsdir(Path, charsmax(Path))
  373. new MapName[64]; get_mapname(MapName, 63)
  374. format(Path, 63, "%s/%s/%s.base", Path, GAME_FOLDER, MapName)
  375.  
  376. if(file_exists(Path))
  377. {
  378. new LineData[128], Line
  379. new File = fopen(Path, "rt")
  380. new Key[64], Value[64]
  381. new HandleData[3][48]
  382.  
  383. if(!File) return
  384.  
  385. while(!feof(File))
  386. {
  387. fgets(File, LineData, 127)
  388. replace(LineData, 127, "^n", "")
  389.  
  390. if(LineData[0] == ';' || !LineData[0]) continue
  391.  
  392. // Get key and value
  393. strtok(LineData, Key, 63, Value, 63, '=')
  394.  
  395. // Trim spaces
  396. trim(Key)
  397. //trim(Value)
  398.  
  399. // Base
  400. if(equal(Key, "HUMAN_BASE_ORIGIN"))
  401. {
  402. parse(Value, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47)
  403. HumanBase_Origin[0] = str_to_float(HandleData[0])
  404. HumanBase_Origin[1] = str_to_float(HandleData[1])
  405. HumanBase_Origin[2] = str_to_float(HandleData[2])
  406. } else if(equal(Key, "HUMAN_BASE_ANGLES")) {
  407. parse(Value, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47)
  408. HumanBase_Angles[0] = str_to_float(HandleData[0])
  409. HumanBase_Angles[1] = str_to_float(HandleData[1])
  410. HumanBase_Angles[2] = str_to_float(HandleData[2])
  411. } else if(equal(Key, "ZOMBIE_BASE_ORIGIN")) {
  412. parse(Value, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47)
  413. ZombieBase_Origin[0] = str_to_float(HandleData[0])
  414. ZombieBase_Origin[1] = str_to_float(HandleData[1])
  415. ZombieBase_Origin[2] = str_to_float(HandleData[2])
  416. }else if(equal(Key, "ZOMBIE_BASE_ANGLES")) {
  417. parse(Value, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47)
  418. ZombieBase_Angles[0] = str_to_float(HandleData[0])
  419. ZombieBase_Angles[1] = str_to_float(HandleData[1])
  420. ZombieBase_Angles[2] = str_to_float(HandleData[2])
  421. }
  422.  
  423. Line++
  424. }
  425.  
  426. fclose(File)
  427. g_DataLoad = 1
  428. } else {
  429. g_DataLoad = 0
  430. }
  431. }
  432.  
  433. public client_putinserver(id)
  434. {
  435. Safety_Connected(id)
  436. set_task(0.25, "Set_ConnectInfo", id)
  437.  
  438. Reset_Player(id, 1)
  439.  
  440. if(!g_HamBot && is_user_bot(id))
  441. {
  442. g_HamBot = 1
  443. set_task(0.1, "Register_HamBot", id)
  444. }
  445. }
  446.  
  447. public Set_ConnectInfo(id)
  448. {
  449. if(!is_connected(id))
  450. return
  451.  
  452. SetPlayerLight(id, ENV_LIGHT)
  453. IG_Fog(id, g_FogColor[0], g_FogColor[1], g_FogColor[2], ENV_FOG_DENSITY)
  454. }
  455.  
  456. public Register_HamBot(id)
  457. {
  458. Register_SafetyFuncBot(id)
  459.  
  460. RegisterHamFromEntity(Ham_Spawn, id, "fw_PlayerSpawn_Post", 1)
  461. RegisterHamFromEntity(Ham_Killed, id, "fw_PlayerKilled_Post", 1)
  462. RegisterHamFromEntity(Ham_TraceAttack, id, "fw_PlayerTraceAttack")
  463. RegisterHamFromEntity(Ham_TakeDamage, id, "fw_PlayerTakeDamage")
  464. }
  465.  
  466. public client_disconnect(id)
  467. {
  468. Safety_Disconnected(id)
  469. Reset_Player(id, 1)
  470.  
  471. UnSet_BitVar(g_Joined, id)
  472. }
  473.  
  474. public IG_RunningTime()
  475. {
  476. if(g_GameAvailable && (Get_TotalInPlayer(2) < MIN_PLAYER))
  477. {
  478. g_GameAvailable = 0
  479. g_GameStart = 0
  480. g_GameEnd = 0
  481. } else if(!g_GameAvailable && (Get_TotalInPlayer(2) >= MIN_PLAYER) && Get_PlayerCount(2, 1) >= 1 && Get_PlayerCount(2, 2) >= 1) { // START GAME NOW :D
  482. g_GameAvailable = 1
  483. g_GameStart = 0
  484. g_GameEnd = 0
  485.  
  486. Game_Ending(5.0, 1, CS_TEAM_UNASSIGNED)
  487. } else if(!g_GameAvailable && Get_TotalInPlayer(2) < MIN_PLAYER) {
  488. client_print(0, print_center, "%L", GAME_LANG, "NOTICE_PLAYERREQUIRED", MIN_PLAYER)
  489. } else if(!g_DataLoad) {
  490. client_print(0, print_center, "%L", GAME_LANG, "NOTICE_CANTLOAD")
  491. }
  492. // Player
  493. Loop_Player()
  494.  
  495. // Check Gameplay
  496. Check_Gameplay()
  497. }
  498.  
  499. public Loop_Player()
  500. {
  501. static PlayerClass[32];
  502. formatex(PlayerClass, 31, "Berserker")
  503.  
  504. for(new id = 0; id < g_MaxPlayers; id++)
  505. {
  506. if(!is_alive(id))
  507. continue
  508.  
  509. if(Get_BitVar(g_IsZombie, id))
  510. {
  511. set_hudmessage(255, 0, 0, 0.02, 0.925, 0, 1.25, 1.25)
  512. ShowSyncHudMsg(id, g_Hud_Game, "%L", GAME_LANG, "HUD_LAYOUT_ZOMBIE", get_user_health(id), get_user_armor(id), g_SkillPoint[id], PlayerClass, g_Level[id], g_Experience[id], Level_Experience[min(g_Level[id], MAX_LEVEL-1)])
  513. } else {
  514. set_hudmessage(0, 255, 0, 0.02, 0.925, 0, 1.25, 1.25)
  515. ShowSyncHudMsg(id, g_Hud_Game, "%L", GAME_LANG, "HUD_LAYOUT_HUMAN", get_user_health(id), get_user_armor(id), g_SkillPoint[id], PlayerClass, g_Level[id], g_Experience[id], Level_Experience[min(g_Level[id], MAX_LEVEL-1)])
  516. }
  517. }
  518. }
  519.  
  520. public Check_Gameplay()
  521. {
  522. if(!g_GameAvailable || !g_GameStart || g_GameEnd)
  523. return
  524.  
  525. if((Get_PlayerCount(1, 1) <= 0) && !pev_valid(g_ZombieBase)) // All zombies are dead
  526. {
  527. StopSound(0)
  528. Game_Ending(5.0, 0, CS_TEAM_CT)
  529.  
  530. return
  531. } else if((Get_PlayerCount(1, 2) <= 0) && !pev_valid(g_HumanBase)) { // All humans are dead
  532. StopSound(0)
  533. Game_Ending(5.0, 0, CS_TEAM_T)
  534.  
  535. return
  536. }
  537. }
  538.  
  539. public Level_GainExp(id, Exp, CheckLvUp)
  540. {
  541. if(g_Level[id] >= MAX_LEVEL)
  542. return
  543.  
  544. g_Experience[id] = min(g_Experience[id] += Exp, Level_Experience[MAX_LEVEL])
  545. if(CheckLvUp) Level_CheckUp(id)
  546. }
  547.  
  548. public Level_CheckUp(id)
  549. {
  550. if(g_Level[id] >= MAX_LEVEL)
  551. return
  552.  
  553. static HadLevelUp; HadLevelUp = 0
  554. while(g_Experience[id] >= Level_Experience[g_Level[id]])
  555. {
  556. g_Level[id]++
  557. HadLevelUp = 1
  558. }
  559.  
  560. if(HadLevelUp)
  561. { // Player Level Up!
  562. PlaySound(id, Get_BitVar(g_IsZombie, id) ? LevelUpZ_Sound : LevelUpH_Sound)
  563.  
  564. set_hudmessage(0, 255, 0, NOTICE_X, NOTICE_Y, 0, 3.0, 3.0)
  565. ShowSyncHudMsg(id, g_Hud_Notice, "%L", GAME_LANG, "NOTICE_LEVELUP", g_Level[id])
  566. }
  567. }
  568.  
  569. public Event_NewRound()
  570. {
  571. if(!g_DataLoad) return
  572.  
  573. g_GameEnd = 0
  574. g_GameStart = 0
  575.  
  576. if(pev_valid(g_HumanBase)) remove_entity(g_HumanBase)
  577. if(pev_valid(g_ZombieBase)) remove_entity(g_ZombieBase)
  578.  
  579. remove_task(TASK_COUNTDOWN)
  580. remove_task(TASK_BASEDEATH)
  581.  
  582. StopSound(0)
  583.  
  584. if(!g_GameAvailable || g_GameEnd)
  585. return
  586.  
  587. PlaySound(0, StartSound)
  588. Start_Countdown()
  589.  
  590. //ExecuteForward(g_Forwards[FW_ROUND_NEW], g_fwResult)
  591. }
  592.  
  593. public Event_RoundStart()
  594. {
  595. if(!g_DataLoad) return
  596. if(!g_GameAvailable || g_GameEnd)
  597. return
  598.  
  599. g_GameStart = 1
  600.  
  601. // Set Map time
  602. static MapTime; MapTime = get_timeleft()
  603. static Round; Round = MapTime / 60
  604. IG_RoundTime_Set(Round, clamp(MapTime - (Round * 60), 0, 60))
  605.  
  606. // Initialize Base
  607. Create_TeamBase()
  608. }
  609.  
  610. public Event_RoundEnd()
  611. {
  612. g_GameEnd = 1
  613. g_GameStart = 0
  614. }
  615.  
  616. public Event_RoundRestart() Event_RoundEnd()
  617. public Event_ResetHUD(id)
  618. {
  619. message_begin(MSG_ONE_UNRELIABLE, g_MsgHideWeapon, _, id)
  620. write_byte((1<<3))
  621. message_end()
  622. }
  623.  
  624. public Reset_Player(id, NewPlayer)
  625. {
  626. if(NewPlayer)
  627. {
  628. UnSet_BitVar(g_Joined, id)
  629. g_SkillPoint[id] = g_Level[id] = g_Experience[id] = 0
  630. }
  631.  
  632. UnSet_BitVar(g_IsZombie, id)
  633. }
  634.  
  635. public Start_Countdown()
  636. {
  637. g_CountTime = COUNTDOWN_TIME
  638.  
  639. remove_task(TASK_COUNTDOWN)
  640. CountingDown()
  641. }
  642.  
  643. public CountingDown()
  644. {
  645. if(!g_GameAvailable || g_GameEnd)
  646. return
  647. if(g_CountTime <= 0)
  648. return
  649.  
  650. client_print(0, print_center, "%L", GAME_LANG, "NOTICE_COUNTDOWN", g_CountTime)
  651.  
  652. switch(g_CountTime)
  653. {
  654. case 18: Send_Transcript(4.0, 0, "%L", GAME_LANG, "NOTICE_ROUNDSTART1")
  655. case 14: Send_Transcript(4.0, 0, "%L", GAME_LANG, "NOTICE_ROUNDSTART2")
  656. case 10: Send_Transcript(4.0, 0, "%L", GAME_LANG, "NOTICE_ROUNDSTART3")
  657. }
  658.  
  659. if(g_CountTime <= 10)
  660. {
  661. static Sound[64]; format(Sound, charsmax(Sound), CountSound, g_CountTime)
  662. PlaySound(0, Sound)
  663. }
  664.  
  665. g_CountTime--
  666. set_task(1.0, "CountingDown", TASK_COUNTDOWN)
  667. }
  668.  
  669. public Send_Transcript(Float:Time, Emergency, const Text[], any:...)
  670. {
  671. static szMsg[128]; vformat(szMsg, sizeof(szMsg) - 1, Text, 4)
  672.  
  673. for(new i = 0; i < g_MaxPlayers; i++)
  674. {
  675. if(!is_connected(i))
  676. continue
  677.  
  678. set_hudmessage(255, 42, 0, NOTICE_X, NOTICE_Y, Emergency, Time, Time)
  679. ShowSyncHudMsg(i, g_Hud_Notice, szMsg)
  680.  
  681. PlaySound(i, Tutorial_MessageSound)
  682. }
  683. }
  684.  
  685.  
  686. public Game_Ending(Float:EndTime, RoundDraw, CsTeams:Team)
  687. // RoundDraw: Draw or Team Win
  688. // Team: 1 - T | 2 - CT
  689. {
  690. if(g_GameEnd) return
  691. if(RoundDraw)
  692. {
  693. IG_TerminateRound(WIN_DRAW, EndTime, 0)
  694. //ExecuteForward(g_Forward_RoundEnd, g_fwResult, CS_TEAM_UNASSIGNED)
  695.  
  696. client_print(0, print_center, "%L", GAME_LANG, "NOTICE_GAMESTART")
  697. } else {
  698. if(Team == CS_TEAM_T)
  699. {
  700. g_TeamScore[TEAM_ZOMBIE]++
  701.  
  702. IG_TerminateRound(WIN_TERRORIST, EndTime, 0)
  703. //ExecuteForward(g_Forward_RoundEnd, g_fwResult, CS_TEAM_T)
  704.  
  705. PlaySound(0, Zombie_WinSound)
  706.  
  707. set_dhudmessage(200, 0, 0, HUD_WIN_X, HUD_WIN_Y, 0, EndTime, EndTime, 0.0, 1.5)
  708. show_dhudmessage(0, "%L", GAME_LANG, "NOTICE_WIN_ZOMBIE")
  709. } else if(Team == CS_TEAM_CT) {
  710. g_TeamScore[TEAM_HUMAN]++
  711.  
  712. IG_TerminateRound(WIN_CT, EndTime, 0)
  713. //ExecuteForward(g_Forward_RoundEnd, g_fwResult, CS_TEAM_CT)
  714.  
  715. PlaySound(0, Human_WinSound)
  716.  
  717. set_dhudmessage(0, 200, 0, HUD_WIN_X, HUD_WIN_Y, 0, EndTime, EndTime, 0.0, 1.5)
  718. show_dhudmessage(0, "%L", GAME_LANG, "NOTICE_WIN_HUMAN")
  719. }
  720. }
  721.  
  722. //Reward_Team()
  723.  
  724. g_GameEnd = 1
  725. }
  726.  
  727. public BaseOrigin_Handle(id)
  728. {
  729. static MenuTitle[32]; formatex(MenuTitle, sizeof(MenuTitle), "\y%L\w", GAME_LANG, "MENU_BASEORIGIN")
  730. new MenuId; MenuId = menu_create(MenuTitle, "MenuHandle_BaseOrigin")
  731.  
  732. static Data[64];
  733.  
  734. formatex(Data, 63, "Current Origin \r[%i %i %i]\w", floatround(MyOrigin[0]), floatround(MyOrigin[1]), floatround(MyOrigin[2]))
  735. menu_additem(MenuId, Data, "geto")
  736. formatex(Data, 63, "Current Angles \r[%i %i %i]\w^n", floatround(MyAngles[0]), floatround(MyAngles[1]), floatround(MyAngles[2]))
  737. menu_additem(MenuId, Data, "geta")
  738.  
  739. formatex(Data, 63, "\yUpdate Origin:\w Human Base \r[%i %i %i]\w", floatround(HumanBase_Origin[0]), floatround(HumanBase_Origin[1]), floatround(HumanBase_Origin[2]))
  740. menu_additem(MenuId, Data, "uphmo")
  741. formatex(Data, 63, "\yUpdate Origin:\w Zombie Base \r[%i %i %i]\w", floatround(ZombieBase_Origin[0]), floatround(ZombieBase_Origin[1]), floatround(ZombieBase_Origin[2]))
  742. menu_additem(MenuId, Data, "upzmo")
  743.  
  744. formatex(Data, 63, "\yUpdate Angles:\w Human Base \r[%i %i %i]\w", floatround(HumanBase_Angles[0]), floatround(HumanBase_Angles[1]), floatround(HumanBase_Angles[2]))
  745. menu_additem(MenuId, Data, "uphma")
  746. formatex(Data, 63, "\yUpdate Angles:\w Zombie Base \r[%i %i %i]\w^n", floatround(ZombieBase_Angles[0]), floatround(ZombieBase_Angles[1]), floatround(ZombieBase_Angles[2]))
  747. menu_additem(MenuId, Data, "upzma")
  748.  
  749. menu_additem(MenuId, "\rSave Data\w", "save")
  750.  
  751. if(pev_valid(id) == 2) set_pdata_int(id, 205, 0, 5)
  752. menu_display(id, MenuId, 0)
  753. }
  754.  
  755. public MenuHandle_BaseOrigin(id, Menu, Item)
  756. {
  757. if((Item == MENU_EXIT) || !is_connected(id))
  758. {
  759. menu_destroy(Menu)
  760.  
  761. MyOrigin[0] = MyOrigin[1] = MyOrigin[2] = 0.0
  762. MyAngles[0] = MyAngles[1] = MyAngles[2] = 0.0
  763.  
  764. return
  765. }
  766.  
  767. static Data[6], Name[64], ItemAccess, ItemCallback
  768. menu_item_getinfo(Menu, Item, ItemAccess, Data, charsmax(Data), Name, charsmax(Name), ItemCallback)
  769.  
  770. if(equal(Data, "geto"))
  771. {
  772. pev(id, pev_origin, MyOrigin)
  773. } else if(equal(Data, "geta"))
  774. {
  775. pev(id, pev_v_angle, MyAngles)
  776. MyAngles[0] = 0.0
  777. } else if(equal(Data, "uphmo")) HumanBase_Origin = MyOrigin
  778. else if(equal(Data, "uphma")) HumanBase_Angles = MyAngles
  779. else if(equal(Data, "upzmo")) ZombieBase_Origin = MyOrigin
  780. else if(equal(Data, "upzma")) ZombieBase_Angles = MyAngles
  781. else if(equal(Data, "save"))
  782. {
  783. Save_MapData(id)
  784. }
  785.  
  786. menu_destroy(Menu)
  787. BaseOrigin_Handle(id)
  788. }
  789.  
  790. public Save_MapData(id)
  791. {
  792. new Path[128]; get_configsdir(Path, charsmax(Path))
  793. new MapName[64]; get_mapname(MapName, 63)
  794. format(Path, 63, "%s/%s/%s.base", Path, GAME_FOLDER, MapName)
  795.  
  796. static LineData[128]
  797.  
  798. formatex(LineData, 127, "HUMAN_BASE_ORIGIN = %f %f %f", HumanBase_Origin[0], HumanBase_Origin[1], HumanBase_Origin[2])
  799. write_file(Path, LineData, 0)
  800. formatex(LineData, 127, "HUMAN_BASE_ANGLES = %f %f %f", HumanBase_Angles[0], HumanBase_Angles[1], HumanBase_Angles[2])
  801. write_file(Path, LineData, 1)
  802.  
  803. formatex(LineData, 127, "ZOMBIE_BASE_ORIGIN = %f %f %f", ZombieBase_Origin[0], ZombieBase_Origin[1], ZombieBase_Origin[2])
  804. write_file(Path, LineData, 2)
  805. formatex(LineData, 127, "ZOMBIE_BASE_ANGLES = %f %f %f", ZombieBase_Angles[0], ZombieBase_Angles[1], ZombieBase_Angles[2])
  806. write_file(Path, LineData, 3)
  807.  
  808. // Notice
  809. client_print(id, print_chat, "Map Config Updated!")
  810. }
  811.  
  812. public Create_TeamBase()
  813. {
  814. static Float:BarOrigin[3]
  815.  
  816. // Human Base
  817. g_HumanBase = create_entity("info_target")
  818.  
  819. set_pev(g_HumanBase, pev_origin, HumanBase_Origin)
  820. set_pev(g_HumanBase, pev_angles, HumanBase_Angles)
  821.  
  822. set_pev(g_HumanBase, pev_classname, BASE_CLASSNAME)
  823. engfunc(EngFunc_SetModel, g_HumanBase, HumanBase_Model)
  824. set_pev(g_HumanBase, pev_modelindex, engfunc(EngFunc_ModelIndex, HumanBase_Model))
  825.  
  826. set_pev(g_HumanBase, pev_gamestate, 1)
  827. set_pev(g_HumanBase, pev_solid, SOLID_BBOX)
  828. set_pev(g_HumanBase, pev_movetype, MOVETYPE_NONE)
  829. set_pev(g_HumanBase, pev_iuser1, 2) // Team
  830. set_pev(g_HumanBase, pev_iuser2, 0) // Death
  831.  
  832. new Float:maxs[3] = {40.0, 40.0, 60.0}
  833. new Float:mins[3] = {-40.0, -40.0, 0.0}
  834. engfunc(EngFunc_SetSize, g_HumanBase, mins, maxs)
  835.  
  836. set_pev(g_HumanBase, pev_takedamage, DAMAGE_YES)
  837. set_pev(g_HumanBase, pev_health, 10000.0 + HUMANBASE_HEALTH)
  838.  
  839. set_pev(g_HumanBase, pev_animtime, get_gametime())
  840. set_pev(g_HumanBase, pev_framerate, 1.0)
  841. set_pev(g_HumanBase, pev_sequence, 0)
  842.  
  843. set_pev(g_HumanBase, pev_nextthink, get_gametime() + 0.1)
  844. drop_to_floor(g_HumanBase)
  845.  
  846. BarOrigin = HumanBase_Origin; BarOrigin[2] += 60
  847. Create_HealthBar(g_HumanBase, BarOrigin, 2)
  848.  
  849. // Zombie Base
  850. g_ZombieBase = create_entity("info_target")
  851.  
  852. set_pev(g_ZombieBase, pev_origin, ZombieBase_Origin)
  853. set_pev(g_ZombieBase, pev_angles, ZombieBase_Angles)
  854. set_pev(g_ZombieBase, pev_v_angle, ZombieBase_Angles)
  855.  
  856. set_pev(g_ZombieBase, pev_classname, BASE_CLASSNAME)
  857. engfunc(EngFunc_SetModel, g_ZombieBase, ZombieBase_Model)
  858. set_pev(g_ZombieBase, pev_modelindex, engfunc(EngFunc_ModelIndex, ZombieBase_Model))
  859.  
  860. set_pev(g_ZombieBase, pev_gamestate, 1)
  861. set_pev(g_ZombieBase, pev_solid, SOLID_BBOX)
  862. set_pev(g_ZombieBase, pev_movetype, MOVETYPE_NONE)
  863. set_pev(g_ZombieBase, pev_iuser1, 1) // Team
  864. set_pev(g_ZombieBase, pev_iuser2, 0) // Death
  865.  
  866. new Float:maxs2[3] = {80.0, 80.0, 240.0}
  867. new Float:mins2[3] = {-80.0, -80.0, 0.0}
  868. engfunc(EngFunc_SetSize, g_ZombieBase, mins2, maxs2)
  869.  
  870. set_pev(g_ZombieBase, pev_takedamage, DAMAGE_YES)
  871. set_pev(g_ZombieBase, pev_health, 10000.0 + ZOMBIEBASE_HEALTH)
  872.  
  873. set_pev(g_ZombieBase, pev_animtime, get_gametime())
  874. set_pev(g_ZombieBase, pev_framerate, 1.0)
  875. set_pev(g_ZombieBase, pev_sequence, 1)
  876.  
  877. set_pev(g_ZombieBase, pev_nextthink, get_gametime() + 0.1)
  878. drop_to_floor(g_ZombieBase)
  879.  
  880. get_position(g_ZombieBase, 100.0, 0.0, 280.0, BarOrigin)
  881. Create_HealthBar(g_ZombieBase, BarOrigin, 1)
  882.  
  883. // Base Creation
  884. if(!g_BaseCreation)
  885. {
  886. g_BaseCreation = 1
  887. RegisterHamFromEntity(Ham_TraceAttack, g_HumanBase, "fw_Base_TraceAttack_Post", 1)
  888. RegisterHamFromEntity(Ham_TraceAttack, g_ZombieBase, "fw_Base_TraceAttack_Post", 1)
  889. }
  890. }
  891.  
  892. public Create_HealthBar(Ent, Float:Origin[3], Team)
  893. {
  894. new Bar = create_entity("info_target")
  895.  
  896. entity_set_string(Bar, EV_SZ_classname, "healthbar")
  897.  
  898. entity_set_int(Bar, EV_INT_solid, SOLID_NOT)
  899. entity_set_int(Bar, EV_INT_movetype, MOVETYPE_NOCLIP)
  900. entity_set_edict(Bar, EV_ENT_owner, Ent)
  901. entity_set_float(Bar, EV_FL_scale, 0.0)
  902. entity_set_model(Bar, HEALTHBAR_SPR)
  903.  
  904. entity_set_origin(Bar, Origin)
  905. entity_set_float(Bar, EV_FL_frame, 99.0)
  906.  
  907. set_pev(Bar, pev_iuser1, Team)
  908. set_pev(Bar, pev_fuser1, Origin[0])
  909. set_pev(Bar, pev_fuser2, Origin[1])
  910. set_pev(Bar, pev_fuser3, Origin[2])
  911.  
  912. entity_set_float(Bar, EV_FL_nextthink, halflife_time() + 0.01)
  913. }
  914.  
  915. /* ===============================
  916. ------------ FAKEMETA ------------
  917. =================================*/
  918. public fw_HealthBar_Think(Ent)
  919. {
  920. static Owner; Owner = entity_get_edict(Ent, EV_ENT_owner)
  921. if(!is_valid_ent(Owner))
  922. {
  923. remove_entity(Ent)
  924. return
  925. }
  926.  
  927. static Float:Origin[3];
  928. pev(Ent, pev_fuser1, Origin[0])
  929. pev(Ent, pev_fuser2, Origin[1])
  930. pev(Ent, pev_fuser3, Origin[2])
  931.  
  932. entity_set_origin(Ent, Origin)
  933. static Float:MaxHealth
  934.  
  935. if(pev(Ent, pev_iuser1) == 1)
  936. {
  937. for(new i = 0; i <= g_MaxPlayers; i++)
  938. {
  939. if(!is_connected(i))
  940. continue
  941. g_ZombieBar_Dis[i] = entity_range(i, Ent)
  942. }
  943.  
  944. MaxHealth = ZOMBIEBASE_HEALTH
  945. g_ZombieBar = Ent
  946. } else if(pev(Ent, pev_iuser1) == 2) {
  947. for(new i = 0; i <= g_MaxPlayers; i++)
  948. {
  949. if(!is_connected(i))
  950. continue
  951. g_HumanBar_Dis[i] = entity_range(i, Ent)
  952. }
  953.  
  954. MaxHealth = HUMANBASE_HEALTH
  955. g_HumanBar = Ent
  956. }
  957.  
  958. new Float:Health = entity_get_float(Owner, EV_FL_health) - 10000.0
  959. new Float:Frame = (Health / MaxHealth) * 99.0
  960.  
  961. entity_set_float(Ent, EV_FL_frame, Frame)
  962. entity_set_float(Ent, EV_FL_nextthink, get_gametime() + 0.01)
  963. }
  964.  
  965. public fw_Base_Think(Ent)
  966. {
  967. if(!pev_valid(Ent))
  968. return
  969. if(pev(Ent, pev_iuser2))
  970. return
  971. if((pev(Ent, pev_health) - 10000.0) <= 0.0)
  972. {
  973. if(pev(Ent, pev_iuser1) == 1) ZombieBase_Death(Ent)
  974. else if(pev(Ent, pev_iuser1) == 2) HumanBase_Death(Ent)
  975.  
  976. return
  977. }
  978.  
  979. entity_set_float(Ent, EV_FL_nextthink, get_gametime() + 0.01)
  980. }
  981.  
  982. public fw_CapitalSaigon_Post(es_handle,e,ent,host,hostflags,player,pSet)
  983. {
  984. if(!is_connected(host))
  985. return
  986.  
  987. if(ent == g_HumanBar)
  988. {
  989. static Float:Scale; Scale = g_HumanBar_Dis[host] / 750.0
  990. set_es(es_handle, ES_Scale, Scale)
  991. } else if(ent == g_ZombieBar) {
  992. static Float:Scale; Scale = g_ZombieBar_Dis[host] / 750.0
  993. set_es(es_handle, ES_Scale, Scale)
  994. }
  995. }
  996.  
  997. public ZombieBase_Death(Ent)
  998. {
  999. PlaySound(0, ZombieBase_DeathSound[random_num(0, sizeof(ZombieBase_DeathSound) - 1)])
  1000.  
  1001. for(new i = 0; i < g_MaxPlayers; i++)
  1002. {
  1003. if(!is_alive(i))
  1004. continue
  1005. if(entity_range(g_ZombieBase, i) > 640.0)
  1006. continue
  1007.  
  1008. Make_PlayerShake(i)
  1009. }
  1010.  
  1011. set_task(0.1, "ZombieBase_Effect", TASK_BASEDEATH)
  1012. set_task(3.0, "ZombieBase_Death2", TASK_BASEDEATH)
  1013. }
  1014.  
  1015. public ZombieBase_Effect()
  1016. {
  1017. if(!pev_valid(g_ZombieBase))
  1018. return
  1019.  
  1020. // Special Blood
  1021. static Float:Origin[3]
  1022.  
  1023. get_position(g_ZombieBase, 80.0, 0.0, 200.0, Origin);
  1024. MakeBlood(Origin)
  1025.  
  1026. get_position(g_ZombieBase, -80.0, 0.0, 200.0, Origin);
  1027. MakeBlood(Origin)
  1028.  
  1029. //get_position(g_ZombieBase, 0.0, 60.0, 170.0, Origin);
  1030. //MakeBlood(Origin)
  1031.  
  1032. //get_position(g_ZombieBase, 0.0, -60.0, 170.0, Origin);
  1033. //MakeBlood(Origin)
  1034.  
  1035. set_task(0.25, "ZombieBase_Effect", TASK_BASEDEATH)
  1036. }
  1037.  
  1038. public ZombieBase_Death2()
  1039. {
  1040. if(!pev_valid(g_ZombieBase))
  1041. return
  1042.  
  1043. static Float:Origin[3]
  1044. pev(g_ZombieBase, pev_origin, Origin); Origin[2] += 26.0
  1045.  
  1046. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1047. write_byte(TE_EXPLOSION)
  1048. engfunc(EngFunc_WriteCoord, Origin[0])
  1049. engfunc(EngFunc_WriteCoord, Origin[1])
  1050. engfunc(EngFunc_WriteCoord, Origin[2] + 50.0)
  1051. write_short(g_ZombieDeath_SprId) // sprite index
  1052. write_byte(35) // scale in 0.1's
  1053. write_byte(10) // framerate
  1054. write_byte(TE_EXPLFLAG_NOSOUND) // flags
  1055. message_end()
  1056.  
  1057. /*
  1058. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  1059. write_byte(TE_BREAKMODEL)
  1060. engfunc(EngFunc_WriteCoord, Origin[0])
  1061. engfunc(EngFunc_WriteCoord, Origin[1])
  1062. engfunc(EngFunc_WriteCoord, Origin[2] + 100.0)
  1063. write_coord(256); // size x
  1064. write_coord(256); // size y
  1065. write_coord(256); // size z
  1066. write_coord(random_num(-128,128)); // velocity x
  1067. write_coord(random_num(-128,128)); // velocity y
  1068. write_coord(75); // velocity z
  1069. write_byte(75); // random velocity
  1070. write_short(g_GibModelID2); // model index that you want to break
  1071. write_byte(128); // count
  1072. write_byte(50); // life
  1073. write_byte(0x01); // flags: BREAK_GLASS
  1074. message_end(); */
  1075.  
  1076. remove_entity(g_ZombieBase); g_ZombieBase = 0
  1077. }
  1078.  
  1079. public HumanBase_Death(Ent)
  1080. {
  1081. emit_sound(Ent, CHAN_BODY, HumanBase_DeathSound1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1082.  
  1083. set_task(0.1, "HumanBase_Effect", TASK_BASEDEATH)
  1084. set_task(2.0, "HumanBase_Death2", TASK_BASEDEATH)
  1085.  
  1086. // Game_Ending(7.0, 0, CS_TEAM_T)
  1087. }
  1088.  
  1089. public HumanBase_Effect()
  1090. {
  1091. if(!pev_valid(g_HumanBase))
  1092. return
  1093.  
  1094. static Float:Origin[3], Float:Origin2[3];
  1095.  
  1096. pev(g_HumanBase, pev_origin, Origin); Origin[2] += 26.0
  1097. get_position(g_HumanBase, random_float(-360.0, 360.0), random_float(-360.0, 360.0), 0.0, Origin2)
  1098.  
  1099. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1100. write_byte(TE_BEAMPOINTS)
  1101. engfunc(EngFunc_WriteCoord, Origin[0])
  1102. engfunc(EngFunc_WriteCoord, Origin[1])
  1103. engfunc(EngFunc_WriteCoord, Origin[2])
  1104. engfunc(EngFunc_WriteCoord, Origin2[0])
  1105. engfunc(EngFunc_WriteCoord, Origin2[1])
  1106. engfunc(EngFunc_WriteCoord, Origin2[2])
  1107. write_short(g_iSprLightning)
  1108. write_byte(0) // starting frame
  1109. write_byte(0) // frame rate in 0.1's
  1110. write_byte(10) // life in 0.1's
  1111. write_byte(10) // line width in 0.1's
  1112. write_byte(100) // noise amplitude in 0.01's
  1113. write_byte(42) // Red
  1114. write_byte(85) // Green
  1115. write_byte(255) // Blue
  1116. write_byte(255) // brightness
  1117. write_byte(25) // scroll speed in 0.1's
  1118. message_end()
  1119.  
  1120. set_task(0.1, "HumanBase_Effect", TASK_BASEDEATH)
  1121. }
  1122.  
  1123. public HumanBase_Death2()
  1124. {
  1125. if(!pev_valid(g_HumanBase))
  1126. return
  1127.  
  1128. emit_sound(g_HumanBase, CHAN_STATIC, HumanBase_DeathSound2, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1129.  
  1130. static Float:Origin[3]; pev(g_HumanBase, pev_origin, Origin)
  1131.  
  1132. for(new i = 0; i < g_MaxPlayers; i++)
  1133. {
  1134. if(!is_alive(i))
  1135. continue
  1136. if(entity_range(g_HumanBase, i) > 640.0)
  1137. continue
  1138.  
  1139. Make_PlayerShake(i)
  1140. ExecuteHamB(Ham_TakeDamage, i, 0, 0, 99.0, DMG_BLAST)
  1141. }
  1142.  
  1143. remove_entity(g_HumanBase); g_HumanBase = 0
  1144.  
  1145. message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
  1146. write_byte(TE_EXPLOSION)
  1147. engfunc(EngFunc_WriteCoord, Origin[0])
  1148. engfunc(EngFunc_WriteCoord, Origin[1])
  1149. engfunc(EngFunc_WriteCoord, Origin[2])
  1150. write_short(g_Exp_SprID) // sprite index
  1151. write_byte(25) // scale in 0.1's
  1152. write_byte(30) // framerate
  1153. write_byte(TE_EXPLFLAG_NOSOUND) // flags
  1154. message_end()
  1155.  
  1156. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  1157. write_byte(TE_BREAKMODEL)
  1158. engfunc(EngFunc_WriteCoord, Origin[0])
  1159. engfunc(EngFunc_WriteCoord, Origin[1])
  1160. engfunc(EngFunc_WriteCoord, Origin[2] + 26.0)
  1161. write_coord(64); // size x
  1162. write_coord(64); // size y
  1163. write_coord(64); // size z
  1164. write_coord(random_num(-64,64)); // velocity x
  1165. write_coord(random_num(-64,64)); // velocity y
  1166. write_coord(25); // velocity z
  1167. write_byte(25); // random velocity
  1168. write_short(g_GibModelID); // model index that you want to break
  1169. write_byte(32); // count
  1170. write_byte(25); // life
  1171. write_byte(0x01); // flags: BREAK_GLASS
  1172. message_end();
  1173. }
  1174.  
  1175. public Make_PlayerShake(id)
  1176. {
  1177. if(!id)
  1178. {
  1179. message_begin(MSG_BROADCAST, g_MsgScreenShake)
  1180. write_short(8<<12)
  1181. write_short(5<<12)
  1182. write_short(4<<12)
  1183. message_end()
  1184. } else {
  1185. if(!is_user_connected(id))
  1186. return
  1187.  
  1188. message_begin(MSG_BROADCAST, g_MsgScreenShake, _, id)
  1189. write_short(8<<12)
  1190. write_short(5<<12)
  1191. write_short(4<<12)
  1192. message_end()
  1193. }
  1194. }
  1195.  
  1196. /* ===============================
  1197. -------------- HAMS --------------
  1198. =================================*/
  1199. public fw_PlayerSpawn_Post(id)
  1200. {
  1201. if(!is_connected(id)) return
  1202.  
  1203. if(!Get_BitVar(g_Joined, id)) Set_BitVar(g_Joined, id)
  1204.  
  1205. Reset_Player(id, 0)
  1206. Spawn_PlayerRandom(id, cs_get_user_team(id) == CS_TEAM_T ? 1 : 0)
  1207.  
  1208. /*
  1209. // Set Human
  1210. Set_PlayerNVG(id, 0, 0, 0, 1)
  1211. fm_set_user_rendering(id)
  1212. set_task(0.01, "Set_LightStart", id)
  1213. IG_DLight_Reset(id)
  1214. IG_Fog(id, g_FogColor_Human[0], g_FogColor_Human[1], g_FogColor_Human[2], 1)
  1215.  
  1216. set_pdata_int(id, m_iRadiosLeft, RADIO_MAXSEND, OFFSET_PLAYER_LINUX)
  1217.  
  1218. Set_PlayerHealth(id, g_HumanHealth, 1)
  1219. set_pev(id, pev_gravity, g_HumanGravity)
  1220. cs_set_user_armor(id, g_HumanArmor, CS_ARMOR_KEVLAR)
  1221. IG_SpeedReset(id)
  1222.  
  1223. // Start Weapon
  1224. fm_strip_user_weapons(id)
  1225. fm_give_item(id, "weapon_knife")
  1226. fm_give_item(id, "weapon_usp")
  1227. give_ammo(id, 1, CSW_USP)
  1228. give_ammo(id, 1, CSW_USP)
  1229.  
  1230. IG_TeamSet(id, CS_TEAM_CT)
  1231. g_MyCSTeam[id] = CS_TEAM_CT
  1232.  
  1233. IG_ModelSet(id, g_PlayerOwnModel[id], 1)
  1234.  
  1235. // Fade Out
  1236. message_begin(MSG_ONE_UNRELIABLE, g_MsgScreenFade, {0,0,0}, id)
  1237. write_short(FixedUnsigned16(2.5, 1<<12))
  1238. write_short(FixedUnsigned16(2.5, 1<<12))
  1239. write_short((0x0000))
  1240. write_byte(0)
  1241. write_byte(0)
  1242. write_byte(0)
  1243. write_byte(255)
  1244. message_end()
  1245.  
  1246. //ExecuteForward(g_Forwards[FW_USER_SPAWN], g_fwResult, id)
  1247.  
  1248. // Show Info
  1249. static String[96]
  1250. formatex(String, sizeof(String), "!g[%s]!n %L", GameName, GAME_LANG, "GAME_NOTICE_REMINDHELP")
  1251. IG_ClientPrintColor(id, String)*/
  1252. }
  1253.  
  1254.  
  1255. public fw_PlayerTraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], Trace, DamageBits)
  1256. {
  1257. if(!g_GameAvailable || g_GameEnd || !g_GameStart)
  1258. return HAM_SUPERCEDE
  1259. if(Victim == Attacker)
  1260. return HAM_SUPERCEDE
  1261.  
  1262. return HAM_HANDLED
  1263. }
  1264.  
  1265. public fw_PlayerTakeDamage(Victim, Inflictor, Attacker, Float:Damage, DamageBits)
  1266. {
  1267. if(!g_GameAvailable || g_GameEnd || !g_GameStart)
  1268. return HAM_SUPERCEDE
  1269. if(Victim == Attacker)
  1270. return HAM_SUPERCEDE
  1271.  
  1272. return HAM_HANDLED
  1273. }
  1274.  
  1275. public fw_Base_TraceAttack_Post(Victim, Attacker, Float:Damage, Float:Direction[3], Trace, DamageBits)
  1276. {
  1277. if(!g_GameAvailable || g_GameEnd || !g_GameStart)
  1278. return HAM_SUPERCEDE
  1279. if(Victim == Attacker)
  1280. return HAM_SUPERCEDE
  1281.  
  1282. static Classname[32]; pev(Victim, pev_classname, Classname, 31)
  1283. if(!equal(Classname, BASE_CLASSNAME))
  1284. return HAM_IGNORED
  1285.  
  1286. if(pev(Victim, pev_iuser1) == 1)
  1287. { // Zombie Base
  1288.  
  1289. // Special Blood
  1290. static Float:Origin[3], Float:EndPoint[3]
  1291. get_tr2(Trace, TR_vecEndPos, EndPoint)
  1292.  
  1293. get_position(Victim, 80.0, 0.0, 200.0, Origin); Origin[2] = EndPoint[2]
  1294. MakeBlood(Origin)
  1295.  
  1296. get_position(Victim, -80.0, 0.0, 200.0, Origin); Origin[2] = EndPoint[2]
  1297. MakeBlood(Origin)
  1298.  
  1299. get_position(Victim, 0.0, 60.0, 170.0, Origin); Origin[2] = EndPoint[2]
  1300. MakeBlood(Origin)
  1301.  
  1302. get_position(Victim, 0.0, -60.0, 170.0, Origin); Origin[2] = EndPoint[2]
  1303. MakeBlood(Origin)
  1304.  
  1305. emit_sound(Victim, CHAN_BODY, ZombieBase_HitSound[random_num(0, sizeof(ZombieBase_HitSound) - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1306. } else if(pev(Victim, pev_iuser1) == 2) { // Human Base
  1307.  
  1308. }
  1309.  
  1310. return HAM_HANDLED
  1311. }
  1312.  
  1313. public fw_UseStationary(entity, caller, activator, use_type)
  1314. {
  1315. if (use_type == 2 && is_connected(caller) && is_zombie(caller))
  1316. return HAM_SUPERCEDE
  1317.  
  1318. return HAM_IGNORED
  1319. }
  1320.  
  1321. public fw_UseStationary_Post(entity, caller, activator, use_type)
  1322. {
  1323. if(use_type == 0 && is_connected(caller) && is_zombie(caller))
  1324. {
  1325. //if(!Get_BitVar(g_IsGhoulEx, caller)) set_pev(caller, pev_viewmodel2, Ar_GhoulClawModel)
  1326. //else set_pev(caller, pev_viewmodel2, Ar_GhoulexClawModel)
  1327. //set_pev(caller, pev_weaponmodel2, "")
  1328. }
  1329. }
  1330.  
  1331. public fw_TouchWeapon(weapon, id)
  1332. {
  1333. if(!is_connected(id))
  1334. return HAM_IGNORED
  1335. if(is_zombie(id))
  1336. return HAM_SUPERCEDE
  1337.  
  1338. return HAM_IGNORED
  1339. }
  1340.  
  1341. public fw_Item_Deploy_Post(weapon_ent)
  1342. {
  1343. new owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  1344. if (!is_alive(owner))
  1345. return;
  1346.  
  1347. new CSWID; CSWID = cs_get_weapon_id(weapon_ent)
  1348. if(is_zombie(owner))
  1349. {
  1350. /*
  1351. if(CSWID == CSW_KNIFE)
  1352. {
  1353. static Hand[32], Hand2[64]; ArrayGetString(Get_BitVar(g_IsGhoulEx, owner) ? Ar_GhoulexClawModel : Ar_GhoulClawModel, g_MyGhoulHand[owner], Hand, sizeof(Hand))
  1354. formatex(Hand2, sizeof(Hand2), "models/%s/%s", GAME_FOLDER, Hand)
  1355.  
  1356. if(!Get_BitVar(g_IsGhoulEx, owner)) set_pev(owner, pev_viewmodel2, Hand2)
  1357. else set_pev(owner, pev_viewmodel2, Hand2)
  1358. set_pev(owner, pev_weaponmodel2, "")
  1359. } else {
  1360. strip_user_weapons(owner)
  1361. give_item(owner, "weapon_knife")
  1362.  
  1363. engclient_cmd(owner, "weapon_knife")
  1364. }*/
  1365. }
  1366. }
  1367.  
  1368. public fw_PlayerKilled_Post(Victim, Attacker)
  1369. {
  1370. //ExecuteForward(g_Forwards[FW_USER_DIED], g_fwResult, Victim, Attacker)
  1371.  
  1372. // Check Gameplay
  1373. Check_Gameplay()
  1374. }
  1375.  
  1376. public MakeBlood(const Float:Origin[3])
  1377. {
  1378. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1379. write_byte(TE_BLOODSPRITE)
  1380. engfunc(EngFunc_WriteCoord, Origin[0])
  1381. engfunc(EngFunc_WriteCoord, Origin[1])
  1382. engfunc(EngFunc_WriteCoord, Origin[2])
  1383. write_short(m_iBlood[1])
  1384. write_short(m_iBlood[0])
  1385. write_byte(75)
  1386. write_byte(25)
  1387. message_end()
  1388. }
  1389.  
  1390. public Spawn_PlayerRandom(id, TERRORIST) // TERRORIST = 1, CT = 0
  1391. {
  1392. if(TERRORIST)
  1393. {
  1394. if(!g_TSpawn_Count)
  1395. return
  1396.  
  1397. static hull, sp_index, i
  1398.  
  1399. hull = (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN
  1400. sp_index = random_num(0, g_TSpawn_Count - 1)
  1401.  
  1402. for (i = sp_index + 1; /*no condition*/; i++)
  1403. {
  1404. if(i >= g_TSpawn_Count) i = 0
  1405.  
  1406. if(is_hull_vacant(g_TSpawn_Point[i], hull))
  1407. {
  1408. engfunc(EngFunc_SetOrigin, id, g_TSpawn_Point[i])
  1409. break
  1410. }
  1411.  
  1412. if (i == sp_index) break
  1413. }
  1414. } else {
  1415. if(!g_CTSpawn_Count)
  1416. return
  1417.  
  1418. static hull, sp_index, i
  1419.  
  1420. hull = (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN
  1421. sp_index = random_num(0, g_CTSpawn_Count - 1)
  1422.  
  1423. for (i = sp_index + 1; /*no condition*/; i++)
  1424. {
  1425. if(i >= g_CTSpawn_Count) i = 0
  1426.  
  1427. if(is_hull_vacant(g_CTSpawn_Point[i], hull))
  1428. {
  1429. engfunc(EngFunc_SetOrigin, id, g_CTSpawn_Point[i])
  1430. break
  1431. }
  1432.  
  1433. if (i == sp_index) break
  1434. }
  1435. }
  1436. }
  1437.  
  1438. public Collect_SpawnPoint()
  1439. {
  1440. static ent; ent = -1
  1441. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_start")) != 0)
  1442. {
  1443. // get origin
  1444. static Float:originF[3]
  1445. pev(ent, pev_origin, originF)
  1446.  
  1447. g_CTSpawn_Point[g_CTSpawn_Count][0] = originF[0]
  1448. g_CTSpawn_Point[g_CTSpawn_Count][1] = originF[1]
  1449. g_CTSpawn_Point[g_CTSpawn_Count][2] = originF[2]
  1450.  
  1451. // increase spawn count
  1452. g_CTSpawn_Count++
  1453. if(g_CTSpawn_Count >= sizeof g_CTSpawn_Point) break;
  1454. }
  1455.  
  1456. ent = 1;
  1457. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_deathmatch")) != 0)
  1458. {
  1459. // get origin
  1460. static Float:originF[3]
  1461. pev(ent, pev_origin, originF)
  1462.  
  1463. g_TSpawn_Point[g_TSpawn_Count][0] = originF[0]
  1464. g_TSpawn_Point[g_TSpawn_Count][1] = originF[1]
  1465. g_TSpawn_Point[g_TSpawn_Count][2] = originF[2]
  1466.  
  1467. // increase spawn count
  1468. g_TSpawn_Count++
  1469. if(g_CTSpawn_Count >= sizeof g_TSpawn_Point) break;
  1470. }
  1471. }
  1472.  
  1473. /* ===============================
  1474. ----------- CMD & MSG ------------
  1475. =================================*/
  1476. public CMD_Radio(id)
  1477. {
  1478. if(!is_alive(id))
  1479. return PLUGIN_CONTINUE
  1480. if(is_zombie(id))
  1481. return PLUGIN_HANDLED
  1482.  
  1483. return PLUGIN_CONTINUE
  1484. }
  1485.  
  1486. public CMD_JoinTeam(id)
  1487. {
  1488. if(!Get_BitVar(g_Joined, id))
  1489. return PLUGIN_CONTINUE
  1490.  
  1491. //Open_GameMenu(id)
  1492.  
  1493. return PLUGIN_HANDLED
  1494. }
  1495.  
  1496.  
  1497. public CMD_NightVision(id)
  1498. {
  1499. //if(!Get_BitVar(g_Has_NightVision, id))
  1500. // return PLUGIN_HANDLED
  1501.  
  1502. //if(!Get_BitVar(g_UsingNVG, id)) set_user_nightvision(id, 1, 1, 0)
  1503. //else set_user_nightvision(id, 0, 1, 0)
  1504.  
  1505. return PLUGIN_HANDLED;
  1506. }
  1507.  
  1508.  
  1509. public Message_StatusIcon(msg_id, msg_dest, msg_entity)
  1510. {
  1511. static szMsg[8];
  1512. get_msg_arg_string(2, szMsg ,7)
  1513.  
  1514. if(equal(szMsg, "buyzone") && get_msg_arg_int(1))
  1515. {
  1516. if(pev_valid(msg_entity) != PDATA_SAFE)
  1517. return PLUGIN_CONTINUE;
  1518.  
  1519. set_pdata_int(msg_entity, 235, get_pdata_int(msg_entity, 235) & ~(1<<0))
  1520. return PLUGIN_HANDLED;
  1521. }
  1522.  
  1523. return PLUGIN_CONTINUE;
  1524. }
  1525.  
  1526. public Message_TeamScore()
  1527. {
  1528. static Team[2]
  1529. get_msg_arg_string(1, Team, charsmax(Team))
  1530.  
  1531. switch(Team[0])
  1532. {
  1533. case 'C': set_msg_arg_int(2, get_msg_argtype(2), g_TeamScore[TEAM_HUMAN])
  1534. case 'T': set_msg_arg_int(2, get_msg_argtype(2), g_TeamScore[TEAM_ZOMBIE])
  1535. }
  1536. }
  1537.  
  1538. public Message_ClCorpse()
  1539. {
  1540. return PLUGIN_HANDLED
  1541. }
  1542.  
  1543. public Message_HideWeapon()
  1544. {
  1545. set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | (1<<3))
  1546. }
  1547.  
  1548. /* ===============================
  1549. ------------- SAFETY -------------
  1550. =================================*/
  1551. public Register_SafetyFunc()
  1552. {
  1553. register_event("CurWeapon", "Safety_CurWeapon", "be", "1=1")
  1554.  
  1555. RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
  1556. RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
  1557. }
  1558.  
  1559. public Register_SafetyFuncBot(id)
  1560. {
  1561. RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
  1562. RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
  1563. }
  1564.  
  1565. public Safety_Connected(id)
  1566. {
  1567. Set_BitVar(g_IsConnected, id)
  1568. UnSet_BitVar(g_IsAlive, id)
  1569.  
  1570. g_PlayerWeapon[id] = 0
  1571. }
  1572.  
  1573. public Safety_Disconnected(id)
  1574. {
  1575. UnSet_BitVar(g_IsConnected, id)
  1576. UnSet_BitVar(g_IsAlive, id)
  1577.  
  1578. g_PlayerWeapon[id] = 0
  1579. }
  1580.  
  1581. public Safety_CurWeapon(id)
  1582. {
  1583. if(!is_alive(id))
  1584. return
  1585.  
  1586. static CSW; CSW = read_data(2)
  1587. if(g_PlayerWeapon[id] != CSW) g_PlayerWeapon[id] = CSW
  1588. }
  1589.  
  1590. public fw_Safety_Spawn_Post(id)
  1591. {
  1592. if(!is_user_alive(id))
  1593. return
  1594.  
  1595. Set_BitVar(g_IsAlive, id)
  1596. }
  1597.  
  1598. public fw_Safety_Killed_Post(id)
  1599. {
  1600. UnSet_BitVar(g_IsAlive, id)
  1601. }
  1602.  
  1603. public is_connected(id)
  1604. {
  1605. if(!(1 <= id <= 32))
  1606. return 0
  1607. if(!Get_BitVar(g_IsConnected, id))
  1608. return 0
  1609.  
  1610. return 1
  1611. }
  1612.  
  1613. public is_alive(id)
  1614. {
  1615. if(!is_connected(id))
  1616. return 0
  1617. if(!Get_BitVar(g_IsAlive, id))
  1618. return 0
  1619.  
  1620. return 1
  1621. }
  1622.  
  1623. public get_player_weapon(id)
  1624. {
  1625. if(!is_alive(id))
  1626. return 0
  1627.  
  1628. return g_PlayerWeapon[id]
  1629. }
  1630.  
  1631.  
  1632. // ===================== STOCK.... =======================
  1633. // ======================================================
  1634. public is_zombie(id)
  1635. {
  1636. return Get_BitVar(g_IsZombie, id)
  1637. }
  1638.  
  1639. stock Get_RandomArray(Array:ArrayName)
  1640. {
  1641. return random_num(0, ArraySize(ArrayName) - 1)
  1642. }
  1643.  
  1644. stock Get_PlayerCount(Alive, Team)
  1645. // Alive: 0 - Dead | 1 - Alive | 2 - Both
  1646. // Team: 1 - T | 2 - CT
  1647. {
  1648. new Flag[4], Flag2[12]
  1649. new Players[32], PlayerNum
  1650.  
  1651. if(!Alive) formatex(Flag, sizeof(Flag), "%sb", Flag)
  1652. else if(Alive == 1) formatex(Flag, sizeof(Flag), "%sa", Flag)
  1653.  
  1654. if(Team == 1)
  1655. {
  1656. formatex(Flag, sizeof(Flag), "%se", Flag)
  1657. formatex(Flag2, sizeof(Flag2), "TERRORIST", Flag)
  1658. } else if(Team == 2)
  1659. {
  1660. formatex(Flag, sizeof(Flag), "%se", Flag)
  1661. formatex(Flag2, sizeof(Flag2), "CT", Flag)
  1662. }
  1663.  
  1664. get_players(Players, PlayerNum, Flag, Flag2)
  1665.  
  1666. return PlayerNum
  1667. }
  1668.  
  1669. stock Get_TotalInPlayer(Alive)
  1670. {
  1671. return Get_PlayerCount(Alive, 1) + Get_PlayerCount(Alive, 2)
  1672. }
  1673.  
  1674.  
  1675. stock PlaySound(id, const sound[])
  1676. {
  1677. if(equal(sound[strlen(sound)-4], ".mp3")) client_cmd(id, "mp3 play ^"sound/%s^"", sound)
  1678. else client_cmd(id, "spk ^"%s^"", sound)
  1679. }
  1680. stock StopSound(id) client_cmd(id, "mp3 stop; stopsound")
  1681. stock EmitSound(id, Channel, const Sound[]) emit_sound(id, Channel, Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1682.  
  1683. stock is_hull_vacant(Float:Origin[3], hull)
  1684. {
  1685. engfunc(EngFunc_TraceHull, Origin, Origin, 0, hull, 0, 0)
  1686.  
  1687. if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
  1688. return true
  1689.  
  1690. return false
  1691. }
  1692.  
  1693. stock SetPlayerLight(id, const LightStyle[])
  1694. {
  1695. if(id != 0)
  1696. {
  1697. message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, .player = id)
  1698. write_byte(0)
  1699. write_string(LightStyle)
  1700. message_end()
  1701. } else {
  1702. message_begin(MSG_BROADCAST, SVC_LIGHTSTYLE)
  1703. write_byte(0)
  1704. write_string(LightStyle)
  1705. message_end()
  1706. }
  1707. }
  1708.  
  1709. stock FixedUnsigned16(Float:flValue, iScale)
  1710. {
  1711. new iOutput;
  1712.  
  1713. iOutput = floatround(flValue * iScale);
  1714.  
  1715. if ( iOutput < 0 )
  1716. iOutput = 0;
  1717.  
  1718. if ( iOutput > 0xFFFF )
  1719. iOutput = 0xFFFF;
  1720.  
  1721. return iOutput;
  1722. }
  1723.  
  1724. stock fm_cs_get_weapon_ent_owner(ent)
  1725. {
  1726. // Prevent server crash if entity's private data not initalized
  1727. if (pev_valid(ent) != PDATA_SAFE)
  1728. return -1;
  1729.  
  1730. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_WEAPON_LINUX);
  1731. }
  1732.  
  1733. stock Set_WeaponAnim(id, anim)
  1734. {
  1735. set_pev(id, pev_weaponanim, anim)
  1736.  
  1737. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
  1738. write_byte(anim)
  1739. write_byte(0)
  1740. message_end()
  1741. }
  1742.  
  1743. stock Set_Player_NextAttack(id, Float:Time)
  1744. {
  1745. if(pev_valid(id) != PDATA_SAFE)
  1746. return
  1747.  
  1748. set_pdata_float(id, 83, Time, 5)
  1749. }
  1750.  
  1751. stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
  1752. {
  1753. if(!pev_valid(ent))
  1754. return
  1755.  
  1756. static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  1757.  
  1758. pev(ent, pev_origin, vOrigin)
  1759. pev(ent, pev_view_ofs,vUp) //for player
  1760. xs_vec_add(vOrigin,vUp,vOrigin)
  1761. pev(ent, pev_angles, vAngle) // if normal entity ,use pev_angles
  1762.  
  1763. vAngle[0] = 0.0
  1764.  
  1765. angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
  1766. angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
  1767. angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
  1768.  
  1769. vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  1770. vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  1771. vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  1772. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement