HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. #include <amxmodx>
  3.  
  4. #include <fakemeta>
  5. #include <engine>
  6. #include <hamsandwich>
  7.  
  8. #include <cstrike>
  9.  
  10. #include <xs>
  11.  
  12. new const Plugin[] = "Shoot Grenades"
  13. new const Author[] = "joaquimandrade"
  14. new const Version[] = "1.1"
  15.  
  16. enum Grenade
  17. {
  18. Flashbang,
  19. He,
  20. Smoke,
  21. C4
  22. }
  23.  
  24. new Cvars[Grenade]
  25.  
  26. new CvarsNames[Grenade][] =
  27. {
  28. "flash",
  29. "he",
  30. "smoke",
  31. "c4"
  32. }
  33.  
  34. // Arkshine
  35. const m_flC4Blow = 100
  36.  
  37. new Trie:RegisteredClasses
  38.  
  39. public plugin_precache()
  40. {
  41. RegisteredClasses = TrieCreate()
  42.  
  43. register_forward(FM_Spawn,"spawn")
  44. }
  45.  
  46. public spawn(id)
  47. {
  48. if(pev_valid(id))
  49. {
  50. static classname[32]
  51. pev(id,pev_classname,classname,charsmax(classname))
  52.  
  53. if(!TrieKeyExists(RegisteredClasses,classname))
  54. {
  55. RegisterHam(Ham_TraceAttack,classname,"globalTraceAttack")
  56. TrieSetCell(RegisteredClasses,classname,true)
  57. }
  58. }
  59. }
  60.  
  61. public plugin_init()
  62. {
  63. register_plugin(Plugin,Version,Author)
  64.  
  65. RegisterHam(Ham_TraceAttack,"worldspawn","globalTraceAttack")
  66. RegisterHam(Ham_TraceAttack,"player","globalTraceAttack")
  67.  
  68. register_cvar("shootGrenades_version",Version,FCVAR_SERVER|FCVAR_SPONLY)
  69. }
  70.  
  71. public plugin_cfg()
  72. {
  73. new cvarName[15]
  74.  
  75. for(new Grenade:i=Grenade:0;i<Grenade;i++)
  76. {
  77. formatex(cvarName,charsmax(cvarName),"shoot_%s",CvarsNames[i])
  78. Cvars[i] = register_cvar(cvarName,"1")
  79. }
  80. }
  81.  
  82. public globalTraceAttack(this,attackerID,Float:damage,Float:direction[3],tracehandle,damagebits)
  83. {
  84. if(1 <= attackerID <= 32)
  85. {
  86. static Float:origin[3]
  87. pev(attackerID,pev_origin,origin)
  88.  
  89. static Float:viewOfs[3]
  90. pev(attackerID,pev_view_ofs,viewOfs)
  91.  
  92. xs_vec_add(origin,viewOfs,origin)
  93.  
  94. static Float:end[3]
  95. get_tr2(tracehandle,TR_vecEndPos,end)
  96.  
  97. new trace = create_tr2()
  98.  
  99. new grenade = -1
  100.  
  101. while((grenade = find_ent_by_class(grenade,"grenade")))
  102. {
  103. engfunc(EngFunc_TraceModel,origin,end,HULL_POINT,grenade,trace)
  104.  
  105. if(get_tr2(trace,TR_pHit) == grenade)
  106. {
  107. new Grenade:id = fm_cs_get_grenade_type_myid(grenade)
  108.  
  109. if(id == C4)
  110. {
  111. new cvarValue = get_pcvar_num(Cvars[C4])
  112.  
  113. if((cvarValue == 2) || (cvarValue && (cs_get_user_team(attackerID) == CS_TEAM_CT)))
  114. {
  115. set_pdata_float(grenade,m_flC4Blow,0.0)
  116. dllfunc(DLLFunc_Think,grenade)
  117. }
  118. }
  119. else
  120. {
  121. if(get_pcvar_num(Cvars[id]))
  122. {
  123. if(id == Smoke)
  124. set_pev(grenade,pev_flags,pev(grenade,pev_flags) | FL_ONGROUND)
  125.  
  126. // Connor
  127. set_pev(grenade,pev_dmgtime,0.0)
  128. dllfunc(DLLFunc_Think,grenade)
  129. }
  130. }
  131. }
  132. }
  133.  
  134. free_tr2(trace)
  135. }
  136. }
  137.  
  138. // VEN
  139. Grenade:fm_cs_get_grenade_type_myid(index)
  140. {
  141. if(get_pdata_int(index, 96) & (1<<8))
  142. {
  143. return C4
  144. }
  145.  
  146. return Grenade:(get_pdata_int(index, 114) & 3)
  147. }