Advertisement
itsDevi

Fishing System [FINAL VERSION]

Aug 12th, 2020
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 29.24 KB | None | 0 0
  1. //
  2. //      Fishing Job Script.
  3. //
  4. //  Things you need to know:
  5. //
  6. //  - You only need to copy the new variables i have made into your
  7. //    enumerator, i have used functions as much as possible to lessen
  8. //    your work time in integrating it to the main script.
  9. //
  10. //  - A player is determined to have a fishing job if pFishingLevel = 1;
  11. //
  12. //  - I have only used the most necessary libraries for this script.
  13. //
  14. //  - DEBUG SEARCH TERMS (CTRL + F):
  15. //      - DEBUG-MSG
  16. //      - DEBUG-VAR
  17. //      - DEBUG-CMD
  18. //      - DEBUG-MISC
  19. //
  20. //      [The lines i have labeled with debug is either to be modified or to be deleted.]
  21. //
  22. //          - Dev86
  23. //
  24.  
  25. #include <a_samp>
  26. #include <Pawn.CMD>
  27. #include <streamer>
  28.  
  29. // - Reefer
  30. #define FISHING_VEHICLE_ID      453
  31. #define randomEx(%1,%2) (random(%2-%1)+%1)
  32.  
  33. enum pData {        // - [DEBUG-VAR]
  34.     pFishingXP,
  35.     pRod,
  36.     pFish,
  37.     pBait,
  38.     pSmallNet,
  39.     pMediumNet,
  40.     pLargeNet,
  41.     pRodDurability,
  42.     pSmallNetDurability,
  43.     pMediumNetDurability,
  44.     pLargeNetDurability,
  45.     pTilapia,
  46.     pMalasugi,
  47.     pBangus
  48. };
  49.  
  50. enum baData { // - [DEBUG-MISC]:
  51.     baText[128],
  52.     Float:baPosX,
  53.     Float:baPosY,
  54.     Float:baPosZ
  55. };
  56.  
  57. new const boatingAreas[][baData] = {
  58.     {"{E24E4E}Palomino Creek 1", 1900.5494, -98.1989, 0.8032},  // - [DEBUG-VAR]: Change these to /boatfish area locations.
  59.     {"{E24E4E}Palomino Creek 2", 2020.1951, -183.7714, 1.1351}, // - [DEBUG-VAR]: Change these to /boatfish area locations.
  60.     {"{E24E4E}Palomino Creek 3", 2171.5149, -218.6362, 1.0889}, // - [DEBUG-VAR]: Change these to /boatfish area locations.
  61.     {"{E24E4E}Palomino Creek 4", 2102.8521, 47.5918, 1.0955}    // - [DEBUG-VAR]: Change these to /boatfish area locations.
  62. };
  63.  
  64. enum {
  65.     ITEM_ROD,
  66.     ITEM_BAIT,
  67.     ITEM_FISH,
  68.     ITEM_NET_SMALL,
  69.     ITEM_NET_MED,
  70.     ITEM_NET_LARGE,
  71.     NET_ANY
  72. };
  73.  
  74. new cFishing[MAX_PLAYERS] = 0;
  75.  
  76. new PlayerInfo[MAX_PLAYERS][pData]; // - [DEBUG-VAR]
  77.  
  78. new fishAmount;
  79.  
  80. new Text3D:fishZoneLabel[4];
  81. new Text3D:fishMarketLabel;
  82.  
  83. public OnFilterScriptInit()
  84. {
  85.     print("\n--------------------------------------");              // - [DEBUG-MSG]
  86.     print(" Fishing Job - Filterscript [LOADED]");                  // - [DEBUG-MSG]
  87.     print(" Coded by Dev86, commissioned work for ToiletDuck.");    // - [DEBUG-MSG]
  88.  
  89.     LoadFishingLocations();
  90.  
  91.     fishAmount = 500;
  92.  
  93.     SetTimer("FishTimer", 1000, true);
  94.     SetTimer("FishRegen", 600000, true);
  95.  
  96.     CreateDynamic3DTextLabel("{DEDEDE}Fishing Dock\n{FFFFFF}type /fish to start fishing", 0x91F662FFF, 2101.9160,-104.5780,2.2751, 10.0);
  97.     CreateDynamic3DTextLabel("{DEDEDE}Fish Market\n{FFFFFF}type /sellfish to sell the fish in your inventory.", 0x91F662FFF, 1324.3246, -1794.4163, 13.5469, 10.0);
  98.     return 1;
  99. }
  100.  
  101. public OnFilterScriptExit()
  102. {
  103.  
  104. }
  105.  
  106. public OnPlayerConnect(playerid)
  107. {
  108.     PlayerInfo[playerid][pFishingXP]    = 0; // - [DEBUG-VAR]
  109.     PlayerInfo[playerid][pRod]          = 0; // - [DEBUG-VAR]
  110.     PlayerInfo[playerid][pFish]         = 0; // - [DEBUG-VAR]
  111.     PlayerInfo[playerid][pSmallNet]     = 0; // - [DEBUG-VAR]
  112.     PlayerInfo[playerid][pMediumNet]    = 0; // - [DEBUG-VAR]
  113.     PlayerInfo[playerid][pLargeNet]     = 0; // - [DEBUG-VAR]
  114.  
  115.     cFishing[playerid]                  = 0; // - [DEBUG-VAR]
  116.  
  117.     return 1;
  118. }
  119.  
  120. public OnPlayerDisconnect(playerid, reason)
  121. {
  122.     PlayerInfo[playerid][pFishingXP]    = 0; // - [DEBUG-VAR]
  123.     PlayerInfo[playerid][pRod]          = 0; // - [DEBUG-VAR]
  124.     PlayerInfo[playerid][pFish]         = 0; // - [DEBUG-VAR]
  125.     PlayerInfo[playerid][pSmallNet]     = 0; // - [DEBUG-VAR]
  126.     PlayerInfo[playerid][pMediumNet]    = 0; // - [DEBUG-VAR]
  127.     PlayerInfo[playerid][pLargeNet]     = 0; // - [DEBUG-VAR]
  128.  
  129.     cFishing[playerid]                  = 0; // - [DEBUG-VAR]
  130.     return 1;
  131. }
  132.  
  133. public OnPlayerDeath(playerid, killerid, reason)
  134. {
  135.     if(FishingJobStatus(playerid) == 1)
  136.     {
  137.         SendClientMessage(playerid, 0xF64F4FFF, "You have died. Your rod, bait, and fish has been dropped."); // - [DEBUG-MSG]: You can remove this.
  138.         PlayerInfo[playerid][pFish]       = 0; // - [DEBUG-VAR]
  139.         PlayerInfo[playerid][pBait]       = 0; // - [DEBUG-VAR]
  140.         PlayerInfo[playerid][pRod]        = 0; // - [DEBUG-VAR]
  141.     }
  142.     return 1;
  143. }
  144. CMD:fishhelp(playerid, params[])
  145. {
  146.     SendClientMessage(playerid, -1, "{4D4D4D}Fishing Information & Commands");
  147.     SendClientMessage(playerid, -1, "{96FF89}/getfishjob - {FFFFFF}This command is used to get the fisherman job. [Must not be a fisherman already]");
  148.     SendClientMessage(playerid, -1, "{96FF89}/fish - {FFFFFF}Can be used by fishermen level 1 - 3. [Must have rod & bait]");
  149.     SendClientMessage(playerid, -1, "{96FF89}/boatfish - {FFFFFF}Can be used by fishermen level 4 - 5. [Must have net/fish & bait and must be ON a reefer]");
  150.     SendClientMessage(playerid, -1, "{96FF89}/buyrod - {FFFFFF}Used to buy a fishing rod. [Must not have a rod already.]");
  151.     SendClientMessage(playerid, -1, "{96FF89}/buybait - {FFFFFF}Used to buy a bait.");
  152.     SendClientMessage(playerid, -1, "{96FF89}/buybignet - {FFFFFF}Used to buy a large net.");
  153.     SendClientMessage(playerid, -1, "{96FF89}/buymediumnet - {FFFFFF}Used to buy a medium sized net.");
  154.     SendClientMessage(playerid, -1, "{96FF89}/buysmallnet - {FFFFFF}Used to buy a small net.");
  155.     SendClientMessage(playerid, -1, "{96FF89}/sellfish - {FFFFFF}Used to sell the fish in your inventory.");
  156.     SendClientMessage(playerid, -1, "{96FF89}/fishinventory - {FFFFFF}Used to check your fishing related inventory.");
  157.     SendClientMessage(playerid, -1, "{96FF89}Noteable Information:");
  158.     SendClientMessage(playerid, -1, "- Fishing Rods & Nets have a 10 percent chance of breaking every time you fish.");
  159.     SendClientMessage(playerid, -1, "- Do not overfish, you can see the status of the fish population as labeled by the boat fishing zones.");
  160.     SendClientMessage(playerid, -1, "- A bait is consumed every time you fish.");
  161.     SendClientMessage(playerid, -1, "- There is a 10 percent you can catch trash while fishing, meaning it can decrease the amount ...");
  162.     SendClientMessage(playerid, -1, "... of fish you can catch.");
  163.     SendClientMessage(playerid, -1, "{96FF89}Debug Commands:");
  164.     SendClientMessage(playerid, -1, "- /fishlevel0 - /fishlevel4 - /debugfish - /debugmoney - /tp2fish - /tp2market");
  165. }
  166.  
  167. // - Commands  [Most of these commands we're made for debug purposes and can be removed/modified to fit the main script.]
  168. CMD:buyrod(playerid, params[]) // - [DEBUG-CMD]
  169. {
  170.     /*if(IsPlayerInBusiness(...)) // - [DEBUG-MISC]
  171.     {
  172.         // - ikaw nalang mag add neto, you can add this with minimal effort using the return cmd function in ZCMD or Pawn.CMD.
  173.     }*/
  174.     if(FishingJobStatus(playerid) == 0)
  175.     {
  176.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have the fishing job to buy a rod.");
  177.     }
  178. /*  if(GetPlayerMoney(playerid) < ReturnPrice(ITEM_ROD)) // - [DEBUG-MISC]
  179.     {
  180.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You do not have enough money to buy a rod.");
  181.     }*/
  182.     if(HasFishingItem(playerid, ITEM_ROD))
  183.     {
  184.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You already have a fishing rod.");
  185.     }
  186.  
  187.     AddFishingItem(playerid, ITEM_ROD, 1);
  188.     SendClientMessage(playerid, 0x91F662FF, "You have successfully bought a fishing rod.");
  189.     return 1;
  190. }
  191.  
  192. CMD:buybait(playerid, params[]) // - [DEBUG-CMD]
  193. {
  194.     /*if(IsPlayerInBusiness(...)) // - [DEBUG-MISC]
  195.     {
  196.         // - ikaw nalang mag add neto, you can add this with minimal effort using the return cmd function in ZCMD or Pawn.CMD.
  197.     }*/
  198.     if(FishingJobStatus(playerid) == 0)
  199.     {
  200.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have the fishing job to buy a bait.");
  201.     }
  202. /*  if(GetPlayerMoney(playerid) < ReturnPrice(ITEM_BAIT)) // - [DEBUG-MISC]
  203.     {
  204.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You do not have enough money to buy a bait.");
  205.     }*/
  206.     if(PlayerInfo[playerid][pBait] > 19) // - [DEBUG-VAR]: change '19' into desired max bait amount
  207.     {
  208.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You cannot hold any more bait.");
  209.     }
  210.  
  211.     AddFishingItem(playerid, ITEM_BAIT, 1);
  212.     SendClientMessage(playerid, 0x91F662FF, "You have successfully bought a bait.");
  213.     return 1;
  214. }
  215.  
  216. CMD:tp2fish(playerid, params[]) return SetPlayerPos(playerid, 2101.9160,-104.5780,2.2751);
  217. CMD:tp2market(playerid, params[]) return SetPlayerPos(playerid, 1324.3246, -1794.4163, 13.5469);
  218.  
  219. CMD:fish(playerid, params[])
  220. {
  221.     if(!IsInRangeOfFishingPoint(playerid)) // - This function already exists, nakacomment lang for you to adjust the area kung saan.
  222.     {
  223.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be near the fishing area to use this command."); // - [DEBUG-CMD]
  224.     }
  225.     if(cFishing[playerid] == 1)
  226.     {
  227.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You are already fishing.");
  228.     }
  229.     if(FishingJobStatus(playerid) == 0)
  230.     {
  231.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have the fishing job to use this command.");
  232.     }
  233.     if(GetPlayerFishingLevel(playerid) > 3)
  234.     {
  235.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be fishing level 1-3 to use this command.");
  236.     }
  237.     if(!HasFishingItem(playerid, ITEM_BAIT) || !HasFishingItem(playerid, ITEM_ROD))
  238.     {
  239.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have a fishing rod and a bait to use this command.");
  240.     }
  241.  
  242.     ApplyAnimation(playerid, "SAMP", "FishingIdle", 4.1, 0, 0, 0, 1, 0, 1);
  243.     SetPlayerAttachedObject(playerid, 9, 18632, 6, 0.112999, 0.024000, 0.000000, -172.999954, 28.499994, 0.000000);
  244.     GameTextForPlayer(playerid, "~w~Fishing...", 6000, 3);
  245.  
  246.     cFishing[playerid] = 1;
  247.  
  248.     SetTimerEx("OnPlayerFish", 6000, false, "i", playerid); // - [DEBUG-VAR]: Change time to your will
  249.     return 1;
  250. }
  251.  
  252. CMD:fishinventory(playerid, params[])
  253. {
  254.     new string[128];
  255.     format(string, sizeof(string), "Fish Weight: %dkg / Rod: %d / Bait: %d", PlayerInfo[playerid][pFish], PlayerInfo[playerid][pRod], PlayerInfo[playerid][pBait]);
  256.     SendClientMessage(playerid, -1, string);
  257.     format(string, sizeof(string), "Big Net: %d / Medium Net: %d / Small Net: %d / Level: %d", PlayerInfo[playerid][pLargeNet], PlayerInfo[playerid][pMediumNet], PlayerInfo[playerid][pSmallNet], GetPlayerFishingLevel(playerid));
  258.     SendClientMessage(playerid, -1, string);   
  259. }
  260.  
  261. CMD:fishlevel0(playerid, params[]) return PlayerInfo[playerid][pFishingXP] = 0; // - [DEBUG-CMD]
  262. CMD:fishlevel4(playerid, params[]) return PlayerInfo[playerid][pFishingXP] = 150; // - [DEBUG-CMD]
  263.  
  264. CMD:boatfish(playerid, params[])
  265. {
  266.     if(!IsPlayerInRangeOfBoatingPoint(playerid))
  267.     {
  268.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be near the fishing area to use this command."); // - [DEBUG-CMD]
  269.     }
  270.     if(cFishing[playerid] == 1)
  271.     {
  272.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You are already fishing.");
  273.     }      
  274.     if(FishingJobStatus(playerid) == 0)
  275.     {
  276.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have the fishing job to use this command.");
  277.     }
  278.     if(GetPlayerFishingLevel(playerid) < 4)
  279.     {
  280.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be fishing level 4-5 to use this command.");
  281.     }
  282.     if(GetPlayerVehicleID(playerid))
  283.     {
  284.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be out of a vehicle to use this command.");
  285.     }
  286.     if(GetVehicleModel(GetNearbyVehicle(playerid)) != FISHING_VEHICLE_ID) // - [DEBUG-VAR]: change vehicle id into desired vehicle.
  287.     {
  288.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be in a fishing boat to use this command.");   
  289.     }
  290.     if(!HasFishingItem(playerid, ITEM_BAIT) || !HasFishingItem(playerid, NET_ANY))
  291.     {
  292.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have a fishing rod and a bait to use this command.");
  293.     }
  294.     if(!BoatFishPossible())
  295.     {
  296.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: Fish in Palomino Creek is currently too endangered for you to fish, please wait for the fish to regenerate.");
  297.     }
  298.  
  299.     GameTextForPlayer(playerid, "~w~Fishing...", 6000, 3);
  300.     ApplyAnimation(playerid, "SAMP", "FishingIdle", 4.1, 0, 0, 0, 1, 0, 1);
  301.     SetPlayerAttachedObject(playerid, 9, 18632, 6, 0.112999, 0.024000, 0.000000, -172.999954, 28.499994, 0.000000);
  302.  
  303.     cFishing[playerid] = 1;
  304.  
  305.     SetTimerEx("OnPlayerFish", 6000, false, "i", playerid); // - [DEBUG-VAR]: Change time to your will
  306.     return 1;
  307. }
  308.  
  309. CMD:buysmallnet(playerid, params[])
  310. {
  311.     SendClientMessage(playerid, 0x91F662FF, "You have bought a small net.");
  312.     PlayerInfo[playerid][pSmallNet]++;
  313. }
  314.  
  315. CMD:buymednet(playerid, params[])
  316. {
  317.     SendClientMessage(playerid, 0x91F662FF, "You have bought a medium net.");
  318.     PlayerInfo[playerid][pMediumNet]++;
  319. }
  320.  
  321. CMD:buybignet(playerid, params[])
  322. {
  323.     SendClientMessage(playerid, 0x91F662FF, "You have bought a big net.");
  324.     PlayerInfo[playerid][pLargeNet]++;
  325. }
  326.  
  327. CMD:sellfish(playerid, params[])
  328. {
  329.     if(FishingJobStatus(playerid) == 0)
  330.     {
  331.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must have the fishing job to use this command.");
  332.     }
  333.     if(!IsPlayerNearFishMarket(playerid))
  334.     {
  335.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You must be near the fish market to use this command.");
  336.     }
  337.     new string[64];
  338.     format(string, sizeof(string), "You have sold %dkg of fish for $%d.", GetPlayerFishWeight(playerid), GetPlayerFishWeight(playerid) * ReturnPrice(ITEM_FISH));
  339.     SendClientMessage(playerid, 0x91F662FF, string);
  340.     GivePlayerMoney(playerid, GetPlayerFishWeight(playerid) * ReturnPrice(ITEM_FISH));
  341.     PlayerInfo[playerid][pFish] -= GetPlayerFishWeight(playerid);
  342.     return 1;
  343. }
  344.  
  345. CMD:debugmoney(playerid, params[])
  346. {
  347.     if(isnull(params))
  348.     {
  349.         return SendClientMessage(playerid, -1, "/debugmoney [amount]");
  350.     }
  351.     if(!strval(params))
  352.     {
  353.         return SendClientMessage(playerid, -1, "the value must be an integer.");
  354.     }
  355.     GivePlayerMoney(playerid, strval(params));
  356.     return 1;
  357. }
  358.  
  359. CMD:debugfish(playerid, params[])
  360. {
  361.     if(isnull(params))
  362.     {
  363.         return SendClientMessage(playerid, -1, "/debugfish [amount]");
  364.     }
  365.     if(!strval(params))
  366.     {
  367.         return SendClientMessage(playerid, -1, "the value must be an integer.");
  368.     }
  369.     fishAmount = strval(params);
  370.     return 1;  
  371. }
  372.  
  373. CMD:getfishjob(playerid, params[])
  374. {
  375.     if(FishingJobStatus(playerid) == 1)
  376.     {
  377.         return SendClientMessage(playerid, 0xF64F4FFF, "Error: You already have the fishing job.");
  378.     }
  379.     SendClientMessage(playerid, 0x91F662FFF, "You have applied for the fisherman job and has been accepted.");
  380.     PlayerInfo[playerid][pFishingXP] = 1;
  381.     return 1;
  382. }
  383. // - Functions [I made some functions that should ease the integration process.]
  384. forward LoadFishingLocations();
  385. public LoadFishingLocations()
  386. {
  387.     new string[256];
  388.     for(new i = 0; i < sizeof(boatingAreas); i++)
  389.     {
  390.         format(string, sizeof(string), "[Loading...]\n%s\n{EAEAEA}Type '/boatfish' to catch fish in the area.", boatingAreas[i][baText]);
  391.         fishZoneLabel[i] = CreateDynamic3DTextLabel(string, 0x91F662FFF, boatingAreas[i][baPosX], boatingAreas[i][baPosY], boatingAreas[i][baPosZ], 100.0);
  392.     }
  393. }
  394.  
  395. forward UpdateFishingLocations();
  396. public UpdateFishingLocations()
  397. {
  398.     new string[256];
  399.     for(new i = 0; i < sizeof(boatingAreas); i++)
  400.     {
  401.         format(string, sizeof(string), "%s\n%s\n{EAEAEA}Type '/boatfish' to catch fish in the area.", ReturnFishHealth(), boatingAreas[i][baText]);
  402.         UpdateDynamic3DTextLabelText(fishZoneLabel[i], -1, string);
  403.     }
  404. }
  405.  
  406. forward FishTimer();
  407. public FishTimer()
  408. {
  409.     UpdateFishingLocations();
  410. }
  411.  
  412. forward FishRegen();
  413. public FishRegen()
  414. {
  415.     fishAmount += randomEx(90, 125);
  416. }
  417.  
  418. stock ReturnFishHealth()
  419. {
  420.     new hstring[64];
  421.     if(55 <= fishAmount <= 150) {
  422.         hstring = "{AE0000}[Alarmingly Low Population]";
  423.     } else if(151 <= fishAmount <= 249) {
  424.         hstring = "{FF4949}[Low Population]";
  425.     } else if(250 <= fishAmount <= 349) {
  426.         hstring = "{FF7900}[Limited Population]";
  427.     } else if(350 <= fishAmount <= 449) {
  428.         hstring = "{FFFB00}[Healthy Population]";
  429.     } else if(450 <= fishAmount <= 650) {
  430.         hstring = "{6AFF43}[Healthy Population]";
  431.     } else {
  432.         hstring = "{7C7C7C}[Endangered]";
  433.     }
  434.     return hstring;
  435. }
  436.  
  437. stock BoatFishPossible()
  438. {
  439.     if(fishAmount < 55) return 0;
  440.     else return 1;
  441. }
  442.  
  443. forward OnPlayerFish(playerid);
  444. public OnPlayerFish(playerid)
  445. {
  446.     if(GetPlayerFishingLevel(playerid) < 4)
  447.     {
  448.         if(HasFishingItem(playerid, ITEM_ROD))
  449.         {
  450.             switch(randomEx(1, 10))
  451.             {
  452.                 case 1:
  453.                 {
  454.                     SendClientMessage(playerid, -1, "You have reeled in some trash.");
  455.  
  456.                     cFishing[playerid] = 0;
  457.                     TogglePlayerControllable(playerid, true);
  458.                     DelFishingItem(playerid, ITEM_BAIT, 1);                            
  459.                 }
  460.                 default:
  461.                 {
  462.                     if(GetPlayerFishingLevel(playerid) == 1) {
  463.                         GivePlayerFish(playerid, ITEM_ROD);
  464.                         fishAmount -= randomEx(2,10);
  465.                     } else if(GetPlayerFishingLevel(playerid) == 2) {
  466.                         GivePlayerFish(playerid, ITEM_ROD);
  467.                         fishAmount -= randomEx(10,20);
  468.                     } else if(GetPlayerFishingLevel(playerid) == 3) {
  469.                         GivePlayerFish(playerid, ITEM_ROD);
  470.                         fishAmount -= randomEx(10,20);
  471.                     }
  472.                     switch(random(10))
  473.                     {
  474.                         case 1: { PlayerInfo[playerid][pRod]--; SendClientMessage(playerid, -1, "Your rod has broken while reeling in some fish."); }
  475.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  476.                     }
  477.                     DecreaseItemDurability(playerid, ITEM_ROD);
  478.  
  479.                     cFishing[playerid] = 0;
  480.                     TogglePlayerControllable(playerid, true);
  481.                     DelFishingItem(playerid, ITEM_BAIT, 1);            
  482.                     return 1;
  483.                 }
  484.             }      
  485.             return 1;
  486.         }
  487.     }
  488.     if(GetPlayerFishingLevel(playerid) >= 4)
  489.     {
  490.         if(HasFishingItem(playerid, ITEM_NET_LARGE))
  491.         {
  492.             switch(randomEx(1, 10))
  493.             {
  494.                 case 1:
  495.                 {
  496.                     switch(random(10))
  497.                     {
  498.                         case 1: { PlayerInfo[playerid][pLargeNet]--; SendClientMessage(playerid, -1, "Your large net has broken while reeling in some fish and trash."); }
  499.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish and trash."); }
  500.                     }
  501.  
  502.                     GivePlayerFish(playerid, ITEM_NET_LARGE);
  503.                     DecreaseItemDurability(playerid, ITEM_NET_LARGE);
  504.  
  505.                     cFishing[playerid] = 0;
  506.                     TogglePlayerControllable(playerid, true);
  507.                     DelFishingItem(playerid, ITEM_BAIT, 1);
  508.  
  509.                     fishAmount -= randomEx(35,40);                             
  510.                 }
  511.                 default:
  512.                 {
  513.                     switch(random(10))
  514.                     {
  515.                         case 1: { PlayerInfo[playerid][pLargeNet]--; SendClientMessage(playerid, -1, "Your large net has broken while reeling in some fish."); }
  516.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  517.                     }                  
  518.                     GivePlayerFish(playerid, ITEM_NET_LARGE, true);
  519.                     DecreaseItemDurability(playerid, ITEM_NET_LARGE);
  520.  
  521.                     cFishing[playerid] = 0;
  522.                     TogglePlayerControllable(playerid, true);
  523.                     DelFishingItem(playerid, ITEM_BAIT, 1);                            
  524.                     fishAmount -= randomEx(40,55);
  525.                 }
  526.             }
  527.             return 1;
  528.         }
  529.         else if(HasFishingItem(playerid, ITEM_NET_MED))
  530.         {
  531.             switch(randomEx(1, 10))
  532.             {
  533.                 case 1:
  534.                 {
  535.                     switch(random(10))
  536.                     {
  537.                         case 1: { PlayerInfo[playerid][pMediumNet]--; SendClientMessage(playerid, -1, "Your medium net has broken while reeling in some fish and trash."); }
  538.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish and trash."); }
  539.                     }                  
  540.  
  541.                     DecreaseItemDurability(playerid, ITEM_NET_MED);
  542.                     GivePlayerFish(playerid, ITEM_NET_MED);
  543.  
  544.                     cFishing[playerid] = 0;
  545.                     TogglePlayerControllable(playerid, true);
  546.                     DelFishingItem(playerid, ITEM_BAIT, 1);
  547.                     fishAmount -= randomEx(25,30);
  548.                 }
  549.                 default:
  550.                 {
  551.                     switch(random(10))
  552.                     {
  553.                         case 1: { PlayerInfo[playerid][pMediumNet]--; SendClientMessage(playerid, -1, "Your medium has broken while reeling in some fish."); }
  554.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  555.                     }  
  556.  
  557.                     DecreaseItemDurability(playerid, ITEM_NET_MED);
  558.                     GivePlayerFish(playerid, ITEM_NET_MED, true);
  559.  
  560.                     cFishing[playerid] = 0;
  561.                     TogglePlayerControllable(playerid, true);
  562.                     DelFishingItem(playerid, ITEM_BAIT, 1);
  563.                     fishAmount -= randomEx(30,40);                         
  564.                 }
  565.             }
  566.             return 1;
  567.         }      
  568.         else if(HasFishingItem(playerid, ITEM_NET_SMALL))
  569.         {
  570.             switch(randomEx(1, 10))
  571.             {
  572.                 case 1:
  573.                 {
  574.                     switch(random(10))
  575.                     {
  576.                         case 1: { PlayerInfo[playerid][pSmallNet]--; SendClientMessage(playerid, -1, "Your small net has broken while reeling in some fish and trash."); }
  577.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  578.                     }
  579.  
  580.                     DecreaseItemDurability(playerid, ITEM_NET_SMALL);
  581.                     GivePlayerFish(playerid, ITEM_NET_SMALL);
  582.  
  583.                     cFishing[playerid] = 0;
  584.                     TogglePlayerControllable(playerid, true);
  585.                     DelFishingItem(playerid, ITEM_BAIT, 1);                        
  586.                     fishAmount -= randomEx(15,20)
  587.                 }
  588.                 default:
  589.                 {
  590.                     switch(random(10))
  591.                     {
  592.                         case 1: { PlayerInfo[playerid][pSmallNet]--; SendClientMessage(playerid, -1, "Your small net has broken while reeling in some fish."); }
  593.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  594.                     }
  595.  
  596.                     DecreaseItemDurability(playerid, ITEM_NET_SMALL);
  597.                     GivePlayerFish(playerid, ITEM_NET_SMALL, true);
  598.  
  599.                     cFishing[playerid] = 0;
  600.                     TogglePlayerControllable(playerid, true);
  601.                     DelFishingItem(playerid, ITEM_BAIT, 1);    
  602.                     fishAmount -= randomEx(20,30);                     
  603.                 }
  604.             }
  605.             return 1;
  606.         }
  607.         else if(HasFishingItem(playerid, ITEM_ROD))
  608.         {
  609.             switch(randomEx(1, 10))
  610.             {
  611.                 case 1:
  612.                 {
  613.                     SendClientMessage(playerid, -1, "You have reeled in some trash.");
  614.  
  615.                     cFishing[playerid] = 0;
  616.                     TogglePlayerControllable(playerid, true);
  617.                     DelFishingItem(playerid, ITEM_BAIT, 1);                            
  618.                 }
  619.                 default:
  620.                 {
  621.                     if(GetPlayerFishingLevel(playerid) == 1) {
  622.                         GivePlayerFish(playerid, ITEM_ROD);
  623.                         fishAmount -= randomEx(2,10);
  624.                     } else if(GetPlayerFishingLevel(playerid) == 2) {
  625.                         GivePlayerFish(playerid, ITEM_ROD);
  626.                         fishAmount -= randomEx(10,20);
  627.                     } else {
  628.                         GivePlayerFish(playerid, ITEM_ROD);
  629.                         fishAmount -= randomEx(10,20);
  630.                     }
  631.                     switch(random(10))
  632.                     {
  633.                         case 1: { PlayerInfo[playerid][pRod]--; SendClientMessage(playerid, -1, "Your rod has broken while reeling in some fish."); }
  634.                         default: { SendClientMessage(playerid, 0x91F662FFF, "You have reeled in some fish."); }
  635.                     }
  636.                     DecreaseItemDurability(playerid, ITEM_ROD);
  637.  
  638.                     cFishing[playerid] = 0;
  639.                     TogglePlayerControllable(playerid, true);
  640.                     DelFishingItem(playerid, ITEM_BAIT, 1);            
  641.                     return 1;
  642.                 }
  643.             }      
  644.             return 1;
  645.         }
  646.     }  
  647.     return 1;
  648. }
  649.  
  650. stock FishingJobStatus(playerid)
  651. {
  652.     new status;
  653.     switch(GetPlayerFishingLevel(playerid))
  654.     {
  655.         case 0: status = 0;
  656.         case 1, 2, 3, 4, 5: status = 1;
  657.     }
  658.     return status;
  659. }
  660.  
  661. stock FishEx(playerid, malasugi, tilapia, bangus)
  662. {
  663.     PlayerInfo[playerid][pMalasugi] += malasugi;
  664.     PlayerInfo[playerid][pTilapia]  += tilapia;
  665.     PlayerInfo[playerid][pBangus]   += bangus;
  666. }
  667.  
  668. stock GivePlayerFish(playerid, itemid, bool:trash = false)
  669. {
  670.     switch(itemid)
  671.     {
  672.         case ITEM_ROD:
  673.         {
  674.             switch(GetPlayerFishingLevel(playerid))
  675.             {
  676.                 case 1: { if(trash == false) { FishEx(playerid, 2, 3, 5); } else { FishEx(playerid, 0, 0, 0); } }
  677.                 case 2: { if(trash == false) { FishEx(playerid, 5, 7, 8); } else { FishEx(playerid, 0, 0, 0); } }
  678.                 case 3: { if(trash == false) { FishEx(playerid, 7, 9, 14); } else { FishEx(playerid, 0, 0, 0); } }
  679.             }
  680.         }
  681.         case ITEM_NET_SMALL:
  682.         {
  683.             switch(GetPlayerFishingLevel(playerid))
  684.             {
  685.                 case 4: { if(trash == false) { FishEx(playerid, 7, 9, 14); } else { FishEx(playerid, 5, 7, 8); } }
  686.                 case 5: { if(trash == false) { FishEx(playerid, 10, 10, 20); } else { FishEx(playerid, 7, 9, 14); } }
  687.             }
  688.         }
  689.         case ITEM_NET_MED:
  690.         {
  691.             switch(GetPlayerFishingLevel(playerid))
  692.             {
  693.                 case 4: { if(trash == false) { FishEx(playerid, 8, 7, 15); } else { FishEx(playerid, 5, 5, 10); } }
  694.                 case 5: { if(trash == false) { FishEx(playerid, 10, 10, 10); } else { FishEx(playerid, 5, 4, 11); } }
  695.             }
  696.         }
  697.         case ITEM_NET_LARGE:
  698.         {
  699.             switch(GetPlayerFishingLevel(playerid))
  700.             {
  701.                 case 4: { if(trash == false) { FishEx(playerid, 15, 20, 15); } else { FishEx(playerid, 10, 10, 15); } }
  702.                 case 5: { if(trash == false) { FishEx(playerid, 15, 15, 25); } else { FishEx(playerid, 10, 10, 20); } }
  703.             }
  704.         }
  705.     }
  706. }
  707.  
  708. stock DecreaseItemDurability(playerid, itemid)
  709. {
  710.     switch(itemid)
  711.     {      
  712.         case ITEM_ROD:
  713.         {
  714.             if(PlayerInfo[playerid][pRodDurability] == 1) {
  715.                 PlayerInfo[playerid][pRod]--;
  716.                 PlayerInfo[playerid][pRodDurability] = 5;
  717.                 SendClientMessage(playerid, -1, "You have overused your rod and it broke.");
  718.             } else {
  719.                 PlayerInfo[playerid][pRodDurability]--;
  720.             }
  721.         }
  722.         case ITEM_NET_SMALL:
  723.         {
  724.             if(PlayerInfo[playerid][pSmallNetDurability] == 1) {
  725.                 PlayerInfo[playerid][pSmallNet]--;
  726.                 PlayerInfo[playerid][pSmallNetDurability] = 5;
  727.                 SendClientMessage(playerid, -1, "You have overused your small net and it broke.");
  728.             } else {
  729.                 PlayerInfo[playerid][pSmallNetDurability]--;
  730.             }
  731.         }
  732.         case ITEM_NET_MED:
  733.         {
  734.             if(PlayerInfo[playerid][pMediumNetDurability] == 1) {
  735.                 PlayerInfo[playerid][pMediumNet]--;
  736.                 PlayerInfo[playerid][pMediumNetDurability] = 6;
  737.                 SendClientMessage(playerid, -1, "You have overused your medium net and it broke.");
  738.             } else {
  739.                 PlayerInfo[playerid][pMediumNetDurability]--;
  740.             }
  741.         }
  742.         case ITEM_NET_LARGE:
  743.         {
  744.             if(PlayerInfo[playerid][pLargeNetDurability] == 1) {
  745.                 PlayerInfo[playerid][pLargeNet]--;
  746.                 PlayerInfo[playerid][pLargeNetDurability] = 7;
  747.                 SendClientMessage(playerid, -1, "You have overused your large net and it broke.");
  748.             } else {
  749.                 PlayerInfo[playerid][pLargeNetDurability]--;
  750.             }
  751.         }
  752.     }
  753. }
  754.  
  755. stock GetPlayerFishingLevel(playerid)
  756. {
  757.     if(PlayerInfo[playerid][pFishingXP] == 0) {
  758.         return 0;
  759.     } else if(1 <= PlayerInfo[playerid][pFishingXP] <= 49) {
  760.         return 1;
  761.     } else if(50 <= PlayerInfo[playerid][pFishingXP] <= 99) {
  762.         return 2;
  763.     } else if(100 <= PlayerInfo[playerid][pFishingXP] <= 149) {
  764.         return 3;
  765.     } else if(150 <= PlayerInfo[playerid][pFishingXP] <= 199) {
  766.         return 4;
  767.     } else if(PlayerInfo[playerid][pFishingXP] >= 200) {
  768.         return 5;
  769.     }
  770.     return 0;
  771. }
  772.  
  773. stock AddFishingItem(playerid, itemid, amount)
  774. {
  775.     switch(itemid)
  776.     {
  777.         case ITEM_ROD:  { PlayerInfo[playerid][pRod]  += amount; } // - [DEBUG-VAR]
  778.         case ITEM_FISH: { PlayerInfo[playerid][pFish] += amount; } // - [DEBUG-VAR]
  779.         case ITEM_BAIT: { PlayerInfo[playerid][pBait] += amount; } // - [DEBUG-VAR]
  780.         case ITEM_NET_SMALL: { PlayerInfo[playerid][pSmallNet] += amount; } // - [DEBUG-VAR]
  781.         case ITEM_NET_MED:   { PlayerInfo[playerid][pMediumNet] += amount; } // - [DEBUG-VAR]
  782.         case ITEM_NET_LARGE: { PlayerInfo[playerid][pLargeNet] += amount; }// - [DEBUG-VAR]            
  783.     }
  784. }
  785.  
  786. stock DelFishingItem(playerid, itemid, amount)
  787. {
  788.     switch(itemid)
  789.     {
  790.         case ITEM_ROD:       { PlayerInfo[playerid][pRod]  -= amount; } // - [DEBUG-VAR]
  791.         case ITEM_FISH:      { PlayerInfo[playerid][pFish] -= amount; } // - [DEBUG-VAR]
  792.         case ITEM_BAIT:      { PlayerInfo[playerid][pBait] -= amount; } // - [DEBUG-VAR]
  793.         case ITEM_NET_SMALL: { PlayerInfo[playerid][pSmallNet] -= amount; } // - [DEBUG-VAR]
  794.         case ITEM_NET_MED:   { PlayerInfo[playerid][pMediumNet] -= amount; } // - [DEBUG-VAR]
  795.         case ITEM_NET_LARGE: { PlayerInfo[playerid][pLargeNet] -= amount; }// - [DEBUG-VAR]    
  796.     }
  797. }
  798.  
  799. stock HasFishingItem(playerid, itemid)
  800. {
  801.     new status = 0;
  802.     switch(itemid)
  803.     {
  804.         case ITEM_ROD:  { if(PlayerInfo[playerid][pRod] != 0)  { status = 1; } } // - [DEBUG-VAR]
  805.         case ITEM_FISH: { if(PlayerInfo[playerid][pFish] != 0) { status = 1; } } // - [DEBUG-VAR]
  806.         case ITEM_BAIT: { if(PlayerInfo[playerid][pBait] != 0) { status = 1; } } // - [DEBUG-VAR]
  807.         case ITEM_NET_SMALL: { if(PlayerInfo[playerid][pSmallNet] != 0) { status = 1; } } // - [DEBUG-VAR]
  808.         case ITEM_NET_MED: { if(PlayerInfo[playerid][pMediumNet] != 0) { status = 1; } } // - [DEBUG-VAR]
  809.         case ITEM_NET_LARGE: { if(PlayerInfo[playerid][pLargeNet] != 0) { status = 1; } } // - [DEBUG-VAR]
  810.         case NET_ANY: { if(PlayerInfo[playerid][pLargeNet] != 0 || PlayerInfo[playerid][pMediumNet] != 0 || PlayerInfo[playerid][pSmallNet] != 0) { status = 1; } }
  811.     }
  812.     return status;
  813. }
  814.  
  815. stock ReturnPrice(itemid)
  816. {
  817.     switch(itemid)
  818.     {
  819.         case ITEM_ROD: return 0;
  820.         case ITEM_FISH: return 3;
  821.         case ITEM_BAIT: return 0;
  822.         case ITEM_NET_SMALL: return 0;
  823.         case ITEM_NET_MED: return 0;
  824.         case ITEM_NET_LARGE: return 0;
  825.     }
  826.     return 0;
  827. }
  828.  
  829. stock IsPlayerNearFishMarket(playerid)
  830. {
  831.     if(IsPlayerInRangeOfPoint(playerid, 5.0, 1324.3246, -1794.4163, 13.5469)) { // - [DEBUG-VAR]: Palitan yung location.
  832.         return 1; // - If player is in range.
  833.     } else {
  834.         return 0; // - If player is not in range.
  835.     }
  836. }
  837.  
  838. stock IsPlayerInRangeOfBoatingPoint(playerid)
  839. {
  840.     if(IsPlayerInRangeOfPoint(playerid, 100.0, 1900.5494, -98.1989, 0.8032)) {
  841.         return 1;
  842.     } else if(IsPlayerInRangeOfPoint(playerid, 100.0, 2020.1951, -183.7714, 1.1351)) {
  843.         return 1;
  844.     } else if(IsPlayerInRangeOfPoint(playerid, 100.0, 2171.5149, -218.6362, 1.0889)) {
  845.         return 1;
  846.     } else if(IsPlayerInRangeOfPoint(playerid, 100.0, 2102.8521, 47.5918, 1.0955)) {
  847.         return 1;
  848.     } else { return 0; }
  849. }
  850.  
  851. stock GetPlayerFishWeight(playerid)
  852. {
  853.     return PlayerInfo[playerid][pFish]; // - [DEBUG-VAR]
  854. }
  855.  
  856. // - Other Functions. [IF YOU GET ERRORS DUE TO DUPLICATION, YOU CAN REMOVE THESE]
  857.  
  858. GetNearbyVehicle(playerid)
  859. {
  860.     new Float:x, Float:y, Float:z;
  861.  
  862.     for(new b = 1; b < MAX_PLAYERS; b++)
  863.     {
  864.         if(IsVehicleStreamedIn(b, playerid))
  865.         {
  866.             GetVehiclePos(b, x, y, z);
  867.  
  868.             if(IsPlayerInRangeOfPoint(playerid, 3.5, x, y, z))
  869.             {
  870.                 return b;
  871.             }
  872.         }
  873.     }
  874.  
  875.     return INVALID_VEHICLE_ID;
  876. }
  877.  
  878. IsInRangeOfFishingPoint(playerid) // - tooken from old script, idk where to put em xd
  879. {
  880.     if(IsPlayerInRangeOfPoint(playerid,3.0,2101.9160,-104.5780,2.2751)) {
  881.         return 1;
  882.     }
  883.     return 0;
  884. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement