Psymetrix

Controllable Trollys

Feb 18th, 2012
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.37 KB | None | 0 0
  1. /*
  2. * Controllable Trollys By Psymetrix
  3. *
  4. * CreateTrolly(Float: X, Float: Y, Float: Z, Float: A);
  5. * DestroyTrolly(trollyid);
  6. */
  7.  
  8. #include <a_samp>
  9. #include <zcmd>
  10.  
  11. #define MAX_TROLLYS                                                            5 // Maximum trolly that can be added.
  12.  
  13. enum TROLLY_DATA {
  14.     bool:   Created,
  15.             VehicleID,
  16.             ObjectID,
  17. }
  18.  
  19. new         TrollyData[MAX_TROLLYS][TROLLY_DATA];
  20. new         TrollyCount;
  21.  
  22. forward     bool:DoesVehicleHaveDriver(vehicleid);
  23.  
  24. /*----------------------------------------------------------------------------*/
  25.  
  26. public OnFilterScriptInit() {
  27.     // Example
  28.     //* Create a drivable trolly at the centre of the San Andreas map
  29.     CreateTrolly(0.0, 0.0, 5.0, 0.0);
  30.     return 1;
  31. }
  32.  
  33. public OnFilterScriptExit() {
  34.     for (new i; i < MAX_TROLLYS; i++) {
  35.         DestroyTrolly(i);
  36.     }
  37.     return 1;
  38. }
  39.  
  40. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  41.     if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
  42.         if (newkeys & KEY_SECONDARY_ATTACK) {
  43.             new
  44.                 Float: X,
  45.                 Float: Y,
  46.                 Float: Z
  47.             ;
  48.            
  49.             for (new i; i < MAX_TROLLYS; i++) {
  50.                 if (TrollyData[i][Created]) {
  51.                     GetVehiclePos(TrollyData[i][VehicleID], X, Y, Z);
  52.                     if(IsPlayerInRangeOfPoint(playerid, 2.0, X, Y, Z)) {
  53.                         if (!DoesVehicleHaveDriver(TrollyData[i][VehicleID])) {
  54.                             PutPlayerInVehicle(playerid, TrollyData[i][VehicleID], 0);
  55.                             break;
  56.                         }
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     return 1;
  63. }
  64.  
  65. public OnPlayerExitVehicle(playerid, vehicleid) {
  66.     for (new i; i < MAX_TROLLYS; i++) {
  67.         if (TrollyData[i][Created]) {
  68.             if (vehicleid == TrollyData[i][VehicleID]) {
  69.                 new
  70.                     Float: X,
  71.                     Float: Y,
  72.                     Float: Z
  73.                 ;
  74.                
  75.                 GetVehiclePos(TrollyData[i][VehicleID], X, Y, Z);
  76.                 SetPlayerPos(playerid, X+1, Y+1, Z);
  77.             }
  78.         }
  79.     }
  80.     return 1;
  81. }
  82.  
  83. /*----------------------------------------------------------------------------*/
  84.  
  85. stock bool:DoesVehicleHaveDriver(vehicleid) {
  86.     for (new i; i < MAX_PLAYERS; i++) {
  87.         if (IsPlayerConnected(i)) {
  88.             if (IsPlayerInVehicle(i, vehicleid)) {
  89.                 if (GetPlayerVehicleSeat(i) == 0) {
  90.                     return true;
  91.                 }
  92.             }
  93.         }
  94.     }
  95.     return false;
  96. }
  97.  
  98. stock DestroyTrolly(trollyid) {
  99.     if (trollyid < 0 || trollyid >= MAX_TROLLYS)
  100.         return 0;
  101.    
  102.     if (!TrollyData[trollyid][Created])
  103.         return 0;
  104.    
  105.     DestroyObject(TrollyData[trollyid][ObjectID]);
  106.     DestroyVehicle(TrollyData[trollyid][VehicleID]);
  107.    
  108.     TrollyData[trollyid][Created] = false;
  109.     return 1;
  110. }
  111.  
  112. stock CreateTrolly(Float: X, Float: Y, Float: Z, Float: A) {
  113.     if (TrollyCount == MAX_TROLLYS)
  114.         return -1;
  115.    
  116.     new kart = CreateVehicle(571, X, Y, Z, A, 0, 0, -1);
  117.     new object = CreateObject(1349, 0.00, 0.00, 0.27, 0.00, 0.00, 90.00, 300.0);
  118.     AttachObjectToVehicle(object, kart, 0.00, 0.00, 0.27, 0.00, 0.00, 90.00);
  119.     LinkVehicleToInterior(kart, -1);
  120.     TrollyData[TrollyCount][Created] = true;
  121.     TrollyData[TrollyCount][ObjectID] = object;
  122.     TrollyData[TrollyCount][VehicleID] = kart;
  123.     TrollyCount++;
  124.     return kart;
  125. }
  126.  
  127. /*----------------------------------------------------------------------------*/
  128.  
  129. COMMAND:kart(playerid, params[]) {
  130. // Example command for spawning and placing a player in a controllable trolly
  131.     new
  132.         Float: X,
  133.         Float: Y,
  134.         Float: Z,
  135.         Float: A
  136.     ;
  137.    
  138.     GetPlayerPos(playerid, X, Y, Z);
  139.     GetPlayerFacingAngle(playerid, A);
  140.    
  141.     new trolly = CreateTrolly(X, Y, Z, A);
  142.     PutPlayerInVehicle(playerid, trolly, 0);
  143.     return 1;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment