HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. #include <amxmodx>
  3. #include <fakemeta>
  4.  
  5. new normalTrace[33], lastTrace[33], cvEnabled, weapon, dummy;
  6.  
  7. // plugin load
  8. public plugin_init()
  9. {
  10. register_plugin("No Walls","0.13","Avalanche");
  11.  
  12. register_cvar("nowalls_version","0.13",FCVAR_SERVER);
  13. cvEnabled = register_cvar("nowalls_enabled","1");
  14.  
  15. register_event("ResetHUD","event_resethud","b");
  16. register_clcmd("fullupdate","cmd_fullupdate");
  17.  
  18. register_forward(FM_TraceLine,"fw_traceline");
  19. register_forward(FM_PlayerPostThink,"fw_playerpostthink");
  20. }
  21.  
  22. // reset normal trace id on join or leave
  23. public client_connect(id)
  24. {
  25. normalTrace[id] = 0;
  26. }
  27.  
  28. public client_disconnect(id)
  29. {
  30. normalTrace[id] = 0;
  31. }
  32.  
  33. // player spawns, and some other such things
  34. public event_resethud(id)
  35. {
  36. lastTrace[id] = 0;
  37. }
  38.  
  39. // block forced resethud call
  40. public cmd_fullupdate(id)
  41. {
  42. return PLUGIN_HANDLED;
  43. }
  44.  
  45. // traceline hook, meat and bones of the entire plugin
  46. public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,ptr) // pentToSkip == id, for clarity
  47. {
  48. if(!is_user_connected(id))
  49. return FMRES_IGNORED;
  50.  
  51. // grab normal trace
  52. if(!normalTrace[id])
  53. {
  54. normalTrace[id] = ptr;
  55. return FMRES_IGNORED;
  56. }
  57.  
  58. // ignore normal trace
  59. else if(ptr == normalTrace[id])
  60. return FMRES_IGNORED;
  61.  
  62. // no functionality
  63. if(!get_pcvar_num(cvEnabled))
  64. return FMRES_IGNORED;
  65.  
  66. // not a player entity, or player is dead
  67. if(!is_user_alive(id))
  68. return FMRES_IGNORED;
  69.  
  70. // not shooting anything
  71. if(!(pev(id,pev_button) & IN_ATTACK))
  72. return FMRES_IGNORED;
  73.  
  74. weapon = get_user_weapon(id,dummy,dummy);
  75.  
  76. // using a shotgun, expect multiple tracelines
  77. if(weapon == CSW_M3 || weapon == CSW_XM1014)
  78. return FMRES_IGNORED;
  79.  
  80. // this is a second traceline, for shooting through walls
  81. if(ptr == lastTrace[id])
  82. {
  83. // values sure to throw off any traceline
  84. set_tr(TR_vecEndPos,Float:{4096.0,4096.0,4096.0});
  85. set_tr(TR_AllSolid,1);
  86. set_tr(TR_pHit,0);
  87. set_tr(TR_iHitgroup,0);
  88. set_tr(TR_flFraction,1.0);
  89.  
  90. return FMRES_SUPERCEDE;
  91. }
  92.  
  93. // remeber traceline index for next time
  94. lastTrace[id] = ptr;
  95.  
  96. return FMRES_IGNORED;
  97. }
  98.  
  99. // finished client calculations, reset our traceline index
  100. public fw_playerpostthink(id)
  101. {
  102. lastTrace[id] = 0;
  103. }
  104.