Advertisement
Guest User

Untitled

a guest
Dec 27th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.66 KB | None | 0 0
  1. /*
  2. BB.LALEAGANE.RO Zombie Mod
  3. By: Tirant
  4. */
  5.  
  6. #include <amxmodx>
  7. #include <amxmisc>
  8. #include <cstrike>
  9. #include <fakemeta>
  10. #include <engine>
  11. #include <hamsandwich>
  12. #include <fun>
  13. #include <csstats>
  14. #include <csx>
  15. #include <xs>
  16.  
  17. // Plugin Version
  18. new VERSION[]="5.4"
  19. new formatmodname[] = "^x01 [^x04 BB.LALEAGANE.RO^x01 ]"
  20.  
  21. //Models
  22. new const g_ZombieModel[] = "bbalien"
  23. new const stock g_HumanModel[] = "bbpredator"
  24.  
  25. //Sounds
  26. new g_RoundStart[] = "zombie/round_start.wav"
  27.  
  28. #define MAX_PLAYERS 32
  29. #define AMMO_SLOT 376
  30. #define MODELSET_TASK 100
  31. #define MODELCHANGE_DELAY 0.5
  32. #define MAXENTS 1365
  33. #define TASK_ROUND 1023
  34. #define AUTO_TEAM_JOIN_DELAY 0.1
  35. #define TEAM_SELECT_VGUI_MENU_ID 2
  36.  
  37. #define entity
  38. #define AFTER_BUILD ADMIN_LEVEL_F
  39. #define DEAD_BUILD ADMIN_LEVEL_F
  40. #define REMOVE_BLOCK ADMIN_LEVEL_C
  41. #define DEAD_REMOVE ADMIN_LEVEL_D
  42. #define LOCK_BLOCKS ADMIN_KICK
  43. #define PAIN_SHOCK_FREE ADMIN_KICK
  44. #define BAD_SPAWN ADMIN_KICK
  45. #define BUILD_BAN ADMIN_KICK
  46. #define REVIVE ADMIN_KICK
  47. #define SWAP ADMIN_KICK
  48. #define START_ROUND ADMIN_BAN
  49.  
  50. #if cellbits == 32
  51. #define OFFSET_BUYZONE 235
  52. #else
  53. #define OFFSET_BUYZONE 268
  54. #endif
  55.  
  56. #define LockBlock(%1,%2) ( entity_set_int( %1, EV_INT_iuser1, %2 ) )
  57. #define UnlockBlock(%1) ( entity_set_int( %1, EV_INT_iuser1, 0 ) )
  58. #define BlockLocker(%1) ( entity_get_int( %1, EV_INT_iuser1 ) )
  59.  
  60. // CS Weapon CBase Offsets (win32)
  61. const OFFSET_WEAPONOWNER = 41
  62.  
  63. // Linux diff's
  64. const OFFSET_LINUX_WEAPONS = 4
  65.  
  66. #define g_InvisEnt
  67. new gmsgStatusText
  68. new gmsgSayText
  69. new gHudSyncInfo
  70. new g_MaxPlayers
  71. const fPainShock = 108
  72.  
  73. new bool:g_CanBuild
  74. new bool:g_ZombiesReleased
  75. new g_RoundNum
  76. new g_iEntBarrier
  77. new bool:g_BuildBan[MAX_PLAYERS+1]
  78. new g_pEnt[MAX_PLAYERS+1], g_pDist[MAX_PLAYERS+1]
  79. new bool:g_MovingEnt[MAXENTS]
  80. new g_EntMover[MAXENTS]
  81. new g_LastMover[MAXENTS]
  82. new g_EntOwner[MAXENTS]
  83. new g_OwnedEnts[33]
  84.  
  85. //Custom Model Stuff
  86. new Float:g_ModelsTargetTime, Float:g_RoundStartTime
  87. new g_HasCustomModel[MAX_PLAYERS+1], g_PlayerModel[MAX_PLAYERS+1][32]
  88.  
  89. new g_ModName[32]
  90. new g_CurrentWeapon[MAX_PLAYERS+1]
  91. new g_PrimaryWeapon[MAX_PLAYERS+1]
  92.  
  93. // Allowed weapons for zombies
  94. const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)
  95.  
  96. new g_pcvar_team, g_pcvar_class, g_pcvar_buildtime, g_pcvar_zombiehp, g_pcvar_maxrounds, g_pcvar_basecalc,
  97. g_pcvar_givenades, g_pcvar_allowedweps, g_pcvar_tournymode, g_pcvar_showmovers, g_pcvar_healthtime,
  98. g_pcvar_blockgrav, g_pcvar_knockback, g_pcvar_entmindist, g_pcvar_entsetdist, g_pcvar_entmaxdist,
  99. g_pcvar_roundnum, g_pcvar_roundtime, g_pcvar_resetent, g_pcvar_zresptime, g_pcvar_maxclaimable,
  100. g_pcvar_claimable
  101.  
  102. new g_friend[MAX_PLAYERS+1]
  103.  
  104. //Cached Stuff for Players
  105. new g_isconnected[MAX_PLAYERS+1]
  106. new g_isalive[MAX_PLAYERS+1]
  107. new g_ishuman[MAX_PLAYERS+1]
  108. new g_iszombie[MAX_PLAYERS+1]
  109.  
  110. //CSDM-Style Weapons Menu
  111. new bool:firsttime[MAX_PLAYERS+1],bool:ask[MAX_PLAYERS+1]
  112. new weapon_picked[2][MAX_PLAYERS+1],cur_offset[MAX_PLAYERS+1],options_on_menu[8][MAX_PLAYERS+1]
  113.  
  114. new count_down
  115.  
  116. // Weapon entity names
  117. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  118. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  119. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  120. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  121. "weapon_ak47", "weapon_knife", "weapon_p90" }
  122.  
  123. static const WEAPONNAMES[24][23] = { "Schmidt Scout", "XM1014 M4", "Ingram MAC-10", "Steyr AUG A1", "UMP 45", "SG-550 Auto-Sniper",
  124. "IMI Galil", "Famas", "AWP Magnum Sniper", "MP5 Navy", "M249 Para Machinegun", "M3 Super 90", "M4A1 Carbine",
  125. "Schmidt TMP", "G3SG1 Auto-Sniper", "SG-552 Commando", "AK-47 Kalashnikov", "ES P90", "P228 Compact",
  126. "Dual Elite Berettas", "Fiveseven", "USP .45 ACP Tactical", "Glock 18C", "Desert Eagle .50 AE"
  127. }
  128.  
  129. public plugin_init()
  130. {
  131. register_plugin("BB.LALEAGANE.RO Zombie Mod", VERSION, "Tirant")
  132. register_cvar("base_builder", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
  133. set_cvar_string("base_builder", VERSION)
  134.  
  135. g_pcvar_buildtime = register_cvar("bb_build_time", "130")
  136. g_pcvar_zombiehp = register_cvar("bb_zombie_health", "3000")
  137. g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0")
  138. g_pcvar_tournymode = register_cvar("bb_tournament_mode", "0")
  139. g_pcvar_showmovers = register_cvar("bb_show_moving", "1")
  140. g_pcvar_blockgrav = register_cvar("bb_block_gravity", "0")
  141. g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0")
  142. g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "1264")
  143. g_pcvar_entmindist = register_cvar("bb_min_move_dist", "32")
  144. g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "64")
  145. g_pcvar_healthtime = register_cvar("bb_health_time", "12")
  146. g_pcvar_resetent = register_cvar("bb_reset_blocks", "1")
  147. g_pcvar_roundtime = register_cvar("bb_roundtime", "8")
  148. g_pcvar_zresptime = register_cvar("bb_zombie_respawn_time", "3")
  149. g_pcvar_roundnum = register_cvar("bb_rounds", "8")
  150. g_pcvar_maxrounds = get_cvar_num("mp_maxrounds")
  151. g_pcvar_maxclaimable = register_cvar("bb_claim_max", "14")
  152. g_pcvar_claimable = register_cvar("bb_claim_mode", "1")
  153.  
  154. //AJC for auto team (if needed)
  155. g_pcvar_team = register_cvar("bb_team", "5")
  156. g_pcvar_class = register_cvar("bb_class", "5")
  157.  
  158. //Guns Menu
  159. g_pcvar_givenades = register_cvar("bb_give_nades","h f s") //h f s, put multiple letters for multiple nades
  160. g_pcvar_allowedweps = register_cvar("bb_weapons","abcdeghijlmnqrstuvwx")
  161.  
  162. //Client Commands
  163. register_clcmd("+grab","cmdMoveEnt",_," - Starts moving the selected object") //command to move stuff around
  164. register_clcmd("-grab","cmdStopEnt",_," - Stops moving the selected object") //command to move stuff around
  165. register_clcmd("say /respawn","Respawn_Zombie",_," - Respawn while dead (Zombie)") //command to respawn (zombies only)
  166. register_clcmd("say /fixspawn","cmdBadSpawn",_," - Respawn while dead (Survivor)") //command to respawn (humans only before buildtime)
  167. register_clcmd("say /help","cmdHelp",_," - Displays the help hud") //command to see /help menu
  168. register_clcmd("say /rules","cmdHelp",_," - Displays the help hud") //command to see /help menu
  169. register_clcmd("say /round","cmdCheckRound",_," - Displays the round number") //command to see the current round number
  170. register_clcmd("say round","cmdCheckRound",_," - Displays the round number") //command to see the current round number
  171.  
  172. //Guns Menu
  173. register_clcmd("say guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
  174. register_clcmd("say_team guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
  175. register_clcmd("say /guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
  176. register_clcmd("say_team /guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
  177.  
  178. //Admin Commands
  179. register_concmd("removeaim","cmdRemoveEnt",_," - Deletes an object") //Removes an object (C alive, D dead)
  180. register_concmd("lockaim","cmdLockBlock",_," - Locks/Unlocks an object from moving") //Once to lock, again to unlock
  181. register_concmd("unclaimaim","cmdRemoveClaim",_," - Removes a claim on an object") //Makes block claimable by everyone
  182. register_concmd("say /fixspawns","cmdBadSpawn_Survivor",_," - Respawns all dead CTs") //Global /fixspawn command (Kick)
  183. register_concmd("say /respawns","cmdBadSpawn_Zombie",_," - Respawns all dead Ts") //Global /respawn command (Kick)
  184. register_concmd("bb_buildban","cmdBuildBan",_,"<player>") //Bans targeted player from building
  185. register_concmd("bb_unbuildban","cmdBuildUnban",_,"<player>") //Unbans " " " "
  186. register_concmd("bb_revive","cmdRevive",_,"<player>") //revives targetted player
  187. register_concmd("bb_swap","cmdSwap",_,"<player>") //swaps the selected player to the opposite team
  188. register_concmd("bb_startround","cmdStartRound",_," - Ends the build phase") //do i really have to explain this?
  189.  
  190. //Blocked Commands
  191. register_clcmd("drop", "clcmd_drop")
  192. register_clcmd("buy", "clcmd_buy")
  193.  
  194. new tournymode = get_pcvar_num(g_pcvar_tournymode)
  195. if (tournymode != 1)
  196. {
  197. register_clcmd("chooseteam", "clcmd_changeteam")
  198. register_clcmd("jointeam", "clcmd_changeteam")
  199. }
  200.  
  201. register_forward(FM_GetGameDescription, "fw_GetGameDescription")
  202. register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
  203. register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
  204. register_forward(FM_PlayerPreThink, "fw_Player_PreThink")
  205. register_forward(FM_ClientKill, "fw_Suicide")
  206. //register_forward(FM_CmdStart, "fw_CmdStart")
  207. if (get_pcvar_num(g_pcvar_showmovers) == 1)
  208. register_forward(FM_TraceLine, "fw_Traceline")
  209.  
  210. RegisterHam(Ham_Touch, "weapon_shield", "ham_WeaponCleaner_Post", 1)
  211. RegisterHam(Ham_Touch, "weaponbox", "ham_WeaponCleaner_Post", 1)
  212. RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
  213. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  214. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "ham_ItemDeploy_Post", 1)
  215.  
  216.  
  217. register_message(get_user_msgid("TextMsg"), "msgRoundEnd")
  218. register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
  219. register_message(get_user_msgid("StatusValue"), "msgStatusValue");
  220. if (tournymode != 1)
  221. {
  222. register_message(get_user_msgid("ShowMenu"), "message_show_menu")
  223. register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
  224. }
  225.  
  226. register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  227. register_event("AmmoX", "ev_AmmoX", "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10")
  228. register_event("StatusValue", "ev_SetTeam", "be", "1=1");
  229. register_event("StatusValue", "ev_ShowStatus", "be", "1=2", "2!0");
  230. register_event("StatusValue", "ev_HideStatus", "be", "1=1", "2=0");
  231. register_event("Health", "ev_Health", "be", "1>0");
  232.  
  233. register_logevent("logevent_round_start",2, "1=Round_Start")
  234. register_logevent("logevent_round_end", 2, "1=Round_End")
  235.  
  236. register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
  237. register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
  238. register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
  239.  
  240. set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  241.  
  242. //Formats the Mod Name
  243. formatex(g_ModName, charsmax(g_ModName), "BB.LALEAGANE.RO %s", VERSION)
  244.  
  245. register_dictionary("basebuilder.txt");
  246.  
  247. gmsgSayText = get_user_msgid("SayText")
  248. gmsgStatusText = get_user_msgid("StatusText");
  249. gHudSyncInfo = CreateHudSyncObj();
  250. g_MaxPlayers = get_maxplayers()
  251.  
  252. if (tournymode != 1)
  253. {
  254. server_cmd("mp_limitteams 1")
  255. server_cmd("mp_autoteambalance 1")
  256. }
  257. else
  258. {
  259. server_cmd("mp_limitteams 0")
  260. server_cmd("mp_autoteambalance 0")
  261. }
  262. new roundnum = get_pcvar_num(g_pcvar_roundnum)
  263. server_cmd("mp_freezetime 0")
  264. server_cmd("mp_flashlight 0")
  265. server_cmd("mp_maxrounds %d", roundnum)
  266. server_cmd("mp_winlimit %d", roundnum)
  267. server_cmd("mp_roundtime %d", get_pcvar_num(g_pcvar_roundtime))
  268.  
  269. g_iEntBarrier = find_ent_by_tname( -1, "barrier" );
  270. }
  271.  
  272. public plugin_precache() {
  273. precache_model("models/player/bbalien/bbalien.mdl")
  274. precache_model("models/player/bbpredator/bbpredator.mdl")
  275.  
  276. engfunc( EngFunc_PrecacheSound, g_RoundStart )
  277.  
  278. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_bomb_target"))
  279. if (ent)
  280. {
  281. dllfunc(DLLFunc_Spawn, ent)
  282. set_pev(ent, pev_solid, SOLID_NOT)
  283. }
  284.  
  285. new iBuyZone = create_entity("info_map_parameters");
  286. DispatchKeyValue(iBuyZone, "bombradius", "0");
  287. DispatchKeyValue(iBuyZone, "buying", "3");
  288. DispatchSpawn(iBuyZone);
  289. }
  290.  
  291. // Event Round Start (This is before freeze time)
  292. public event_round_start()
  293. {
  294. g_RoundStartTime = get_gametime()
  295. g_ZombiesReleased = false
  296.  
  297. if (get_pcvar_num(g_pcvar_resetent) == 1)
  298. {
  299. new cname[10], tname[7];
  300. for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  301. {
  302. if (is_valid_ent(entity) && !is_user_alive(entity) && !BlockLocker(entity))
  303. {
  304. LockBlock(entity, 33);
  305. set_pev(entity,pev_rendermode,kRenderTransColor)
  306. set_pev(entity,pev_rendercolor,Float:{LOCKED_COLOR})
  307. set_pev(entity,pev_renderamt,Float:{LOCKED_RENDERAMT})
  308. }
  309. }
  310. public cmdHelp(id)
  311. {
  312. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 15.0, 0.1, 0.2, 2)
  313. new nLen, szHelp[512]
  314. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  315. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "BIND_KEY");
  316. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE1");
  317. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE2");
  318. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE3");
  319. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE4");
  320. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE5");
  321. show_hudmessage(id, szHelp);
  322. }
  323.  
  324. // Log Event Round Start (This is AFTER freeze time)
  325. public logevent_round_start()
  326. {
  327. set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
  328. set_pev(g_iEntBarrier,pev_rendermode,kRenderTransColor)
  329. set_pev(g_iEntBarrier,pev_renderamt,Float:{150.0})
  330. DispatchKeyValue(g_iEntBarrier, "renderamt", "255");
  331.  
  332. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  333. new nLen, szMsg[128]
  334. nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  335. nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "BIND_KEY");
  336. show_hudmessage(0, szMsg);
  337.  
  338. print_color(0, "%s %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG")
  339. print_color(0, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  340.  
  341. remove_task(TASK_ROUND)
  342. remove_task(30000)
  343.  
  344. new iBuildTime = get_pcvar_num( g_pcvar_buildtime );
  345. set_task(1.0, "CountDown", 30000, "", 0, "a", iBuildTime);
  346. count_down = (iBuildTime-1);
  347. set_task(float(iBuildTime), "Release_Zombies", TASK_ROUND)
  348.  
  349. if (get_pcvar_num(g_pcvar_basecalc) == 1)
  350. set_task(5.0, "Base_Calc")
  351.  
  352. set_task(5.0, "Fix_Spawns")
  353.  
  354. g_CanBuild = true
  355.  
  356. arrayset(g_MovingEnt, false, MAXENTS)
  357. arrayset(g_EntOwner, 0, MAXENTS)
  358. arrayset(g_OwnedEnts, 0, g_MaxPlayers+1)
  359. }
  360.  
  361. public CountDown()
  362. {
  363. set_hudmessage(255, 255, 255, -1.0, 0.0, 0, 0.1, 0.9, 0.1, 0.2, 3)
  364. show_hudmessage(0, "%L", LANG_SERVER, "BUILD_TIME", count_down--);
  365.  
  366. if (count_down < 0)
  367. {
  368. remove_task(30000);
  369. }
  370. }
  371.  
  372. //Resets stuff and swaps teams so they respawn correctly
  373. public logevent_round_end()
  374. {
  375. if (!g_CanBuild && get_pcvar_num(g_pcvar_tournymode) != 1)
  376. {
  377. new players[32], num
  378. get_players(players, num)
  379.  
  380. new player
  381. for (new i = 0; i < num; i++)
  382. {
  383. player = players[i]
  384. cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)
  385.  
  386. if (cs_get_user_team(player) == CS_TEAM_T)
  387. {
  388. g_iszombie[player] = true
  389. g_ishuman[player] = false
  390. }
  391. if (cs_get_user_team(player) == CS_TEAM_CT)
  392. {
  393. g_ishuman[player] = true
  394. g_iszombie[player] = false
  395. }
  396. }
  397. print_color(0, "^x04%L", LANG_SERVER, "TEAMS_SWAPPED")
  398. }
  399.  
  400. remove_task(TASK_ROUND)
  401. remove_task(30000)
  402.  
  403. return PLUGIN_HANDLED
  404. }
  405.  
  406. //Death events for respanws and HUD information
  407. public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
  408. {
  409. cmdStopEnt(g_victim)
  410.  
  411. set_hudmessage(_, _, _, _, _, _, _, _, _, _, 4);
  412. show_hudmessage(g_victim, "");
  413.  
  414. g_isalive[g_victim] = false
  415.  
  416. if (g_iszombie[g_victim])
  417. {
  418. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  419. show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_ZOMBIE", get_pcvar_num(g_pcvar_zresptime));
  420. set_task(get_pcvar_float(g_pcvar_zresptime), "Respawn_Zombie", g_victim)
  421. }
  422. if (g_ishuman[g_victim])
  423. {
  424. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  425. show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_SURVIVOR");
  426. }
  427. }
  428.  
  429. public ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, bits)
  430. {
  431. if(get_pcvar_num(g_pcvar_knockback) == 1 && access(victim, PAIN_SHOCK_FREE) && g_iszombie[victim])
  432. {
  433. set_pdata_float(victim, fPainShock, 1.0, 5)
  434. }
  435. }
  436.  
  437. public client_disconnect(id)
  438. {
  439. cmdStopEnt(id)
  440.  
  441. g_isconnected[id] = false
  442. g_isalive[id] = false
  443. g_ishuman[id] = false
  444. g_iszombie[id] = false
  445.  
  446. return PLUGIN_CONTINUE
  447. }
  448.  
  449. //Respawns late joiners, cts only if build time is still on
  450. public client_putinserver(id)
  451. {
  452. set_task(7.0,"Respawn_Human",id);
  453. g_isconnected[id] = true
  454. firsttime[id] = true
  455. ask[id] = true
  456. }
  457.  
  458. public Release_Zombies()
  459. {
  460. g_CanBuild = false
  461. g_ZombiesReleased = true
  462. remove_task(30000);
  463.  
  464. new players[32], num
  465. get_players(players, num)
  466.  
  467. new player
  468. for(new i = 0; i < num; i++)
  469. {
  470. player = players[i]
  471. if (g_isalive[player])
  472. {
  473. if (get_user_godmode(player))
  474. set_user_godmode(player, 0)
  475. if (g_ishuman[player])
  476. {
  477. cmdStopEnt(player)
  478.  
  479. new weapon[32]
  480. get_pcvar_string(g_pcvar_givenades,weapon,31)
  481.  
  482. new he, flash, smoke
  483. for(new i=0;i<strlen(weapon);i++)
  484. {
  485. switch(weapon[i])
  486. {
  487. case 'h': he++
  488. case 'f': flash++
  489. case 's': smoke++
  490. }
  491. }
  492. if(he) give_item(player,"weapon_hegrenade"), cs_set_user_bpammo(player,CSW_HEGRENADE,he)
  493. if(flash) give_item(player,"weapon_flashbang"), cs_set_user_bpammo(player,CSW_FLASHBANG,flash)
  494. if(smoke) give_item(player,"weapon_smokegrenade"), cs_set_user_bpammo(player,CSW_SMOKEGRENADE,smoke)
  495.  
  496. if (g_PrimaryWeapon[player])
  497. {
  498. get_weaponname(g_PrimaryWeapon[player],weapon,31)
  499. engclient_cmd(player, weapon);
  500. }
  501. }
  502. }
  503. }
  504.  
  505. set_pev(g_iEntBarrier,pev_solid,SOLID_NOT)
  506. DispatchKeyValue(g_iEntBarrier, "renderamt", "0");
  507.  
  508. g_RoundNum++
  509. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  510. show_hudmessage(0, "%L", LANG_SERVER, "RELEASE_MSG");
  511. client_cmd(0, "spk %s", g_RoundStart)
  512. }
  513.  
  514. //Called on zombie death function
  515. public Respawn_Zombie(id)
  516. {
  517. if (g_isconnected[id] && cs_get_user_team(id) == CS_TEAM_T)
  518. {
  519. if (get_user_health(id) == get_pcvar_float(g_pcvar_zombiehp) || !is_user_alive(id))
  520. ExecuteHamB(Ham_CS_RoundRespawn, id)
  521. else
  522. client_print(id, print_center, "%L", LANG_SERVER, "FAIL_RESPAWN");
  523. }
  524. }
  525.  
  526. //Called on all players for late joiners, parent is above
  527. public Respawn_Human(id)
  528. {
  529. if (!g_isconnected[id] || g_isalive[id] || cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
  530. return PLUGIN_HANDLED
  531.  
  532. if (!g_isalive[id] && g_iszombie[id])
  533. ExecuteHamB(Ham_CS_RoundRespawn, id)
  534.  
  535. if (!g_isalive[id] && g_iszombie[id])
  536. set_task(3.0,"Respawn_Human",id)
  537.  
  538. if (g_CanBuild)
  539. {
  540. if (!g_isalive[id])
  541. ExecuteHamB(Ham_CS_RoundRespawn, id)
  542.  
  543. if (!g_isalive[id])
  544. set_task(3.0,"Respawn_Human",id)
  545. }
  546. return PLUGIN_HANDLED
  547. }
  548.  
  549. //Sets player health and weapons
  550. public Add_Effects(id)
  551. {
  552. if (!g_isconnected[id] || !g_isalive[id])
  553. return PLUGIN_HANDLED
  554.  
  555. strip_user_weapons(id)
  556. give_item(id, "weapon_knife")
  557.  
  558. if (cs_get_user_team(id) == CS_TEAM_T)
  559. {
  560. if (g_CanBuild)
  561. set_user_godmode(id, 1)
  562.  
  563. set_pev(id, pev_health, get_pcvar_float(g_pcvar_zombiehp)) // use decimal number
  564. }
  565. if (cs_get_user_team(id) == CS_TEAM_CT)
  566. {
  567. weapon_method_menu(id)
  568. }
  569. ShowHealth(id)
  570. return PLUGIN_HANDLED
  571. }
  572.  
  573. //AmmoX Ensures BackPack ammo is always full
  574. public ev_AmmoX(id)
  575. {
  576. set_pdata_int(id, AMMO_SLOT + read_data(1), 200, 5)
  577. }
  578.  
  579. public fw_GetGameDescription()
  580. {
  581. forward_return(FMV_STRING, g_ModName)
  582.  
  583. return FMRES_SUPERCEDE;
  584. }
  585.  
  586. public ham_PlayerSpawn_Post(id)
  587. {
  588. if (!is_user_alive(id) || !cs_get_user_team(id))
  589. return
  590.  
  591. set_task(1.0, "Add_Effects", id)
  592. if (cs_get_user_team(id) == CS_TEAM_CT)
  593. {
  594. g_ishuman[id] = true
  595. g_iszombie[id] = false
  596. }
  597. if (cs_get_user_team(id) == CS_TEAM_T)
  598. {
  599. g_iszombie[id] = true
  600. g_ishuman[id] = false
  601. }
  602.  
  603. g_isalive[id] = true
  604. remove_task(id + MODELSET_TASK)
  605. if (g_iszombie[id])
  606. {
  607. copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel)
  608. new currentmodel[32]
  609. fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  610. if (!equal(currentmodel, g_PlayerModel[id]))
  611. {
  612. if (get_gametime() - g_RoundStartTime < 5.0)
  613. set_task(5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + MODELSET_TASK)
  614. else
  615. fm_user_model_update(id + MODELSET_TASK)
  616. }
  617. }
  618. else if (g_HasCustomModel[id])
  619. {
  620. fm_reset_user_model(id)
  621. }
  622. }
  623.  
  624. public fw_SetClientKeyValue(id, const infobuffer[], const key[])
  625. {
  626. if (g_HasCustomModel[id] && equal(key, "model"))
  627. return FMRES_SUPERCEDE
  628. return FMRES_IGNORED
  629. }
  630.  
  631. public fw_ClientUserInfoChanged(id)
  632. {
  633. if (!g_HasCustomModel[id])
  634. return FMRES_IGNORED
  635. static currentmodel[32]
  636. fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  637. if (!equal(currentmodel, g_PlayerModel[id]) && !task_exists(id + MODELSET_TASK))
  638. fm_set_user_model(id + MODELSET_TASK)
  639. return FMRES_IGNORED
  640. }
  641.  
  642. public fm_user_model_update(taskid)
  643. {
  644. static Float:current_time
  645. current_time = get_gametime()
  646.  
  647. if (current_time - g_ModelsTargetTime >= MODELCHANGE_DELAY)
  648. {
  649. fm_set_user_model(taskid)
  650. g_ModelsTargetTime = current_time
  651. }
  652. else
  653. {
  654. set_task((g_ModelsTargetTime + MODELCHANGE_DELAY) - current_time, "fm_set_user_model", taskid)
  655. g_ModelsTargetTime = g_ModelsTargetTime + MODELCHANGE_DELAY
  656. }
  657. }
  658.  
  659. public fm_set_user_model(player)
  660. {
  661. player -= MODELSET_TASK
  662. engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", g_PlayerModel[player])
  663. g_HasCustomModel[player] = true
  664. }
  665.  
  666. stock fm_get_user_model(player, model[], len)
  667. {
  668. engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
  669. }
  670.  
  671. stock fm_reset_user_model(player)
  672. {
  673. g_HasCustomModel[player] = false
  674. dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
  675. }
  676.  
  677. public cmdMoveEnt(id)
  678. {
  679. if (g_BuildBan[id] == true)
  680. return PLUGIN_HANDLED
  681.  
  682. if (g_iszombie[id] && !access(id, AFTER_BUILD))
  683. return PLUGIN_HANDLED
  684.  
  685. if (!g_CanBuild && !access(id, AFTER_BUILD))
  686. {
  687. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_TIME_UP")
  688. return PLUGIN_HANDLED
  689. }
  690.  
  691. if (!g_isalive[id] && !access(id, DEAD_BUILD))
  692. {
  693. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DEAD")
  694. return PLUGIN_HANDLED
  695. }
  696.  
  697. if (g_pEnt[id] && is_valid_ent(g_pEnt[id]))
  698. cmdStopEnt(id)
  699.  
  700. new ent, bodypart
  701. get_user_aiming (id,ent,bodypart)
  702.  
  703. if (!is_valid_ent(ent) || ent == g_iEntBarrier)
  704. {
  705. return PLUGIN_HANDLED
  706. }
  707.  
  708. if (ent <= g_MaxPlayers && g_isalive[ent])
  709. {
  710. return PLUGIN_HANDLED
  711. }
  712.  
  713. if (IsBlockLocked(ent) || g_MovingEnt[ent])
  714. {
  715. return PLUGIN_HANDLED
  716. }
  717.  
  718. if (get_pcvar_num(g_pcvar_claimable) == 1)
  719. {
  720. if (!g_EntOwner[ent])
  721. {
  722. if ((g_OwnedEnts[id]<get_pcvar_num(g_pcvar_maxclaimable)) || get_pcvar_num(g_pcvar_maxclaimable) == 0)
  723. {
  724. g_EntOwner[ent] = id
  725. g_OwnedEnts[id]++
  726. }
  727. else
  728. {
  729. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_MAXOWNED", get_pcvar_num(g_pcvar_maxclaimable))
  730. //return PLUGIN_HANDLED
  731. }
  732. }
  733. else if (g_EntOwner[ent] != id && !access(id, AFTER_BUILD))
  734. {
  735. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ALREADYOWNED")
  736. return PLUGIN_HANDLED
  737. }
  738. }
  739.  
  740. new tname[7], cname[10];
  741. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  742. entity_get_string(ent, EV_SZ_classname, cname, 9);
  743. if (!equal(cname, "func_wall") || equal(tname, "ignore"))
  744. {
  745. return PLUGIN_HANDLED
  746. }
  747.  
  748. new origin[3], entOrigin[3], Float:orig[3], Float:mins[3], Float:maxs[3], dist
  749.  
  750. entity_get_vector(ent, EV_VEC_origin, orig);
  751. entity_get_vector(ent, EV_VEC_mins, mins);
  752. entity_get_vector(ent, EV_VEC_maxs, maxs);
  753.  
  754. entOrigin[0] = floatround((mins[0] + maxs[0]) / 2 + orig[0]);
  755. entOrigin[1] = floatround((mins[1] + maxs[1]) / 2 + orig[1]);
  756. entOrigin[2] = floatround((mins[2] + maxs[2]) / 2 + orig[2]);
  757.  
  758. get_user_origin(id, origin);
  759.  
  760. dist = get_distance(origin, entOrigin);
  761.  
  762. new max = get_pcvar_num(g_pcvar_entmaxdist)
  763. new min = get_pcvar_num(g_pcvar_entmindist)
  764. if (min) //min
  765. {
  766. if(dist < min) //minimum
  767. dist = get_pcvar_num(g_pcvar_entsetdist);
  768. }
  769.  
  770. if (max) //maximum
  771. {
  772. if (dist > max)
  773. return PLUGIN_HANDLED
  774. }
  775.  
  776. DispatchKeyValue(ent, "rendermode", "1");
  777. DispatchKeyValue(ent, "renderamt", "100");
  778. DispatchKeyValue(ent, "rendercolor", "120.240 120.0 255.255");
  779.  
  780. g_MovingEnt[ent] = true
  781. g_EntMover[ent] = id
  782. g_pEnt[id] = ent
  783. g_pDist[id] = dist
  784.  
  785. if (!g_CanBuild && access(id, AFTER_BUILD))
  786. {
  787. new adminauthid[35],adminname[35]
  788. get_user_authid (id,adminauthid,34)
  789. get_user_name(id,adminname,34)
  790. Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
  791. }
  792.  
  793. return PLUGIN_HANDLED
  794. }
  795.  
  796. /*public fw_CmdStart(id, uc, random)
  797. {
  798. new buttons = get_uc(uc, UC_Buttons)
  799. if(g_CanBuild && (buttons & IN_ATTACK))
  800. {
  801. buttons &= ~IN_ATTACK
  802. set_uc(uc, UC_Buttons, buttons)
  803. return FMRES_SUPERCEDE
  804. }
  805. return FMRES_IGNORED
  806. }*/
  807.  
  808. public fw_Player_PreThink(id)
  809. {
  810. if (!g_pEnt[id] || !is_valid_ent(g_pEnt[id]))
  811. return FMRES_HANDLED
  812.  
  813. new buttons = pev(id, pev_button)
  814. if(buttons & IN_ATTACK)
  815. {
  816. g_pDist[id] += 3;
  817.  
  818. if (g_pDist[id] > get_pcvar_num(g_pcvar_entmaxdist))
  819. {
  820. g_pDist[id] = get_pcvar_num(g_pcvar_entmaxdist)
  821. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MAX")
  822. }
  823. else
  824. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PUSH")
  825. }
  826. else if(buttons & IN_ATTACK2)
  827. {
  828. g_pDist[id] -= 3;
  829.  
  830. if (g_pDist[id] < get_pcvar_num(g_pcvar_entsetdist))
  831. {
  832. g_pDist[id] = get_pcvar_num(g_pcvar_entsetdist)
  833. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN")
  834. }
  835. else
  836. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL")
  837. }
  838.  
  839. GrabThink(id)
  840.  
  841. return FMRES_HANDLED
  842. }
  843.  
  844. public GrabThink(id)
  845. {
  846. new Float:aiming[3], origin[3], Float:mins[3], Float:maxs[3], Float:neworigin[3], ent
  847.  
  848. ent = g_pEnt[id]
  849.  
  850. if (!g_isconnected[id] || (ent <= g_MaxPlayers)? !g_isconnected[id]:!is_valid_ent(ent))
  851. {
  852. cmdStopEnt(id)
  853. return PLUGIN_HANDLED
  854. }
  855.  
  856. entity_get_vector(ent, EV_VEC_mins, mins);
  857. entity_get_vector(ent, EV_VEC_maxs, maxs);
  858.  
  859. get_user_origin(id, origin, 3);
  860. IVecFVec(origin, aiming);
  861. get_user_origin(id, origin);
  862.  
  863. aiming[0] -= float(origin[0]);
  864. aiming[1] -= float(origin[1]);
  865. aiming[2] -= float(origin[2]);
  866.  
  867. new Float:scalar = float(g_pDist[id]) / vector_length(aiming);
  868.  
  869. origin[0] += floatround(aiming[0] * scalar - (mins[0] + maxs[0]) / 2);
  870. origin[1] += floatround(aiming[1] * scalar - (mins[1] + maxs[1]) / 2);
  871. origin[2] += floatround(aiming[2] * scalar - (mins[2] + maxs[2]) / 2);
  872.  
  873. IVecFVec(origin, neworigin);
  874. entity_set_origin(ent, neworigin);
  875.  
  876. return PLUGIN_CONTINUE
  877. }
  878.  
  879. public cmdStopEnt(id)
  880. {
  881. g_MovingEnt[g_pEnt[id]] = false
  882. DispatchKeyValue(g_pEnt[id], "rendermode", "0");
  883. DispatchKeyValue(g_pEnt[id], "renderamt", "255");
  884. DispatchKeyValue(g_pEnt[id], "rendercolor", "85.85 85.0 0.33");
  885. if (get_pcvar_num(g_pcvar_blockgrav) == 1)
  886. drop_to_floor(g_pEnt[id])
  887. g_EntMover[g_pEnt[id]] = 0
  888. g_LastMover[g_pEnt[id]] = id
  889. g_pEnt[id] = 0
  890. }
  891.  
  892. public fw_Traceline(Float:start[3], Float:end[3], conditions, id, trace)
  893. {
  894. if (!is_user_connected(id)) return PLUGIN_HANDLED
  895.  
  896. new ent = get_tr2(trace, TR_pHit)
  897.  
  898. if (pev_valid(ent))
  899. {
  900. new ent,body
  901. get_user_aiming(id,ent,body)
  902.  
  903. new cname[10], tname[7];
  904. entity_get_string(ent, EV_SZ_classname, cname, 9);
  905. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  906. if (equal(cname, "func_wall") && !equal(tname, "ignore") && ent != g_iEntBarrier && get_pcvar_num(g_pcvar_showmovers) == 1)
  907. {
  908. if (g_CanBuild || access(id, ADMIN_KICK))
  909. {
  910. if (IsBlockLocked(ent))
  911. {
  912. set_hudmessage(255, 0, 0, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  913. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_LOCKED");
  914. return PLUGIN_HANDLED
  915. }
  916. set_hudmessage(0, 50, 255, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  917. if (get_pcvar_num(g_pcvar_claimable) == 0)
  918. {
  919. new currentmover[35], lastmover[35]
  920. if (g_EntMover[ent])
  921. {
  922. get_user_name(g_EntMover[ent],currentmover,34)
  923. if (!g_LastMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO1", currentmover);
  924. }
  925. if (g_LastMover[ent])
  926. {
  927. get_user_name(g_LastMover[ent],lastmover,34)
  928. if (!g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO2", lastmover);
  929. }
  930. if (g_LastMover[ent] && g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO3", currentmover, lastmover);
  931. else if (!g_LastMover[ent] && !g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO4");
  932. }
  933. else
  934. {
  935. if (g_EntOwner[ent])
  936. {
  937. new entowner[35]
  938. get_user_name(g_EntOwner[ent],entowner,34)
  939. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER", entowner);
  940. }
  941. else
  942. {
  943. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER_NONE");
  944. }
  945. }
  946. }
  947. }
  948. }
  949. if (!pev_valid(ent)) ClearSyncHud(id, gHudSyncInfo);
  950.  
  951. return PLUGIN_HANDLED
  952. }
  953.  
  954. public cmdLockBlock(id)
  955. {
  956. if (!access(id, LOCK_BLOCKS))
  957. return PLUGIN_HANDLED
  958.  
  959. new ent, bodypart
  960. get_user_aiming (id,ent,bodypart)
  961.  
  962. new tname[7], cname[10];
  963. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  964. entity_get_string(ent, EV_SZ_classname, cname, 9);
  965.  
  966. if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore")) return PLUGIN_HANDLED
  967.  
  968. if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
  969. {
  970. LockBlock(ent)
  971. DispatchKeyValue(ent, "rendermode", "1");
  972. DispatchKeyValue(ent, "rendercolor", "85.85 85.0 0.33");
  973.  
  974. g_OwnedEnts[g_EntOwner[ent]]--
  975. g_EntOwner[ent] = 0
  976. }
  977. else if (IsBlockLocked(ent))
  978. {
  979. UnlockBlock(ent)
  980. DispatchKeyValue(ent, "rendermode", "0");
  981. }
  982. return PLUGIN_HANDLED
  983. }
  984.  
  985. public cmdRemoveClaim(id)
  986. {
  987. if (!access(id, LOCK_BLOCKS))
  988. return PLUGIN_HANDLED
  989.  
  990. new ent, bodypart
  991. get_user_aiming (id,ent,bodypart)
  992.  
  993. new tname[7], cname[10];
  994. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  995. entity_get_string(ent, EV_SZ_classname, cname, 9);
  996.  
  997. if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore") || IsBlockLocked(ent)) return PLUGIN_HANDLED
  998.  
  999. g_OwnedEnts[g_EntOwner[ent]]--
  1000. g_EntOwner[ent] = 0
  1001.  
  1002. return PLUGIN_HANDLED
  1003. }
  1004.  
  1005. public cmdRemoveEnt(id)
  1006. {
  1007. if (!access(id, REMOVE_BLOCK))
  1008. return PLUGIN_HANDLED
  1009.  
  1010. if (!g_isalive[id] && !access(id, DEAD_REMOVE))
  1011. {
  1012. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_REMOVE")
  1013. return PLUGIN_HANDLED
  1014. }
  1015.  
  1016. new ent, bodypart
  1017. get_user_aiming (id,ent,bodypart)
  1018.  
  1019. if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
  1020. return PLUGIN_HANDLED
  1021.  
  1022. if(IsBlockLocked(ent) || g_MovingEnt[ent])
  1023. return PLUGIN_HANDLED
  1024.  
  1025. new tname[7], cname[10];
  1026. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1027. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1028. if(!equal(cname, "func_wall"))
  1029. return PLUGIN_HANDLED
  1030.  
  1031. if(equal(tname, "ignore"))
  1032. return PLUGIN_HANDLED
  1033.  
  1034. g_OwnedEnts[g_EntOwner[ent]]--
  1035. g_EntOwner[ent] = 0
  1036.  
  1037. remove_entity(ent)
  1038.  
  1039. new adminauthid[35],adminname[35]
  1040. get_user_authid (id,adminauthid,34)
  1041. get_user_name(id,adminname,34)
  1042. Log("[REMOVE] Admin: %s || SteamID: %s removed an entity", adminname, adminauthid)
  1043.  
  1044. return PLUGIN_HANDLED
  1045. }
  1046.  
  1047. // Ham Weapon Deploy Forward (forces knife only)
  1048. public ham_ItemDeploy_Post(weapon_ent)
  1049. {
  1050. static owner
  1051. owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  1052.  
  1053. static weaponid
  1054. weaponid = cs_get_weapon_id(weapon_ent)
  1055.  
  1056. g_CurrentWeapon[owner] = weaponid
  1057.  
  1058. if (g_iszombie[owner] && !((1<<weaponid) & ZOMBIE_ALLOWED_WEAPONS_BITSUM))
  1059. {
  1060. g_CurrentWeapon[owner] = CSW_KNIFE
  1061. engclient_cmd(owner, "weapon_knife")
  1062. }
  1063. else if (g_CanBuild && g_ishuman[owner])
  1064. {
  1065. g_CurrentWeapon[owner] = CSW_KNIFE
  1066. engclient_cmd(owner, "weapon_knife")
  1067. client_print(owner, print_center, "%L", LANG_SERVER, "FAIL_KNIFE_ONLY");
  1068. }
  1069. }
  1070.  
  1071. public msgRoundEnd(const MsgId, const MsgDest, const MsgEntity)
  1072. {
  1073. static Message[192]
  1074. get_msg_arg_string(2, Message, 191)
  1075.  
  1076. set_hudmessage(255, 255, 255, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)
  1077.  
  1078. if(equal(Message, "#Game_bomb_drop"))
  1079. return PLUGIN_HANDLED
  1080.  
  1081. if (equal(Message, "#Terrorists_Win"))
  1082. {
  1083. show_hudmessage(0, "Zombies Win!")
  1084. set_msg_arg_string(2, "")
  1085. switch (random_num(1, 4))
  1086. {
  1087. case 1: client_cmd(0, "spk ambience/the_horror1.wav")
  1088. case 2: client_cmd(0, "spk ambience/the_horror2.wav")
  1089. case 3: client_cmd(0, "spk ambience/the_horror3.wav")
  1090. case 4: client_cmd(0, "spk ambience/the_horror4.wav")
  1091. }
  1092. return PLUGIN_HANDLED
  1093. }
  1094. else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
  1095. {
  1096. show_hudmessage(0, "Builders Win!")
  1097. set_msg_arg_string(2, "")
  1098. switch (random_num(1, 3))
  1099. {
  1100. case 1: client_cmd(0, "spk barney/ba_another.wav")
  1101. case 2: client_cmd(0, "spk barney/ba_firepl.wav")
  1102. case 3: client_cmd(0, "spk barney/ba_seethat.wav")
  1103. }
  1104. return PLUGIN_HANDLED
  1105. }
  1106. return PLUGIN_HANDLED
  1107. }
  1108.  
  1109. public ham_WeaponCleaner_Post(iEntity)
  1110. {
  1111. call_think(iEntity)
  1112. }
  1113.  
  1114. public message_show_menu(msgid, dest, id)
  1115. {
  1116. if (!should_autojoin(id))
  1117. return PLUGIN_CONTINUE
  1118.  
  1119. static team_select[] = "#Team_Select"
  1120. static menu_text_code[sizeof team_select]
  1121. get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
  1122. if (!equal(menu_text_code, team_select))
  1123. return PLUGIN_CONTINUE
  1124.  
  1125. set_force_team_join_task(id, msgid)
  1126.  
  1127. return PLUGIN_HANDLED
  1128. }
  1129.  
  1130. public message_vgui_menu(msgid, dest, id)
  1131. {
  1132. if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !should_autojoin(id))
  1133. return PLUGIN_CONTINUE
  1134.  
  1135. set_force_team_join_task(id, msgid)
  1136.  
  1137. return PLUGIN_HANDLED
  1138. }
  1139.  
  1140. bool:should_autojoin(id)
  1141. {
  1142. return (!get_user_team(id))
  1143. }
  1144.  
  1145. set_force_team_join_task(id, menu_msgid)
  1146. {
  1147. static param_menu_msgid[2]
  1148. param_menu_msgid[0] = menu_msgid
  1149. set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
  1150. }
  1151.  
  1152. public task_force_team_join(menu_msgid[], id)
  1153. {
  1154. if (get_user_team(id))
  1155. return
  1156.  
  1157. static team[2], class[2]
  1158. get_pcvar_string(g_pcvar_team, team, sizeof team - 1)
  1159. get_pcvar_string(g_pcvar_class, class, sizeof class - 1)
  1160. force_team_join(id, menu_msgid[0], team, class)
  1161. }
  1162.  
  1163. stock force_team_join(id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0")
  1164. {
  1165. static jointeam[] = "jointeam"
  1166. if (class[0] == '0') {
  1167. engclient_cmd(id, jointeam, team)
  1168. return
  1169. }
  1170.  
  1171. static msg_block, joinclass[] = "joinclass"
  1172. msg_block = get_msg_block(menu_msgid)
  1173. set_msg_block(menu_msgid, BLOCK_SET)
  1174. engclient_cmd(id, jointeam, team)
  1175. engclient_cmd(id, joinclass, class)
  1176. set_msg_block(menu_msgid, msg_block)
  1177. }
  1178.  
  1179. public clcmd_changeteam(id)
  1180. {
  1181. if (g_CanBuild)
  1182. weapon_method_menu(id)
  1183. else
  1184. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_WEAPONS")
  1185.  
  1186. if (g_iszombie[id])
  1187. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ZOMBIE")
  1188.  
  1189. return PLUGIN_HANDLED
  1190. }
  1191.  
  1192. public clcmd_drop(id)
  1193. {
  1194. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DROP")
  1195. return PLUGIN_HANDLED
  1196. }
  1197.  
  1198. public clcmd_buy(id)
  1199. {
  1200. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_BUY")
  1201. return PLUGIN_HANDLED
  1202. }
  1203.  
  1204. public fw_Suicide(id)
  1205. {
  1206. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_SUICIDE")
  1207. console_print (id, "%L", LANG_SERVER, "FAIL_SUICIDE")
  1208. return FMRES_SUPERCEDE;
  1209. }
  1210.  
  1211. public Base_Calc()
  1212. {
  1213. new players[32], num, ct, basenum
  1214. get_players(players, num)
  1215. new player
  1216. for(new i = 0; i < num; i++)
  1217. {
  1218. player = players[i]
  1219. if (cs_get_user_team(player) == CS_TEAM_CT)
  1220. ct++
  1221.  
  1222. if (ct < 6)
  1223. basenum = 2
  1224. else
  1225. basenum = (ct/3)
  1226. }
  1227. print_color(0, "%s %L", formatmodname, LANG_SERVER, "BASE_CALC", basenum)
  1228. }
  1229.  
  1230. public cmdBadSpawn_Survivor(id)
  1231. {
  1232. if (access(id, BAD_SPAWN))
  1233. {
  1234. new players[32], num
  1235. get_players(players, num)
  1236.  
  1237. new player
  1238. for(new i = 0; i < num; i++)
  1239. {
  1240. player = players[i]
  1241. if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  1242. ExecuteHamB(Ham_CS_RoundRespawn, player)
  1243. }
  1244. }
  1245. }
  1246.  
  1247. public Fix_Spawns()
  1248. {
  1249. new players[32], num
  1250. get_players(players, num)
  1251.  
  1252. new player
  1253. for(new i = 0; i < num; i++)
  1254. {
  1255. player = players[i]
  1256. if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  1257. ExecuteHamB(Ham_CS_RoundRespawn, player)
  1258. }
  1259. }
  1260.  
  1261. public cmdBadSpawn(id)
  1262. {
  1263. if (g_isconnected[id] && g_ishuman[id] && g_CanBuild)
  1264. ExecuteHamB(Ham_CS_RoundRespawn, id)
  1265. }
  1266.  
  1267. public cmdBadSpawn_Zombie(id)
  1268. {
  1269. if (access(id, BAD_SPAWN))
  1270. {
  1271. new players[32], num
  1272. get_players(players, num)
  1273.  
  1274. new player
  1275. for(new i = 0; i < num; i++)
  1276. {
  1277. player = players[i]
  1278. if (cs_get_user_team(player) == CS_TEAM_T && !is_user_alive(player) && g_isconnected[player])
  1279. ExecuteHamB(Ham_CS_RoundRespawn, player)
  1280. }
  1281. }
  1282. }
  1283.  
  1284. public msgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
  1285. {
  1286. if(is_user_alive(iPlayer))
  1287. {
  1288. static szMsg[8]
  1289. get_msg_arg_string(2, szMsg, 7)
  1290.  
  1291. if(equal(szMsg, "buyzone"))
  1292. {
  1293. set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0))
  1294. return PLUGIN_HANDLED
  1295. }
  1296. }
  1297. return PLUGIN_CONTINUE
  1298. }
  1299.  
  1300. public cmdBuildBan(id)
  1301. {
  1302. if (access(id, BUILD_BAN))
  1303. {
  1304. new arg[32]
  1305. read_argv(1, arg, 31)
  1306. new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
  1307. g_BuildBan[player] = true
  1308. cmdStopEnt(player)
  1309.  
  1310. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1311. get_user_name(id,adminname,34)
  1312. get_user_authid (id,adminauthid,34)
  1313. get_user_name(player, playername, 34)
  1314. get_user_authid (player,playerauthid,34)
  1315. Log("[MOVE] Admin: %s || SteamID: %s banned Player: %s || SteamID: %s from building", adminname, adminauthid, playername, playerauthid)
  1316.  
  1317. client_print(id, print_console, "%L", LANG_SERVER, "BUILD_BAN1", playername)
  1318. client_print(player, print_center, "%L", LANG_SERVER, "BUILD_BAN2")
  1319. }
  1320. }
  1321.  
  1322. public cmdBuildUnban(id)
  1323. {
  1324. if (access(id, BUILD_BAN))
  1325. {
  1326. new arg[32], playername[35]
  1327.  
  1328. read_argv(1, arg, 31)
  1329. new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
  1330. get_user_name(player, playername, 34)
  1331. client_print(id, print_console, "%L", LANG_SERVER, "UNBUILD_BAN1", playername)
  1332. g_BuildBan[player] = false
  1333. print_color(player, "%s %L", formatmodname, LANG_SERVER, "UNBUILD_BAN2")
  1334. }
  1335. }
  1336.  
  1337. public cmdRevive(id)
  1338. {
  1339. if (access(id, REVIVE))
  1340. {
  1341. new arg[32]
  1342. read_argv(1, arg, 31)
  1343. new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
  1344.  
  1345. if (is_user_alive(player))
  1346. {
  1347. client_print(id, print_console, "%L", LANG_SERVER, "FAIL_REVIVE")
  1348. return PLUGIN_HANDLED
  1349. }
  1350.  
  1351. ExecuteHamB(Ham_CS_RoundRespawn, player)
  1352.  
  1353. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1354. get_user_name(id,adminname,34)
  1355. get_user_authid (id,adminauthid,34)
  1356. get_user_name(player, playername, 34)
  1357. get_user_authid (player,playerauthid,34)
  1358. Log("[REVIVE] Admin: %s || SteamID: %s revived Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  1359.  
  1360. client_print(id, print_console, "%L", LANG_SERVER, "REVIVE1", playername)
  1361. client_print(player, print_center, "%L", LANG_SERVER, "REVIVE2")
  1362. }
  1363. return PLUGIN_HANDLED
  1364. }
  1365.  
  1366. public cmdSwap(id)
  1367. {
  1368. if (access(id, SWAP))
  1369. {
  1370. new arg[32]
  1371. read_argv(1, arg, 31)
  1372. new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
  1373.  
  1374. if (!is_user_connected(player)) return PLUGIN_HANDLED
  1375.  
  1376. cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)
  1377.  
  1378. if (cs_get_user_team(player) == CS_TEAM_T)
  1379. {
  1380. g_iszombie[player] = true
  1381. g_ishuman[player] = false
  1382. }
  1383. if (cs_get_user_team(player) == CS_TEAM_CT)
  1384. {
  1385. g_ishuman[player] = true
  1386. g_iszombie[player] = false
  1387. }
  1388.  
  1389. if (is_user_alive(player))
  1390. ExecuteHamB(Ham_CS_RoundRespawn, player)
  1391.  
  1392. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1393. get_user_name(id,adminname,34)
  1394. get_user_authid (id,adminauthid,34)
  1395. get_user_name(player, playername, 34)
  1396. get_user_authid (player,playerauthid,34)
  1397. Log("[TEAM-SWAP] Admin: %s || SteamID: %s swapped Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  1398.  
  1399. client_print(id, print_console, "%L", LANG_SERVER, "SWAP1", playername)
  1400. client_print(player, print_center, "%L", LANG_SERVER, "SWAP2")
  1401. }
  1402. return PLUGIN_HANDLED
  1403. }
  1404.  
  1405. public cmdStartRound(id)
  1406. {
  1407. if (access(id, START_ROUND))
  1408. {
  1409. if (count_down<10)
  1410. {
  1411. client_print(id, print_console, "%L", LANG_SERVER, "FAIL_START_ROUND")
  1412. return PLUGIN_HANDLED
  1413. }
  1414.  
  1415. Release_Zombies()
  1416.  
  1417. new adminauthid[35],adminname[35]
  1418. get_user_name(id,adminname,34)
  1419. get_user_authid (id,adminauthid,34)
  1420. Log("[START_ROUND] Admin: %s || SteamID: %s started the round", adminname, adminauthid)
  1421.  
  1422. client_print(id, print_center, "%L", LANG_SERVER, "START_ROUND")
  1423. client_print(id, print_chat, "^x04%L", LANG_SERVER, "START_ROUND")
  1424. }
  1425. return PLUGIN_HANDLED
  1426. }
  1427.  
  1428. public cmdCheckRound(id)
  1429. {
  1430. if (g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum), g_pcvar_maxrounds)
  1431. else if (!g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  1432. }
  1433.  
  1434. public msgStatusValue()
  1435. {
  1436. //Block the name info, of person you aim at
  1437. set_msg_block(gmsgStatusText, BLOCK_SET);
  1438. }
  1439.  
  1440. public ev_SetTeam(id)
  1441. {
  1442. g_friend[id] = read_data(2)
  1443. }
  1444.  
  1445. public ev_ShowStatus(id) //called when id looks at someone
  1446. {
  1447. new name[32], pid = read_data(2);
  1448. new stats[8],bodyhits[8]
  1449.  
  1450. get_user_name(pid, name, 31);
  1451. new color1 = 0, color2 = 0;
  1452.  
  1453. if (get_user_team(pid) == 1)
  1454. color1 = 255;
  1455. else
  1456. color2 = 255;
  1457.  
  1458. new Float:height=0.35
  1459. //height=0.60
  1460.  
  1461. if (g_friend[id] == 1) // friend
  1462. {
  1463. new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo);
  1464. new wpnname[32];
  1465.  
  1466. if (wpnid)
  1467. xmod_get_wpnname(wpnid, wpnname, 31);
  1468.  
  1469. new rank = get_user_stats(pid, stats, bodyhits)
  1470. set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  1471. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "PLAYER_INFO1", name, rank, get_user_health(pid), wpnname);
  1472. }
  1473. if (g_friend[id] != 1) //enemy
  1474. {
  1475. new rank = get_user_stats(pid, stats, bodyhits)
  1476. set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  1477. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "PLAYER_INFO2", name, rank);
  1478. }
  1479. }
  1480.  
  1481. public ev_HideStatus(id)
  1482. {
  1483. ClearSyncHud(id, gHudSyncInfo);
  1484. }
  1485.  
  1486. public weapon_method_menu(id)
  1487. {
  1488. if(firsttime[id])
  1489. {
  1490. firsttime[id] = false
  1491. prim_weapons_menu(id,0)
  1492. }
  1493. else
  1494. {
  1495. cur_offset[id] = 0
  1496. if(ask[id])
  1497. {
  1498. show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. New Guns^n2. Last Guns^n3. Last Guns + Save",-1,"WeaponMethodMenu")
  1499. }
  1500. else
  1501. {
  1502. give_weapons(id)
  1503. }
  1504. }
  1505. }
  1506.  
  1507. public weapon_method_pushed(id,key)
  1508. {
  1509. switch(key)
  1510. {
  1511. case 0:
  1512. {
  1513. ask[id] = true
  1514. prim_weapons_menu(id,0)
  1515. }
  1516. case 1:
  1517. {
  1518. ask[id] = true
  1519. give_weapons(id)
  1520. }
  1521. case 2:
  1522. {
  1523. print_color(id, "%s %L", formatmodname, LANG_SERVER, "GUNS_MSG")
  1524. ask[id] = false
  1525. give_weapons(id)
  1526. }
  1527. }
  1528. return PLUGIN_HANDLED;
  1529. }
  1530.  
  1531. public prim_weapons_menu(id,offset)
  1532. {
  1533. if(offset<0) offset = 0
  1534.  
  1535. new cvar_value[32]
  1536. get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
  1537. new flags = read_flags(cvar_value)
  1538.  
  1539. new keys, curnum, menu[2048]
  1540. for(new i=offset;i<19;i++)
  1541. {
  1542. if(flags & power(2,i))
  1543. {
  1544. options_on_menu[curnum][id] = i
  1545. keys += (1<<curnum)
  1546.  
  1547. curnum++
  1548. format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])
  1549.  
  1550. if(curnum==8)
  1551. break;
  1552. }
  1553. }
  1554.  
  1555. format(menu,2047,"\yPrimary Weapon:\w^n%s^n",menu)
  1556. if(curnum==8 && offset<12)
  1557. {
  1558. keys += (1<<8)
  1559. format(menu,2047,"%s^n9. Next",menu)
  1560. }
  1561. if(offset)
  1562. {
  1563. keys += (1<<9)
  1564. format(menu,2047,"%s^n0. Back",menu)
  1565. }
  1566.  
  1567. show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
  1568. }
  1569.  
  1570. public prim_weapons_pushed(id,key)
  1571. {
  1572. if(key<8)
  1573. {
  1574. weapon_picked[0][id] = options_on_menu[key][id]
  1575. cur_offset[id] = 0
  1576. sec_weapons_menu(id,0)
  1577. }
  1578. else
  1579. {
  1580. if(key==8)
  1581. cur_offset[id] += 8
  1582. if(key==9)
  1583. cur_offset[id] -= 8
  1584. prim_weapons_menu(id,cur_offset[id])
  1585. }
  1586. return ;
  1587. }
  1588.  
  1589. public sec_weapons_menu(id,offset)
  1590. {
  1591. if(offset<0) offset = 0
  1592.  
  1593. new cvar_value[32]
  1594. get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
  1595. new flags = read_flags(cvar_value)
  1596.  
  1597. new keys, curnum, menu[2048]
  1598. for(new i=18;i<24;i++)
  1599. {
  1600. if(flags & power(2,i))
  1601. {
  1602. options_on_menu[curnum][id] = i
  1603. keys += (1<<curnum)
  1604.  
  1605. curnum++
  1606. format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])
  1607. }
  1608. }
  1609.  
  1610. format(menu,2047,"\ySecondary Weapon:\w^n%s",menu)
  1611.  
  1612. show_menu(id,keys,menu,-1,"SecWeaponSelect")
  1613. }
  1614.  
  1615. public sec_weapons_pushed(id,key)
  1616. {
  1617. if(key<8)
  1618. {
  1619. weapon_picked[1][id] = options_on_menu[key][id]
  1620. }
  1621. give_weapons(id)
  1622. return ;
  1623. }
  1624.  
  1625. public give_weapons(id)
  1626. {
  1627. strip_user_weapons(id)
  1628.  
  1629. give_item(id,"weapon_knife")
  1630.  
  1631. new weapon[32]
  1632. new csw = csw_contant(weapon_picked[0][id])
  1633. get_weaponname(csw,weapon,31)
  1634. give_item(id,weapon)
  1635. cs_set_user_bpammo(id,csw,999)
  1636. g_PrimaryWeapon[id] = csw
  1637.  
  1638. csw = csw_contant(weapon_picked[1][id])
  1639. get_weaponname(csw,weapon,31)
  1640. give_item(id,weapon)
  1641. cs_set_user_bpammo(id,csw,999)
  1642. }
  1643.  
  1644. public csw_contant(weapon)
  1645. {
  1646. new num = 29
  1647. switch(weapon)
  1648. {
  1649. case 0: num = 3
  1650. case 1: num = 5
  1651. case 2: num = 7
  1652. case 3: num = 8
  1653. case 4: num = 12
  1654. case 5: num = 13
  1655. case 6: num = 14
  1656. case 7: num = 15
  1657. case 8: num = 18
  1658. case 9: num = 19
  1659. case 10: num = 20
  1660. case 11: num = 21
  1661. case 12: num = 22
  1662. case 13: num = 23
  1663. case 14: num = 24
  1664. case 15: num = 27
  1665. case 16: num = 28
  1666. case 17: num = 30
  1667. case 18: num = 1
  1668. case 19: num = 10
  1669. case 20: num = 11
  1670. case 21: num = 16
  1671. case 22: num = 17
  1672. case 23: num = 26
  1673. case 24:
  1674. {
  1675. new s_weapon[32]
  1676.  
  1677. get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
  1678.  
  1679. new flags = read_flags(s_weapon)
  1680. do
  1681. {
  1682. num = random_num(0,18)
  1683. if(!(num & flags))
  1684. {
  1685. num = -1
  1686. }
  1687. }
  1688. while(num==-1)
  1689. num = csw_contant(num)
  1690. }
  1691. case 25:
  1692. {
  1693. new s_weapon[32]
  1694.  
  1695. get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
  1696.  
  1697. new flags = read_flags(s_weapon)
  1698. do
  1699. {
  1700. num = random_num(18,23)
  1701. if(!(num & flags))
  1702. {
  1703. num = -1
  1704. }
  1705. }
  1706. while(num==-1)
  1707. num = csw_contant(num)
  1708. }
  1709. }
  1710. return num;
  1711. }
  1712.  
  1713.  
  1714. public cmdGuns(id)
  1715. {
  1716. if(!g_isalive[id] || !g_isconnected[id] || !g_CanBuild)
  1717. return PLUGIN_HANDLED
  1718.  
  1719. if(!g_ishuman[id])
  1720. return PLUGIN_HANDLED
  1721.  
  1722. ask[id] = true
  1723. weapon_method_menu(id)
  1724. return PLUGIN_HANDLED
  1725. }
  1726.  
  1727. public ev_Health(id)
  1728. {
  1729. ShowHealth(id);
  1730. }
  1731.  
  1732. public ShowHealth(id)
  1733. {
  1734. if (is_user_alive(id))
  1735. {
  1736. new Float:hud_time = get_pcvar_float(g_pcvar_healthtime);
  1737.  
  1738. set_hudmessage(255, 255, 255, -1.0, 0.9, 0, hud_time, hud_time, 0.1, 0.2, 4);
  1739. show_hudmessage(id, "%L", LANG_SERVER, "PLAYER_HEALTH", get_user_health(id));
  1740.  
  1741. set_task(hud_time - 0.1, "ShowHealth", id);
  1742. }
  1743. }
  1744.  
  1745. Log(const message_fmt[], any:...)
  1746. {
  1747. static message[256];
  1748. vformat(message, sizeof(message) - 1, message_fmt, 2);
  1749.  
  1750. static filename[96];
  1751. static dir[64];
  1752. if( !dir[0] )
  1753. {
  1754. get_basedir(dir, sizeof(dir) - 1);
  1755. add(dir, sizeof(dir) - 1, "/logs");
  1756. }
  1757.  
  1758. format_time(filename, sizeof(filename) - 1, "%m-%d-%Y");
  1759. format(filename, sizeof(filename) - 1, "%s/BB_ACTIVITY_%s.log", dir, filename);
  1760.  
  1761. log_to_file(filename, "%s", message);
  1762. }
  1763.  
  1764. print_color(target, const message[], any:...)
  1765. {
  1766. static buffer[512], i, argscount
  1767. argscount = numargs()
  1768.  
  1769. // Send to everyone
  1770. if (!target)
  1771. {
  1772. static player
  1773. for (player = 1; player <= g_MaxPlayers; player++)
  1774. {
  1775. if (!g_isconnected[player])
  1776. continue;
  1777.  
  1778. static changed[5], changedcount
  1779. changedcount = 0
  1780.  
  1781. for (i = 2; i < argscount; i++)
  1782. {
  1783. if (getarg(i) == LANG_PLAYER)
  1784. {
  1785. setarg(i, 0, player)
  1786. changed[changedcount] = i
  1787. changedcount++
  1788. }
  1789. }
  1790. vformat(buffer, charsmax(buffer), message, 3)
  1791.  
  1792. message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, _, player)
  1793. write_byte(player)
  1794. write_string(buffer)
  1795. message_end()
  1796.  
  1797. for (i = 0; i < changedcount; i++)
  1798. setarg(changed[i], 0, LANG_PLAYER)
  1799. }
  1800. }
  1801. // Send to specific target
  1802. else
  1803. {
  1804. vformat(buffer, charsmax(buffer), message, 3)
  1805.  
  1806. message_begin(MSG_ONE, gmsgSayText, _, target)
  1807. write_byte(target)
  1808. write_string(buffer)
  1809. message_end()
  1810. }
  1811. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement