1
0

time - Copy.inc 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /*
  2. *
  3. * "fuckCleo.inc" - #1 Anti-cleo mod include
  4. * Created/Debugged most by Lorenc_
  5. *
  6. * Thanks to:
  7. * Cessil, Infamous and [FeK]Drakins, JernejL
  8. *
  9. */
  10. /* ** Stop Duplicating Code! ** */
  11. #if defined _fcleo_included
  12. #endinput
  13. #endif
  14. #define _fcleo_included
  15. /* ** Includes ** */
  16. #include < a_samp >
  17. /* ** Configuration ** */
  18. #define FC_FILE_VERSION "0.3.5" // Added the FC_
  19. #define CLEO_FAKEKILL ( 1 )
  20. #define CLEO_CARWARP ( 2 )
  21. #define CLEO_PLAYERBUGGER ( 3 ) // This number will never be called from OnPlayerCleoDetected
  22. #define CLEO_CARSWING ( 4 )
  23. #define CLEO_CAR_PARTICLE_SPAM ( 5 )
  24. /* ** Variables ** */
  25. enum E_CLEO_DATA
  26. {
  27. E_FK_LASTDEATH, E_FK_DEATHSPAM,
  28. E_CW_TIME, E_CW_VEHID,
  29. Float: E_PB_X, Float: E_PB_Y, Float: E_PB_Z,
  30. E_CPS_SPAMCOUNT, E_CPS_TICK
  31. };
  32. static stock
  33. g_cleoData [ MAX_PLAYERS ] [ E_CLEO_DATA ],
  34. bool: FC_OPU,
  35. bool: FC_OPD,
  36. bool: FC_OPSC,
  37. bool: FC_OVDSU,
  38. bool: FC_OPDC
  39. ;
  40. /* ** Forwards ** */
  41. forward OnPlayerCleoDetected ( playerid, cleoid );
  42. forward fc_RepairVehicle ( vehicleid );
  43. public fc_RepairVehicle( vehicleid )
  44. {
  45. #if defined _FOREACH_LOCAL_VERSION // I guess this is always defined in foreach.inc
  46. foreach(Player, playerid)
  47. {
  48. if( GetPlayerVehicleID( playerid ) == vehicleid ) {
  49. g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] = 0;
  50. g_cleoData[ playerid ] [ E_CPS_TICK ] = 0;
  51. }
  52. }
  53. #else
  54. for( new playerid; playerid < MAX_PLAYERS; playerid++ )
  55. {
  56. if( IsPlayerConnected( playerid ) )
  57. {
  58. if( GetPlayerVehicleID( playerid ) == vehicleid ) {
  59. g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] = 0;
  60. g_cleoData[ playerid ] [ E_CPS_TICK ] = 0;
  61. }
  62. }
  63. }
  64. #endif
  65. return RepairVehicle( vehicleid );
  66. }
  67. #define RepairVehicle fc_RepairVehicle
  68. public OnVehicleDamageStatusUpdate( vehicleid, playerid )
  69. {
  70. static fc_tires, fc_lights;
  71. GetVehicleDamageStatus( vehicleid, fc_lights, fc_tires, fc_lights, fc_tires );
  72. if( GetPlayerState( playerid ) == PLAYER_STATE_DRIVER )
  73. {
  74. if( fc_lights || fc_tires )
  75. return 1;
  76. new time = GetTickCount( );
  77. switch( time - g_cleoData[ playerid ] [ E_CPS_TICK ] )
  78. {
  79. case 0 .. 500:
  80. {
  81. g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] ++;
  82. if( g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] >= 10 )
  83. {
  84. CallLocalFunction( "OnPlayerCleoDetected", "dd", playerid, CLEO_CAR_PARTICLE_SPAM );
  85. return 1;
  86. }
  87. }
  88. default: g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] = 0;
  89. }
  90. g_cleoData[ playerid ] [ E_CPS_TICK ] = time;
  91. }
  92. return ( FC_OVDSU ) ? CallLocalFunction( "FC_OnVehicleDamageStatusUpdate", "dd", vehicleid, playerid ) : 1;
  93. }
  94. #if defined ALS_OnVehicleDamageStatusUpdate
  95. #undef OnVehicleDamageStatusUpdate
  96. #else
  97. #define ALS_OnVehicleDamageStatusUpdate
  98. #endif
  99. #define OnVehicleDamageStatusUpdate FC_OnVehicleDamageStatusUpdate
  100. forward FC_OnVehicleDamageStatusUpdate( vehicleid, playerid );
  101. public OnPlayerStateChange( playerid, newstate, oldstate )
  102. {
  103. if( newstate == PLAYER_STATE_DRIVER )
  104. {
  105. if( GetPlayerVehicleID( playerid ) != g_cleoData[ playerid ] [ E_CW_VEHID ] )
  106. {
  107. if( g_cleoData[ playerid ] [ E_CW_TIME ] > gettime( ) )
  108. {
  109. CallLocalFunction( "OnPlayerCleoDetected", "dd", playerid, CLEO_CARWARP );
  110. return 1;
  111. }
  112. g_cleoData[ playerid ] [ E_CW_TIME ] = gettime( ) + 1;
  113. g_cleoData[ playerid ] [ E_CW_VEHID ] = GetPlayerVehicleID( playerid );
  114. }
  115. }
  116. return ( FC_OPSC ) ? CallLocalFunction( "FC_OnPlayerStateChange", "ddd", playerid, newstate, oldstate ) : 1;
  117. }
  118. #if defined _ALS_OnPlayerStateChange
  119. #undef OnPlayerStateChange
  120. #else
  121. #define _ALS_OnPlayerStateChange
  122. #endif
  123. #define OnPlayerStateChange FC_OnPlayerStateChange
  124. forward FC_OnPlayerStateChange( playerid, newstate, oldstate );
  125. public OnPlayerDeath( playerid, killerid, reason )
  126. {
  127. new time = gettime( );
  128. switch( time - g_cleoData[ playerid ] [ E_FK_LASTDEATH ] )
  129. {
  130. case 0 .. 3:
  131. {
  132. g_cleoData[ playerid ] [ E_FK_DEATHSPAM ] ++;
  133. if( g_cleoData[ playerid ] [ E_FK_DEATHSPAM ] >= 3 )
  134. {
  135. CallLocalFunction( "OnPlayerCleoDetected", "dd", playerid, CLEO_FAKEKILL );
  136. return 1;
  137. }
  138. }
  139. default: g_cleoData[ playerid ] [ E_FK_DEATHSPAM ] = 0;
  140. }
  141. g_cleoData[ playerid ] [ E_FK_LASTDEATH ] = time;
  142. return ( FC_OPD ) ? CallLocalFunction( "FC_OnPlayerDeath", "ddd", playerid, killerid, reason ) : 1;
  143. }
  144. #if defined _ALS_OnPlayerDeath
  145. #undef OnPlayerDeath
  146. #else
  147. #define _ALS_OnPlayerDeath
  148. #endif
  149. #define OnPlayerDeath FC_OnPlayerDeath
  150. forward FC_OnPlayerDeath( playerid, killerid, reason );
  151. public OnPlayerUpdate( playerid )
  152. {
  153. static
  154. Float: X, Float: Y, Float: Z,
  155. Float: vX, Float: vY, Float: vZ
  156. ;
  157. GetPlayerPos( playerid, X, Y, Z );
  158. if( X >= 99999.0 || Y >= 99999.0 || Z >= 99999.0 || X <= -99999.0 || Y <= -99999.0 || Z <= -99999.0 ) {
  159. SendClientMessage( playerid, 0xa9c4e4ff, "Warning: Excessive X, Y, Z has been breached thus last location set." );
  160. SetPlayerPos( playerid, g_cleoData[ playerid ] [ E_PB_X ], g_cleoData[ playerid ] [ E_PB_Y ], g_cleoData[ playerid ] [ E_PB_Z ] );
  161. }
  162. else
  163. {
  164. g_cleoData[ playerid ] [ E_PB_X ] = X;
  165. g_cleoData[ playerid ] [ E_PB_Y ] = Y;
  166. g_cleoData[ playerid ] [ E_PB_Z ] = Z;
  167. }
  168. if( IsPlayerInAnyVehicle( playerid ) && GetPlayerState( playerid ) == PLAYER_STATE_DRIVER )
  169. {
  170. GetPlayerPos( playerid, X, Y, Z );
  171. GetVehicleVelocity( GetPlayerVehicleID( playerid ), vX, vY, vZ );
  172. if( ( vX > 3.0 || vY > 3.0 || vZ > 3.0 || vX < -3.0 || vY < -3.0 || vZ < -3.0 ) && ( vX != X && vY != Y && vZ != Z ) )
  173. {
  174. CallLocalFunction( "OnPlayerCleoDetected", "dd", playerid, CLEO_CARSWING );
  175. }
  176. }
  177. return ( FC_OPU ) ? CallLocalFunction( "FC_OnPlayerUpdate", "d", playerid ) : 1;
  178. }
  179. #if defined _ALS_OnPlayerUpdate
  180. #undef OnPlayerUpdate
  181. #else
  182. #define _ALS_OnPlayerUpdate
  183. #endif
  184. #define OnPlayerUpdate FC_OnPlayerUpdate
  185. forward FC_OnPlayerUpdate( playerid );
  186. public OnPlayerDisconnect(playerid, reason)
  187. {
  188. // Pointless reseting, but just incase!
  189. g_cleoData[ playerid ] [ E_FK_LASTDEATH ] = 0;
  190. g_cleoData[ playerid ] [ E_FK_DEATHSPAM ] = 0;
  191. g_cleoData[ playerid ] [ E_CW_TIME ] = 0;
  192. g_cleoData[ playerid ] [ E_CW_VEHID ] = INVALID_VEHICLE_ID;
  193. g_cleoData[ playerid ] [ E_PB_X ] = -1;
  194. g_cleoData[ playerid ] [ E_PB_Y ] = -1;
  195. g_cleoData[ playerid ] [ E_PB_Z ] = -1;
  196. g_cleoData[ playerid ] [ E_CPS_SPAMCOUNT ] = 0;
  197. g_cleoData[ playerid ] [ E_CPS_TICK ] = 0;
  198. return ( FC_OPDC ) ? CallLocalFunction( "FC_OnPlayerDisconnect", "dd", playerid, reason ) : 1;
  199. }
  200. #if defined _ALS_OnPlayerDisconnect
  201. #undef OnPlayerDisconnect
  202. #else
  203. #define _ALS_OnPlayerDisconnect
  204. #endif
  205. #define OnPlayerDisconnect FC_OnPlayerDisconnect
  206. forward FC_OnPlayerDisconnect( playerid, reason );
  207. #if !defined FILTERSCRIPT
  208. public OnGameModeInit()
  209. {
  210. FC_OPU = ( funcidx( "FC_OnPlayerUpdate" ) != -1 );
  211. FC_OPD = ( funcidx( "FC_OnPlayerDeath" ) != -1 );
  212. FC_OPSC = ( funcidx( "FC_OnPlayerStateChange" ) != -1 );
  213. FC_OPDC = ( funcidx( "FC_OnPlayerDisconnect" ) != -1 );
  214. FC_OVDSU = ( funcidx( "FC_OnVehicleDamageStatusUpdate" ) != -1 );
  215. return ( funcidx( "FC_OnGameModeInit" ) != -1 ) ? CallLocalFunction( "FC_OnGameModeInit", "" ) : 1;
  216. }
  217. #if defined _ALS_OnGameModeInit
  218. #undef OnGameModeInit
  219. #else
  220. #define _ALS_OnGameModeInit
  221. #endif
  222. #define OnGameModeInit FC_OnGameModeInit
  223. forward FC_OnGameModeInit();
  224. #else
  225. public OnFilterScriptInit()
  226. {
  227. FC_OPU = ( funcidx( "FC_OnPlayerUpdate" ) != -1 );
  228. FC_OPD = ( funcidx( "FC_OnPlayerDeath" ) != -1 );
  229. FC_OPSC = ( funcidx( "FC_OnPlayerStateChange" ) != -1 );
  230. FC_OPDC = ( funcidx( "FC_OnPlayerDisconnect" ) != -1 );
  231. FC_OVDSU = ( funcidx( "FC_OnVehicleDamageStatusUpdate" ) != -1 );
  232. return ( funcidx( "FC_OnFilterScriptInit" ) != -1 ) ? CallLocalFunction( "FC_OnFilterScriptInit", "" ) : 1;
  233. }
  234. #if defined _ALS_OnFilterScriptInit
  235. #undef OnFilterScriptInit
  236. #else
  237. #define _ALS_OnFilterScriptInit
  238. #endif
  239. #define OnFilterScriptInit FC_OnFilterScriptInit
  240. forward FC_OnFilterScriptInit();
  241. #endif