From 176f2498852060f3c0d8e4c099998145488643c5 Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Tue, 1 Jul 2025 11:20:24 +0200 Subject: [PATCH] fishing --- .../Inventory_Items/ESX/ox_inventory.txt | 42 +++ .../ESX/sql/wasabi_fishing_limit.sql | 8 + .../ESX/sql/wasabi_fishing_weight.sql | 8 + .../InventoryImages/anchovy.png | Bin 0 -> 9009 bytes .../InventoryImages/fishbait.png | Bin 0 -> 11601 bytes .../InventoryImages/fishingrod.png | Bin 0 -> 4131 bytes .../InventoryImages/salmon.png | Bin 0 -> 14478 bytes .../Inventory_Items/InventoryImages/trout.png | Bin 0 -> 23219 bytes .../Inventory_Items/InventoryImages/tuna.png | Bin 0 -> 13920 bytes .../Inventory_Items/QBCore/items.txt | 7 + .../Inventory_Items/QBCore/ox_inventory.txt | 42 +++ .../[jobs]/[civ]/wasabi_fishing/README.md | 44 +++ .../wasabi_fishing/bridge/esx/client.lua | 65 ++++ .../wasabi_fishing/bridge/esx/server.lua | 85 +++++ .../[civ]/wasabi_fishing/bridge/qb/client.lua | 78 +++++ .../[civ]/wasabi_fishing/bridge/qb/server.lua | 98 ++++++ .../[civ]/wasabi_fishing/client/client.lua | 303 ++++++++++++++++++ .../[civ]/wasabi_fishing/client/functions.lua | 36 +++ .../wasabi_fishing/configuration/config.lua | 146 +++++++++ .../wasabi_fishing/configuration/strings.lua | 38 +++ .../[civ]/wasabi_fishing/fxmanifest.lua | 19 ++ .../[civ]/wasabi_fishing/server/server.lua | 241 ++++++++++++++ .../[civ]/wasabi_fishing/server/updater.lua | 63 ++++ 23 files changed, 1323 insertions(+) create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/ox_inventory.txt create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_limit.sql create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_weight.sql create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/anchovy.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/fishbait.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/fishingrod.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/salmon.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/trout.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/tuna.png create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/QBCore/items.txt create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/QBCore/ox_inventory.txt create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/README.md create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/client.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/server.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/client.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/server.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/client/client.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/client/functions.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/configuration/config.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/configuration/strings.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/fxmanifest.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/server/server.lua create mode 100644 resources/[jobs]/[civ]/wasabi_fishing/server/updater.lua diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/ox_inventory.txt b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/ox_inventory.txt new file mode 100644 index 000000000..00eee0e6e --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/ox_inventory.txt @@ -0,0 +1,42 @@ +-- Place in ox_inventory/data/items.lua + ['tuna'] = { + label = 'Tuna', + weight = 650, + stack = true, + close = false, + }, + + ['salmon'] = { + label = 'Salmon', + weight = 350, + stack = true, + close = false, + }, + + ['trout'] = { + label = 'Trout', + weight = 250, + stack = true, + close = false, + }, + + ['anchovy'] = { + label = 'Anchovy', + weight = 50, + stack = true, + close = false, + }, + + ['fishbait'] = { + label = 'Fish Bait', + weight = 50, + stack = true, + close = false, + }, + + ['fishingrod'] = { + label = 'Fishing Rod', + weight = 800, + stack = true, + close = true, + }, \ No newline at end of file diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_limit.sql b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_limit.sql new file mode 100644 index 000000000..277d33f78 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_limit.sql @@ -0,0 +1,8 @@ +INSERT INTO `items` (`name`, `label`, `limit`) VALUES + ('fishingrod', 'Fishing Rod', 20), + ('fishbait', 'Fish Bait', 20), + ('anchovy', 'Anchovy', 20), + ('trout', 'Trout', 20), + ('salmon', 'Salmon', 20), + ('tuna', 'Tuna', 40) +; diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_weight.sql b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_weight.sql new file mode 100644 index 000000000..6cc2fb54e --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/ESX/sql/wasabi_fishing_weight.sql @@ -0,0 +1,8 @@ +INSERT INTO `items` (`name`, `label`, `weight`) VALUES + ('fishingrod', 'Fishing Rod', 20), + ('fishbait', 'Fish Bait', 20), + ('anchovy', 'Anchovy', 20), + ('trout', 'Trout', 20), + ('salmon', 'Salmon', 20), + ('tuna', 'Tuna', 40) +; diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/anchovy.png b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/anchovy.png new file mode 100644 index 0000000000000000000000000000000000000000..29bf86ac4a442546b3f918223fae637ec0e5c93d GIT binary patch literal 9009 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 literal 0 HcmV?d00001 diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/fishbait.png b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/fishbait.png new file mode 100644 index 0000000000000000000000000000000000000000..71e78ffa8681c3838a5a4ffac4cd0c7d4c03e1d2 GIT binary patch literal 11601 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 literal 0 HcmV?d00001 diff --git a/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/trout.png b/resources/[jobs]/[civ]/wasabi_fishing/Inventory_Items/InventoryImages/trout.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb24edcfea95372c0c22ed779acb1e41f236ed6 GIT binary patch literal 23219 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[Discord Banner 2](https://discordapp.com/api/guilds/1025493337031049358/widget.png?style=banner2) diff --git a/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/client.lua b/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/client.lua new file mode 100644 index 000000000..b03910a9f --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/client.lua @@ -0,0 +1,65 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- +if GetResourceState('es_extended') ~= 'started' then return end +ESX = exports['es_extended']:getSharedObject() +Framework, PlayerLoaded, PlayerData = 'esx', nil, {} + +RegisterNetEvent('esx:playerLoaded', function(xPlayer) + PlayerData = xPlayer + PlayerLoaded = true +end) + +RegisterNetEvent('esx:onPlayerSpawn', function() + TriggerEvent('wasabi_fishing:onPlayerSpawn') +end) + +AddEventHandler('esx:onPlayerDeath', function(data) + TriggerEvent('wasabi_fishing:onPlayerDeath') +end) + +RegisterNetEvent('esx:onPlayerLogout', function() + table.wipe(PlayerData) + PlayerLoaded = false +end) + +RegisterNetEvent('esx:setJob', function(job) + PlayerData.job = job +end) + +AddEventHandler('onResourceStart', function(resourceName) + if GetCurrentResourceName() ~= resourceName or not ESX.PlayerLoaded then return end + PlayerData = ESX.GetPlayerData() + PlayerLoaded = true +end) + +AddEventHandler('esx:setPlayerData', function(key, value) + if GetInvokingResource() ~= 'es_extended' then return end + PlayerData[key] = value +end) + +function HasGroup(filter) + local type = type(filter) + + if type == 'string' then + if PlayerData.job.name == filter then + return PlayerData.job.name, PlayerData.job.grade + end + else + local tabletype = table.type(filter) + + if tabletype == 'hash' then + local grade = filter[PlayerData.job.name] + + if grade and grade <= PlayerData.job.grade then + return PlayerData.job.name, PlayerData.job.grade + end + elseif tabletype == 'array' then + for i = 1, #filter do + if PlayerData.job.name == filter[i] then + return PlayerData.job.name, PlayerData.job.grade + end + end + end + end +end diff --git a/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/server.lua b/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/server.lua new file mode 100644 index 000000000..a345578a1 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/bridge/esx/server.lua @@ -0,0 +1,85 @@ +if GetResourceState('es_extended') ~= 'started' then return end +ESX = exports['es_extended']:getSharedObject() +Framework = 'esx' + +function GetPlayer(source) + return ESX.GetPlayerFromId(source) +end + +function KickPlayer(source, reason) + local player = GetPlayer(source) + return player.kick(reason) +end + +function HasGroup(source, filter) + local player = GetPlayer(source) + local type = type(filter) + + if type == 'string' then + if player.job.name == filter then + return player.job.name, player.job.grade + end + else + local tabletype = table.type(filter) + + if tabletype == 'hash' then + local grade = filter[player.job.name] + + if grade and grade <= player.job.grade then + return player.job.name, player.job.grade + end + elseif tabletype == 'array' then + for i = 1, #filter do + if player.job.name == filter[i] then + return player.job.name, player.job.grade + end + end + end + end +end + +function GetIdentifier(source) + local xPlayer = ESX.GetPlayerFromId(source) + return xPlayer.identifier +end + +function GetName(source) + local xPlayer = ESX.GetPlayerFromId(source) + return xPlayer.getName() +end + +function RegisterUsableItem(item, cb) + ESX.RegisterUsableItem(item, cb) +end + +function HasItem(source, item) + local player = GetPlayer(source) + local item = player.getInventoryItem(item) + if item ~= nil then + return item.count + else + return 0 + end +end + +function AddItem(source, item, count, slot, metadata) + local player = GetPlayer(source) + return player.addInventoryItem(item, count, metadata, slot) +end + +function RemoveItem(source, item, count, slot, metadata) + local player = GetPlayer(source) + player.removeInventoryItem(item, count, metadata, slot) +end + +function AddMoney(source, type, amount) + if type == 'cash' then type = 'money' end + local player = GetPlayer(source) + player.addAccountMoney(type, amount) +end + +function RemoveMoney(source, type, amount) + if type == 'cash' then type = 'money' end + local player = GetPlayer(source) + player.removeAccountMoney(type, amount) +end diff --git a/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/client.lua b/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/client.lua new file mode 100644 index 000000000..b94470352 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/client.lua @@ -0,0 +1,78 @@ +if GetResourceState('qb-core') ~= 'started' then return end +QBCore = exports['qb-core']:GetCoreObject() +Framework, PlayerLoaded, PlayerData = 'qb', nil, {} + +AddStateBagChangeHandler('isLoggedIn', '', function(_bagName, _key, value, _reserved, _replicated) + if value then + PlayerData = QBCore.Functions.GetPlayerData() + else + table.wipe(PlayerData) + end + PlayerLoaded = value +end) + +AddEventHandler('onResourceStart', function(resourceName) + if GetCurrentResourceName() ~= resourceName or not LocalPlayer.state.isLoggedIn then return end + PlayerData = QBCore.Functions.GetPlayerData() + PlayerLoaded = true +end) + + +AddEventHandler('gameEventTriggered', function(event, data) + if event ~= 'CEventNetworkEntityDamage' then return end + local victim, victimDied = data[1], data[4] + if not IsPedAPlayer(victim) then return end + local player = PlayerId() + if victimDied and NetworkGetPlayerIndexFromPed(victim) == player and (IsPedDeadOrDying(victim, true) or IsPedFatallyInjured(victim)) then + TriggerEvent('wasabi_fishing:onPlayerDeath') + end +end) + +RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() + TriggerEvent('wasabi_fishing:onPlayerSpawn') +end) + +RegisterNetEvent('QBCore:Player:SetPlayerData', function(newPlayerData) + if source ~= '' and GetInvokingResource() ~= 'qb-core' then return end + PlayerData = newPlayerData +end) + +function HasGroup(filter) + local groups = { 'job', 'gang' } + local type = type(filter) + + if type == 'string' then + for i = 1, #groups do + local data = PlayerData[groups[i]] + + if data.name == filter then + return data.name, data.grade.level + end + end + else + local tabletype = table.type(filter) + + if tabletype == 'hash' then + for i = 1, #groups do + local data = PlayerData[groups[i]] + local grade = filter[data.name] + + if grade and grade <= data.grade.level then + return data.name, data.grade.level + end + end + elseif tabletype == 'array' then + for i = 1, #filter do + local group = filter[i] + + for j = 1, #groups do + local data = PlayerData[groups[j]] + + if data.name == group then + return data.name, data.grade.level + end + end + end + end + end +end diff --git a/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/server.lua b/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/server.lua new file mode 100644 index 000000000..8d272bd35 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/bridge/qb/server.lua @@ -0,0 +1,98 @@ +if GetResourceState('qb-core') ~= 'started' then return end +QBCore = exports['qb-core']:GetCoreObject() +Framework = 'qb' + +function GetPlayer(source) + return QBCore.Functions.GetPlayer(source) +end + +function KickPlayer(source, reason) + QBCore.Functions.Kick(source, reason, true, true) +end + +function HasGroup(source, filter) + local groups = { 'job', 'gang' } + local player = GetPlayer(source) + local type = type(filter) + + if type == 'string' then + for i = 1, #groups do + local data = player.PlayerData[groups[i]] + + if data.name == filter then + return data.name, data.grade.level + end + end + else + local tabletype = table.type(filter) + + if tabletype == 'hash' then + for i = 1, #groups do + local data = player.PlayerData[groups[i]] + local grade = filter[data.name] + + if grade and grade <= data.grade.level then + return data.name, data.grade.level + end + end + elseif tabletype == 'array' then + for i = 1, #filter do + local group = filter[i] + + for j = 1, #groups do + local data = player.PlayerData[groups[j]] + + if data.name == group then + return data.name, data.grade.level + end + end + end + end + end +end + +function GetIdentifier(source) + local xPlayer = QBCore.Functions.GetPlayer(source) + return xPlayer.PlayerData.citizenid +end + +function GetName(source) + local xPlayer = QBCore.Functions.GetPlayer(source) + return xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname +end + +function RegisterUsableItem(item, cb) + QBCore.Functions.CreateUseableItem(item, cb) +end + +function HasItem(source, item) + local player = GetPlayer(source) + local item = player.Functions.GetItemByName(item) + if GetResourceState('ox_inventory') == 'started' then + return item?.count or 0 + else + return item?.amount or 0 + end +end + +function AddItem(source, item, count, slot, metadata) + local player = GetPlayer(source) + return player.Functions.AddItem(item, count, slot, metadata) +end + +function RemoveItem(source, item, count, slot, metadata) + local player = GetPlayer(source) + player.Functions.RemoveItem(item, count, slot, metadata) +end + +function AddMoney(source, type, amount) + if type == 'money' then type = 'cash' end + local player = GetPlayer(source) + player.Functions.AddMoney(type, amount) +end + +function RemoveMoney(source, type, amount) + if type == 'money' then type = 'cash' end + local player = GetPlayer(source) + player.Functions.RemoveMoney(type, amount) +end diff --git a/resources/[jobs]/[civ]/wasabi_fishing/client/client.lua b/resources/[jobs]/[civ]/wasabi_fishing/client/client.lua new file mode 100644 index 000000000..9a28b18e8 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/client/client.lua @@ -0,0 +1,303 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- +local fishing = false + +if Config.sellShop.enabled then + CreateThread(function() + local ped, textUI + CreateBlip(Config.sellShop.coords, 356, 1, Strings.sell_shop_blip, 0.80) + local point = lib.points.new({ + coords = Config.sellShop.coords, + distance = 30 + }) + + function point:nearby() + if self.currentDistance < self.distance then + if not ped then + lib.requestAnimDict('mini@strip_club@idles@bouncer@base', 100) + lib.requestModel(Config.sellShop.ped, 100) + ped = CreatePed(28, Config.sellShop.ped, Config.sellShop.coords.x, Config.sellShop.coords.y, Config.sellShop.coords.z, Config.sellShop.heading, false, false) + FreezeEntityPosition(ped, true) + SetEntityInvincible(ped, true) + SetBlockingOfNonTemporaryEvents(ped, true) + TaskPlayAnim(ped, 'mini@strip_club@idles@bouncer@base', 'base', 8.0, 0.0, -1, 1, 0, 0, 0, 0) + end + if self.currentDistance <= 1.8 then + if not textUI then + lib.showTextUI(Strings.sell_fish) + textUI = true + end + if IsControlJustReleased(0, 38) then + FishingSellItems() + end + elseif self.currentDistance >= 1.9 and textUI then + lib.hideTextUI() + textUI = nil + end + end + end + + function point:onExit() + if ped then + local model = GetEntityModel(ped) + SetModelAsNoLongerNeeded(model) + DeletePed(ped) + SetPedAsNoLongerNeeded(ped) + RemoveAnimDict('mini@strip_club@idles@bouncer@base') + ped = nil + end + end + end) +end + +-- Function to select bait from available options +local function SelectBait() + local availableBaits = {} + + -- Check all bait types + for _, bait in pairs(Config.bait.types) do + local hasItem = lib.callback.await('wasabi_fishing:checkItem', 100, bait.itemName) + if hasItem then + table.insert(availableBaits, bait) + end + end + + if #availableBaits == 0 then + return nil + end + + -- If only one bait type is available, use it directly + if #availableBaits == 1 then + return availableBaits[1] + end + + -- Create a menu for bait selection + local options = {} + for _, bait in pairs(availableBaits) do + table.insert(options, { + title = bait.label, + description = 'Use as fishing bait', + metadata = { + {label = 'Catch Bonus', value = '+' .. bait.catchBonus .. '%'}, + {label = 'Loss Chance', value = bait.loseChance .. '%'} + } + }) + end + + local selectedIndex = lib.showContext('bait_selection_menu', { + id = 'bait_selection_menu', + title = 'Select Fishing Bait', + options = options + }) + + if selectedIndex then + return availableBaits[selectedIndex] + else + return nil + end +end + +-- Function to handle the fishing process +local function StartFishingProcess(selectedBait, waterLoc) + fishing = true + + -- Create fishing rod prop + local model = `prop_fishing_rod_01` + lib.requestModel(model, 100) + local pole = CreateObject(model, GetEntityCoords(cache.ped), true, false, false) + AttachEntityToEntity(pole, cache.ped, GetPedBoneIndex(cache.ped, 18905), 0.1, 0.05, 0, 80.0, 120.0, 160.0, true, true, false, true, 1, true) + SetModelAsNoLongerNeeded(model) + + -- Load animations + lib.requestAnimDict('mini@tennis', 100) + lib.requestAnimDict('amb@world_human_stand_fishing@idle_a', 100) + + -- Initial casting animation + TaskPlayAnim(cache.ped, 'mini@tennis', 'forehand_ts_md_far', 1.0, -1.0, 1.0, 48, 0, 0, 0, 0) + Wait(3000) + TaskPlayAnim(cache.ped, 'amb@world_human_stand_fishing@idle_a', 'idle_c', 1.0, -1.0, 1.0, 11, 0, 0, 0, 0) + + -- Main fishing loop + while fishing do + Wait(0) + local unarmed = `WEAPON_UNARMED` + SetCurrentPedWeapon(cache.ped, unarmed) + ShowHelp(Strings.intro_instruction) + DisableControlAction(0, 24, true) + + -- Cast line + if IsDisabledControlJustReleased(0, 24) then + -- Casting animation + TaskPlayAnim(cache.ped, 'mini@tennis', 'forehand_ts_md_far', 1.0, -1.0, 1.0, 48, 0, 0, 0, 0) + TriggerEvent('wasabi_fishing:notify', Strings.waiting_bite, Strings.waiting_bite_desc, 'inform') + + -- Wait for fish to bite + local waitTime = math.random(Config.timeForBite.min, Config.timeForBite.max) + Wait(waitTime) + + -- Check if player is still fishing + if not fishing then + break + end + + TriggerEvent('wasabi_fishing:notify', Strings.got_bite, Strings.got_bite_desc, 'inform') + Wait(1000) + + -- Get fish data based on selected bait + local fishData = lib.callback.await('wasabi_fishing:getFishData', 100, selectedBait.itemName) + + -- Skill check to catch fish + if lib.skillCheck(fishData.difficulty) then + ClearPedTasks(cache.ped) + TryFish(fishData) + TaskPlayAnim(cache.ped, 'amb@world_human_stand_fishing@idle_a', 'idle_c', 1.0, -1.0, 1.0, 11, 0, 0, 0, 0) + + -- Check for bait loss + local loseChance = math.random(1,100) + if loseChance <= selectedBait.loseChance then + TriggerServerEvent('wasabi_fishing:loseBait', selectedBait.itemName) + TriggerEvent('wasabi_fishing:notify', Strings.bait_lost, Strings.bait_lost_desc, 'error') + + -- Check if we still have bait + local hasBait = lib.callback.await('wasabi_fishing:checkItem', 100, selectedBait.itemName) + if not hasBait then + TriggerEvent('wasabi_fishing:notify', Strings.no_more_bait, Strings.no_more_bait_desc, 'error') + + -- Try to select a new bait + local newBait = SelectBait() + if newBait then + selectedBait = newBait + TriggerEvent('wasabi_fishing:notify', Strings.new_bait, string.format(Strings.new_bait_desc, selectedBait.label), 'inform') + else + TriggerEvent('wasabi_fishing:notify', Strings.no_bait, Strings.no_bait_desc, 'error') + fishing = false + break + end + end + end + else + -- Failed to catch fish + local breakChance = math.random(1,100) + if breakChance < Config.fishingRod.breakChance then + TriggerServerEvent('wasabi_fishing:rodBroke') + TriggerEvent('wasabi_fishing:notify', Strings.rod_broke, Strings.rod_broke_desc, 'error') + ClearPedTasks(cache.ped) + fishing = false + break + end + TriggerEvent('wasabi_fishing:notify', Strings.failed_fish, Strings.failed_fish_desc, 'error') + end + elseif IsControlJustReleased(0, 194) then + -- Cancel fishing with backspace + ClearPedTasks(cache.ped) + TriggerEvent('wasabi_fishing:notify', Strings.fishing_canceled, Strings.fishing_canceled_desc, 'inform') + break + elseif #(GetEntityCoords(cache.ped) - waterLoc) > 30 then + -- Too far from water + TriggerEvent('wasabi_fishing:notify', Strings.too_far, Strings.too_far_desc, 'error') + break + end + end + + -- Clean up + fishing = false + DeleteObject(pole) + RemoveAnimDict('mini@tennis') + RemoveAnimDict('amb@world_human_stand_fishing@idle_a') +end + +RegisterNetEvent('wasabi_fishing:startFishing', function() + -- Check if player is in a valid state to fish + if IsPedInAnyVehicle(cache.ped) or IsPedSwimming(cache.ped) then + TriggerEvent('wasabi_fishing:notify', Strings.cannot_perform, Strings.cannot_perform_desc, 'error') + return + end + + -- Check if already fishing + if fishing then + TriggerEvent('wasabi_fishing:notify', Strings.already_fishing, Strings.already_fishing_desc, 'error') + return + end + + -- Check for water + local water, waterLoc = WaterCheck() + if not water then + TriggerEvent('wasabi_fishing:notify', Strings.no_water, Strings.no_water_desc, 'error') + return + end + + -- Select bait + local selectedBait = SelectBait() + if not selectedBait then + TriggerEvent('wasabi_fishing:notify', Strings.no_bait, Strings.no_bait_desc, 'error') + return + end + + -- Start fishing process + TriggerEvent('wasabi_fishing:notify', Strings.bait_selected, string.format(Strings.bait_selected_desc, selectedBait.label), 'inform') + StartFishingProcess(selectedBait, waterLoc) +end) + +-- Process fish with knife +RegisterNetEvent('wasabi_fishing:processFish', function(fishItem) + -- Check if player has knife + local hasKnife = lib.callback.await('wasabi_fishing:checkItem', 100, Config.processing.knifeItem) + if not hasKnife then + TriggerEvent('wasabi_fishing:notify', Strings.no_knife, Strings.no_knife_desc, 'error') + return + end + + -- Find processing data for this fish + local processData = nil + for _, data in pairs(Config.processing.products) do + if data.sourceItem == fishItem then + processData = data + break + end + end + + if not processData then + TriggerEvent('wasabi_fishing:notify', Strings.cannot_process, Strings.cannot_process_desc, 'error') + return + end + + -- Start processing animation + local playerPed = cache.ped + local coords = GetEntityCoords(playerPed) + + lib.requestAnimDict('anim@amb@business@coc@coc_unpack_cut@', 100) + TaskPlayAnim(playerPed, 'anim@amb@business@coc@coc_unpack_cut@', 'fullcut_cycle_v6_cokecutter', 8.0, -8.0, -1, 1, 0, false, false, false) + + -- Processing progress bar + if lib.progressBar({ + duration = 5000, + label = Strings.processing_fish, + useWhileDead = false, + canCancel = true, + disable = { + car = true, + move = true, + combat = true + }, + anim = { + dict = 'anim@amb@business@coc@coc_unpack_cut@', + clip = 'fullcut_cycle_v6_cokecutter' + }, + }) then + -- Success - server handles the actual item processing + TriggerServerEvent('wasabi_fishing:processItem', fishItem) + else + -- Cancelled + TriggerEvent('wasabi_fishing:notify', Strings.canceled, Strings.canceled_desc, 'error') + end + + ClearPedTasks(playerPed) + RemoveAnimDict('anim@amb@business@coc@coc_unpack_cut@') +end) + +RegisterNetEvent('wasabi_fishing:interupt', function() + fishing = false + ClearPedTasks(cache.ped) +end) + diff --git a/resources/[jobs]/[civ]/wasabi_fishing/client/functions.lua b/resources/[jobs]/[civ]/wasabi_fishing/client/functions.lua new file mode 100644 index 000000000..351213a56 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/client/functions.lua @@ -0,0 +1,36 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- + +ShowHelp = function(msg) + BeginTextCommandDisplayHelp('STRING') + AddTextComponentSubstringPlayerName(msg) + EndTextCommandDisplayHelp(0, false, true, -1) +end + +WaterCheck = function() + local headPos = GetPedBoneCoords(cache.ped, 31086, 0.0, 0.0, 0.0) + local offsetPos = GetOffsetFromEntityInWorldCoords(cache.ped, 0.0, 50.0, -25.0) + local water, waterPos = TestProbeAgainstWater(headPos.x, headPos.y, headPos.z, offsetPos.x, offsetPos.y, offsetPos.z) + return water, waterPos +end + +CreateBlip = function(coords, sprite, colour, text, scale) + local blip = AddBlipForCoord(coords) + SetBlipSprite(blip, sprite) + SetBlipColour(blip, colour) + SetBlipAsShortRange(blip, true) + SetBlipScale(blip, scale) + AddTextEntry(text, text) + BeginTextCommandSetBlipName(text) + EndTextCommandSetBlipName(blip) + return blip +end + +TryFish = function(data) + TriggerServerEvent('wasabi_fishing:tryFish', data) +end + +FishingSellItems = function() + TriggerServerEvent('wasabi_fishing:sellFish') +end diff --git a/resources/[jobs]/[civ]/wasabi_fishing/configuration/config.lua b/resources/[jobs]/[civ]/wasabi_fishing/configuration/config.lua new file mode 100644 index 000000000..0cf64147c --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/configuration/config.lua @@ -0,0 +1,146 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- + +local seconds, minutes = 1000, 60000 +Config = {} + +Config.checkForUpdates = true -- Check for updates? +Config.oldESX = false -- Nothing to do with qb / Essentially when set to true it disables the check of if player can carry item + +Config.sellShop = { + enabled = true, + coords = vec3(-1612.19, -989.18, 13.01-0.9), -- X, Y, Z Coords of where fish buyer will spawn + heading = 45.3, -- Heading of fish buyer ped + ped = 'cs_old_man2' -- Ped name here +} + +Config.bait = { + types = { + { + itemName = 'fishbait', + label = 'Standard Bait', + loseChance = 65, + catchBonus = 0 -- base chance + }, + { + itemName = 'worm_bait', + label = 'Worm', + loseChance = 50, + catchBonus = 10 -- 10% better catch chance + }, + { + itemName = 'bread_bait', + label = 'Bread', + loseChance = 75, + catchBonus = 5 -- 5% better catch chance + }, + { + itemName = 'artificial_lure', + label = 'Artificial Lure', + loseChance = 30, -- harder to lose + catchBonus = 15 -- 15% better catch chance + }, + { + itemName = 'young_salmon', + label = 'Young Salmon', + loseChance = 60, + catchBonus = 20, -- 20% better catch chance + exclusive = {'pufferfish'} -- can only catch pufferfish with this + } + }, + defaultBait = 'fishbait' -- Default bait item name +} + +Config.processing = { + knifeItem = 'weapon_knife', + products = { + { + sourceItem = 'tuna', + yield = { + { item = 'fish_fillet', amount = {3, 5} }, + { item = 'caviar', chance = 5 } -- 5% chance + } + }, + { + sourceItem = 'salmon', + yield = { + { item = 'fish_fillet', amount = {2, 4} }, + { item = 'caviar', chance = 15 } -- 15% chance + } + }, + { + sourceItem = 'trout', + yield = { + { item = 'fish_fillet', amount = {1, 3} }, + { item = 'caviar', chance = 3 } -- 3% chance + } + }, + { + sourceItem = 'anchovy', + yield = { + { item = 'fish_fillet', amount = {1, 2} } + -- No caviar from anchovy + } + }, + { + sourceItem = 'young_salmon', + yield = { + { item = 'fish_fillet', amount = {1, 1} } + -- No caviar from young salmon + } + }, + { + sourceItem = 'pufferfish', + yield = { + { item = 'fish_fillet', amount = {1, 3} }, + { item = 'caviar', chance = 25 } -- 25% chance + } + } + } +} + +Config.fish = { + { item = 'tuna', label = 'Tuna', price = {300, 550}, difficulty = {'medium', 'easy', 'easy'} }, + { item = 'salmon', label = 'Salmon', price = {235, 300}, difficulty = {'medium', 'easy'} }, + { item = 'trout', label = 'Trout', price = {190, 235}, difficulty = {'easy', 'easy'} }, + { item = 'anchovy', label = 'Anchovy', price = {100, 190}, difficulty = {'easy'} }, + { item = 'young_salmon', label = 'Young Salmon', price = {50, 100}, difficulty = {'easy'} }, + { item = 'pufferfish', label = 'Pufferfish', price = {500, 800}, difficulty = {'hard', 'hard', 'medium'} }, +} + +-- Add prices for processed items +Config.processedItems = { + { item = 'fish_fillet', label = 'Fish Fillet', price = {50, 100} }, + { item = 'caviar', label = 'Caviar', price = {300, 500} }, +} + + +Config.fishingRod = { + itemName = 'fishingrod', -- Item name of fishing rod + breakChance = 25 --Chance of breaking pole when failing skillbar (Setting to 0 means never break) +} + +Config.timeForBite = { -- Set min and max random range of time it takes for fish to be on the line. + min = 2 * seconds, + max = 20 * seconds +} + + +RegisterNetEvent('wasabi_fishing:notify') +AddEventHandler('wasabi_fishing:notify', function(title, message, msgType) + -- Place notification system info here, ex: exports['mythic_notify']:SendAlert('inform', message) + if not msgType then + lib.notify({ + title = title, + description = message, + type = 'inform' + }) + else + lib.notify({ + title = title, + description = message, + type = msgType + }) + end +end) diff --git a/resources/[jobs]/[civ]/wasabi_fishing/configuration/strings.lua b/resources/[jobs]/[civ]/wasabi_fishing/configuration/strings.lua new file mode 100644 index 000000000..c2d373a03 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/configuration/strings.lua @@ -0,0 +1,38 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- +Strings = { + intro_instruction = 'Press ~INPUT_ATTACK~ to cast line, ~INPUT_FRONTEND_RRIGHT~ to cancel.', + rod_broke = 'Rod Snapped', + rod_broke_desc = 'You pulled to hard and your fishing rod snapped!', + cannot_perform = 'Action Incomplete', + cannot_perform_desc = 'You cannot do this right now.', + failed = 'Failed', + failed_fish = 'You failed to catch fish!', + no_water = 'No Water', + no_water_desc = 'You are not facing any water.', + no_bait = 'Missing Bait', + no_bait_desc = 'You don\'t have fishing bait.', + bait_lost = 'Bait Lost', + bait_lost_desc = 'Fishing bait was lost.', + fish_success = 'Caught Fish', + fish_success_desc = 'You caught a %s!', + sell_shop_blip = 'Fish Market', + sell_fish = '[E] - Sell Fish', + kicked = 'Nice try, please do not attempt to exploit!', + sold_for = 'Sold Fish', + sold_for_desc = 'You sold %sx %s for $%s', + got_bite = 'Bite Detected', + got_bite_desc = 'Your pole has a fish on the line, get ready!', + waiting_bite = 'Awaiting Bite', + waiting_bite_desc = 'Please wait for a fish to bite your hook.', + cannot_carry = 'Cannot Carry', + cannot_carry_desc = 'You cannot carry reward!' + Strings.no_knife = 'No Knife' + Strings.no_knife_desc = 'You need a knife to process this fish.' + Strings.processing_success = 'Fish Processed' + Strings.processing_success_desc = 'You obtained %d %s from processing the fish.' + Strings.caviar_found = 'Caviar Found!' + Strings.caviar_found_desc = 'You found some valuable caviar while processing the fish!' + +} \ No newline at end of file diff --git a/resources/[jobs]/[civ]/wasabi_fishing/fxmanifest.lua b/resources/[jobs]/[civ]/wasabi_fishing/fxmanifest.lua new file mode 100644 index 000000000..9d4b7aa4c --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/fxmanifest.lua @@ -0,0 +1,19 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- + +fx_version 'cerulean' +game 'gta5' +lua54 'yes' + +version '2.0.7' +author 'wasabirobby' +description 'Wasabi ESX/QBCore Skill Based Fishing' + +shared_scripts { '@ox_lib/init.lua', 'configuration/*.lua' } + +client_scripts { 'bridge/**/client.lua', 'client/*.lua' } + +server_scripts { 'bridge/**/server.lua', 'server/*.lua' } + +dependencies { 'ox_lib' } diff --git a/resources/[jobs]/[civ]/wasabi_fishing/server/server.lua b/resources/[jobs]/[civ]/wasabi_fishing/server/server.lua new file mode 100644 index 000000000..8640b63b8 --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/server/server.lua @@ -0,0 +1,241 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- +local addCommas = function(n) + return tostring(math.floor(n)):reverse():gsub("(%d%d%d)","%1,") + :gsub(",(%-?)$","%1"):reverse() +end + +lib.callback.register('wasabi_fishing:checkItem', function(source, itemname) + local item = HasItem(source, itemname) + if item >= 1 then + return true + else + return false + end +end) + +lib.callback.register('wasabi_fishing:getFishData', function(source) + local data = Config.fish[math.random(#Config.fish)] + return data +end) + +RegisterNetEvent('wasabi_fishing:rodBroke', function() + RemoveItem(source, Config.fishingRod.itemName, 1) + TriggerClientEvent('wasabi_fishing:interupt', source) +end) + +RegisterNetEvent('wasabi_fishing:tryFish', function(data) + local xPole = HasItem(source, Config.fishingRod.itemName) + local xBait = HasItem(source, Config.bait.itemName) + if xPole > 0 and xBait > 0 then + local chance = math.random(1,100) + if chance <= Config.bait.loseChance then + RemoveItem(source, Config.bait.itemName, 1) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.bait_lost, Strings.bait_lost_desc, 'error') + end + if Framework == 'esx' and not Config.oldESX then + local player = GetPlayer(source) + if player.canCarryItem(data.item, 1) then + AddItem(source, data.item, 1) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.fish_success, string.format(Strings.fish_success_desc, data.label), 'success') + else + TriggerClientEvent('wasabi_fishing:notify', source, Strings.cannot_carry, Strings.cannot_carry_desc, 'error') + end + else + AddItem(source, data.item, 1) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.fish_success, string.format(Strings.fish_success_desc, data.label), 'success') + end + elseif xPole > 0 and xBait < 1 then + TriggerClientEvent('wasabi_fishing:interupt', source) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.no_bait, Strings.no_bait_desc, 'error') + elseif xPole < 1 then + KickPlayer(source, Strings.kicked) + end +end) + +RegisterNetEvent('wasabi_fishing:sellFish', function() + local playerPed = GetPlayerPed(source) + local playerCoord = GetEntityCoords(playerPed) + local distance = #(playerCoord - Config.sellShop.coords) + if distance == nil then + KickPlayer(source, Strings.kicked) + return + end + if distance > 3 then + KickPlayer(source, Strings.kicked) + return + end + for i=1, #Config.fish do + if HasItem(source, Config.fish[i].item) > 0 then + local rewardAmount = 0 + for j=1, HasItem(source, Config.fish[i].item) do + rewardAmount = rewardAmount + math.random(Config.fish[i].price[1], Config.fish[i].price[2]) + end + if rewardAmount > 0 then + AddMoney(source, 'money', rewardAmount) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.sold_for, (Strings.sold_for_desc):format(HasItem(source, Config.fish[i].item), Config.fish[i].label, addCommas(rewardAmount)), 'success') + RemoveItem(source, Config.fish[i].item, HasItem(source, Config.fish[i].item)) + end + end + end +end) + +RegisterUsableItem(Config.fishingRod.itemName, function(source) + TriggerClientEvent('wasabi_fishing:startFishing', source) +end) +-- Register usable items for all fish types for processing +for _, fish in pairs(Config.processing.products) do + RegisterUsableItem(fish.sourceItem, function(source) + local hasKnife = HasItem(source, Config.processing.knifeItem) + if hasKnife > 0 then + ProcessFish(source, fish) + else + TriggerClientEvent('wasabi_fishing:notify', source, Strings.no_knife, Strings.no_knife_desc, 'error') + end + end) +end + +-- Function to process fish +function ProcessFish(source, fishData) + -- Remove the fish + RemoveItem(source, fishData.sourceItem, 1) + + -- Add fish fillets + local filletYield = fishData.yield[1] + local filletAmount = math.random(filletYield.amount[1], filletYield.amount[2]) + + if Framework == 'esx' and not Config.oldESX then + local player = GetPlayer(source) + if player.canCarryItem(filletYield.item, filletAmount) then + AddItem(source, filletYield.item, filletAmount) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.processing_success, + string.format(Strings.processing_success_desc, filletAmount, GetItemLabel(filletYield.item)), 'success') + else + TriggerClientEvent('wasabi_fishing:notify', source, Strings.cannot_carry, Strings.cannot_carry_desc, 'error') + -- Give back the fish if they can't carry the fillets + AddItem(source, fishData.sourceItem, 1) + return + end + else + AddItem(source, filletYield.item, filletAmount) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.processing_success, + string.format(Strings.processing_success_desc, filletAmount, GetItemLabel(filletYield.item)), 'success') + end + + -- Check for caviar + for i=2, #fishData.yield do + local extraYield = fishData.yield[i] + if extraYield.item == 'caviar' and extraYield.chance then + local chance = math.random(1, 100) + if chance <= extraYield.chance then + if Framework == 'esx' and not Config.oldESX then + local player = GetPlayer(source) + if player.canCarryItem(extraYield.item, 1) then + AddItem(source, extraYield.item, 1) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.caviar_found, Strings.caviar_found_desc, 'success') + end + else + AddItem(source, extraYield.item, 1) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.caviar_found, Strings.caviar_found_desc, 'success') + end + end + end + end +end + +-- Modify the sellFish event to include processed items +RegisterNetEvent('wasabi_fishing:sellFish', function() + local playerPed = GetPlayerPed(source) + local playerCoord = GetEntityCoords(playerPed) + local distance = #(playerCoord - Config.sellShop.coords) + if distance == nil or distance > 3 then + KickPlayer(source, Strings.kicked) + return + end + + -- Sell fish + for i=1, #Config.fish do + SellItem(source, Config.fish[i]) + end + + -- Sell processed items + for i=1, #Config.processedItems do + SellItem(source, Config.processedItems[i]) + end +end) + +-- Helper function to sell items +function SellItem(source, itemData) + if HasItem(source, itemData.item) > 0 then + local rewardAmount = 0 + for j=1, HasItem(source, itemData.item) do + rewardAmount = rewardAmount + math.random(itemData.price[1], itemData.price[2]) + end + if rewardAmount > 0 then + AddMoney(source, 'money', rewardAmount) + TriggerClientEvent('wasabi_fishing:notify', source, Strings.sold_for, + (Strings.sold_for_desc):format(HasItem(source, itemData.item), itemData.label, addCommas(rewardAmount)), 'success') + RemoveItem(source, itemData.item, HasItem(source, itemData.item)) + end + end +end + +-- Modify the getFishData callback to handle bait types +lib.callback.register('wasabi_fishing:getFishData', function(source, baitType) + local baitData = nil + + -- Find the bait data + for _, bait in pairs(Config.bait.types) do + if bait.itemName == baitType then + baitData = bait + break + end + end + + if not baitData then + -- Use default bait data if the provided bait type is not found + for _, bait in pairs(Config.bait.types) do + if bait.itemName == Config.bait.defaultBait then + baitData = bait + break + end + end + end + + -- If using illegal bait, only catch pufferfish + if baitData.exclusive then + for _, fishType in pairs(baitData.exclusive) do + for _, fish in pairs(Config.fish) do + if fish.item == fishType then + return fish + end + end + end + end + + -- Otherwise, random fish with catch bonus + local availableFish = {} + for _, fish in pairs(Config.fish) do + -- Don't include exclusive fish types unless using the right bait + local isExclusive = false + for _, bait in pairs(Config.bait.types) do + if bait.exclusive then + for _, exclusiveFish in pairs(bait.exclusive) do + if fish.item == exclusiveFish then + isExclusive = true + break + end + end + end + if isExclusive then break end + end + + if not isExclusive then + table.insert(availableFish, fish) + end + end + + -- Apply catch bonus logic here if needed + return availableFish[math.random(#availableFish)] +end) diff --git a/resources/[jobs]/[civ]/wasabi_fishing/server/updater.lua b/resources/[jobs]/[civ]/wasabi_fishing/server/updater.lua new file mode 100644 index 000000000..4ccf173fe --- /dev/null +++ b/resources/[jobs]/[civ]/wasabi_fishing/server/updater.lua @@ -0,0 +1,63 @@ +-----------------For support, scripts, and more---------------- +--------------- https://discord.gg/wasabiscripts ------------- +--------------------------------------------------------------- + +local curVersion = GetResourceMetadata(GetCurrentResourceName(), "version") +local resourceName = "wasabi_fishing" + +if Config.checkForUpdates then + CreateThread(function() + if GetCurrentResourceName() ~= "wasabi_fishing" then + resourceName = "wasabi_fishing (" .. GetCurrentResourceName() .. ")" + end + end) + + CreateThread(function() + while true do + PerformHttpRequest("https://api.github.com/repos/wasabirobby/wasabi_fishing/releases/latest", CheckVersion, "GET") + Wait(3600000) + end + end) + + CheckVersion = function(err, responseText, headers) + local repoVersion, repoURL, repoBody = GetRepoInformations() + + CreateThread(function() + if curVersion ~= repoVersion then + Wait(4000) + print("^0[^3WARNING^0] " .. resourceName .. " is ^1NOT ^0up to date!") + print("^0[^3WARNING^0] Your Version: ^2" .. curVersion .. "^0") + print("^0[^3WARNING^0] Latest Version: ^2" .. repoVersion .. "^0") + print("^0[^3WARNING^0] Get the latest Version from: ^2" .. repoURL .. "^0") + print("^0[^3WARNING^0] Changelog:^0") + print("^1" .. repoBody .. "^0") + else + Wait(4000) + print("^0[^2INFO^0] " .. resourceName .. " is up to date! (^2" .. curVersion .. "^0)") + end + end) + end + + GetRepoInformations = function() + local repoVersion, repoURL, repoBody = nil, nil, nil + + PerformHttpRequest("https://api.github.com/repos/wasabirobby/wasabi_fishing/releases/latest", function(err, response, headers) + if err == 200 then + local data = json.decode(response) + + repoVersion = data.tag_name + repoURL = data.html_url + repoBody = data.body + else + repoVersion = curVersion + repoURL = "https://github.com/wasabirobby/wasabi_fishing" + end + end, "GET") + + repeat + Wait(50) + until (repoVersion and repoURL and repoBody) + + return repoVersion, repoURL, repoBody + end +end \ No newline at end of file