Advertisement
Guest User

Blitzer Include (c) by Kaliber

a guest
May 14th, 2013
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1. /* SA-MP Include Blitzersystem
  2.  *
  3.  * (c) by Kaliber, 2013
  4.  *
  5.  */
  6. #include <a_samp>
  7. #if defined _Blitz
  8.     #endinput
  9. #endif
  10. #define _Blitz
  11. #if !defined _ALS_
  12.     forward public _ALS_();
  13.     _ALS_()<_ALS_:unhooked>{}
  14.     _ALS_()<_ALS_:hooked>{}
  15.     _ALS_()<>{}
  16. #endif
  17. #if !defined MAX_BLITZER
  18.     #define MAX_BLITZER 10
  19. #endif
  20. #if !defined BLITZ_INTERVAL
  21.     #define BLITZ_INTERVAL 2
  22. #endif
  23. #define INVALID_ID -1
  24. static Float:BlitzInfo[MAX_BLITZER][6],idx;
  25. @blitz(playerid);
  26. @timeout(playerid);
  27. forward OnPlayerBlitz(playerid,speed,MAX_SPEED);
  28. stock CreateBlitzer(Float:X,Float:Y,Float:Z,Float:A,MAX_SPEED,Float:radius) {
  29.     BlitzInfo[idx][5]=radius,BlitzInfo[idx][3]=CreateObject(1278,X+1,Y+1,Z,0,0,A,300.0),BlitzInfo[idx][0]=X+1,BlitzInfo[idx][1]=Y+1,BlitzInfo[idx][2]=Z,BlitzInfo[idx][4]=MAX_SPEED,idx++;
  30.     return idx-1;
  31. }
  32. stock Get_Slot_ID(id) {
  33.     for(new i; i<idx; i++) if(BlitzInfo[idx][3] == id) return i;
  34.     return INVALID_ID;
  35. }
  36. stock RemoveBlitzer(id) {
  37.     new x=Get_Slot_ID(id);
  38.     if(x==INVALID_ID) return INVALID_ID;
  39.     DestroyObject(BlitzInfo[x][3]);
  40.     for(new i; i<4; i++) BlitzInfo[x][i] = 0;
  41.     return 1;
  42. }
  43. stock GetBlitzerId(playerid) {
  44.     for(new i; i<idx; i++) if(IsPlayerInRangeOfPoint(playerid,BlitzInfo[i][5],BlitzInfo[i][0],BlitzInfo[i][1],BlitzInfo[i][2])) return i;
  45.     return INVALID_ID;
  46. }
  47. stock GetPlayerSpeed(playerid) {
  48.     new Float:_Pos[3];
  49.     GetVehicleVelocity(GetPlayerVehicleID(playerid),_Pos[0],_Pos[1],_Pos[2]);
  50.     return floatround(floatsqroot(_Pos[0]*_Pos[0] + _Pos[1]*_Pos[1] + _Pos[2]*_Pos[2]))*170;
  51. }
  52. stock EditBlitzer(id, MAX_SPEED, Float:radius) return BlitzInfo[id][4] = MAX_SPEED, BlitzInfo[id][5] = radius;
  53. public OnPlayerStateChange(playerid,newstate,oldstate) {
  54.     state _ALS_:hooked;
  55.     switch(newstate) {
  56.         case PLAYER_STATE_DRIVER: SetTimerEx("@blitz",BLITZ_INTERVAL*1000,0,"i",playerid);
  57.     }
  58.     return 1;
  59. }
  60. forward _OnPlayerStateChange(playerid,newstate,oldstate);
  61. #if defined _ALS_OnPlayerStateChange
  62.     #undef OnPlayerStateChange
  63. #else
  64.     #define _ALS_OnPlayerStateChange
  65. #endif
  66. public _OnPlayerStateChange(playerid,newstate,oldstate)<_ALS_:unhooked> return 1;
  67. public _OnPlayerStateChange(playerid,newstate,oldstate) <> return 1;
  68. #define OnPlayerStateChange(%0,%1,%2) _OnPlayerStateChange(%0,%1,%2)<_ALS_:hooked>
  69. @timeout(playerid) {
  70.     if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER||!IsPlayerConnected(playerid)) return INVALID_ID;
  71.     return @blitz(playerid);
  72. }
  73. @blitz(playerid) {
  74.     if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER||!IsPlayerConnected(playerid)) return INVALID_ID;
  75.     new x = GetBlitzerId(playerid);
  76.     if(x == INVALID_ID) return SetTimerEx("@blitz",BLITZ_INTERVAL*1000,0,"i",playerid);
  77.     if(GetPlayerSpeed(playerid) > BlitzInfo[x][4]) return CallRemoteFunction("OnPlayerBlitz","idd",playerid,GetPlayerSpeed(playerid),BlitzInfo[x][4]),SetTimerEx("@timeout",5000,0,"i",playerid);
  78.     return SetTimerEx("@blitz",BLITZ_INTERVAL*1000,0,"i",playerid);
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement