HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cso_gdm>
  4. #include <cstrike>
  5. #include <csx>
  6. #include <engine>
  7. #include <fakemeta>
  8. #include <fakemeta_util>
  9. #include <fun>
  10. #include <hamsandwich>
  11. #include <mapname_patcher>
  12.  
  13. #define PLUGIN "[CSO] Gun Deathmatch"
  14. #define VERSION "1.0"
  15. #define AUTHOR "RaZzoR"
  16.  
  17. #define DICTIONARY "cso_gun_deathmatch.txt"
  18. #define USE_CSO_SKINS
  19.  
  20. #if defined USE_CSO_SKINS
  21. new const old_v_models[][] = {
  22. "models/v_ak47.mdl",
  23. "models/v_aug.mdl",
  24. "models/v_awp.mdl",
  25. "models/v_deagle.mdl",
  26. "models/v_elite.mdl",
  27. "models/v_famas.mdl",
  28. "models/v_fiveseven.mdl",
  29. "models/v_g3sg1.mdl",
  30. "models/v_galil.mdl",
  31. "models/v_glock18.mdl",
  32. "models/v_hegrenade.mdl",
  33. "models/v_knife.mdl",
  34. "models/v_m3.mdl",
  35. "models/v_m4a1.mdl",
  36. "models/v_m249.mdl",
  37. "models/v_mac10.mdl",
  38. "models/v_mp5.mdl",
  39. "models/v_p90.mdl",
  40. "models/v_p228.mdl",
  41. "models/v_scout.mdl",
  42. "models/v_sg550.mdl",
  43. "models/v_sg552.mdl",
  44. "models/v_tmp.mdl",
  45. "models/v_xm1014.mdl"
  46. }
  47.  
  48. new const new_v_models[][] = {
  49. "models/cso_gun_deathmatch/v_ak47.mdl",
  50. "models/cso_gun_deathmatch/v_aug.mdl",
  51. "models/cso_gun_deathmatch/v_awp.mdl",
  52. "models/cso_gun_deathmatch/v_deagle.mdl",
  53. "models/cso_gun_deathmatch/v_elite.mdl",
  54. "models/cso_gun_deathmatch/v_famas.mdl",
  55. "models/cso_gun_deathmatch/v_fiveseven.mdl",
  56. "models/cso_gun_deathmatch/v_g3sg1.mdl",
  57. "models/cso_gun_deathmatch/v_galil.mdl",
  58. "models/cso_gun_deathmatch/v_glock18.mdl",
  59. "models/cso_gun_deathmatch/v_hegrenade.mdl",
  60. "models/cso_gun_deathmatch/v_knife.mdl",
  61. "models/cso_gun_deathmatch/v_m3.mdl",
  62. "models/cso_gun_deathmatch/v_m4a1.mdl",
  63. "models/cso_gun_deathmatch/v_m249.mdl",
  64. "models/cso_gun_deathmatch/v_mac10.mdl",
  65. "models/cso_gun_deathmatch/v_mp5.mdl",
  66. "models/cso_gun_deathmatch/v_p90.mdl",
  67. "models/cso_gun_deathmatch/v_p228.mdl",
  68. "models/cso_gun_deathmatch/v_scout.mdl",
  69. "models/cso_gun_deathmatch/v_sg550.mdl",
  70. "models/cso_gun_deathmatch/v_sg552.mdl",
  71. "models/cso_gun_deathmatch/v_tmp.mdl",
  72. "models/cso_gun_deathmatch/v_xm1014.mdl"
  73. }
  74. #endif
  75.  
  76. new allow_maps[][][] = {
  77. { "cs_assault", "Assault" },
  78. { "cs_camouflage_cso", "Camouflage" },
  79. { "cs_italy", "Italy" },
  80. { "de_dust", "Dust" },
  81. { "de_dust2", "Dust 2" },
  82. { "de_inferno", "Inferno" },
  83. { "de_rats", "Mouse Hole" },
  84. { "dm_gallery_cso", "Gallery" },
  85. { "dm_industry2", "Industrial 2" },
  86. { "dm_suzhou", "Suzhou" },
  87. { "fun_checkmate", "Checkmate" }
  88. }
  89.  
  90. new gdm_weapons[][][] = {
  91. { "", "", "" }, //Not Use
  92. { "M4A1", "weapon_m4a1", "90" }, //1
  93. { "AK-47", "weapon_ak47", "90" }, //2
  94. { "M14 EBR", "weapon_m14", "" },
  95. { "SG550 Commando", "weapon_sg550", "90" }, //4
  96. { "G3/SG-1", "weapon_g3sg1", "90" }, //5
  97. { "MG36", "weapon_mg36", "" },
  98. { "TAR-21", "weapon_tar21", "" },
  99. { "AUG", "weapon_aug", "90" }, //8
  100. { "SG552", "weapon_sg552", "90" }, //9
  101. { "AS50", "weapon_as50", "" },
  102. { "M16A4", "weapon_m16a4", "" },
  103. { "AN94", "weapon_an94", "" },
  104. { "M14 EBR", "weapon_m14", "" },
  105. { "StG44", "weapon_stg44", "" },
  106. { "AWP", "weapon_awp", "30" }, //15
  107. { "XM2010", "weapon_xm2010", "" },
  108. { "SVD", "weapon_svd", "" },
  109. { "Barrett M95", "weapon_m95", "" },
  110. { "SCAR", "weapon_scar", "" },
  111. { "XM-8", "weapon_xm8", "" },
  112. { "XM2010", "weapon_xm2010", "" },
  113. { "M24", "weapon_m24", "" },
  114. { "FAMAS", "weapon_famas", "90" }, //23
  115. { "Galil", "weapon_galil", "90" }, //24
  116. { "Kriss Super V", "weapon_kriss", "" },
  117. { "K1A", "weapon_k1a", "" },
  118. { "USAS12", "weapon_usas12", "" },
  119. { "Thompson Chicago", "weapon_thompson", "" },
  120. { "MP5", "weapon_mp5navy", "120" }, //29
  121. { "StG44", "weapon_stg44", "" },
  122. { "MP7A1", "weapon_mp7a1", "" },
  123. { "M3", "weapon_m3", "32" }, //32
  124. { "XM1014 Automatic Shotgun", "weapon_xm1014", "32" }, //33
  125. { "Winchester M1887", "weapon_m1887", "" },
  126. { "KSG12", "weapon_ksg12", "" },
  127. { "M249", "weapon_m249", "200" }, //36
  128. { "HK23", "weapon_hk23", "" },
  129. { "QBB95", "weapon_qbb95", "" },
  130. { "MG36", "weapon_mg36", "" },
  131. { "Scout", "weapon_scout", "90" }, //40
  132. { "P90", "weapon_p90", "100" }, //41
  133. { "Kriss Super V", "weapon_kriss", "" },
  134. { "Desert Eagle 50C", "weapon_deagle", "35" }, //43
  135. { "Dual Beretta", "weapon_elite", "120" }, //44
  136. { "Anaconda", "weapon_anaconda", "" },
  137. { "Dual Infinity", "weapon_dinfinity", "" },
  138. { "TMP", "weapon_tmp", "120" }, //47
  139. { "MAC-10", "weapon_mac10", "100" }, //48
  140. { "Infinity Black", "weapon_infib", "" },
  141. { "P228", "weapon_p228", "52" }, //50
  142. { "Five-Seven", "weapon_fiveseven", "100" }, //51
  143. { "Infinity Silver", "weapon_infis", "" },
  144. { "Glock 18C", "weapon_glock18", "120" } //53
  145. }
  146.  
  147. new const Float:gdm_wpnhudpos[][] = {
  148. { 0.00, 0.00 }, //Not Use
  149. { 0.95, 0.90 },
  150. { 0.94, 0.90 },
  151. { 0.92, 0.90 },
  152. { 0.86, 0.90 },
  153. { 0.93, 0.90 },
  154. { 0.94, 0.90 },
  155. { 0.93, 0.90 },
  156. { 0.95, 0.90 },
  157. { 0.94, 0.90 },
  158. { 0.95, 0.90 },
  159. { 0.93, 0.90 },
  160. { 0.94, 0.90 },
  161. { 0.92, 0.90 },
  162. { 0.94, 0.90 },
  163. { 0.95, 0.90 },
  164. { 0.93, 0.90 },
  165. { 0.96, 0.90 },
  166. { 0.90, 0.90 },
  167. { 0.95, 0.90 },
  168. { 0.95, 0.90 },
  169. { 0.93, 0.90 },
  170. { 0.95, 0.90 },
  171. { 0.93, 0.90 },
  172. { 0.95, 0.90 },
  173. { 0.90, 0.90 },
  174. { 0.96, 0.90 },
  175. { 0.93, 0.90 },
  176. { 0.85, 0.90 },
  177. { 0.95, 0.90 },
  178. { 0.94, 0.90 },
  179. { 0.94, 0.90 },
  180. { 0.96, 0.90 },
  181. { 0.79, 0.90 },
  182. { 0.85, 0.90 },
  183. { 0.94, 0.90 },
  184. { 0.94, 0.90 },
  185. { 0.94, 0.90 },
  186. { 0.94, 0.90 },
  187. { 0.94, 0.90 },
  188. { 0.94, 0.90 },
  189. { 0.96, 0.90 },
  190. { 0.90, 0.90 },
  191. { 0.86, 0.90 },
  192. { 0.90, 0.90 },
  193. { 0.91, 0.90 },
  194. { 0.90, 0.90 },
  195. { 0.95, 0.90 },
  196. { 0.93, 0.90 },
  197. { 0.89, 0.90 },
  198. { 0.95, 0.90 },
  199. { 0.90, 0.90 },
  200. { 0.89, 0.90 },
  201. { 0.91, 0.90 }
  202. }
  203.  
  204. new const gdm_sounds[][] = {
  205. "cso_gun_deathmatch/finalattack.wav",
  206. "cso_gun_deathmatch/weaponchange.wav"
  207. }
  208.  
  209. new const gdm_reqkills[] = {
  210. 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 43, 46, 48, 51, 54, 57, 60
  211. }
  212.  
  213. new const gdm_cs_weapons[] = {
  214. 1, 2, 4, 5, 8, 9, 15, 23, 24, 29, 32, 33, 36, 40, 41, 43, 44, 47, 48, 50, 51, 53
  215. }
  216.  
  217. new const gdm_hos_4[] = {
  218. 0, 4, 8, 12, 16, 20, 24, 28, 32, 36
  219. }
  220.  
  221. new const gdm_hos_3[] = {
  222. 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 40, 43, 48, 51, 54, 57
  223. }
  224.  
  225. new const gdm_hos_2[] = {
  226. 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 41, 44, 46, 49, 52, 55, 58
  227. }
  228.  
  229. new const gdm_hos_1[] = {
  230. 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 42, 45, 47, 50, 53, 56, 59
  231. }
  232.  
  233. new const gdm_gamename[] = "Gun Deathmatch"
  234.  
  235. const m_iJoiningState = 121
  236. const m_iMenu = 205
  237. const MENU_CHOOSEAPPEARANCE = 3
  238. const JOIN_CHOOSEAPPEARANCE = 4
  239.  
  240. new gdm_weapon[33], gdm_level[33]
  241. new pcvar_max_kill, wpn_hud, top3_hud, bot_register, score_hud, tr_score, ct_score, random_map
  242. new bool:gdm_has_grenade[33] = false
  243.  
  244. public plugin_init()
  245. {
  246. register_dictionary(DICTIONARY)
  247.  
  248. new map_name[32], buffer[128], index
  249. get_mapname(map_name, 31)
  250.  
  251. for(index=0;index<sizeof(allow_maps);index++)
  252. {
  253. if(equal(map_name, allow_maps[index][0]))
  254. {
  255. if(strlen(allow_maps[index][1]) > 0)
  256. Patch_MapName(allow_maps[index][1])
  257. break
  258. }
  259. }
  260.  
  261. if(index == sizeof(allow_maps))
  262. {
  263. formatex(buffer, sizeof(buffer), "%L", LANG_SERVER, "GDM_WRONG_MAP")
  264. set_fail_state(buffer)
  265. return
  266. }
  267.  
  268. register_plugin(PLUGIN, VERSION, AUTHOR)
  269. register_cvar("gdm_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  270.  
  271. set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  272.  
  273. pcvar_max_kill = register_cvar("GunDM_Max_Score", "800")
  274.  
  275. register_clcmd("menuselect", "ClCmd_MenuSelect_JoinClass")
  276. register_clcmd("joinclass", "ClCmd_MenuSelect_JoinClass")
  277.  
  278. register_message(get_user_msgid("RoundTime"),"Event_RoundTime")
  279. register_message(get_user_msgid("HideWeapon"), "msgHideWeapon")
  280. register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
  281. register_message(get_user_msgid("Money"), "MsgMoney")
  282.  
  283. register_forward(FM_SetModel, "SetModel")
  284. register_forward(FM_GetGameDescription, "GameDesc")
  285. register_forward(FM_ClientKill, "Forward_ClientKill")
  286.  
  287. RegisterHam(Ham_Spawn, "player", "Spawn", 1)
  288. RegisterHam(Ham_Touch, "armoury_entity", "FwdHamPickupWeapon")
  289. RegisterHam(Ham_Touch, "weaponbox", "FwdHamPickupWeapon")
  290.  
  291. register_clcmd("drop", "block_drop")
  292. register_clcmd("chooseteam", "block_chooseteam")
  293. register_event("BombDrop", "Event_BombDropped", "a", "4=1")
  294. register_event("ResetHUD", "onResetHUD", "b")
  295.  
  296. #if defined USE_CSO_SKINS
  297. register_event("CurWeapon","Weapon_Hook","be","1=1")
  298. #endif
  299.  
  300. wpn_hud = CreateHudSyncObj(1)
  301. top3_hud = CreateHudSyncObj(2)
  302. score_hud = CreateHudSyncObj(3)
  303.  
  304. no_obj()
  305. TOP3_HUD()
  306.  
  307. random_map = random(sizeof(allow_maps))
  308. }
  309.  
  310. public plugin_cfg()
  311. server_cmd("sv_restart 1")
  312.  
  313. public plugin_precache()
  314. {
  315. #if defined USE_CSO_SKINS
  316. for(new i;i<sizeof(new_v_models);i++)
  317. precache_model(new_v_models[i])
  318. #endif
  319.  
  320. for(new i;i<sizeof(gdm_sounds);i++)
  321. precache_sound(gdm_sounds[i])
  322.  
  323. register_forward(FM_Spawn, "no_hostages")
  324. }
  325.  
  326. public no_hostages(ent)
  327. {
  328. new classname[32]
  329.  
  330. pev(ent, pev_classname, classname, 31)
  331.  
  332. if(equal(classname, "hostage_entity"))
  333. {
  334. engfunc(EngFunc_RemoveEntity, ent)
  335. return FMRES_SUPERCEDE
  336. }
  337.  
  338. return FMRES_IGNORED
  339. }
  340.  
  341. #if defined USE_CSO_SKINS
  342. public Weapon_Hook(id)
  343. {
  344. if(!is_user_alive(id))
  345. return PLUGIN_CONTINUE
  346.  
  347. static model[32]
  348. pev(id, pev_viewmodel2, model, 31)
  349.  
  350. for(new i=0;i<sizeof(new_v_models);i++)
  351. {
  352. if(equali(model, old_v_models[i]))
  353. {
  354. set_pev(id, pev_viewmodel2, new_v_models[i])
  355. break
  356. }
  357. }
  358.  
  359. return PLUGIN_CONTINUE
  360.  
  361. }
  362. #endif
  363.  
  364. public ClCmd_MenuSelect_JoinClass(id)
  365. {
  366. if(get_pdata_int(id, m_iMenu) == MENU_CHOOSEAPPEARANCE && get_pdata_int(id, m_iJoiningState) == JOIN_CHOOSEAPPEARANCE)
  367. {
  368. new command[11], arg1[32]
  369. read_argv(0, command, charsmax(command))
  370. read_argv(1, arg1, charsmax(arg1))
  371. engclient_cmd(id, command, arg1)
  372. ExecuteHam(Ham_Player_PreThink, id)
  373.  
  374. if(!is_user_alive(id))
  375. ExecuteHamB(Ham_Spawn, id)
  376.  
  377. ScoreBoard_HUD(id)
  378.  
  379. return PLUGIN_HANDLED
  380. }
  381.  
  382. return PLUGIN_CONTINUE
  383. }
  384.  
  385. public no_obj()
  386. {
  387. new doneonce = 0
  388. new fbombt = find_ent_by_class(-1, "func_bomb_target")
  389. while(fbombt > get_maxplayers())
  390. {
  391. entity_set_int(fbombt, EV_INT_flags, FL_KILLME)
  392. doneonce = 1
  393. fbombt = find_ent_by_class(fbombt, "func_bomb_target")
  394. }
  395.  
  396. if(doneonce == 1)server_cmd("sv_restartround 1")
  397. new ibombt = find_ent_by_class(-1, "info_bomb_target")
  398. while(ibombt > get_maxplayers())
  399. {
  400. entity_set_int(ibombt, EV_INT_flags, FL_KILLME)
  401. ibombt = find_ent_by_class(ibombt, "info_bomb_target")
  402. }
  403.  
  404. new fescape = find_ent_by_class(-1, "func_escapezone")
  405. while(fescape > get_maxplayers())
  406. {
  407. entity_set_int(fescape, EV_INT_flags, FL_KILLME)
  408. fescape = find_ent_by_class(fescape, "func_escapezone")
  409. }
  410.  
  411. new fvips = find_ent_by_class(-1, "func_vip_safteyzone")
  412. while(fvips > get_maxplayers())
  413. {
  414. entity_set_int(fvips, EV_INT_flags, FL_KILLME)
  415. fvips = find_ent_by_class(fvips, "func_vip_safteyzone")
  416. }
  417.  
  418. new fvipst = find_ent_by_class(-1, "func_vip_start")
  419. while(fvipst > get_maxplayers())
  420. {
  421. entity_set_int(fvipst, EV_INT_flags, FL_KILLME)
  422. fvipst = find_ent_by_class(fvipst, "func_vip_start")
  423. }
  424.  
  425. return PLUGIN_CONTINUE
  426. }
  427.  
  428. public onResetHUD(id)
  429. {
  430. if(!is_user_connected(id))
  431. return
  432.  
  433. message_begin(MSG_ONE, get_user_msgid("HideWeapon"), _, id)
  434. write_byte((1<<5))
  435. message_end()
  436. }
  437.  
  438. public msgStatusIcon(msgid, msgdest, id)
  439. {
  440. static szIcon[8]
  441. get_msg_arg_string(2, szIcon, 7)
  442.  
  443. if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
  444. {
  445. set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
  446. return PLUGIN_HANDLED
  447. }
  448.  
  449. return PLUGIN_CONTINUE
  450. }
  451.  
  452. public Event_BombDropped()
  453. {
  454. message_begin(MSG_BROADCAST, get_user_msgid("ShowTimer"))
  455. message_end()
  456. }
  457.  
  458. public block_drop(id)
  459. return PLUGIN_HANDLED
  460.  
  461. public block_chooseteam(id)
  462. return PLUGIN_HANDLED
  463.  
  464. public Forward_ClientKill(id)
  465. return FMRES_SUPERCEDE
  466.  
  467. public FwdHamPickupWeapon()
  468. return HAM_SUPERCEDE
  469.  
  470. public Event_RoundTime(const MsgId, const MsgDest, const MsgEnt)
  471. set_msg_arg_int(1, ARG_SHORT, get_timeleft())
  472.  
  473. public msgHideWeapon()
  474. set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | (1<<5))
  475.  
  476. public MsgMoney(msgid, dest, id)
  477. {
  478. set_pdata_int(id, 115, 0)
  479. set_msg_arg_int(1, ARG_LONG, 0)
  480. }
  481.  
  482. public SetModel(iEnt, szModel[])
  483. {
  484. if(equal(szModel, "models/w_", 9))
  485. {
  486. if(szModel[9] != 'h' && !equal(szModel[9], "sm", 2) && !equal(szModel[9], "fl", 2))
  487. set_pev(iEnt, pev_nextthink, get_gametime() + 10.0)
  488. }
  489. }
  490.  
  491. public client_connect(id)
  492. {
  493. gdm_level[id] = 1
  494. gdm_has_grenade[id] = false
  495.  
  496. switch(random(3))
  497. {
  498. case 0: gdm_weapon[id] = 1
  499. case 1: gdm_weapon[id] = 2
  500. case 2: gdm_weapon[id] = 3
  501. }
  502. }
  503.  
  504. public client_putinserver(id)
  505. {
  506. if(!bot_register && is_user_bot(id))
  507. {
  508. bot_register = 1
  509. set_task(0.2, "do_register", id)
  510. }
  511. }
  512.  
  513. public do_register(id)
  514. {
  515. RegisterHamFromEntity(Ham_Spawn, id, "Spawn", 1)
  516. RegisterHamFromEntity(Ham_Touch, id, "FwdHamPickupWeapon")
  517. }
  518.  
  519. public client_death(attacker, victim, wpnindex, hitplace, TK)
  520. {
  521. new atk_frags = get_user_frags(attacker)
  522. new attacker_name[32]
  523.  
  524. get_user_name(attacker, attacker_name, charsmax(attacker_name))
  525.  
  526. if(attacker == victim)
  527. set_task(3.0, "respawn_task", attacker)
  528.  
  529. else
  530. set_task(3.0, "respawn_task", victim)
  531.  
  532. switch(wpnindex)
  533. {
  534. case CSW_GLOCK18:
  535. {
  536. if(gdm_has_grenade[attacker]) return
  537.  
  538. give_item(attacker, "weapon_hegrenade")
  539. gdm_has_grenade[attacker] = true
  540. client_print(0, print_center, "%L", LANG_PLAYER, "GDM_FINAL_HE", attacker_name)
  541. }
  542.  
  543. case CSW_HEGRENADE:
  544. {
  545. if(attacker == victim) return
  546.  
  547. switch(get_user_team(attacker))
  548. {
  549. case 1: client_print(0, print_center, "%L", LANG_PLAYER, "GDM_TR_WIN")
  550. case 2: client_print(0, print_center, "%L", LANG_PLAYER, "GDM_CT_WIN")
  551. }
  552.  
  553. new players[32], pnum, tempid
  554. get_players(players, pnum)
  555.  
  556. for(new i=0;i<pnum;i++)
  557. {
  558. tempid = players[i]
  559. set_user_godmode(tempid, 1)
  560. }
  561.  
  562. set_task(1.5, "map_change")
  563.  
  564. new parm[2]
  565. set_task(1.0, "show_nextmap", 1, parm, 1, "b")
  566. }
  567. }
  568.  
  569. switch(get_user_team(attacker))
  570. {
  571. case 1: tr_score++
  572. case 2: ct_score++
  573. }
  574.  
  575. if(gdm_level[attacker] < 17)
  576. {
  577. while(atk_frags >= gdm_reqkills[gdm_level[attacker]])
  578. {
  579. gdm_level[attacker]++
  580.  
  581. switch(gdm_level[attacker])
  582. {
  583. case 2, 9, 17: gdm_weapon[attacker] += 3
  584.  
  585. case 3: gdm_weapon[attacker] = 7
  586.  
  587. case 4:
  588. {
  589. switch(random(3))
  590. {
  591. case 0: gdm_weapon[attacker] = 8
  592. case 1: gdm_weapon[attacker] = 9
  593. case 2: gdm_weapon[attacker] = 10
  594. }
  595. }
  596.  
  597. case 5:
  598. {
  599. switch(random(4))
  600. {
  601. case 0: gdm_weapon[attacker] = 11
  602. case 1: gdm_weapon[attacker] = 12
  603. case 2: gdm_weapon[attacker] = 13
  604. case 3: gdm_weapon[attacker] = 14
  605. }
  606. }
  607.  
  608. case 6, 12: gdm_weapon[attacker] += 4
  609.  
  610. case 7:
  611. {
  612. switch(random(4))
  613. {
  614. case 0: gdm_weapon[attacker] = 19
  615. case 1: gdm_weapon[attacker] = 20
  616. case 2: gdm_weapon[attacker] = 21
  617. case 3: gdm_weapon[attacker] = 22
  618. }
  619. }
  620.  
  621. case 8:
  622. {
  623. switch(random(3))
  624. {
  625. case 0: gdm_weapon[attacker] = 23
  626. case 1: gdm_weapon[attacker] = 24
  627. case 2: gdm_weapon[attacker] = 25
  628. }
  629. }
  630.  
  631. case 10:
  632. {
  633. switch(random(3))
  634. {
  635. case 0: gdm_weapon[attacker] = 29
  636. case 1: gdm_weapon[attacker] = 30
  637. case 2: gdm_weapon[attacker] = 31
  638. }
  639. }
  640.  
  641. case 11:
  642. {
  643. switch(random(4))
  644. {
  645. case 0: gdm_weapon[attacker] = 32
  646. case 1: gdm_weapon[attacker] = 33
  647. case 2: gdm_weapon[attacker] = 34
  648. case 3: gdm_weapon[attacker] = 35
  649. }
  650. }
  651.  
  652. case 13: gdm_weapon[attacker] = 40
  653.  
  654. case 14:
  655. {
  656. switch(random(2))
  657. {
  658. case 0: gdm_weapon[attacker] = 41
  659. case 1: gdm_weapon[attacker] = 42
  660. }
  661. }
  662.  
  663. case 15:
  664. {
  665. switch(random(4))
  666. {
  667. case 0: gdm_weapon[attacker] = 43
  668. case 1: gdm_weapon[attacker] = 44
  669. case 2: gdm_weapon[attacker] = 45
  670. case 3: gdm_weapon[attacker] = 46
  671. }
  672. }
  673.  
  674. case 16:
  675. {
  676. switch(random(3))
  677. {
  678. case 0: gdm_weapon[attacker] = 47
  679. case 1: gdm_weapon[attacker] = 48
  680. case 2: gdm_weapon[attacker] = 49
  681. }
  682. }
  683. }
  684.  
  685. strip_user_weapons(attacker)
  686. give_item(attacker, "weapon_knife")
  687. reset_cso_weapons(attacker, gdm_level[attacker])
  688.  
  689. for(new i=0;i<sizeof(gdm_cs_weapons);i++)
  690. {
  691. if(gdm_weapon[attacker] == gdm_cs_weapons[i])
  692. {
  693. new weapon_id = get_weaponid(gdm_weapons[gdm_weapon[attacker]][1])
  694. new convert_to_num = str_to_num(gdm_weapons[gdm_weapon[attacker]][2])
  695.  
  696. give_item(attacker, gdm_weapons[gdm_weapon[attacker]][1])
  697. cs_set_user_bpammo(attacker, weapon_id, convert_to_num)
  698. }
  699.  
  700. else if(gdm_weapon[attacker] != gdm_cs_weapons[i])
  701. {
  702. new buffer[128]
  703. formatex(buffer, sizeof(buffer), "%s.amxx", gdm_weapons[gdm_weapon[attacker]][1])
  704.  
  705. if(callfunc_begin(gdm_weapons[gdm_weapon[attacker]][1], buffer) == 1)
  706. {
  707. callfunc_push_int(attacker)
  708. callfunc_end()
  709. }
  710. }
  711. }
  712.  
  713. client_cmd(attacker, "speak ^"%s^"", gdm_sounds[1])
  714. client_print(attacker, print_center, "%L %s", attacker, "GDM_WPNCHANGE", gdm_weapons[gdm_weapon[attacker]][0])
  715. }
  716. }
  717. else
  718. {
  719. if(atk_frags == 60)
  720. {
  721. gdm_level[attacker] = 18
  722. gdm_weapon[attacker] = 53
  723.  
  724. strip_user_weapons(attacker)
  725. give_item(attacker, "weapon_knife")
  726. reset_cso_weapons(attacker, gdm_level[attacker])
  727.  
  728. new weapon_id = get_weaponid(gdm_weapons[gdm_weapon[attacker]][1])
  729. new convert_to_num = str_to_num(gdm_weapons[gdm_weapon[attacker]][2])
  730.  
  731. give_item(attacker, gdm_weapons[gdm_weapon[attacker]][1])
  732. cs_set_user_bpammo(attacker, weapon_id, convert_to_num)
  733.  
  734. client_cmd(attacker, "speak ^"%s^"", gdm_sounds[0])
  735. client_print(attacker, print_center, "%L %s", attacker, "GDM_FINALATK", gdm_weapons[gdm_weapon[attacker]][0])
  736. }
  737. }
  738.  
  739. if(tr_score == get_pcvar_num(pcvar_max_kill) || ct_score == get_pcvar_num(pcvar_max_kill))
  740. {
  741. if(tr_score == get_pcvar_num(pcvar_max_kill))
  742. client_print(0, print_center, "%L", LANG_PLAYER, "GDM_TR_WIN")
  743. else
  744. client_print(0, print_center, "%L", LANG_PLAYER, "GDM_CT_WIN")
  745.  
  746. new players[32], pnum, tempid
  747. get_players(players, pnum)
  748.  
  749. for(new i=0;i<pnum;i++)
  750. {
  751. tempid = players[i]
  752. set_user_godmode(tempid, 1)
  753. }
  754.  
  755. set_task(1.5, "map_change")
  756.  
  757. new parm[2]
  758. set_task(1.0, "show_nextmap", 1, parm, 1, "b")
  759. }
  760. }
  761.  
  762. public grenade_throw(id, gid, wid)
  763. gdm_has_grenade[id] = false
  764.  
  765. public map_change()
  766. {
  767. new players[32], pnum, tempid
  768. get_players(players, pnum)
  769.  
  770. for(new i=0;i<pnum;i++)
  771. {
  772. tempid = players[i]
  773. set_user_godmode(tempid, 0)
  774. }
  775.  
  776. server_cmd("changelevel %s", allow_maps[random_map][0])
  777. }
  778.  
  779. public show_nextmap()
  780. {
  781. if(strlen(allow_maps[random_map][1]) > 0)
  782. client_print(0, print_chat, "%L: %s", LANG_PLAYER, "GDM_NEXTMAP", allow_maps[random_map][1])
  783. else
  784. client_print(0, print_chat, "%L: %s", LANG_PLAYER, "GDM_NEXTMAP", allow_maps[random_map][0])
  785. }
  786.  
  787. public GameDesc()
  788. {
  789. forward_return(FMV_STRING, gdm_gamename)
  790. return FMRES_SUPERCEDE
  791. }
  792.  
  793. public respawn_task(id)
  794. ExecuteHamB(Ham_CS_RoundRespawn, id)
  795.  
  796. public Spawn(id)
  797. {
  798. if(!is_user_connected(id)) return
  799.  
  800. set_user_health(id, 100)
  801. set_user_armor(id, 100)
  802.  
  803. new weapon_name[15]
  804. switch(get_user_team(id))
  805. {
  806. case 1: weapon_name = "weapon_glock18"
  807. case 2: weapon_name = "weapon_usp"
  808. default: return
  809. }
  810.  
  811. new weapon = find_ent_by_owner(-1, weapon_name, id)
  812. if(!weapon) return
  813.  
  814. engclient_cmd(id, "drop", weapon_name)
  815. new weaponbox = entity_get_edict(weapon, EV_ENT_owner)
  816. if(!weaponbox || weaponbox == id) return
  817.  
  818. remove_entity(weaponbox)
  819. remove_entity(weapon)
  820.  
  821. for(new i=0;i<sizeof(gdm_cs_weapons);i++)
  822. {
  823. if(gdm_weapon[id] == gdm_cs_weapons[i])
  824. {
  825. new weapon_id = get_weaponid(gdm_weapons[gdm_weapon[id]][1])
  826. new convert_to_num = str_to_num(gdm_weapons[gdm_weapon[id]][2])
  827.  
  828. give_item(id, gdm_weapons[gdm_weapon[id]][1])
  829. cs_set_user_bpammo(id, weapon_id, convert_to_num)
  830. }
  831.  
  832. else if(gdm_weapon[id] != gdm_cs_weapons[i])
  833. {
  834. new buffer[128]
  835. formatex(buffer, sizeof(buffer), "%s.amxx", gdm_weapons[gdm_weapon[id]][1])
  836.  
  837. if(callfunc_begin(gdm_weapons[gdm_weapon[id]][1], buffer) == 1)
  838. {
  839. callfunc_push_int(id)
  840. callfunc_end()
  841. }
  842. }
  843. }
  844.  
  845. if(gdm_has_grenade[id])
  846. give_item(id, "weapon_hegrenade")
  847.  
  848. set_user_godmode(id, 1)
  849. set_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 16)
  850. set_task(3.0, "remove_protection", id)
  851. }
  852.  
  853. public remove_protection(id)
  854. {
  855. set_user_godmode(id, 0)
  856. set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  857. }
  858.  
  859. public client_PostThink(id)
  860. {
  861. if(!is_user_alive(id)) return
  862.  
  863. new iSprite[16]
  864. message_begin(MSG_ONE, get_user_msgid("Scenario"), {0,0,0}, id)
  865. write_byte(1)
  866.  
  867. for(new i=0;i<sizeof(gdm_hos_4);i++)
  868. {
  869. if(get_user_frags(id) == gdm_hos_4[i])
  870. format(iSprite, 15, "hostage4")
  871. }
  872.  
  873. for(new i=0;i<sizeof(gdm_hos_3);i++)
  874. {
  875. if(get_user_frags(id) == gdm_hos_3[i])
  876. format(iSprite, 15, "hostage3")
  877. }
  878.  
  879. for(new i=0;i<sizeof(gdm_hos_2);i++)
  880. {
  881. if(get_user_frags(id) == gdm_hos_2[i])
  882. format(iSprite, 15, "hostage2")
  883. }
  884.  
  885. for(new i=0;i<sizeof(gdm_hos_1);i++)
  886. {
  887. if(get_user_frags(id) == gdm_hos_1[i])
  888. format(iSprite, 15, "hostage1")
  889. }
  890.  
  891. write_string(iSprite)
  892. write_byte(127)
  893. write_short(0)
  894. message_end()
  895. }
  896.  
  897. public ScoreBoard_HUD(id)
  898. {
  899. /* ScoreBoard */
  900. set_hudmessage(255, 255, 255, -1.0, 0.00, 0, 6.0, 12.0)
  901.  
  902. if(gdm_level[id] <= 17)
  903. ShowSyncHudMsg(id, score_hud, "TR %i [%i %L] CT %i ^n%L %i", tr_score, get_pcvar_num(pcvar_max_kill), id, "GDM_KILL", ct_score, id, "GDM_LV", gdm_level[id])
  904. else
  905. ShowSyncHudMsg(id, score_hud, "TR %i [%i %L] CT %i ^n%L Max", tr_score, get_pcvar_num(pcvar_max_kill), id, "GDM_KILL", ct_score, id, "GDM_LV")
  906.  
  907. /* Weapons */
  908. set_hudmessage(255, 212, 0, gdm_wpnhudpos[gdm_weapon[id]][0], gdm_wpnhudpos[gdm_weapon[id]][1], 0, 6.0, 12.0)
  909. ShowSyncHudMsg(id, wpn_hud, "%s", gdm_weapons[gdm_weapon[id]][0])
  910.  
  911. set_task(0.2, "ScoreBoard_HUD", id)
  912. }
  913.  
  914. public TOP3_HUD()
  915. {
  916.  
  917. /* TOP3 */
  918. new players[32], num, top1, top2, top3
  919. new top1_name[33], top2_name[33], top3_name[33]
  920.  
  921. get_players(players, num)
  922. SortCustom1D(players, num, "sort_bestplayer")
  923.  
  924. top1 = players[0]
  925. top2 = players[1]
  926. top3 = players[2]
  927.  
  928. get_user_name(top1, top1_name, charsmax(top1_name))
  929. get_user_name(top2, top2_name, charsmax(top2_name))
  930. get_user_name(top3, top3_name, charsmax(top3_name))
  931.  
  932. set_hudmessage(0, 255, 255, -0.00, 0.21, 0, 6.0, 12.0)
  933.  
  934. if(get_user_frags(top1) >= 1)
  935. {
  936. if(gdm_level[top1] <= 17)
  937. ShowSyncHudMsg(0, top3_hud, "%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", gdm_level[top1], top1_name)
  938. else
  939. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name)
  940. }
  941.  
  942. if(get_user_frags(top2) >= 1)
  943. {
  944. if(gdm_level[top1] <= 17 && gdm_level[top2] <= 17)
  945. ShowSyncHudMsg(0, top3_hud, "%L %L%i %s ^n%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", gdm_level[top1], top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", gdm_level[top2], top2_name)
  946. else if(gdm_level[top1] > 17 && gdm_level[top2] <= 17)
  947. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s ^n%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", gdm_level[top2], top2_name)
  948. else
  949. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s ^n%L %LMax %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", top2_name)
  950. }
  951.  
  952. if(get_user_frags(top3) >= 1)
  953. {
  954. if(gdm_level[top1] <= 17 && gdm_level[top2] <= 17 && gdm_level[top3] <= 17)
  955. ShowSyncHudMsg(0, top3_hud, "%L %L%i %s ^n%L %L%i %s ^n%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", gdm_level[top1], top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", gdm_level[top2], top2_name, LANG_PLAYER, "GDM_3RD", LANG_PLAYER, "GDM_LV", gdm_level[top3], top3_name)
  956. else if(gdm_level[top1] > 17 && gdm_level[top2] <= 17 && gdm_level[top3] <= 17)
  957. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s ^n%L %L%i %s ^n%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", gdm_level[top2], top2_name, LANG_PLAYER, "GDM_3RD", LANG_PLAYER, "GDM_LV", gdm_level[top3], top3_name)
  958. else if(gdm_level[top1] > 17 && gdm_level[top2] > 17 && gdm_level[top3] <= 17)
  959. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s ^n%L %LMax %s ^n%L %L%i %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", top2_name, LANG_PLAYER, "GDM_3RD", LANG_PLAYER, "GDM_LV", gdm_level[top3], top3_name)
  960. else
  961. ShowSyncHudMsg(0, top3_hud, "%L %LMax %s ^n%L %LMax %s ^n%L %LMax %s", LANG_PLAYER, "GDM_1ST", LANG_PLAYER, "GDM_LV", top1_name, LANG_PLAYER, "GDM_2ND", LANG_PLAYER, "GDM_LV", top2_name, LANG_PLAYER, "GDM_3RD", LANG_PLAYER, "GDM_LV", top3_name)
  962. }
  963.  
  964. if(get_timeleft() <= 0)
  965. {
  966. if(tr_score > ct_score)
  967. client_print(0, print_center, "%L", LANG_PLAYER, "GDM_TR_WIN")
  968. else
  969. client_print(0, print_center, "%L", LANG_PLAYER, "GDM_CT_WIN")
  970.  
  971. new players[32], pnum, tempid
  972. get_players(players, pnum)
  973.  
  974. for(new i=0;i<pnum;i++)
  975. {
  976. tempid = players[i]
  977. set_user_godmode(tempid, 1)
  978. }
  979.  
  980. set_task(1.5, "map_change")
  981.  
  982. new parm[2]
  983. set_task(1.0, "show_nextmap", 1, parm, 1, "b")
  984. }
  985.  
  986. set_task(0.2, "TOP3_HUD")
  987. }
  988.  
  989. public sort_bestplayer(id1, id2)
  990. {
  991. if(get_user_frags(id1) > get_user_frags(id2))
  992. return -1
  993. else if(get_user_frags(id1) < get_user_frags(id2))
  994. return 1
  995.  
  996. return 0
  997. }