Kyance

..

Aug 13th, 2014
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 17.78 KB | None | 0 0
  1.  
  2.  
  3. #include <a_samp>
  4. #include <zcmd>
  5. #include <foreach>
  6. #include <sscanf2>
  7.  
  8. #define MAX_SUBS 20
  9.  
  10. #define PRESSED(%0) \
  11.     (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  12. #define PUB:%0(%1)  forward %0(%1); \
  13.                     public %0(%1)
  14.  
  15. new Submarines;
  16. enum sInfo
  17. {
  18.     ID, Object,
  19.     Float:sX, Float:sY, Float:sZ, Float:sAngle,
  20.     Torpedos, TorpedoLoaded, TorpedoObject,
  21.     LifeBoat, LifeBoatID,
  22.     Health,
  23.     IsActive, InUse
  24. };
  25. new Submarine[MAX_SUBS][sInfo];
  26.  
  27. enum lbInfo
  28. {
  29.     lbID, vehicleID
  30. };
  31. new LifeboatInfo[MAX_SUBS][lbInfo];
  32. new Text3D:Label[MAX_VEHICLES];
  33.  
  34. forward Float:GetXYInFrontOfPlayer(playerid, &Float:q, &Float:w, Float:distance);
  35. forward Float:GetXYInFrontOfObject(objectid, playerid, &Float:x, &Float:y, Float:distance);
  36.  
  37. new
  38.     bool:inSub[ MAX_PLAYERS char ],
  39.     SubID[ MAX_PLAYERS ] = 0,
  40.     CanShoot[ MAX_PLAYERS ] = 0
  41. ;
  42.  
  43. //
  44. Float:GetXYInFrontOfPlayer(playerid, &Float:q, &Float:w, Float:distance)
  45. {
  46.     new Float:a;
  47.     GetPlayerPos(playerid, q, w, a);
  48.     if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  49.     else GetPlayerFacingAngle(playerid, a);
  50.     q += (distance * floatsin(-a, degrees));
  51.     w += (distance * floatcos(-a, degrees));
  52.     return a;
  53. }
  54.  
  55. Float:GetXYInFrontOfObject(objectid, playerid, &Float:x, &Float:y, Float:distance)
  56. {
  57.     new Float:a;
  58.     GetObjectPos(objectid, x, y, a);
  59.     GetPlayerFacingAngle(playerid, a);
  60.  
  61.     x += (distance * floatsin(-a, degrees));
  62.     y += (distance * floatcos(-a, degrees));
  63. }
  64. //
  65.  
  66. public OnFilterScriptInit()
  67. {
  68.     for( new i; i < _: sInfo; ++i ) Submarine[ i ][ sInfo: i ] = 0, Submarines = 0;
  69.     print("\n--> Submarine script v1 loaded\n--->Created by: Kyance");
  70.     return 1;
  71. }
  72.  
  73. public OnFilterScriptExit()
  74. {
  75.     print("\n--> Submarine script v1 un-loaded\n--->Created by: Kyance");
  76.    
  77.     DestroySubmarines();
  78.     foreach(Player, i)
  79.     {
  80.         if(inSub{ i })
  81.         {
  82.             UnfreezePlayer(i);
  83.             inSub{ i } = false, SubID[i] = 0, CanShoot[i] = 0;
  84.         }
  85.     }
  86.     return 1;
  87. }
  88.  
  89. public OnPlayerDisconnect(playerid, reason)
  90. {
  91.     inSub{ playerid } = false;
  92.     SubID[playerid] = 0, CanShoot[playerid] = 0;
  93.     return 1;
  94. }
  95.  
  96. public OnPlayerDeath(playerid, killerid, reason)
  97. {
  98.     inSub{ playerid } = false;
  99.     SubID[playerid] = 0, CanShoot[playerid] = 0;
  100.     return 1;
  101. }
  102.  
  103. public OnPlayerUpdate(playerid)
  104. {
  105.     new Float:pos[4], key[3];
  106.     GetPlayerKeys(playerid, key[0], key[1], key[2]);
  107.     if(inSub{ playerid })
  108.     {
  109.         if(key[1] == KEY_UP)
  110.         {
  111.             GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  112.             GetXYInFrontOfPlayer(playerid, pos[0], pos[1], 1.5);
  113.             SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  114.            
  115.             GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  116.             SetObjectPos(Submarine[SubID[playerid]][Object], pos[0], pos[1], Submarine[SubID[playerid]][sZ]);
  117.         }
  118.         else if(key[1] == KEY_DOWN)
  119.         {
  120.             GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  121.             GetXYInFrontOfPlayer(playerid, pos[0], pos[1], -0.5);
  122.             SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  123.            
  124.             GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  125.             SetObjectPos(Submarine[SubID[playerid]][Object], pos[0], pos[1], Submarine[SubID[playerid]][sZ]);
  126.         }
  127.         if(key[2] == KEY_LEFT)
  128.         {
  129.             GetPlayerFacingAngle(playerid, pos[3]);
  130.             SetPlayerFacingAngle(playerid, pos[3] + 0.5);
  131.             SetCameraBehindPlayer(playerid);
  132.  
  133.             GetObjectRot(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  134.             SetObjectRot(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]+0.5);
  135.         }
  136.         else if(key[2] == KEY_RIGHT)
  137.         {
  138.             GetPlayerFacingAngle(playerid, pos[3]);
  139.             SetPlayerFacingAngle(playerid, pos[3] - 0.5);
  140.             SetCameraBehindPlayer(playerid);
  141.            
  142.             GetObjectRot(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  143.             SetObjectRot(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]-0.5);
  144.         }
  145.         if(key[0] == KEY_JUMP)
  146.         {
  147.             if(pos[2] < 2.0)
  148.             {
  149.                 GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  150.                 SetPlayerPos(playerid, pos[0], pos[1], pos[2] + 0.5);
  151.                
  152.                 GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  153.                 SetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]+0.6);
  154.                
  155.                 if(pos[2] > 2.0)
  156.                 {
  157.                     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  158.                     SetPlayerPos(playerid, pos[0], pos[1], pos[2] - 1.0);
  159.                    
  160.                     GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  161.                     SetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]-1.1);
  162.                 }
  163.             }
  164.             else GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~n~~r~MAX HEIGHT REACHED", 2500, 3);
  165.         }
  166.         else if(key[0] == KEY_SPRINT)
  167.         {
  168.             if(pos[2] > -23.0)
  169.             {
  170.                 GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  171.                 SetPlayerPos(playerid, pos[0], pos[1], pos[2] - 0.5);
  172.                
  173.                 GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  174.                 SetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]-0.4);
  175.                
  176.                 if(pos[2] < -23.0)
  177.                 {
  178.                     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  179.                     SetPlayerPos(playerid, pos[0], pos[1], pos[2] + 1.0);
  180.                    
  181.                     GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  182.                     SetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]+0.9);
  183.                 }
  184.             }
  185.             else GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~n~~r~MAX DEPTH REACHED", 1500, 3);
  186.         }
  187.     }
  188.     return 1;
  189. }
  190.  
  191. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  192. {
  193.     if(inSub{ playerid })
  194.     {
  195.         new Float:X, Float:Y, Float:Z;
  196.         GetPlayerPos(playerid, X, Y, Z);
  197.         new Float:X2, Float:Y2, Float:Z2;
  198.        
  199.         new string[92];
  200.         if(newkeys & KEY_YES)
  201.         {
  202.             if(Submarine[SubID[playerid]][TorpedoLoaded] && CanShoot[playerid])
  203.             {
  204.                 if(Submarine[SubID[playerid]][Torpedos])
  205.                 {
  206.                     Submarine[SubID[playerid]][Torpedos]--;
  207.                     format(string, sizeof(string), "SUBMARINE: Torpedo away! Remaining torpedos: %d/4", Submarine[SubID[playerid]][Torpedos]);
  208.                     CanShoot[playerid] = 0;
  209.                     foreach(Player, i)
  210.                     {
  211.                         if(IsPlayerInRangeOfPoint(i, 20, X, Y, Z))
  212.                         {
  213.                             SendClientMessage(i, -1, string);
  214.                         }
  215.                     }
  216.                     string = "\0";
  217.                     Submarine[SubID[playerid]][TorpedoObject] = CreateObject(1636, Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY]-2, Submarine[SubID[playerid]][sZ], 0, 0, 0);
  218.                     GetXYInFrontOfObject(Submarine[SubID[playerid]][TorpedoObject], playerid, Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], 150.0);
  219.                     new time = MoveObject(Submarine[SubID[playerid]][TorpedoObject], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ], 65.0);
  220.                     SetTimerEx("DetonateTorpedo", time, false, "ii", playerid, Submarine[SubID[playerid]][TorpedoObject]);
  221.                     format(string, sizeof(string), "SUBMARINE: The torpedo will explode in approx. %d seconds!", time/1000);
  222.                     SendClientMessage(playerid, -1, string), string = "\0";
  223.                 }
  224.                 else SendClientMessage(playerid, -1, "SUBMARINE: You've ran out of torpedos!");
  225.             }
  226.             else
  227.             {
  228.                 SendClientMessage(playerid, -1, "SUBMARINE: Loading torpedo..");
  229.                 SetTimerEx("TorpedoLoadedT", 2500+random(3000), false, "ii", playerid, SubID[playerid]);
  230.             }
  231.         }
  232.         else if(PRESSED(KEY_NO))
  233.         {
  234.             if(Submarine[SubID[playerid]][LifeBoat])
  235.             {
  236.                 GetObjectPos(Submarine[SubID[playerid]][Object], Submarine[SubID[playerid]][sX], Submarine[SubID[playerid]][sY], Submarine[SubID[playerid]][sZ]);
  237.                 SendClientMessage(playerid, -1, "SUBMARINE: Deploying lifeboat..");
  238.                 SetTimerEx("LifeboatLoaded", 3000+random(2000), false, "ii", playerid, SubID[playerid]);
  239.             }
  240.             else
  241.             {
  242.                 new count = 0;
  243.                
  244.                 for(new i = 1; i < MAX_VEHICLES; i++)
  245.                 {
  246.                     for(new x = 1; x < MAX_SUBS; x++)
  247.                     {
  248.                         if(GetVehicleModel(i) == 473 && i == LifeboatInfo[x][vehicleID])
  249.                         {
  250.                             GetVehiclePos(i, X2, Y2, Z2);
  251.                             if(IsPlayerInRangeOfPoint(playerid, 10, X2, Y2, Z2))
  252.                             {
  253.                                 count = 1;
  254.                                 DestroyVehicle(i);
  255.                                 break;
  256.                             }
  257.                         }
  258.                     }
  259.                 }
  260.                 if(count)
  261.                 {
  262.                     SetTimerEx("LoadLifeboat", 2000+random(2500), false, "ii", playerid, SubID[playerid]);
  263.                     SendClientMessage(playerid, -1, "SUBMARINE: Since you're near a lifeboat, it's being loaded on your submarine.");
  264.                 }
  265.                 else SendClientMessage(playerid, -1, "SUBMARINE: You aren't near a lifeboat to load it back on your submarine!");
  266.             }
  267.         }
  268.     }
  269.     return 1;
  270. }
  271.  
  272. public OnVehicleDeath(vehicleid, killerid)
  273. {
  274.     for(new x = 1; x < MAX_SUBS; x++)
  275.     {
  276.         if(vehicleid == LifeboatInfo[x][vehicleID])
  277.         {
  278.             DestroyLifeboat(vehicleid);
  279.         }
  280.     }
  281.     return 1;
  282. }
  283.  
  284. /*----------------------------------------------------------------------------*/
  285.  
  286.  
  287. stock FreezePlayer(playerid) return TogglePlayerControllable(playerid, false);
  288. stock UnfreezePlayer(playerid) return TogglePlayerControllable(playerid, true);
  289.  
  290. stock GetClosestPlayer(playerid)
  291. {
  292.     new Float:dist = 150.0;
  293.     new id = -1;
  294.     new Float:x,Float:y,Float:z; new Float:x2, Float:y2, Float:z2;
  295.     new Float:tmpdis;
  296.     GetPlayerPos(playerid,x,y,z);
  297.     foreach(Player, i)
  298.     {
  299.         GetPlayerPos(i,x2,y2,z2);
  300.         tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x)),2)+floatpower(floatabs(floatsub(y2,y)),2)+floatpower(floatabs(floatsub(z2,z)),2));
  301.         if(tmpdis < dist)
  302.         {
  303.             dist = tmpdis;
  304.             id = i;
  305.         }
  306.     }
  307.     return id;
  308. }
  309.  
  310. PUB:DetonateTorpedo(playerid, torpedoid)
  311. {
  312.     new Float:X, Float:Y, Float:Z;
  313.     GetObjectPos(torpedoid, X,Y,Z);
  314.     foreach(Player, i)
  315.     {
  316.         if(i == playerid || IsPlayerAdmin(i)) continue;
  317.         if(IsPlayerInRangeOfPoint(i, 6, X, Y, Z))
  318.         {
  319.             if(IsPlayerInAnyVehicle(i)) SetVehicleHealth(i, 235), RemovePlayerFromVehicle(i);
  320.             SpawnPlayer(i);
  321.             OnPlayerDeath(i, playerid, 51);
  322.         }
  323.     }
  324.     CreateExplosion(X, Y + 1 , Z, 2, 150);
  325.     CreateExplosion(X, Y + 1 , Z, 3, 150);
  326.     CreateExplosion(X, Y + 1 , Z, 4, 150);
  327.     DestroyObject(torpedoid);
  328.     return 1;
  329. }
  330. PUB:TorpedoLoadedT(playerid, submarineid)
  331. {
  332.     if(Submarine[submarineid][Torpedos])
  333.     {
  334.         SendClientMessage(playerid, -1, "SUBMARINE: Torpedo loaded, ready to be used!");
  335.         Submarine[submarineid][TorpedoLoaded] = 1, CanShoot[playerid] = 1;
  336.     }
  337.     else SendClientMessage(playerid, -1, "SUBMARINE: Could not find any torpedos..");
  338.     return 1;
  339. }
  340. PUB:LifeboatLoaded(playerid, submarineid)
  341. {
  342.     CreateLifeboat(playerid, submarineid, Submarine[submarineid][sX]+4, Submarine[submarineid][sY], Submarine[submarineid][sZ], Submarine[submarineid][sAngle]);
  343.     SendClientMessage(playerid, -1, "LIFEBOAT: Lifeboat deployed, exit the submarine and jump on the lifeboat!");
  344.     return 1;
  345. }
  346. PUB:LoadLifeboat(playerid, submarineid)
  347. {
  348.     Submarine[submarineid][LifeBoat] = 1;
  349.     SendClientMessage(playerid, -1, "SUBMARINE: The lifeboat has been successfully loaded on your submarine!");
  350.     return 1;
  351. }
  352.  
  353.  
  354. stock CreateLifeboat(playerid, submarineid, Float:X, Float:Y, Float:Z, Float:Angle)
  355. {
  356.     Submarine[SubID[playerid]][LifeBoat] = 0;
  357.     LifeboatInfo[submarineid][vehicleID] = CreateVehicle(473, X, Y, Z, Angle, 8, 8, 120);
  358.     LifeboatInfo[submarineid][lbID] = submarineid;
  359.    
  360.     new lString[124];
  361.     format(lString, sizeof(lString), "{FFFFFF}Lifeboat of submarine {64CC66}%d\n{FFFFFF}Submarine had {64CC66}%d torpedos.\n{FFFFFF}Submarine had {64CC66}%d health.", submarineid, Submarine[submarineid][Torpedos], Submarine[submarineid][Health]);
  362.     Label[LifeboatInfo[submarineid][vehicleID]] = Create3DTextLabel(lString, -1, X,Y+1,Z, 60, 0, 1);
  363.     Attach3DTextLabelToVehicle(Label[LifeboatInfo[submarineid][vehicleID]], LifeboatInfo[submarineid][vehicleID], X, Y+1, Z);
  364. }
  365. stock DestroyLifeboat(submarineid)
  366. {
  367.     DestroyVehicle(LifeboatInfo[submarineid][vehicleID]);
  368.     LifeboatInfo[submarineid][lbID] = 0;
  369.     Delete3DTextLabel(Label[LifeboatInfo[submarineid][vehicleID]]);
  370. }
  371.  
  372. stock CreateSubmarine(submarineid, Float:X, Float:Y, Float:Z, Float:Angle)
  373. {
  374.     Submarine[submarineid][ID] = submarineid;
  375.     Submarine[submarineid][Object] = CreateObject(9958, X, Y, Z, 0, 0, Angle);
  376.     Submarine[submarineid][sX] = X, Submarine[submarineid][sY] = Y, Submarine[submarineid][sZ] = Z, Submarine[submarineid][sAngle] = Angle;
  377.     Submarine[submarineid][Torpedos] = 4, Submarine[submarineid][TorpedoLoaded] = 0;
  378.     Submarine[submarineid][LifeBoat] = 1, Submarine[submarineid][LifeBoatID] = submarineid;
  379.     Submarine[submarineid][Health] = 500;
  380.     Submarine[submarineid][IsActive] = 1, Submarine[submarineid][InUse] = 0;
  381.    
  382.     Submarines++;
  383. }
  384. stock DestroySubmarine(submarineid)
  385. {
  386.     Submarine[submarineid][ID] = -1;
  387.     DestroyObject(Submarine[submarineid][Object]), Submarine[submarineid][Object] = INVALID_OBJECT_ID; DestroyObject(Submarine[submarineid][TorpedoObject]);
  388.     Submarine[submarineid][sX] = -1, Submarine[submarineid][sY] = -1, Submarine[submarineid][sZ] = -1, Submarine[submarineid][sAngle] = -1;
  389.     Submarine[submarineid][Torpedos] = 0, Submarine[submarineid][TorpedoLoaded] = 0;
  390.     Submarine[submarineid][Health] = 0;
  391.     Submarine[submarineid][IsActive] = -1, Submarine[submarineid][InUse] = -1;
  392.     DestroyLifeboat(submarineid);
  393.     Submarines--;
  394. }
  395. stock DestroySubmarines()
  396. {
  397.     for(new submarineid = 1; submarineid < MAX_SUBS; submarineid++)
  398.     {
  399.         Submarine[submarineid][ID] = -1;
  400.         DestroyObject(Submarine[submarineid][Object]), Submarine[submarineid][Object] = INVALID_OBJECT_ID; DestroyObject(Submarine[submarineid][TorpedoObject]);
  401.         Submarine[submarineid][sX] = -1, Submarine[submarineid][sY] = -1, Submarine[submarineid][sZ] = -1, Submarine[submarineid][sAngle] = -1;
  402.         Submarine[submarineid][Torpedos] = 0, Submarine[submarineid][TorpedoLoaded] = 0;
  403.         Submarine[submarineid][Health] = 0;
  404.         Submarine[submarineid][IsActive] = -1, Submarine[submarineid][InUse] = -1;
  405.        
  406.         DestroyLifeboat(submarineid);
  407.     }
  408.     Submarines = 0;
  409. }
  410.  
  411. stock GetAvailableID()
  412. {
  413.     for(new i = 1; i<MAX_SUBS; i++)
  414.     {
  415.         if(!Submarine[i][IsActive]) return i;
  416.     }
  417.     return -1;
  418. }
  419.  
  420. /*----------------------------------------------------------------------------*/
  421.  
  422. CMD:createsubmarine(playerid, params[]) {
  423.     if(IsPlayerAdmin(playerid))
  424.     {
  425.         new Float:X, Float:Y, Float:Z, Float:Angle;
  426.         GetPlayerPos(playerid, X, Y, Z);
  427.         if(Z > 1) return SendClientMessage(playerid, -1, "SUBMARINE: Your position is too high to create an submarine ( not in water ? )");
  428.         else if(Z < -1) return SendClientMessage(playerid, -1, "SUBMARINE: Your position is too low to create an submarine ( below water ? )");
  429.  
  430.         new subID = GetAvailableID();
  431.         if(subID < 20)
  432.         {
  433.             GetPlayerPos(playerid, X, Y, Z), GetPlayerFacingAngle(playerid, Angle);
  434.            
  435.             CreateSubmarine(subID, X, Y, Z+3, Angle+180);
  436.             SetPlayerPos(playerid, X, Y, Z+6);
  437.         }
  438.         else SendClientMessage(playerid, -1, "SUBMARINE: The max. amount of submarines has been reached.");
  439.     }
  440.     else return 0;
  441.     return 1;
  442. }
  443. CMD:destroysubmarine(playerid, params[]) {
  444.     if(IsPlayerAdmin(playerid))
  445.     {
  446.         if(Submarines)
  447.         {
  448.             new subID;
  449.             if(sscanf(params, "u", subID)) return SendClientMessage(playerid, -1, "USAGE: /destroysubmarine ID");
  450.            
  451.             if(Submarine[subID][IsActive]) DestroySubmarine(subID);
  452.             else return SendClientMessage(playerid, -1, "SUBMARINE: Submarine not active!");
  453.             if(Submarine[subID][InUse]) return SendClientMessage(playerid, -1, "SUBMARINE: This submarine is in use.");
  454.         }
  455.         else SendClientMessage(playerid, -1, "SUBMARINE: The aren't any submarines spawned!");
  456.     }
  457.     else return 0;
  458.     return 1;
  459. }
  460. CMD:destroysubmarines(playerid, params[]) {
  461.     if(IsPlayerAdmin(playerid))
  462.     {
  463.         if(Submarines) DestroySubmarines();
  464.         else SendClientMessage(playerid, -1, "SUBMARINE: The aren't any submarines spawned!");
  465.     }
  466.     else return 0;
  467.     return 1;
  468. }
  469.  
  470. CMD:submarine(playerid, params[]) {
  471.     if(inSub{ playerid })
  472.     {
  473.         UnfreezePlayer(playerid);
  474.         inSub{ playerid } = false, Submarine[SubID[playerid]][InUse] = 0, SubID[playerid] = 0, CanShoot[playerid] = 0;
  475.         SendClientMessage(playerid, -1, "SUBMARINE: You've left the submarine.");
  476.     }
  477.     else
  478.     {
  479.         if(!IsPlayerInAnyVehicle(playerid))
  480.         {
  481.             for(new i = 1; i < MAX_SUBS; i++)
  482.             {
  483.                 if(Submarine[i][IsActive] && !Submarine[i][InUse])
  484.                 {
  485.                     if(IsPlayerInRangeOfPoint(i, 10, Submarine[i][sX], Submarine[i][sY], Submarine[i][sZ]))
  486.                     {
  487.                         FreezePlayer(playerid);
  488.                         inSub{ playerid } = true, SubID[playerid] = Submarine[i][ID];
  489.                         CanShoot[playerid] = 0;
  490.                         SendClientMessage(playerid, -1, "SUBMARINE: You've entered a submarine.");
  491.                         SendClientMessage(playerid, -1, "SUBMARINE: Use UP, DOWN, LEFT and RIGHT keys to control it. Use Y to shoot a torpedo, and N to deploy a lifeboat.");
  492.                     }
  493.                 }
  494.             }
  495.         }
  496.     }
  497.     return 1;
  498. }
Advertisement
Add Comment
Please, Sign In to add comment