HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <hamsandwich>
  6. #include <cstrike>
  7.  
  8. new V_MODEL[] = "models/v_buffawp.mdl";
  9. new P_MODEL[] = "models/p_buffawp.mdl";
  10. new W_MODEL[] = "models/w_buffawp.mdl";
  11.  
  12. new bool:g_HasGun[33], g_SyncHud[3], g_Cvar[7];
  13. new g_Charge[33], g_TmpClip[33], g_IsInPrimaryAttack[33], g_Zoomed[33];
  14.  
  15. public plugin_init()
  16. {
  17. register_plugin("[CSO] Wpn: AWP Elven Ranger", "1.0.0", "JohanCorn");
  18.  
  19. register_clcmd("say /get_buffawp", "get_wpn");
  20.  
  21. RegisterHam(Ham_Item_Deploy, "weapon_awp", "fw_Item_Deploy_Post", 1);
  22. RegisterHam(Ham_Item_PostFrame, "weapon_awp", "fw_Item_PostFrame");
  23. RegisterHam(Ham_Item_AddToPlayer, "weapon_awp", "fw_Item_AddToPlayer");
  24. RegisterHam(Ham_Weapon_Reload, "weapon_awp", "fw_Weapon_Reload");
  25. RegisterHam(Ham_Weapon_Reload, "weapon_awp", "fw_Weapon_Reload_Post", 1);
  26. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "fw_Weapon_PrimaryAttack_Post", 1);
  27. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
  28.  
  29. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");
  30.  
  31. g_Cvar[0] = register_cvar("wpn_buffawp_charge_hud", "2");
  32. g_Cvar[1] = register_cvar("wpn_buffawp_ammo_max", "30");
  33. g_Cvar[2] = register_cvar("wpn_buffawp_ammo_clip", "20");
  34. g_Cvar[3] = register_cvar("wpn_buffawp_multi_damage_none", "2.34");
  35. g_Cvar[4] = register_cvar("wpn_buffawp_multi_damage_yellow", "3.50");
  36. g_Cvar[5] = register_cvar("wpn_buffawp_multi_damage_orange", "4.91");
  37. g_Cvar[6] = register_cvar("wpn_buffawp_multi_damage_red", "6.55");
  38.  
  39. register_forward(FM_SetModel, "fw_SetModel");
  40.  
  41. register_event("SetFOV", "event_SetFOV", "be");
  42. register_event("DeathMsg", "event_DeathMsg", "a");
  43.  
  44. g_SyncHud[0] = CreateHudSyncObj();
  45. g_SyncHud[1] = CreateHudSyncObj();
  46. g_SyncHud[2] = CreateHudSyncObj();
  47. }
  48.  
  49. public client_disconnect(id)
  50. g_HasGun[id] = false;
  51.  
  52. public plugin_precache()
  53. {
  54. register_clcmd("weapon_buffawp", "weapon_hook");
  55.  
  56. precache_model(V_MODEL);
  57. precache_model(P_MODEL);
  58. precache_model(W_MODEL);
  59.  
  60. precache_sound("weapons/awpbuff_clipin.wav");
  61. precache_sound("weapons/awpbuff_clipout.wav");
  62. precache_sound("weapons/awpbuff_idle.wav");
  63. precache_sound("weapons/awpbuff_reload.wav");
  64. precache_sound("weapons/awpbuff-1.wav");
  65.  
  66. precache_generic("sprites/weapon_buffawp.txt");
  67. precache_generic("sprites/640hud135.spr");
  68. }
  69.  
  70. public event_SetFOV(id)
  71. {
  72. if(get_user_weapon(id))
  73. {
  74. switch (read_data(1))
  75. {
  76. case 5..24:
  77. {
  78. if(!g_Zoomed[id])
  79. {
  80. remove_task(id+20160918);
  81. set_task_charge(id+20160918);
  82. }
  83. }
  84. case 25..55:
  85. {
  86. remove_task(id+20160918);
  87. set_task_charge(id+20160918);
  88.  
  89. g_Zoomed[id] = 1;
  90. }
  91. case 90:
  92. {
  93. ClearSyncHud(id, g_SyncHud[0]);
  94. ClearSyncHud(id, g_SyncHud[1]);
  95. ClearSyncHud(id, g_SyncHud[2]);
  96.  
  97. remove_task(id+20160918);
  98. g_Charge[id] = 0;
  99. g_Zoomed[id] = 0;
  100. }
  101. }
  102. }
  103. }
  104.  
  105. public event_DeathMsg()
  106. {
  107. new id = read_data(2);
  108.  
  109. g_HasGun[id] = false;
  110.  
  111. remove_task(id+20160918);
  112.  
  113. ClearSyncHud(id, g_SyncHud[0]);
  114. ClearSyncHud(id, g_SyncHud[1]);
  115. ClearSyncHud(id, g_SyncHud[2]);
  116.  
  117. return PLUGIN_CONTINUE;
  118. }
  119.  
  120. public weapon_hook(id)
  121. {
  122. engclient_cmd(id, "weapon_awp");
  123.  
  124. return PLUGIN_HANDLED;
  125. }
  126.  
  127. public get_wpn(id)
  128. {
  129. UTIL_DropWeapon(id, 1);
  130.  
  131. new iWep = give_item(id,"weapon_awp");
  132.  
  133. if(iWep)
  134. {
  135. cs_set_weapon_ammo(iWep, get_pcvar_num(g_Cvar[2]));
  136. cs_set_user_bpammo (id, CSW_AWP, get_pcvar_num(g_Cvar[1]));
  137. set_pdata_float(id, 83, 1.0, 5);
  138.  
  139. g_HasGun[id] = true;
  140.  
  141. message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id);
  142. write_string("weapon_buffawp");
  143. write_byte(1);
  144. write_byte(30);
  145. write_byte(-1);
  146. write_byte(-1);
  147. write_byte(0);
  148. write_byte(2);
  149. write_byte(CSW_AWP);
  150. write_byte(0);
  151. message_end();
  152.  
  153. set_pev(id, pev_viewmodel2, V_MODEL);
  154. set_pev(id, pev_weaponmodel2, P_MODEL);
  155. }
  156. }
  157.  
  158. public fw_Item_Deploy_Post(entity)
  159. {
  160. static id;
  161. id = get_pdata_cbase(entity, 41, 4)
  162.  
  163. if (!is_user_connected(id))
  164. return HAM_IGNORED;
  165.  
  166. if (!g_HasGun[id])
  167. return HAM_IGNORED;
  168.  
  169. set_pev(id, pev_viewmodel2, V_MODEL);
  170. set_pev(id, pev_weaponmodel2, P_MODEL);
  171.  
  172. return HAM_IGNORED;
  173. }
  174.  
  175. public fw_Weapon_Reload(entity)
  176. {
  177. static id;
  178. id = get_pdata_cbase(entity, 41, 4)
  179.  
  180. if (!is_user_connected(id))
  181. return HAM_IGNORED;
  182.  
  183. if (!g_HasGun[id])
  184. return HAM_IGNORED;
  185.  
  186. g_TmpClip[id] = -1;
  187.  
  188. new iBpAmmo = cs_get_user_bpammo(id, CSW_AWP);
  189. new iClip = get_pdata_int(entity, 51, 4);
  190.  
  191. if(iBpAmmo <= 0)
  192. return HAM_SUPERCEDE;
  193.  
  194. if(iClip >= get_pcvar_num(g_Cvar[2]))
  195. return HAM_SUPERCEDE;
  196.  
  197. g_TmpClip[id] = iClip;
  198.  
  199. return HAM_IGNORED;
  200. }
  201.  
  202. public fw_Weapon_Reload_Post(entity)
  203. {
  204. static id;
  205. id = get_pdata_cbase(entity, 41, 4)
  206.  
  207. if (!is_user_connected(id))
  208. return HAM_IGNORED;
  209.  
  210. if (!g_HasGun[id])
  211. return HAM_IGNORED;
  212.  
  213. if (g_TmpClip[id] == -1)
  214. return HAM_IGNORED;
  215.  
  216. set_pdata_int(entity, 51, g_TmpClip[id], 4);
  217. set_pdata_int(entity, 54, 1, 4);
  218.  
  219. return HAM_IGNORED;
  220. }
  221.  
  222. public fw_Item_PostFrame(entity)
  223. {
  224. static id;
  225. id = get_pdata_cbase(entity, 41, 4)
  226.  
  227. if (!is_user_connected(id))
  228. return HAM_IGNORED;
  229.  
  230. if (!g_HasGun[id])
  231. return HAM_IGNORED;
  232.  
  233. new Float:flNextAttack = get_pdata_float(id, 83, 5)
  234.  
  235. new iBpAmmo = cs_get_user_bpammo(id, CSW_AWP);
  236. new iClip = get_pdata_int(entity, 51, 4);
  237. new fInReload = get_pdata_int(entity, 54, 4);
  238.  
  239. if(fInReload && flNextAttack <= 0.0)
  240. {
  241. new j = min(get_pcvar_num(g_Cvar[2]) - iClip, iBpAmmo);
  242.  
  243. set_pdata_int(entity, 51, iClip + j, 4);
  244. cs_set_user_bpammo(id, CSW_AWP, iBpAmmo-j);
  245.  
  246. set_pdata_int(entity, 54, 0, 4);
  247. fInReload = 0;
  248. }
  249.  
  250. return HAM_IGNORED;
  251. }
  252.  
  253. public fw_Weapon_PrimaryAttack_Post(entity)
  254. {
  255. static id;
  256. id = get_pdata_cbase(entity, 41, 4);
  257.  
  258. g_IsInPrimaryAttack[id] = 0;
  259.  
  260. new szClip, szAmmo;
  261. get_user_weapon(id, szClip, szAmmo);
  262.  
  263. if(!is_user_alive(id))
  264. return HAM_IGNORED;
  265.  
  266. if (!g_HasGun[id])
  267. return HAM_IGNORED;
  268.  
  269. if (!g_TmpClip[id])
  270. return HAM_IGNORED;
  271.  
  272. emit_sound(id, CHAN_WEAPON, "weapons/awpbuff-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  273.  
  274. return HAM_IGNORED;
  275. }
  276.  
  277. public fw_Item_AddToPlayer(entity, id)
  278. {
  279. if(!is_valid_ent(entity) || !is_user_connected(id))
  280. return HAM_IGNORED;
  281.  
  282. if(entity_get_int(entity, EV_INT_impulse) == 20160918)
  283. {
  284. g_HasGun[id] = true;
  285.  
  286. entity_set_int(entity, EV_INT_impulse, 0);
  287.  
  288. message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id);
  289. write_string("weapon_buffawp");
  290. write_byte(1);
  291. write_byte(30);
  292. write_byte(-1);
  293. write_byte(-1);
  294. write_byte(0);
  295. write_byte(2);
  296. write_byte(CSW_AWP);
  297. write_byte(0);
  298. message_end();
  299.  
  300. return HAM_HANDLED;
  301. }
  302. else
  303. {
  304. message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id);
  305. write_string("weapon_awp");
  306. write_byte(1);
  307. write_byte(30);
  308. write_byte(-1);
  309. write_byte(-1);
  310. write_byte(0);
  311. write_byte(2);
  312. write_byte(CSW_AWP);
  313. write_byte(0);
  314. message_end();
  315.  
  316. return HAM_HANDLED;
  317. }
  318.  
  319. return HAM_IGNORED;
  320. }
  321.  
  322. public fw_SetModel(entity, model[])
  323. {
  324. if(!is_valid_ent(entity))
  325. return FMRES_IGNORED;
  326.  
  327. static szClassName[33];
  328. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  329.  
  330. if(!equal(szClassName, "weaponbox"))
  331. return FMRES_IGNORED;
  332.  
  333. static iOwner;
  334. iOwner = entity_get_edict(entity, EV_ENT_owner);
  335.  
  336. if(equal(model, "models/w_awp.mdl"))
  337. {
  338. static iStoredAwpID;
  339. iStoredAwpID = find_ent_by_owner(-1, "weapon_awp", entity);
  340.  
  341. if(!is_valid_ent(iStoredAwpID))
  342. return FMRES_IGNORED;
  343.  
  344. if(g_HasGun[iOwner])
  345. {
  346. entity_set_int(iStoredAwpID, EV_INT_impulse, 20160918);
  347. entity_set_model(entity, W_MODEL);
  348.  
  349. g_HasGun[iOwner] = false;
  350.  
  351. return FMRES_SUPERCEDE;
  352. }
  353. }
  354.  
  355. return FMRES_IGNORED;
  356. }
  357.  
  358. public message_DeathMsg(msg_id, msg_dest, id)
  359. {
  360. static szTruncatedWeapon[33], iAttacker, iVictim;
  361. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  362.  
  363. iAttacker = get_msg_arg_int(1);
  364. iVictim = get_msg_arg_int(2);
  365.  
  366. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  367. return PLUGIN_CONTINUE;
  368.  
  369. if(equal(szTruncatedWeapon, "awp") && get_user_weapon(iAttacker) == CSW_AWP)
  370. if(g_HasGun[iAttacker])
  371. set_msg_arg_string(4, "AWP Elven Ranger");
  372.  
  373. return PLUGIN_CONTINUE;
  374. }
  375.  
  376. public show_hudmessage_charge(id)
  377. {
  378. if(get_pcvar_num(g_Cvar[0]) == 1)
  379. {
  380. if(g_Charge[id] == 1)
  381. {
  382. set_hudmessage(250, 250, 0, -1.0, 0.75, 0, 1.0, 1.0);
  383. ShowSyncHudMsg(id, g_SyncHud[0], "----- ");
  384. }
  385. else if(g_Charge[id] == 2)
  386. {
  387. set_hudmessage(250, 100, 0, -1.0, 0.75, 0, 1.0, 1.0);
  388. ShowSyncHudMsg(id, g_SyncHud[0], "----- ----- ");
  389. }
  390. else if(g_Charge[id] == 3)
  391. {
  392. set_hudmessage(250, 0, 0, -1.0, 0.75, 0, 1.0, 1.0);
  393. ShowSyncHudMsg(id, g_SyncHud[0], "----- ----- -----");
  394. }
  395. else
  396. ClearSyncHud(id, g_SyncHud[0]);
  397. }
  398. else if(get_pcvar_num(g_Cvar[0]) == 2)
  399. {
  400. if(g_Charge[id] == 1)
  401. {
  402. set_hudmessage(150, 150, 150, -1.0, 0.75, 0, 1.0, 1.0);
  403. ShowSyncHudMsg(id, g_SyncHud[0], " ----- -----");
  404.  
  405. set_hudmessage(250, 250, 0, -1.0, 0.75, 0, 1.0, 1.0);
  406. ShowSyncHudMsg(id, g_SyncHud[1], "----- ");
  407.  
  408. ClearSyncHud(id, g_SyncHud[2]);
  409. }
  410. else if(g_Charge[id] == 2)
  411. {
  412. set_hudmessage(150, 150, 150, -1.0, 0.75, 0, 1.0, 1.0);
  413. ShowSyncHudMsg(id, g_SyncHud[0], " -----");
  414.  
  415. set_hudmessage(250, 250, 0, -1.0, 0.75, 0, 1.0, 1.0);
  416. ShowSyncHudMsg(id, g_SyncHud[1], "----- ");
  417.  
  418. set_hudmessage(250, 100, 0, -1.0, 0.75, 0, 1.0, 1.0);
  419. ShowSyncHudMsg(id, g_SyncHud[2], " ----- ");
  420. }
  421. else if(g_Charge[id] == 3)
  422. {
  423. set_hudmessage(250, 0, 0, -1.0, 0.75, 0, 1.0, 1.0);
  424. ShowSyncHudMsg(id, g_SyncHud[0], " -----");
  425.  
  426. set_hudmessage(250, 250, 0, -1.0, 0.75, 0, 1.0, 1.0);
  427. ShowSyncHudMsg(id, g_SyncHud[1], "----- ");
  428.  
  429. set_hudmessage(250, 100, 0, -1.0, 0.75, 0, 1.0, 1.0);
  430. ShowSyncHudMsg(id, g_SyncHud[2], " ----- ");
  431. }
  432. else
  433. {
  434. set_hudmessage(150, 150, 150, -1.0, 0.75, 0, 1.0, 1.0);
  435. ShowSyncHudMsg(id, g_SyncHud[0], "----- ----- -----");
  436.  
  437. ClearSyncHud(id, g_SyncHud[1]);
  438. ClearSyncHud(id, g_SyncHud[2]);
  439. }
  440. }
  441. }
  442.  
  443. public set_task_charge(id)
  444. {
  445. id = id-20160918;
  446.  
  447. if(get_pcvar_num(g_Cvar[0]))
  448. show_hudmessage_charge(id);
  449.  
  450. if(g_Charge[id] < 3)
  451. g_Charge[id] ++;
  452.  
  453. set_task(1.0, "set_task_charge", id+20160918);
  454. }
  455.  
  456. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  457. {
  458. if (victim != attacker && is_user_connected(attacker))
  459. if(get_user_weapon(attacker) == CSW_AWP)
  460. if(g_HasGun[attacker])
  461. {
  462. if(g_Charge[attacker] == 1)
  463. SetHamParamFloat(4, damage * get_pcvar_float(g_Cvar[4]));
  464. else if(g_Charge[attacker] == 2)
  465. SetHamParamFloat(4, damage * get_pcvar_float(g_Cvar[5]));
  466. else if(g_Charge[attacker] == 3)
  467. SetHamParamFloat(4, damage * get_pcvar_float(g_Cvar[6]));
  468. else
  469. SetHamParamFloat(4, damage * get_pcvar_float(g_Cvar[3]));
  470.  
  471. set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.2);
  472. show_hudmessage(attacker, "\ /^n/ \");
  473. }
  474. }
  475.  
  476. stock UTIL_DropWeapon(id, slot)
  477. {
  478. if(!(1 <= slot <= 2))
  479. return 0;
  480.  
  481. static iCount; iCount = 0;
  482. static iEntity; iEntity = get_pdata_cbase(id, (367 + slot), 5);
  483.  
  484. if(iEntity > 0)
  485. {
  486. static iNext;
  487. static szWeaponName[32];
  488.  
  489. do {
  490. iNext = get_pdata_cbase(iEntity, 42, 4);
  491.  
  492. if(get_weaponname(cs_get_weapon_id(iEntity), szWeaponName, charsmax(szWeaponName)))
  493. {
  494. engclient_cmd(id, "drop", szWeaponName);
  495. iCount++;
  496. }
  497. }
  498.  
  499. while(( iEntity = iNext) > 0);
  500. }
  501.  
  502. return iCount;
  503. }
  504. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  505. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
  506. */
  507.