HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <colorchat>
  4. #include <cstrike>
  5. #include <fakemeta>
  6. #include <hamsandwich>
  7. #include <xs>
  8.  
  9. #pragma semicolon 1
  10.  
  11. #define PLUGIN "Zeus X27 Taser"
  12. #define VERSION "1.0.0"
  13. #define AUTHOR "Akosch:."
  14.  
  15. #define is_user_valid(%0) (1 <= %0 <= 32)
  16. #define get_user_has_weapon(%0,%1) (get_user_weapon(%0) == %1)
  17. #define SLOT 32
  18.  
  19. new bool:g_bZeus[SLOT + 1], bool:g_bAttacking[SLOT + 1], g_pCvar[7], g_pSpriteModel;
  20.  
  21. stock const g_sServerPrefix[] = {"[Információ]"};
  22. stock const g_sWeaponModel[] = {"models/v_zeus.mdl"};
  23.  
  24. stock const g_sDefaultSounds[][] =
  25. {
  26. {"weapons/knife_deploy1.wav"},
  27. {"weapons/knife_hit1.wav"},
  28. {"weapons/knife_hit2.wav"},
  29. {"weapons/knife_hit3.wav"},
  30. {"weapons/knife_hit4.wav"},
  31. {"weapons/knife_hitwall1.wav"},
  32. {"weapons/knife_slash1.wav"},
  33. {"weapons/knife_slash2.wav"},
  34. {"weapons/knife_stab.wav"}
  35. };
  36.  
  37. stock const g_sZeusSounds[][] =
  38. {
  39. {"weapons/zeus_deploy1.wav"},
  40. {"weapons/zeus_hit1.wav"},
  41. {"weapons/zeus_hit2.wav"},
  42. {"weapons/zeus_hit3.wav"},
  43. {"weapons/zeus_hit4.wav"},
  44. {"weapons/zeus_hitwall1.wav"},
  45. {"weapons/zeus_slash1.wav"},
  46. {"weapons/zeus_slash2.wav"},
  47. {"weapons/zeus_stab.wav"}
  48. };
  49.  
  50. public plugin_init()
  51. {
  52. register_plugin(PLUGIN, VERSION, AUTHOR);
  53.  
  54. register_forward(FM_EmitSound, "fwdEmitSound", 0);
  55. register_forward(FM_TraceLine, "fwdTraceLine", 0);
  56. register_forward(FM_TraceHull, "fwdTraceHull", 1);
  57.  
  58. RegisterHam(Ham_Killed, "player", "fwdDeathPost", 1);
  59. RegisterHam(Ham_TakeDamage, "player", "fwdDamagePre", 0);
  60. RegisterHam(Ham_TakeDamage, "player", "fwdDamagePost", 1);
  61. RegisterHam(Ham_Item_Deploy, "weapon_knife", "fwdWeaponSwitchPost", 1);
  62. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwdWpnPrimAttackPost", 1);
  63. RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwdWpnSecAttackPost", 1);
  64.  
  65. register_clcmd("say /zeus", "fnBuyZeus", ADMIN_ALL);
  66.  
  67. register_message(get_user_msgid("DeathMsg"), "msgDeath");
  68.  
  69. g_pCvar[0] = register_cvar("Zeus_Prise", "750");
  70. g_pCvar[1] = register_cvar("Zeus_Distance", "3.0");
  71. g_pCvar[2] = register_cvar("Zeus_Beam_Width", "100");
  72. g_pCvar[3] = register_cvar("Zeus_Beam_Red", "120");
  73. g_pCvar[4] = register_cvar("Zeus_Beam_Green", "240");
  74. g_pCvar[5] = register_cvar("Zeus_Beam_Blue", "180");
  75. g_pCvar[6] = register_cvar("Zeus_Beam_Alpha", "100");
  76. }
  77.  
  78. public plugin_precache()
  79. {
  80. precache_model(g_sWeaponModel);
  81.  
  82. g_pSpriteModel = precache_model("sprites/lightning.spr");
  83.  
  84. for(new i; i < sizeof(g_sZeusSounds); i++)
  85. precache_sound(g_sZeusSounds[i]);
  86. }
  87.  
  88. public client_connect(id)
  89. g_bZeus[id] = false;
  90.  
  91. public client_disconnect(id)
  92. g_bZeus[id] = false;
  93.  
  94. public fwdDeathPost(iVictim, iKiller)
  95. g_bZeus[iVictim] = false;
  96.  
  97. public fnBuyZeus(id)
  98. {
  99. new iPrise = get_pcvar_num(g_pCvar[0]);
  100.  
  101. if(!is_user_alive(id))
  102. {
  103. ColorChat(id, GREEN, "%s ^1Csak élők tudnak ^3Zeus x27 Taser ^1-t venni^4!", g_sServerPrefix);
  104. return;
  105. }
  106. else if(!cs_get_user_buyzone(id))
  107. {
  108. ColorChat(id, GREEN, "%s ^1Csak a vásárló zónában tudsz vásárolni^4!", g_sServerPrefix);
  109. return;
  110. }
  111. else if(g_bZeus[id])
  112. {
  113. ColorChat(id, GREEN, "%s ^1Neked már van egy ^3Zeus x27 Taser ^1-d^4!", g_sServerPrefix);
  114. return;
  115. }
  116. else if(cs_get_user_money(id) < iPrise)
  117. {
  118. ColorChat(id, GREEN, "%s ^1Nincs elég pénzed megvenni^4!", g_sServerPrefix);
  119. return;
  120. }
  121. else
  122. {
  123. g_bZeus[id] = true;
  124. cs_set_user_money(id, cs_get_user_money(id) - iPrise);
  125. ColorChat(id, GREEN, "%s ^1Sikeresen vettél egy ^3Zeus x27 Taser ^1-t^4!", g_sServerPrefix);
  126. }
  127. }
  128.  
  129. public fwdWeaponSwitchPost(iWeapon)
  130. {
  131. new id = pev(iWeapon, pev_owner);
  132.  
  133. if(!is_user_valid(id) || !is_user_alive(id))
  134. return HAM_SUPERCEDE;
  135.  
  136. if(g_bZeus[id])
  137. {
  138. set_pev(id, pev_viewmodel2, g_sWeaponModel);
  139.  
  140. return HAM_SUPERCEDE;
  141. }
  142.  
  143. return HAM_IGNORED;
  144. }
  145.  
  146. public fwdDamagePre(iVictim, iInflictor, iAttacker, Float:fDamage)
  147. if(get_user_has_weapon(iAttacker, CSW_KNIFE) && g_bZeus[iAttacker])
  148. {
  149. new Float:fVicOrigin[3], Float:fAttOrigin[3], Float:fNewDmg;
  150.  
  151. g_bAttacking[iVictim] = true;
  152.  
  153. pev(iVictim, pev_origin, fVicOrigin);
  154. pev(iAttacker, pev_origin, fAttOrigin);
  155.  
  156. (200.0 - get_distance_f(fVicOrigin, fAttOrigin)) > 0.0 ? (fNewDmg = 200.0 - get_distance_f(fVicOrigin, fAttOrigin)) : (fNewDmg = 1.0);
  157.  
  158. SetHamParamFloat(4, fNewDmg);
  159.  
  160. new iWidth, iRed, iGreen, iBlue, iAlpha;
  161.  
  162. iWidth = get_pcvar_num(g_pCvar[2]);
  163. iRed = get_pcvar_num(g_pCvar[3]);
  164. iGreen = get_pcvar_num(g_pCvar[4]);
  165. iBlue = get_pcvar_num(g_pCvar[5]);
  166. iAlpha = get_pcvar_num(g_pCvar[6]);
  167.  
  168. Create_Te_Beaments(iAttacker, iVictim, g_pSpriteModel, 0, 10, 4, iWidth, 5, iRed, iGreen, iBlue, iAlpha, 15);
  169. }
  170.  
  171. public fwdDamagePost(iVictim, iInflictor, iAttacker, Float:fDamage)
  172. if(is_user_alive(iVictim))
  173. g_bAttacking[iVictim] = false;
  174.  
  175. public fwdEmitSound(id, iChannel, const sSound[])
  176. {
  177. if(!is_user_valid(id) || !is_user_alive(id) || (iChannel != 1 && iChannel != 3))
  178. return FMRES_IGNORED;
  179.  
  180. if(!g_bZeus[id])
  181. return FMRES_IGNORED;
  182.  
  183. static i;
  184. for(i = 0; i <= sizeof(g_sDefaultSounds); i++)
  185. {
  186. if(equali(g_sDefaultSounds[i], sSound))
  187. {
  188. engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, g_sZeusSounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM);
  189.  
  190. return FMRES_SUPERCEDE;
  191. }
  192. }
  193.  
  194. return FMRES_IGNORED;
  195. }
  196.  
  197. public fwdWpnPrimAttackPost(iWeapon)
  198. fnWeapon_Attack(iWeapon);
  199.  
  200. public fwdWpnSecAttackPost(iWeapon)
  201. fnWeapon_Attack(iWeapon);
  202.  
  203. fnWeapon_Attack(iWeapon)
  204. {
  205. if(!pev_valid(iWeapon))
  206. return;
  207.  
  208. static id;
  209. id = pev(iWeapon, pev_owner);
  210.  
  211. if(!is_user_valid(id))
  212. return;
  213.  
  214. if(get_user_has_weapon(id, CSW_KNIFE) && g_bZeus[id])
  215. g_bZeus[id] = false;
  216. }
  217.  
  218. public fwdTraceLine(Float:fStart[3], Float:fEnd[3], conditions, id, ptr)
  219. return fnTrace(id, ptr,fStart,fEnd,conditions);
  220.  
  221. public fwdTraceHull(Float:fStart[3], Float:fEnd[3], conditions, hull, id, ptr)
  222. return fnTrace(id, ptr,fStart,fEnd,conditions,true,hull);
  223.  
  224. fnTrace(id, ptr, Float:fStart[3], Float:fEnd[3],iNoMonsters, bool:hull = false, iHull = 0)
  225. {
  226. if(is_user_alive(id) && get_user_has_weapon(id, CSW_KNIFE) && g_bZeus[id])
  227. {
  228. xs_vec_sub(fEnd,fStart,fEnd);
  229. xs_vec_mul_scalar(fEnd,get_pcvar_float(g_pCvar[1]),fEnd);
  230. xs_vec_add(fEnd,fStart,fEnd);
  231.  
  232. hull ? engfunc(EngFunc_TraceHull,fStart,fEnd,iNoMonsters,iHull,id,ptr) : engfunc(EngFunc_TraceLine,fStart,fEnd,iNoMonsters, id,ptr);
  233. }
  234.  
  235. return FMRES_IGNORED;
  236. }
  237.  
  238. public msgDeath(iMsgId, sMsgDest, id)
  239. {
  240. new sWeapon[32], iVictim;
  241.  
  242. get_msg_arg_string(4, sWeapon, charsmax(sWeapon));
  243.  
  244. iVictim = get_msg_arg_int(2);
  245.  
  246. if(equal(sWeapon, "knife") && g_bAttacking[iVictim])
  247. set_msg_arg_string(4, "zeus x27 taser");
  248.  
  249. return PLUGIN_CONTINUE;
  250. }
  251.  
  252. stock Create_Te_Beaments(iStartEnt, iEndEnt, iSprite, iStartFrame, iFrameRate, iLife, iWidth, iNoise, iRed, iGreen, iBlue, iAlpha, iSpeed)
  253. {
  254. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  255. write_byte(TE_BEAMENTS);
  256. write_short(iStartEnt);
  257. write_short(iEndEnt);
  258. write_short(iSprite);
  259. write_byte(iStartFrame);
  260. write_byte(iFrameRate);
  261. write_byte(iLife);
  262. write_byte(iWidth);
  263. write_byte(iNoise);
  264. write_byte(iRed);
  265. write_byte(iGreen);
  266. write_byte(iBlue);
  267. write_byte(iAlpha);
  268. write_byte(iSpeed);
  269. message_end();
  270. }