Guest User

Spectate System

a guest
Aug 22nd, 2010
2,520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.90 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define FILTERSCRIPT
  4. #define colorSPECTATE       0xffffffff//Write a color here :)
  5.  
  6. new SpectatedPlayer[MAX_PLAYERS];
  7. new bool:IsPlayerSpectating[MAX_PLAYERS];
  8.  
  9. public OnFilterScriptInit()
  10. {
  11.     print("\n--------------------------------------");
  12.     print(" Spectate System Loaded..");
  13.     print("--------------------------------------\n");
  14.     return 1;
  15. }
  16.  
  17. public OnFilterScriptExit()
  18. {
  19.     return 1;
  20. }
  21.  
  22. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  23. {
  24.     if(newkeys == KEY_SUBMISSION && !IsPlayerSpectating[playerid])//Button 2
  25.     {
  26.         SpectateOn(playerid);
  27.     }
  28.     if(newkeys == KEY_SUBMISSION && IsPlayerSpectating[playerid])//Button 2
  29.     {
  30.         SpectateOff(playerid);
  31.     }
  32.     if(newkeys == KEY_ANALOG_RIGHT && IsPlayerSpectating[playerid])//Num4
  33.     {
  34.         SpectatePrevious(playerid);
  35.     }
  36.     if(newkeys == KEY_ANALOG_LEFT && IsPlayerSpectating[playerid])//Num6
  37.     {
  38.         SpectateNext(playerid);
  39.     }
  40.     return 1;
  41. }
  42.  
  43. public OnPlayerStateChange(playerid, newstate, oldstate)
  44. {
  45.     if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
  46.     {
  47.         for(new i=0; i<MAX_PLAYERS; i++)
  48.         {
  49.             if(IsPlayerConnected(i) && IsPlayerSpectating[i] && SpectatedPlayer[i] == playerid)
  50.             {
  51.                 new str[128];
  52.                 PlayerSpectateVehicle(i, GetPlayerVehicleID(SpectatedPlayer[i]));
  53.                 format(str, 128, "Spectating type changed, %s entered a vehicle.", GetName(playerid));
  54.                 SendClientMessage(i, colorSPECTATE, str);
  55.             }
  56.         }
  57.     }
  58.     if(newstate == PLAYER_STATE_ONFOOT)
  59.     {
  60.         for(new i=0; i<MAX_PLAYERS; i++)
  61.         {
  62.             if(IsPlayerConnected(i) && IsPlayerSpectating[i] && SpectatedPlayer[i] == playerid)
  63.             {
  64.                 new str[128];
  65.                 PlayerSpectatePlayer(i, SpectatedPlayer[i]);
  66.                 format(str, 128, "Spectating type changed, %s left the vehicle.", GetName(playerid));
  67.                 SendClientMessage(i, colorSPECTATE, str);
  68.             }
  69.         }
  70.     }
  71.     return 1;
  72. }
  73.  
  74. forward SpectateOn(playerid);
  75. public SpectateOn(playerid)
  76. {
  77.     TogglePlayerSpectating(playerid, 1);
  78.     for(new i=0; i<MAX_PLAYERS; i++)
  79.     {
  80.         if(!IsPlayerConnected(i)) continue;
  81.         SpectatedPlayer[playerid] = i;
  82.         PlayerSpectatePlayer(playerid, i);
  83.     }
  84.     IsPlayerSpectating[playerid] = true;
  85.     new str[128];
  86.     format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
  87.     SendClientMessage(playerid, colorSPECTATE, str);
  88. }
  89.  
  90. forward SpectateOff(playerid);
  91. public SpectateOff(playerid)
  92. {
  93.     TogglePlayerSpectating(playerid, 0);
  94.     SpectatedPlayer[playerid] = 0;
  95.     IsPlayerSpectating[playerid] = false;
  96.     SendClientMessage(playerid, colorSPECTATE, "You stopped spectating.");
  97. }
  98.  
  99. forward SpectateNext(playerid);
  100. public SpectateNext(playerid)
  101. {
  102.     SpectatedPlayer[playerid]++;
  103.     for(new i=SpectatedPlayer[playerid]; i<MAX_PLAYERS; i++)
  104.     {
  105.         if(!IsPlayerConnected(i)) continue;
  106.         if(IsPlayerInAnyVehicle(i))
  107.         {
  108.             PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
  109.         }
  110.         else
  111.         {
  112.             PlayerSpectatePlayer(playerid, i);
  113.         }
  114.         SpectatedPlayer[playerid] = i;
  115.         break;
  116.     }
  117.     new str[128];
  118.     format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
  119.     SendClientMessage(playerid, colorSPECTATE, str);
  120. }
  121.  
  122. forward SpectatePrevious(playerid);
  123. public SpectatePrevious(playerid)
  124. {
  125.     SpectatedPlayer[playerid]--;
  126.     for(new i=SpectatedPlayer[playerid]; i>-1; i--)
  127.     {
  128.         if(!IsPlayerConnected(i)) continue;
  129.         if(IsPlayerInAnyVehicle(i))
  130.         {
  131.             PlayerSpectateVehicle(playerid, GetPlayerVehicleID(i));
  132.         }
  133.         else
  134.         {
  135.             PlayerSpectatePlayer(playerid, i);
  136.         }
  137.         SpectatedPlayer[playerid] = i;
  138.         break;
  139.     }
  140.     new str[128];
  141.     format(str, 128, "You are now spectating %s (ID:%d).", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
  142.     SendClientMessage(playerid, colorSPECTATE, str);
  143. }
  144.  
  145. stock GetName(i)
  146. {
  147.     new name[24];
  148.     GetPlayerName(i, name, 24);
  149.     return name;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment