HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /************************************************************************
  2. ** *
  3. ** Weapon Lights (Beta) v.0.7.1 [20-Feb-2009] *
  4. ** *
  5. ** by HiSS & Arkshine *
  6. ** *
  7. ************************************************************************/
  8.  
  9. #include <amxmodx>
  10. #include <fakemeta>
  11. #include <hamsandwich>
  12.  
  13. #define DLIGHT_LIFE 8
  14. #define DLIGHT_DECAY 60
  15.  
  16. #define MAX_CLIENTS 32
  17.  
  18. #define M4A1_SILENCED (1<<2)
  19. #define USP_SILENCED (1<<0)
  20.  
  21. #define MAX_WEAPONS 30
  22. #define NOT_GUNS_BITSUM (1 << CSW_HEGRENADE | 1 << CSW_SMOKEGRENADE | 1 << CSW_FLASHBANG | 1 << CSW_KNIFE | 1 << CSW_C4)
  23.  
  24. enum Coord_e {Float:x, Float:y, Float:z};
  25.  
  26. new g_pEnable, g_pRadius, g_pColor, g_pSilenced;
  27. new g_Enable, g_Red, g_Green, g_Blue, g_Radius, g_Silenced;
  28.  
  29. const m_iWeaponType = 43;
  30. const m_iSilencerFireMode = 74;
  31. const m_iZoomType = 363;
  32. const m_pActiveItem = 373;
  33.  
  34. #define message_begin_f(%1,%2,%3) (engfunc (EngFunc_MessageBegin, %1, %2, %3))
  35. #define write_coord_f(%1) (engfunc (EngFunc_WriteCoord, %1))
  36.  
  37. #define EXTRAOFFSET_WEAPONS 4
  38. #define IsWeaponNotEmpty(%1) (get_pdata_int (%1, m_iClip, EXTRAOFFSET_WEAPONS))
  39.  
  40. new const g_szGunsEvents[][]=
  41. {
  42. "events/awp.sc","events/g3sg1.sc", "events/ak47.sc", "events/scout.sc",
  43. "events/m249.sc","events/m4a1.sc", "events/sg552.sc", "events/aug.sc",
  44. "events/sg550.sc", "events/m3.sc", "events/xm1014.sc", "events/usp.sc",
  45. "events/mac10.sc", "events/ump45.sc", "events/fiveseven.sc", "events/p90.sc",
  46. "events/deagle.sc", "events/p228.sc", "events/glock18.sc", "events/mp5n.sc",
  47. "events/tmp.sc", "events/elite_left.sc", "events/elite_right.sc",
  48. "events/galil.sc", "events/famas.sc"
  49. }
  50.  
  51. new g_GunsEventidsBitsum, g_MaxClients, g_FwdId;
  52.  
  53. public plugin_precache ()
  54. {
  55. g_FwdId = register_forward (FM_PrecacheEvent, "Forward_PrecacheEvent", 1)
  56. }
  57.  
  58. public Forward_PrecacheEvent (const Type, const szName[])
  59. {
  60. for (new i; i < sizeof g_szGunsEvents; ++i)
  61. {
  62. if (equal (g_szGunsEvents[i], szName))
  63. {
  64. g_GunsEventidsBitsum |= (1 << get_orig_retval())
  65. return FMRES_HANDLED;
  66. }
  67. }
  68. return FMRES_IGNORED;
  69. }
  70.  
  71. public plugin_init()
  72. {
  73. register_plugin("Weapon Lights", "0.7.1", "HiSS & Arkshine");
  74.  
  75. register_event ("HLTV", "Event_NewRound", "a", "1=0", "2=0");
  76.  
  77. g_pEnable = register_cvar ("weapon_lights", "1")
  78. g_pRadius = register_cvar ("weapon_lights_radius", "18");
  79. g_pColor = register_cvar ("weapon_lights_color" , "255 150 15");
  80. g_pSilenced = register_cvar ("weapon_lights_silenced", "2");
  81.  
  82. unregister_forward (FM_PrecacheEvent, g_FwdId, 1);
  83. register_forward (FM_PlaybackEvent, "Forward_PlaybackEvent");
  84.  
  85. g_MaxClients = global_get (glb_maxClients);
  86. CacheCvarsValue ();
  87. }
  88.  
  89. public Forward_PlaybackEvent (const Flags, const Invoker, const EventId)
  90. {
  91. if (g_Enable && (g_GunsEventidsBitsum & (1 << EventId)) && 1 <= Invoker <= g_MaxClients)
  92. {
  93. static ActiveWeaponIndex; ActiveWeaponIndex = get_pdata_cbase (Invoker, m_pActiveItem);
  94.  
  95. if (!(!g_Silenced && GetWeaponSilen (ActiveWeaponIndex)))
  96. {
  97. static Coord_e:vecOrigin [Coord_e];
  98. pev (Invoker,pev_origin, vecOrigin);
  99.  
  100. message_begin_f (MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
  101. write_byte (TE_DLIGHT);
  102. write_coord_f (vecOrigin [x ]);
  103. write_coord_f (vecOrigin [y ]);
  104. write_coord_f (vecOrigin [z ]);
  105. write_byte (g_Silenced == 2 && GetWeaponSilen (ActiveWeaponIndex) ? floatround (g_Radius * 0.5) : g_Radius);
  106. write_byte (g_Red);
  107. write_byte (g_Green);
  108. write_byte (g_Blue);
  109. write_byte (DLIGHT_LIFE);
  110. write_byte (DLIGHT_DECAY);
  111. message_end();
  112.  
  113. return FMRES_HANDLED;
  114. }
  115. }
  116. return FMRES_IGNORED;
  117. }
  118.  
  119. public Event_NewRound ()
  120. {
  121. CacheCvarsValue ();
  122. }
  123.  
  124. CacheCvarsValue ()
  125. {
  126. new szDLightColor [16];
  127. get_pcvar_string (g_pColor, szDLightColor, charsmax (szDLightColor));
  128.  
  129. new szRed [4], szGreen [4], szBlue [4];
  130. parse (szDLightColor, szRed, charsmax (szRed), szGreen, charsmax (szGreen), szBlue, charsmax (szBlue));
  131.  
  132. g_Red = clamp (str_to_num (szRed) , 1, 255);
  133. g_Green = clamp (str_to_num (szGreen), 1, 255);
  134. g_Blue = clamp (str_to_num (szBlue) , 1, 255);
  135.  
  136. g_Enable = get_pcvar_num (g_pEnable);
  137. g_Radius = get_pcvar_num (g_pRadius);
  138. g_Silenced = get_pcvar_num (g_pSilenced);
  139. }
  140.  
  141. GetWeaponSilen (const WeaponIndex)
  142. {
  143. switch (get_pdata_int (WeaponIndex, m_iWeaponType, EXTRAOFFSET_WEAPONS))
  144. {
  145. case CSW_M4A1 : return (get_pdata_int (WeaponIndex, m_iSilencerFireMode, EXTRAOFFSET_WEAPONS) & M4A1_SILENCED);
  146. case CSW_USP : return (get_pdata_int (WeaponIndex, m_iSilencerFireMode, EXTRAOFFSET_WEAPONS) & USP_SILENCED);
  147. case CSW_TMP : return 1;
  148. }
  149. return 0;
  150. }
  151.