Advertisement
Guest User

Luby

a guest
May 12th, 2009
1,509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.32 KB | None | 0 0
  1. #include <a_samp>
  2. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  3. new Float:ShipSpeed=0.0;
  4. new ShipDriver = -1;
  5. new ShipIcon;
  6. new Ship;
  7. new PlayerDocked[200];
  8. new Float:PlayerDockData[200][3];
  9.  
  10. Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  11. {
  12.     new Float:a;
  13.     GetPlayerPos(playerid, x, y, a);
  14.     if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  15.     else GetPlayerFacingAngle(playerid, a);
  16.     x += (distance * floatsin(-a, degrees));
  17.     y += (distance * floatcos(-a, degrees));
  18.     return a;
  19. }
  20.  
  21. IsPlayerInCube(playerid, Float:xmin, Float:ymin, Float:zmin, Float:xmax, Float:ymax, Float:zmax)
  22. {
  23.     new Float:x, Float:y, Float:z;
  24.     GetPlayerPos(playerid, x, y, z);
  25.     if(x > xmin && y > ymin && z > zmin && x < xmax && y < ymax && z < zmax)return 1;
  26.     return 0;
  27. }
  28.  
  29. Float:GetXYZInFrontOfPos(&Float:x, &Float:y, &Float:Z, Float:rZ, Float:distance) // By Luby - Based on Mike's GetXYInFrontOfPlayer
  30. {
  31.     x += (distance * floatsin(rZ, degrees));
  32.     y += (distance * floatcos(rZ, degrees));
  33.     Z = Z;
  34.     return rZ;
  35. }
  36.  
  37.  
  38. public OnFilterScriptInit(){
  39.     SetTimer("ShipIconUpdate", 500, true);
  40.     Ship = CreateObject(8493, -1372.4438,-48.2332,90.5917, 0.0, 0.0, 138.3808);
  41. }
  42.  
  43. public OnFilterScriptExit(){
  44.     DestroyObject(Ship);
  45. }
  46.  
  47. forward ShipIconUpdate();
  48. public ShipIconUpdate()
  49. {
  50.     new Float:X, Float:Y, Float:Z;
  51.     GetObjectPos(Ship, X, Y, Z);
  52.     for(new playerid=0;playerid<200;playerid++){
  53.         RemovePlayerMapIcon(playerid, ShipIcon);
  54.         ShipIcon = SetPlayerMapIcon(playerid, 1,X,Y,Z, 5, 0xAAFFAAFF);
  55.         if(PlayerDocked[playerid]){
  56.             SetPlayerHealth(playerid, 100.0);
  57.             SetPlayerPos(playerid, X+PlayerDockData[playerid][0], Y+PlayerDockData[playerid][1], Z+PlayerDockData[playerid][2]);
  58.         }
  59.     }
  60.     return 1;
  61. }
  62.  
  63. public OnPlayerUpdate(playerid){
  64.     if(ShipDriver == playerid){
  65.         new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
  66.         GetObjectPos(Ship, X, Y, Z);
  67.         SetPlayerHealth(ShipDriver, 100.0);
  68.         GetObjectRot(Ship, rX, rY, rZ);
  69.         SetPlayerPos(ShipDriver,X,Y,Z-10);
  70.         SetPlayerFacingAngle(ShipDriver,rZ);
  71.         GetXYInFrontOfPlayer(ShipDriver, X, Y, -75.0);
  72.         GetObjectPos(Ship, X, Y, Z);
  73.         SetPlayerCameraLookAt(ShipDriver, X, Y, Z);
  74.         GetXYInFrontOfPlayer(ShipDriver, X, Y, -75.0);
  75.         new keys, updown, leftright;
  76.         GetPlayerKeys(playerid, keys, updown, leftright);
  77.         if(keys & 8 || keys & 32)SetPlayerCameraPos(ShipDriver, X, Y, Z-5);else SetPlayerCameraPos(ShipDriver,X, Y, Z+20);
  78.         if(leftright == KEY_LEFT){
  79.             GetObjectRot(Ship, rX, rY, rZ);
  80.             SetObjectRot(Ship, rX, rY, rZ+2.0);
  81.             GetObjectRot(Ship, rX, rY, rZ);
  82.             GetObjectPos(Ship, X, Y, Z);
  83.             SetPlayerFacingAngle(ShipDriver,rZ);
  84.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  85.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  86.         }
  87.         if(leftright == KEY_RIGHT){
  88.             GetObjectRot(Ship, rX, rY, rZ);
  89.             SetObjectRot(Ship, rX, rY, rZ-2.0);
  90.             GetObjectRot(Ship, rX, rY, rZ);
  91.             SetPlayerFacingAngle(ShipDriver,rZ);
  92.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  93.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  94.         }
  95.         if(updown == KEY_UP){
  96.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  97.             ShipSpeed+=0.5;
  98.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  99.         }
  100.         if(updown == KEY_DOWN){
  101.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  102.             ShipSpeed-=0.5;
  103.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  104.         }
  105.         if(keys & 8){
  106.             GetObjectPos(Ship, X, Y, Z);
  107.             SetObjectPos(Ship, X, Y, Z-1);
  108.             GetObjectPos(Ship, X, Y, Z);
  109.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  110.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  111.         }
  112.         if(keys & 32){
  113.             GetObjectPos(Ship, X, Y, Z);
  114.             SetObjectPos(Ship, X, Y, Z+1);
  115.             GetObjectPos(Ship, X, Y, Z);
  116.             GetXYInFrontOfPlayer(ShipDriver, X, Y, 5000.0);
  117.             MoveObject(Ship, X, Y, Z, ShipSpeed);
  118.         }
  119.     }
  120.     return true;
  121. }
  122.  
  123. public OnPlayerCommandText(playerid, cmdtext[])
  124. {
  125.     dcmd(dock,     4,cmdtext);
  126.     dcmd(undock,   6,cmdtext);
  127.     dcmd(ship,     4,cmdtext);
  128.     dcmd(shipster, 8,cmdtext);
  129.     return 0;
  130. }
  131.  
  132. dcmd_shipster(playerid, params[]){
  133.     #pragma unused params
  134.     new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
  135.     GetObjectRot(Ship, rX, rY, rZ);
  136.     GetObjectPos(Ship, X, Y, Z);
  137.     if(playerid == ShipDriver){
  138.         TogglePlayerControllable(playerid, false);
  139.         SendClientMessage(playerid, 0xAAFFFAAFF, "You quit ship.");
  140.         TogglePlayerControllable(playerid, true);
  141.         ShipDriver = -1;
  142.         SetCameraBehindPlayer(playerid);
  143.         StopObject(Ship);
  144.         ShipSpeed=0.0;
  145.     } else {
  146.         if(IsPlayerInCube(playerid, X-25.0, Y-25.0, Z-15.0, X+25.0, Y+25.0, Z+15.0)){
  147.             if(ShipDriver==-1){
  148.                 ShipDriver = playerid;
  149.                 TogglePlayerControllable(playerid, false);
  150.                 SendClientMessage(playerid, 0xAAFFFAAFF, "Hello there!");
  151.                 SendClientMessage(playerid, 0xAAFFFAAFF, "Use left and right arrows to turn the ship and up & down to change speed and jump & sprint to go up and down.");
  152.                 GetXYZInFrontOfPos(X, Y, Z, rZ+85, 5000.0);
  153.                 MoveObject(Ship, X, Y, Z, ShipSpeed);
  154.             } else SendClientMessage(playerid, 0xAAFFFAAFF, "Somebody already driving the ship!");
  155.         } else SendClientMessage(playerid, 0xAAFFFAAFF, "You must be on the ship!");
  156.     }
  157.     return true;
  158. }
  159.  
  160. dcmd_ship(playerid, params[]){
  161.     #pragma unused params
  162.     new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
  163.     GetObjectRot(Ship, rX, rY, rZ);
  164.     GetObjectPos(Ship, X, Y, Z);
  165.     GetXYZInFrontOfPos(X, Y, Z, rZ+90, 5.0);
  166.     GameTextForPlayer(playerid,"~w~Hello on ~r~Pirate Ship!~w~.",4000,5);
  167.     if(IsPlayerInAnyVehicle(playerid)) {
  168.         SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z-10);
  169.     } else {
  170.         SetPlayerPos(playerid,X,Y,Z-10);
  171.     }
  172.     return true;
  173. }
  174.  
  175. dcmd_dock(playerid, params[]){
  176.     #pragma unused params
  177.     new Float:oX, Float:oY, Float:oZ;
  178.     new Float:pX, Float:pY, Float:pZ;
  179.     new Float:dX, Float:dY, Float:dZ;
  180.     GetObjectPos(Ship, oX, oY, oZ);
  181.     if(IsPlayerInCube(playerid, oX-25.0, oY-25.0, oZ-15.0, oX+25.0, oY+25.0, oZ+15.0)){
  182.         GetPlayerPos(playerid, pX, pY, pZ);
  183.         dX=floatsub(pX, oX);
  184.         dY=floatsub(pY, oY);
  185.         dZ=floatsub(pZ, oZ);
  186.         PlayerDocked[playerid]=true;
  187.         PlayerDockData[playerid][0]=dX;
  188.         PlayerDockData[playerid][1]=dY;
  189.         PlayerDockData[playerid][2]=dZ;
  190.     }
  191.     return true;
  192. }
  193.  
  194. dcmd_undock(playerid, params[]){
  195.     #pragma unused params
  196.     PlayerDocked[playerid]=false;
  197.     return true;
  198. }
  199.  
  200.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement