HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. #include amxmodx
  3. #include amxmisc
  4. #include cstrike
  5. #include fakemeta
  6. #include hamsandwich
  7.  
  8. #define VERSION "0.0.5"
  9.  
  10. #define MAX_PLAYERS 32
  11.  
  12. #define SetUserReversed(%1) g_bMigraineux |= 1<<(%1 & 31)
  13. #define ClearUserReversed(%1) g_bMigraineux &= ~( 1<<(%1 & 31) )
  14. #define HasUserMigraine(%1) g_bMigraineux & 1<<(%1 & 31)
  15.  
  16. enum _:GlobalState {None, Terrorists, Cts, All}
  17.  
  18. new g_bMigraineux
  19.  
  20. new Float:g_vecPunchAngles[MAX_PLAYERS+1][3]
  21. new g_iFfPlayerPreThink
  22. new g_iGlobalState
  23.  
  24. public plugin_init()
  25. {
  26. register_plugin("Migraine", VERSION, "ConnorMcLeod")
  27.  
  28. RegisterHam(Ham_Spawn, "player", "Player_Spawn_Post", 1)
  29.  
  30. register_concmd("amx_migraine", "AdminCommand_Migraine", ADMIN_LEVEL_A, "- < name/@CT/@TE/@ALL > < 0/1 >")
  31. }
  32.  
  33. public client_putinserver( id )
  34. {
  35. ClearUserReversed(id)
  36. CheckForward()
  37. }
  38.  
  39. public client_disconnect( id )
  40. {
  41. ClearUserReversed(id)
  42. CheckForward()
  43. }
  44.  
  45. public Player_Spawn_Post( id )
  46. {
  47. if( is_user_alive(id) )
  48. {
  49. switch( g_iGlobalState )
  50. {
  51. case Terrorists, Cts:
  52. {
  53. if( g_iGlobalState == _:cs_get_user_team(id) )
  54. {
  55. SetUserReversed(id)
  56. }
  57. else
  58. {
  59. ClearUserReversed(id)
  60. CheckForward()
  61. }
  62. }
  63. case All:
  64. {
  65. SetUserReversed(id)
  66. CheckForward()
  67. }
  68. }
  69. }
  70. }
  71.  
  72. public AdminCommand_Migraine(id, level, cid)
  73. {
  74. if( cmd_access(id, level, cid, 3) )
  75. {
  76. new szTarget[32], szOnOff[2], iPlayer, iOnOff
  77. read_argv(1, szTarget, charsmax(szTarget))
  78. read_argv(2, szOnOff, charsmax(szOnOff))
  79.  
  80. switch( szOnOff[0] )
  81. {
  82. case '0':
  83. {
  84. iOnOff = 0
  85. }
  86. case '1':
  87. {
  88. iOnOff = 1
  89. }
  90. default:
  91. {
  92. return PLUGIN_HANDLED
  93. }
  94. }
  95.  
  96. if( szTarget[0] == '@' )
  97. {
  98. if( !iOnOff )
  99. {
  100. g_bMigraineux = 0
  101. g_iGlobalState = None
  102. CheckForward()
  103. for(new i; i<sizeof(g_vecPunchAngles); i++)
  104. {
  105. g_vecPunchAngles[iPlayer][0] = 0.0
  106. g_vecPunchAngles[iPlayer][1] = 0.0
  107. }
  108. return PLUGIN_HANDLED
  109. }
  110.  
  111. new iPlayers[MAX_PLAYERS], iNum
  112. get_players(iPlayers, iNum)
  113. for(new i; i<iNum; i++)
  114. {
  115. iPlayer = iPlayers[i]
  116. switch( szTarget[1] )
  117. {
  118. case 'a','A':
  119. {
  120. g_iGlobalState = All
  121. SetUserReversed(iPlayer)
  122. }
  123. case 't', 'T':
  124. {
  125. g_iGlobalState = Terrorists
  126.  
  127. if( cs_get_user_team(iPlayer) == CS_TEAM_T )
  128. {
  129. SetUserReversed(iPlayer)
  130. }
  131. else
  132. {
  133. ClearUserReversed(iPlayer)
  134. }
  135. }
  136. case 'c', 'C':
  137. {
  138. g_iGlobalState = Cts
  139.  
  140. if( cs_get_user_team(iPlayer) == CS_TEAM_CT )
  141. {
  142. SetUserReversed(iPlayer)
  143. }
  144. else
  145. {
  146. ClearUserReversed(iPlayer)
  147. }
  148. }
  149. default:
  150. {
  151. return PLUGIN_HANDLED
  152. }
  153. }
  154. g_vecPunchAngles[iPlayer][0] = 0.0
  155. g_vecPunchAngles[iPlayer][1] = 0.0
  156. }
  157. }
  158. else
  159. {
  160. iPlayer = cmd_target(id, szTarget, CMDTARGET_OBEY_IMMUNITY|CMDTARGET_ALLOW_SELF)
  161. if( iPlayer )
  162. {
  163. if( iOnOff )
  164. {
  165. SetUserReversed(iPlayer)
  166. }
  167. else
  168. {
  169. ClearUserReversed(iPlayer)
  170. }
  171. g_vecPunchAngles[iPlayer][0] = 0.0
  172. g_vecPunchAngles[iPlayer][1] = 0.0
  173. }
  174. }
  175. CheckForward()
  176. }
  177. return PLUGIN_HANDLED
  178. }
  179.  
  180. public PlayerPreThink( id )
  181. {
  182. if(HasUserMigraine(id) && is_user_alive(id))
  183. {
  184. if( g_vecPunchAngles[id][1] < 180.0 )
  185. {
  186. g_vecPunchAngles[id][1] += 2.0
  187. g_vecPunchAngles[id][0] = g_vecPunchAngles[id][1] * 2.0
  188. }
  189. else
  190. {
  191. g_vecPunchAngles[id][0] = 0.0
  192. }
  193.  
  194. static Float:vecPunchAngle[3]
  195. vecPunchAngle[0] = g_vecPunchAngles[id][0]
  196. vecPunchAngle[1] = g_vecPunchAngles[id][0]
  197. vecPunchAngle[2] = g_vecPunchAngles[id][1]
  198.  
  199. set_pev(id, pev_punchangle, vecPunchAngle)
  200. }
  201. }
  202.  
  203. CheckForward()
  204. {
  205. if( !g_bMigraineux != !g_iFfPlayerPreThink )
  206. {
  207. if( g_bMigraineux )
  208. {
  209. g_iFfPlayerPreThink = register_forward(FM_PlayerPreThink, "PlayerPreThink")
  210. }
  211. else
  212. {
  213. unregister_forward(FM_PlayerPreThink, g_iFfPlayerPreThink)
  214. g_iFfPlayerPreThink = 0
  215. }
  216. }
  217. }