Blasium

Untitled

Sep 12th, 2011
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.95 KB | None | 0 0
  1. #include <a_samp>
  2. //#include <streamer>
  3. #include <zcmd>
  4. //Defines
  5. #define MAX_CRANES 20
  6. #define DISTANCE(%1,%2,%3,%4,%5,%6) floatsqroot((%1-%4)*(%1-%4) + (%2-%5)*(%2-%5) + (%3-%6)*(%3-%6))
  7. //Enums
  8. enum CRANE_ENUM
  9. {
  10.     EXIST,
  11.     INUSE,
  12.     Float:CRANE_POS_X,
  13.     Float:CRANE_POS_Y,
  14.     Float:CRANE_POS_Z,
  15.     Float:PICKUP_POS_X,
  16.     Float:PICKUP_POS_Y,
  17.     Float:PICKUP_POS_Z,
  18.     Float:CRANE_ANGLE,
  19.     PICKUP,
  20.     CRANE_TOP
  21. }
  22. //Arrays
  23. new
  24.     cranes[MAX_CRANES][CRANE_ENUM],
  25.     usingCrane[MAX_PLAYERS][2];
  26. public OnFilterScriptInit()
  27. {
  28.     print("\n--------------------------------------");
  29.     print(" Usable Cranes by dowster");
  30.     print("--------------------------------------\n");
  31.     return 1;
  32. }
  33.  
  34. public OnFilterScriptExit()
  35. {
  36.     return 1;
  37. }
  38. stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  39. {                                                 // Created by Y_Less
  40.     new Float:a;
  41.     GetPlayerPos(playerid, x, y, a);
  42.     GetPlayerFacingAngle(playerid, a);
  43.     if (GetPlayerVehicleID(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), a); }
  44.     x += (distance * floatsin(-a, degrees));
  45.     y += (distance * floatcos(-a, degrees));
  46. }
  47. stock ShowPos(playerid)
  48. {
  49.     new Float:x, Float:y, Float:z;
  50.     GetPlayerPos(playerid, x, y, z);
  51.     new string[128];
  52.     format(string, 512, "Player X: %f, Player Y: %f, Player Z: %f",x, y, z);
  53.     SendClientMessage(playerid, 0x0000FFFF, string);
  54.     return 1;
  55. }
  56.    
  57. stock CreateCrane(row)
  58. {
  59.     CreateObject( 1391, cranes[row][CRANE_POS_X], cranes[row][CRANE_POS_Y], cranes[row][CRANE_POS_Z], 0, 0, 0);
  60.     cranes[row][CRANE_TOP] = CreateObject( 1388, cranes[row][CRANE_POS_X], cranes[row][CRANE_POS_Y], (cranes[row][CRANE_POS_Z]+12.539), 0, 0, 0);
  61.     cranes[row][PICKUP] = CreatePickup( 1317, 23 , cranes[row][PICKUP_POS_X], cranes[row][PICKUP_POS_Y], cranes[row][PICKUP_POS_Z], 0);
  62.     cranes[row][EXIST] = 1;
  63.     //new string[128]; //For Debug Purposes
  64.     //format(string, 512, "Crane X: %f, Crane Y: %f, Crane Z: %f", cranes[row][CRANE_POS_X], cranes[row][CRANE_POS_Y], cranes[row][CRANE_POS_Z]); //For Debug Purposes
  65.     //SendClientMessage(playerid, 0x0000FFFF, string); //For Debug Purposes
  66.     return 1;
  67. }
  68.  
  69. CMD:newcrane(playerid)
  70. {
  71.     new row = MAX_CRANES;
  72.     for(new i = 0; i < MAX_CRANES; i++)
  73.     {
  74.         if(cranes[i][EXIST] == 0)
  75.         {
  76.             row = i;
  77.         }
  78.     }
  79.     if(row == MAX_CRANES) return SendClientMessage(playerid, 0xFF0000FF, "No crane slots left");
  80.     else
  81.     {
  82.         new Float:x, Float:y, Float:z;
  83.         GetPlayerPos(playerid, cranes[row][PICKUP_POS_X], cranes[row][PICKUP_POS_Y], z);
  84.         GetXYInFrontOfPlayer(playerid, x, y, 6);
  85.         cranes[row][CRANE_POS_Z] = (z + 30);
  86.         cranes[row][PICKUP_POS_Z] =  (z - 1);
  87.         cranes[row][CRANE_POS_Y] = y;
  88.         cranes[row][CRANE_POS_X] = x;
  89.         CreateCrane(row);
  90.         //ShowPos(playerid); //For Debug Purposes
  91.     }
  92.     return 1;
  93. }
  94.  
  95. CMD:crane(playerid)
  96. {
  97.     if(usingCrane[playerid][0] == 1)
  98.     {
  99.         SetPlayerPos(playerid, cranes[usingCrane[playerid][1]][PICKUP_POS_X], cranes[usingCrane[playerid][1]][PICKUP_POS_Y], (cranes[usingCrane[playerid][1]][PICKUP_POS_Z]+2));
  100.         cranes[usingCrane[playerid][1]][INUSE] = 0;
  101.         TogglePlayerControllable(playerid, 1);
  102.         usingCrane[playerid][0] = 0;
  103.         SetCameraBehindPlayer(playerid);
  104.         return 1;
  105.     }
  106.     new crane = MAX_CRANES;
  107.     for (new i = 0; i < MAX_CRANES; i++)
  108.     {
  109.         if (IsPlayerInRangeOfPoint(playerid, 3, cranes[i][PICKUP_POS_X], cranes[i][PICKUP_POS_Y], cranes[i][PICKUP_POS_Z]))
  110.         {
  111.             crane = i;
  112.         }
  113.     }
  114.     if(crane == MAX_CRANES) return SendClientMessage(playerid, 0xFF0000FF, "You are not in a crane pickup!");
  115.     if(cranes[crane][INUSE] == 1) return SendClientMessage(playerid, 0xFF0000FF, "Someone is using this crane");
  116.     else
  117.     {
  118.         SetPlayerPos(playerid, cranes[crane][CRANE_POS_X], cranes[crane][CRANE_POS_Y], (cranes[crane][CRANE_POS_Z] - 30));
  119.         SetPlayerCameraPos(playerid, cranes[crane][CRANE_POS_X], cranes[crane][CRANE_POS_Y], (cranes[crane][CRANE_POS_Z] + 20));
  120.         TogglePlayerControllable(playerid, false);
  121.         SetPlayerFacingAngle(playerid, cranes[crane][CRANE_ANGLE]);
  122.         new Float:x, Float:y;
  123.         GetXYInFrontOfPlayer(playerid, x, y, 41);
  124.         SetPlayerCameraLookAt(playerid, x, y, (cranes[usingCrane[playerid][1]][CRANE_POS_Z]+12.539));
  125.         usingCrane[playerid][0] = 1;
  126.         usingCrane[playerid][1] = crane;
  127.         cranes[crane][INUSE] = 1;
  128.     }
  129.     return 1;
  130. }
  131. public OnPlayerUpdate(playerid)
  132. {
  133.     if(usingCrane[playerid][0] == 1)
  134.     {
  135.         new Keys,ud,lr;
  136.         GetPlayerKeys(playerid,Keys,ud,lr);
  137.         if(lr < 0)
  138.         {
  139.             new Float:fa;
  140.             GetPlayerFacingAngle(playerid, fa);
  141.             fa+=1.0;
  142.             if(fa >= 360.0) fa-=360.0;
  143.             SetPlayerFacingAngle(playerid, fa);
  144.             cranes[usingCrane[playerid][1]][CRANE_ANGLE] = fa;
  145.             SetObjectRot(cranes[usingCrane[playerid][1]][CRANE_TOP], 0, 0, cranes[usingCrane[playerid][1]][CRANE_ANGLE]);
  146.             new Float:x, Float:y;
  147.             GetXYInFrontOfPlayer(playerid, x, y, 41);
  148.             SetPlayerCameraLookAt(playerid, x, y, (cranes[usingCrane[playerid][1]][CRANE_POS_Z]+12.539));
  149.         }
  150.         else if(lr > 0)
  151.         {
  152.             new Float:fa;
  153.             GetPlayerFacingAngle(playerid, fa);
  154.             fa-=1.0;
  155.             if(fa <= 0.0) fa+=360.0;
  156.             SetPlayerFacingAngle(playerid, fa);
  157.             cranes[usingCrane[playerid][1]][CRANE_ANGLE] = fa;
  158.             SetObjectRot(cranes[usingCrane[playerid][1]][CRANE_TOP], 0, 0, cranes[usingCrane[playerid][1]][CRANE_ANGLE]);
  159.             new Float:x, Float:y;
  160.             GetXYInFrontOfPlayer(playerid, x, y, 41);
  161.             SetPlayerCameraLookAt(playerid, x, y, (cranes[usingCrane[playerid][1]][CRANE_POS_Z]+12.539));
  162.         }
  163.     }
  164.     return 1;
  165. }
  166.  
  167. public OnPlayerPickUpPickup(playerid, pickupid)
  168. {
  169.     for(new i = 0; i < MAX_CRANES; i++)
  170.     {
  171.         if(pickupid == cranes[i][PICKUP])
  172.         {
  173.             GameTextForPlayer( playerid, "/crane", 2000, 1);
  174.         }
  175.     }
  176.     return 1;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment