From d9fcb11930c9b1bd633f0923b017eac5b5cc6760 Mon Sep 17 00:00:00 2001 From: Mustache Dom <123716453+Mustachedom@users.noreply.github.com> Date: Sat, 16 Aug 2025 23:43:20 -0700 Subject: [PATCH] - `added` timeout function. any event you trigger puts a 3 second hold on the rest of the script for that player to ensure no injectors can endlessly spam and get things. if triggered while on cooldown a console print happens --- client/animationsandfunctions.lua | 1 - client/xtc.lua | 2 +- locales/en.lua | 1 + locales/uwu.lua | 2 +- server/cocaine.lua | 8 +++++-- server/crack.lua | 5 ++++ server/functions.lua | 19 +++++++++++++++ server/heroin.lua | 19 +++++++++++---- server/lsd.lua | 21 ++++++----------- server/mescaline.lua | 1 + server/meth.lua | 7 +++--- server/oxyruns.lua | 2 ++ server/pharma.lua | 1 + server/plantSpawns.lua | 7 ++---- server/weed.lua | 4 +++- server/xtc.lua | 39 +++++++++++-------------------- shared/config.lua | 2 +- 17 files changed, 83 insertions(+), 58 deletions(-) diff --git a/client/animationsandfunctions.lua b/client/animationsandfunctions.lua index a0b4c15..201b4b3 100644 --- a/client/animationsandfunctions.lua +++ b/client/animationsandfunctions.lua @@ -15,7 +15,6 @@ function EcstasyEffect() if IsPedRunning(PlayerPedId()) then SetPedToRagdoll(PlayerPedId(), math.random(1000, 3000), math.random(1000, 3000), 3, 0, 0, 0) end - startStamina = 0 end diff --git a/client/xtc.lua b/client/xtc.lua index 33d8b7a..b1f535e 100644 --- a/client/xtc.lua +++ b/client/xtc.lua @@ -132,7 +132,7 @@ for k, v in pairs(locations.xtcpress) do description = ps.lang('xtc.buySingle', d.cash), action = function() if not ps.progressbar(ps.lang('xtc.buyp'), 4000, 'uncuff') then return end - TriggerServerEvent('md-drugs:server:buypress', m) + TriggerServerEvent('md-drugs:server:buypress',k, m) end, } else diff --git a/locales/en.lua b/locales/en.lua index 23b6f03..7fa8406 100644 --- a/locales/en.lua +++ b/locales/en.lua @@ -9,6 +9,7 @@ Lang.Catches = { itemNeeded = 'You Need %s', cooldown = 'Slow Down Speed Racer', invalidItem = 'This Item Is Not Sold Here', + onCooldownWarn = '%s Attempted To Run Event %s \n while on cooldown' } Lang.coke = { diff --git a/locales/uwu.lua b/locales/uwu.lua index 9f137e6..50ab31e 100644 --- a/locales/uwu.lua +++ b/locales/uwu.lua @@ -5,7 +5,7 @@ Lang.Catches = { needItems = 'Aww... you don’t have all da items I need... 😢', notEnoughMoney = 'Oof, you’re too broke, sweetie 💸', buySuccess = 'Yay! You bought %s %s for $%s! 💖', - itemMissings = 'You need:\n%s', + itemMissings = 'You need:\n', itemNeeded = 'You need %s... plz go get it! 🥺', cooldown = 'Silly baka, slow down! ⏳', invalidItem = 'Eh? This item isn’t sold here, silly! 🙃', diff --git a/server/cocaine.lua b/server/cocaine.lua index 12a54d0..2340210 100644 --- a/server/cocaine.lua +++ b/server/cocaine.lua @@ -16,9 +16,10 @@ local cocaineRecipes = { tier3 = {take = {loosecokestagethree = 1, empty_weed_bag = 1}, give = {cokebaggystagethree = 1}}, } } + local cocaineLocations = { MakePowder = { - {loc = vector3(1086.20, -3195.30, -39.20), l = 1.0, w = 1.0, rot = 45.0, gang = "ballas"}, + {loc = vector3(1086.20, -3195.30, -39.20), l = 1.0, w = 1.0, rot = 45.0, gang = ""}, }, CuttingCoke = { {loc = vector3(1095.61, -3195.62, -39.13), l = 1.0, w = 1.0, rot = 45.0, offset = vec3(-1.782227, 0.445068, -0.502701), rotation = vector3(0,0,0), gang = ""}, @@ -39,8 +40,9 @@ end) RegisterServerEvent('md-drugs:server:makepowder', function(num) local src = source + if timeOut(src, 'md-drugs:server:makepowder') then return end if not ps.checkDistance(src, cocaineLocations.MakePowder[num].loc, 3.5) then - ps.notify(src, ps.lang('Catches.notIn'), 'error') + ps.warn(ps.lang('Catches.notIn', ps.getPlayerName(src)), 'md-drugs:server:makepowder') return end local tier = 'tier1' @@ -61,6 +63,7 @@ end) RegisterServerEvent('md-drugs:server:cutcokeone', function(num) local src = source local tier = 'tier1' + if timeOut(src, 'md-drugs:server:cutcokeone') then return end if not ps.checkDistance(src, cocaineLocations.CuttingCoke[num].loc, 2.5) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return @@ -87,6 +90,7 @@ end) RegisterServerEvent('md-drugs:server:bagcoke', function(num) local src = source local tier = 'tier1' + if timeOut(src, 'md-drugs:server:bagcoke') then return end if not ps.checkDistance(src, cocaineLocations.BaggingCoke[num].loc, 2.5) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return diff --git a/server/crack.lua b/server/crack.lua index 708c79c..e2165e8 100644 --- a/server/crack.lua +++ b/server/crack.lua @@ -20,16 +20,20 @@ local CrackLocations = { }, } + ps.registerCallback('md-drugs:server:GetCrackLocations', function() return CrackLocations end) + RegisterServerEvent('md-drugs:server:makecrackone', function(num) local src = source local tier = 'tier1' + if timeOut(src, 'md-drugs:server:makecrackone') then return end if not ps.checkDistance(src, CrackLocations.makecrack[num].loc, 2.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return end + if Config.TierSystem then local crackTiers = { {item = 'loosecoke', tier = 'tier1'}, @@ -53,6 +57,7 @@ end) RegisterServerEvent('md-drugs:server:bagcrack', function(num) local src = source local tier = 'tier1' + if timeOut(src, 'md-drugs:server:bagcrack') then return end if not ps.checkDistance(src, CrackLocations.bagcrack[num].loc, 2.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return diff --git a/server/functions.lua b/server/functions.lua index 1a6b5c9..48e3428 100644 --- a/server/functions.lua +++ b/server/functions.lua @@ -1,3 +1,22 @@ +local timeOutPlayers = {} + +local function timeOutThread(src) + CreateThread(function() + timeOutPlayers[ps.getIdentifier(src)] = true + Wait(3000) + timeOutPlayers[ps.getIdentifier(src)] = nil + end) +end + +function timeOut(src, event) + if timeOutPlayers[ps.getIdentifier(src)] then + ps.warn(ps.lang('Catches.onCooldownWarn', ps.getPlayerName(src), event)) + return true + end + timeOutThread(src) + return false +end + function verifyHas(source, items) local need = 0 local have = 0 diff --git a/server/heroin.lua b/server/heroin.lua index 5ebbba7..2938520 100644 --- a/server/heroin.lua +++ b/server/heroin.lua @@ -37,13 +37,14 @@ local heroinLocations = { } } +local prices = { + heroinlabkitprice = 10000 +} + ps.registerCallback('md-drugs:server:GetHeroinLocations', function(source) return heroinLocations end) -local prices = { - heroinlabkitprice = 10000 -} ps.registerCallback('removeCleaningkit', function(source) for k, v in pairs(heroinLabKits) do @@ -57,6 +58,8 @@ end) RegisterServerEvent('md-drugs:server:dryplant', function(num) local src = source + + if timeOut(src, 'md-drugs:server:dryplant') then return end if not ps.checkDistance(src, heroinLocations.dryplant[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return @@ -81,6 +84,9 @@ end) RegisterServerEvent('md-drugs:server:cutheroin', function(num) local src = source + + if timeOut(src, 'md-drugs:server:cutheroin') then return end + if not ps.checkDistance(src, heroinLocations.cutheroinone[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return @@ -112,6 +118,7 @@ end) RegisterServerEvent('md-drugs:server:getheroinlabkit', function(num) local src = source + if timeOut(src, 'md-drugs:server:getheroinlabkit') then return end if not ps.checkDistance(src, heroinLocations.buyKit[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return @@ -165,8 +172,12 @@ end) RegisterServerEvent('md-drugs:server:heatliquidheroin', function() local src = source + + if timeOut(src, 'md-drugs:server:heatliquidheroin') then return end + if not hasHKit(src) then return end if not ps.hasItem(src, 'emptyvial', 1) then return end + if Config.TierSystem then local itemList = { heroincut = 'tier1', @@ -212,6 +223,7 @@ end) RegisterServerEvent('md-drugs:server:fillneedle', function(num) local src = source + if timeOut(src, 'md-drugs:server:fillneedle') then return end if not ps.checkDistance(src, heroinLocations.fillneedle[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), 'error') return @@ -244,7 +256,6 @@ end) RegisterServerEvent('md-drugs:server:failheroin', function() local src = source - --Log(ps.getPlayerName(src) ..' Sucks And Burned Their Heroin', 'heroin') if Config.TierSystem then local itemList = { heroinvial = 1, diff --git a/server/lsd.lua b/server/lsd.lua index f891533..6d47fec 100644 --- a/server/lsd.lua +++ b/server/lsd.lua @@ -31,37 +31,25 @@ ps.registerCallback('md-drugs:server:GetLSDLocations', function(source) return lsdLocations end) -local timedOut = {} - -local function timeout(src, time) - timedOut[src] = true - CreateThread(function() - Wait(time) - timedOut[src] = nil - end) -end - local lsdTables = {} RegisterServerEvent('md-drugs:server:getlysergic', function(num) local src = source - if timedOut[src] then return end + if timeOut(src, 'md-drugs:server:getlysergic') then return end if not ps.checkDistance(src, lsdLocations.lysergicacid[num].loc, 2.0) then ps.notify(src, ps.lang('Catches.notIn'), "error") return end - timeout(src, 3000) ps.addItem(src, 'lysergic_acid', 2) end) RegisterServerEvent('md-drugs:server:getdiethylamide', function(num) local src = source - if timedOut[src] then return end + if timeOut(src, 'md-drugs:server:getdiethylamide') then return end if not ps.checkDistance(src, lsdLocations.diethylamide[num].loc, 2.0) then ps.notify(src, ps.lang('Catches.notIn'), "error") return end - timeout(src, 3000) ps.addItem(src, 'diethylamide', 2) end) @@ -108,6 +96,7 @@ end) RegisterServerEvent('md-drugs:server:heatliquid', function() local src = source if not hasLabKit(src) then return end + if timeOut(src, 'md-drugs:server:heatliquid') then return end if not ps.craftItem(src, lsdRecipes['vial']['heat']) then verifyHas(src, lsdRecipes['vial']['heat'].take) return @@ -126,6 +115,7 @@ end) RegisterServerEvent('md-drugs:server:refinequalityacid', function() local src = source if not hasLabKit(src) then return end + if timeOut(src, 'md-drugs:server:refinequalityacid') then return end if not ps.hasItem(src, 'lsd_one_vial', 1) then return end if Config.TierSystem then local lsd = tonumber(getRep(src, 'lsd')) @@ -170,6 +160,7 @@ end) RegisterServerEvent('md-drugs:server:gettabpaper', function(num) local src = source + if timeOut(src, 'md-drugs:server:gettabpaper') then return end if not ps.checkDistance(src, lsdLocations.gettabs[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), "error") return @@ -183,6 +174,7 @@ end) RegisterServerEvent('md-drugs:server:getlabkit', function(num) local src = source + if timeOut(src, 'md-drugs:server:getlabkit') then return end if ps.hasItem(src,'lsdlabkit', 1) then return end @@ -199,6 +191,7 @@ end) RegisterServerEvent('md-drugs:server:maketabpaper', function() local src = source + if timeOut(src, 'md-drugs:server:maketabpaper') then return end if not hasLabKit(src) then return end if not ps.hasItem(src,'tab_paper', 1) then return end local vialdata = { diff --git a/server/mescaline.lua b/server/mescaline.lua index c9a3ddf..6eae3e2 100644 --- a/server/mescaline.lua +++ b/server/mescaline.lua @@ -17,6 +17,7 @@ end) RegisterNetEvent("md-drugs:server:drymescaline", function(num) local src = source + if timeOut(src, 'md-drugs:server:drymescaline') then return end if not ps.checkDistance(src, mescalineLocation.DryOutMescaline[num].loc, 3.0) then ps.notify(src, ps.lang('Catches.notIn'), "error") return diff --git a/server/meth.lua b/server/meth.lua index c10ad0d..aa6de91 100644 --- a/server/meth.lua +++ b/server/meth.lua @@ -87,6 +87,7 @@ end) RegisterServerEvent('md-drugs:server:getmeth', function(num) local src = source + if timeOut(src, 'md-drugs:server:getmeth') then return end if not ps.checkDistance(src, methLocs.BagMeth[num].loc, 2.5) then ps.notify(src, ps.lang('Catches.notIn'), "error") return @@ -103,8 +104,8 @@ RegisterServerEvent('md-drugs:server:geteph', function(num) ps.notify(src, ps.lang('Catches.notIn'), "error") return end - if not coolDown(ps.getIdentifier(src)) then return ps.notify(src, ps.lang('meth.onCooldown'), "error") end - ps.addItem(src, 'ephedrine', 1) + if timeOut(src, 'md-drugs:server:geteph') then return end + ps.addItem(src, 'ephedrine', 1) end) RegisterServerEvent('md-drugs:server:getace', function(num) @@ -113,7 +114,7 @@ RegisterServerEvent('md-drugs:server:getace', function(num) ps.notify(src, ps.lang('Catches.notIn'), "error") return end - if not coolDown(ps.getIdentifier(src)) then return ps.notify(src, ps.lang('meth.onCooldown'), "error") end + if timeOut(src, 'md-drugs:server:getace') then return end ps.addItem(src, 'acetone', 1) end) diff --git a/server/oxyruns.lua b/server/oxyruns.lua index b3b3c41..b2ad36d 100644 --- a/server/oxyruns.lua +++ b/server/oxyruns.lua @@ -28,6 +28,7 @@ local oxyLocs = { ps.registerCallback('md-drugs:server:GetOxyLocs', function(source) return oxyLocs end) + ps.registerCallback('md-drugs:server:payfortruck', function(source) local src = source if ps.removeMoney(src, 'cash', prices.payfortruck) or ps.removeMoney(src, 'bank', prices.payfortruck) then @@ -43,6 +44,7 @@ end) RegisterServerEvent('md-drugs:server:giveoxybox', function() local src = source + if timeOut(src, 'md-drugs:server:giveoxybox') then return end if not onRoute[src] then ps.notify(src, ps.lang('oxy.notOn'), "error") return diff --git a/server/pharma.lua b/server/pharma.lua index 340ebf6..66fbc64 100644 --- a/server/pharma.lua +++ b/server/pharma.lua @@ -56,6 +56,7 @@ end RegisterServerEvent('md-drugs:server:fillprescription', function(num) local src = source + if timeOut(src, 'md-drugs:server:fillprescription') then return end if not ps.checkDistance(src, pharmaLocations.FillPrescription[num].loc, 3.5) then return ps.notify(src, ps.lang('Catches.notIn'), "error") end diff --git a/server/plantSpawns.lua b/server/plantSpawns.lua index 5b1e2fc..627f66d 100644 --- a/server/plantSpawns.lua +++ b/server/plantSpawns.lua @@ -18,6 +18,7 @@ local function propsLabels(drugType) return drugModels[drugType] end end + local plants = { cocaine = { { location = vector3(1474.25, -2643.87, 42.88), heading = 334.49, model = propsLabels('cocaine'), taken = false }, @@ -123,7 +124,6 @@ local plantData = { plants.cocaine[loc].taken = false GlobalState.CocaPlant = plants.cocaine TriggerClientEvent('coke:respawnCane', -1, loc) - --Log('Coca Plant Respawned At ' .. plants.cocaine[loc].location, 'coke') end) end, allow = Config.Drugs.cocaine @@ -143,7 +143,6 @@ local plantData = { plants.heroin[loc].taken = false GlobalState.PoppyPlants = plants.heroin TriggerClientEvent('heroin:respawnCane', -1, loc) - --Log('Heroin Plant Respawned At ' .. plants.heroin[loc].location, 'heroin') end) end, allow = Config.Drugs.heroin @@ -163,7 +162,6 @@ local plantData = { plants.mescaline[loc].taken = false GlobalState.Mescaline = plants.mescaline TriggerClientEvent('Mescaline:respawnCane', -1, loc) - --Log('Mescaline Plant Respawned At ' .. plants.mescaline[loc].location, 'mescaline') end) end, allow = Config.Drugs.mescaline @@ -183,7 +181,6 @@ local plantData = { plants.shrooms[loc].taken = false GlobalState.shrooms = plants.shrooms TriggerClientEvent('shrooms:respawnCane', -1, loc) - --Log('Shroom Respawned At ' .. plants.shrooms[loc].location, 'shrooms') end) end, allow = Config.Drugs.shrooms @@ -203,7 +200,6 @@ local plantData = { plants.weed[loc].taken = false GlobalState.WeedPlant = plants.weed TriggerClientEvent('weed:respawnCane', -1, loc) - --Log('Weed Plant Respawned At ' .. plants.weed[loc].location, 'weed') end) end, allow = Config.Drugs.weed @@ -215,6 +211,7 @@ for k, v in pairs (plantData) do v.globalState() RegisterNetEvent(v.label ..":pickupCane", function(loc) local src = source + if timeOut(src, v.label .. ":pickupCane") then return end if ps.checkDistance(src, v.plants[loc].location, 5.0) then if not v.plants[loc].taken then v.plants[loc].taken = true diff --git a/server/weed.lua b/server/weed.lua index ada2aab..7e974f7 100644 --- a/server/weed.lua +++ b/server/weed.lua @@ -75,6 +75,7 @@ end) RegisterServerEvent('md-drugs:server:dryoutweed', function() local src = source + if timeOut(src, 'md-drugs:server:dryoutweed') then return end if ps.removeItem(src,"wetcannabis", 1) then ps.addItem(src,"drycannabis", 1) else @@ -96,6 +97,7 @@ end RegisterServerEvent('md-drugs:server:MakeWeedItems', function(data) local src = source + if timeOut(src, 'md-drugs:server:MakeWeedItems') then return end if not ps.craftItem(src, weed[data.table][data.item]) then verifyHas(src, weed[data.table][data.item].take) return @@ -126,7 +128,7 @@ end) ps.createUseable("mdwoods", function(source, item) local src = source - local check = ps.callback('md-drugs:client:uncuff', src, ps.lang('weed.crackBlunt')) + local check = ps.callback('md-drugs:client:uncuff', src, ps.lang('weed.crackBlunt')) if not check then return end if ps.removeItem(src, "mdwoods",1 ) then ps.addItem(src, "bluntwrap", 5) diff --git a/server/xtc.lua b/server/xtc.lua index 77a57aa..dc1dd68 100644 --- a/server/xtc.lua +++ b/server/xtc.lua @@ -78,15 +78,6 @@ local function craft(source, tbl, item) end local activePresses = {} -local timeout = {} - -local function timeOut(src) - CreateThread(function() - timeout[ps.getIdentifier(src)] = true - Wait(3000) - timeout[ps.getIdentifier(src)] = nil - end) -end RegisterServerEvent('md-drugs:server:stealisosafrole', function(num) local src = source @@ -94,11 +85,7 @@ RegisterServerEvent('md-drugs:server:stealisosafrole', function(num) ps.notify(src, ps.lang('Checks.notIn'), "error") return end - if timeout[ps.getIdentifier(src)] then - ps.notify(src, ps.lang('Catches.cooldown'), 'error') - return - end - timeOut(src) + if timeOut(src, 'md-drugs:server:stealisosafrole') then return end ps.addItem(src, "isosafrole", 1) end) @@ -108,11 +95,7 @@ RegisterServerEvent('md-drugs:server:stealmdp2p', function(num) ps.notify(src, ps.lang('Checks.notIn'), "error") return end - if timeout[ps.getIdentifier(src)] then - ps.notify(src, ps.lang('Catches.cooldown'), 'error') - return - end - timeOut(src) + if timeOut(src, 'md-drugs:server:stealmdp2p') then return end ps.addItem(src, "mdp2p", 1) end) @@ -146,6 +129,7 @@ RegisterServerEvent('md-drugs:server:getpressback', function() local src = source if not activePresses[ps.getIdentifier(src)] then return end local press = activePresses[ps.getIdentifier(src)] + if not ps.checkDistance(src, press.loc, 2.0) then return end ps.addItem(src, press.get, 1) activePresses[ps.getIdentifier(src)] = nil end) @@ -156,11 +140,18 @@ RegisterServerEvent('md-drugs:server:makextc', function(data) ps.notify(src, ps.lang('xtc.noPressOut'), 'error') return end + if timeOut(src, 'md-drugs:server:makextc') then return end + if not ps.checkDistance(src, activePresses[ps.getIdentifier(src)].loc, 2.0) then return end craft(src, RecipeList[activePresses[ps.getIdentifier(src)].press][data], data) end) -RegisterServerEvent('md-drugs:server:buypress', function() +RegisterServerEvent('md-drugs:server:buypress', function(loc, item) local src = source + if not ps.checkDistance(src, xtcLocations.xtcpress[loc].loc, 2.0) then + ps.notify(src, ps.lang('Catches.notIn'), "error") + return + end + if timeOut(src, 'md-drugs:server:buypress') then return end if ps.removeMoney(src,"cash", RecipeList.presses['singlepress'].cash) then ps.addItem(src, "singlepress", 1) else @@ -170,6 +161,7 @@ end) RegisterServerEvent('md-drugs:server:upgradepress', function(data) local src = source + if timeOut(src, 'md-drugs:server:upgradepress') then return end if not ps.checkDistance(src, xtcLocations.xtcpress[data].loc, 2.0) then ps.notify(src, ps.lang('Catches.notIn'), "error") return @@ -187,11 +179,7 @@ RegisterServerEvent('md-drugs:server:makingrawxtc', function(num) ps.notify(src, ps.lang('Checks.notIn'), "error") return end - if timeout[ps.getIdentifier(src)] then - ps.notify(src, ps.lang('Catches.cooldown'), 'error') - return - end - timeOut(src) + if timeOut(src, 'md-drugs:server:makingrawxtc') then return end if not ps.craftItem(src, RecipeList.raw.raw_xtc) then return end end) @@ -211,6 +199,7 @@ end RegisterServerEvent('md-drugs:server:stamp', function(num, color) local src = source if not ps.checkDistance(src, xtcLocations.stamp[num].loc, 3.0) then return end + if timeOut(src, 'md-drugs:server:stamp') then return end local item = getColor(color) local colors = { white = 'white_xtc', diff --git a/shared/config.lua b/shared/config.lua index 0327c47..3b63580 100644 --- a/shared/config.lua +++ b/shared/config.lua @@ -1,6 +1,6 @@ Config = {} --Ignore. ps = exports.ps_lib:init() -ps.loadLangs("uwu") +ps.loadLangs("en") Config.respawnTime = 100 -- Seconds Config.Fuel = "LegacyFuel" -- type the name of script you use i.e. ps-fuel, cdn-fuel, LegacyFuel, ox_fuel