finished locales EN

This commit is contained in:
Mustache Dom committed 2025-08-09 03:10:00 -06:00
1 parent 37f86bf50d
commit 683eaff7de
46 files changed
+949 -1033

No files matched your search

+27
View File
@@ -0,0 +1,27 @@
local function spawn()
local location, menus = ps.callback('md-drugs:server:GetMerchant')
local model = 's_m_m_trucker_01'
ps.requestModel(model)
local ped = CreatePed(4, model, location.x, location.y, location.z, location.w, false, true)
Freeze(ped, true, location.w)
ps.entityTarget(ped, {
{
label = ps.lang('merchant.targetOpen'),
action = function()
local options = {}
for k, v in pairs (menus) do
options[#options+1] = {
title = ps.getLabel(k),
description = '$'..v,
action = function()
ps.triggerServerEvent('md-drugs:server:purchaseGoods', k)
end
}
end
ps.menu('Travelling Merchant', 'Travelling Merchant', options)
end
}
})
end
spawn()
-22
View File
@@ -87,25 +87,3 @@ function AlienEffect()
StopScreenEffect("DrugsMichaelAliensFight")
StopScreenEffect("DrugsMichaelAliensFightOut")
end
function SetUpPeds()
AddRelationshipGroup('setups')
local ped = GetEntityCoords(PlayerPedId())
local peds = {
{x = ped.x+3, y = ped.y-5, z = ped.z-1, },
{x = ped.x+6, y = ped.y-10, z = ped.z-1,},
{x = ped.x+-2,y = ped.y+5, z = ped.z-1,},
{x = ped.x+8, y = ped.y-12, z = ped.z-1,},
{x = ped.x+5, y = ped.y-2, z = ped.z-1, },
{x = ped.x+2, y = ped.y-20, z = ped.z-1,},
{x = ped.x+1, y = ped.y-10, z = ped.z-1,},
}
for i = 1, #peds do
local k = peds[i]
i = CreatePed(0, "g_m_y_famdnf_01", k.x, k.y, k.z, 90.0, true, true)
SetPedRelationshipGroupHash(i, 'setups')
GiveWeaponToPed(i, "weapon_pistol", 1, false, true)
TaskCombatPed(i, PlayerPedId(), 0, 16)
SetPedCombatAttributes(i, 46, true)
end
end
+15 -9
View File
@@ -114,14 +114,14 @@ end
for k, v in pairs (locations.MakePowder) do
ps.boxTarget('cocaplant'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('.targets.coke.pick'),
label = ps.lang('coke.makePow'),
icon = 'fa-solid fa-seedling',
action = function()
if not ps.hasItem('coca_leaf') then
ps.notify('You Need A Coke Leaf')
ps.notify(ps.lang('coke.noleaf'), 'error')
return
end
if not ps.progressbar(ps.lang('Coke.makepow'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('coke.makePow'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:makepowder", k)
end,
canInteract = function()
@@ -134,7 +134,7 @@ end
for k, v in pairs (locations.CuttingCoke) do
ps.boxTarget('cutcoke'..k, v.loc, {length = 1.0, width = 1.0, height = 1.0, rotation = 180.0}, {
{
label = ps.lang('targets.coke.cut'),
label = ps.lang('coke.targetCutCoke'),
icon = 'fa-solid fa-mortar-pestle',
action = function()
CutCoke(v.loc, v.offset, v.rotation)
@@ -151,7 +151,7 @@ end
for k, v in pairs (locations.BaggingCoke) do
ps.boxTarget('bagcoke'..k, v.loc, {length = 1.0, width = 1.0, height = 1.0, rotation = 180.0}, {
{
label = ps.lang('targets.coke.bag'),
label = ps.lang('coke.targetBagCoke'),
icon = 'fa-solid fa-sack-xmark',
action = function()
BagCoke(v.loc, v.offset, v.rotation)
@@ -169,19 +169,25 @@ for k, v in pairs (locations.cokeTele) do
ps.boxTarget('coke_tele'..k, v.inside, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-door-open',
label = ps.lang('targets.coke.telein'),
label = ps.lang('coke.teleOut'),
action = function()
SetEntityCoords(PlayerPedId(), v.outside)
end
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
ps.boxTarget('coke_teleout'..k, v.outside, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-door-closed',
label = ps.lang('targets.coke.teleout'),
label = ps.lang('coke.teleIn'),
action = function()
SetEntityCoords(PlayerPedId(), v.inside)
end
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
end
+1 -3
View File
@@ -1,7 +1,7 @@
ps.registerCallback('md-drugs:client:consumedrugs', function(time, effect, anim, progresstext, status, item)
if not progressbar(progresstext .. GetLabel(item).. "!", time, anim ) then return end
if not progressbar(progresstext .. ps.getLabel(item).. "!", time, anim ) then return end
for k, v in pairs (status) do
if k == 'health' then
local cur = GetEntityHealth(PlayerPedId())
@@ -56,7 +56,5 @@ RegisterNetEvent('md-drugs:client:applyFeeling', function(effect)
CokeBaggyEffect()
elseif effect == "trevor" then
TrevorEffect()
else
end
end)
+8 -8
View File
@@ -10,7 +10,7 @@ end
local function sellDrug(item, amount, price, targ)
-- PoliceCall(20)
if ps.vehicleData() then
ps.notify(ps.lang('Cornerselling.inveh', 'error'))
ps.notify(ps.lang('Cornerselling.inVeh'), 'error')
walkAway(targ)
return
end
@@ -47,7 +47,7 @@ local function findPed()
buyers[targ] = true
ps.drawText('Waiting For Customer')
ps.drawText(ps.lang('Cornerselling.wait'))
repeat
Wait(1000)
@@ -89,7 +89,7 @@ local function Cornersell()
return
end
ps.drawText('Searching For Nearby Customers')
ps.drawText(ps.lang('Cornerselling.searching'))
local targ = findPed()
local data = ps.callback('md-drugs:server:cornerselling:getAvailableDrugs', targ)
@@ -105,7 +105,7 @@ local function Cornersell()
local got = false
ps.entityTarget(targ, {
{
label = "Take Back Drugs",
label = ps.lang('Cornerselling.targetTakeBack'),
icon ="fa-solid fa-money-bill",
action = function()
got = true
@@ -124,7 +124,7 @@ local function Cornersell()
FreezeEntityPosition(targ, true)
ps.entityTarget(data.ped, {
{
label = string.format(ps.lang('targets.CornerSell.sell', data.amount, ps.getLabel(data.item), data.price)),
label = string.format(ps.lang('Cornerselling.targetSell'), data.amount, ps.getLabel(data.item), data.price),
icon ="fa-solid fa-money-bill",
action = function()
sellDrug(data.item, data.amount, data.price, targ)
@@ -137,7 +137,7 @@ local function Cornersell()
end,
},
{
label = ps.lang('targets.CornerSell.deny'),
label = ps.lang('Cornerselling.targetDeny'),
icon = "fa-solid fa-person-harassing",
action = function()
deny(targ)
@@ -161,14 +161,14 @@ RegisterNetEvent('md-drugs:client:cornerselling', function()
ps.notify(ps.lang('Cornerselling.stopped', 'error'))
else
sell = true
ps.notify(ps.lang('Cornerselling.started', 'success'))
ps.notify(ps.lang('Cornerselling.start', 'success'))
Cornersell()
end
end)
CreateThread(function()
for k, v in pairs (QBConfig.NoSellZones) do
local box = lib.zones.box({ coords = v.loc, size = vec3(v.width, v.length, v.height), rotation = 180.0, debug = false,
local box = ps.zones.box({ coords = v.loc, size = vec3(v.width, v.length, v.height), rotation = 180.0, debug = false,
onEnter = function() inZone = true end, onExit = function() inZone = false end})
end
end)
+4 -4
View File
@@ -2,12 +2,12 @@ local locations = ps.callback('md-drugs:server:GetCrackLocations')
for k, v in pairs (locations.makecrack) do
ps.boxTarget('makeCrack'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.crack.makecrack'),
label = ps.lang('crack.targetMake'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('bakingsoda') then return end
if not minigame() then TriggerServerEvent("md-drugs:server:failcrackone", k) return end
if not ps.progressbar(ps.lang('Crack.makecrack'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('crack.cook'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:makecrack", k)
end,
canInteract = function()
@@ -21,11 +21,11 @@ end
for k, v in pairs (locations.bagcrack) do
ps.boxTarget('bagCrack'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.crack.bagcrack'),
label = ps.lang('crack.targetBag'),
icon = 'fa-solid fa-weight-scale',
action = function()
if not ps.hasItem('empty_weed_bag') then return end
if not ps.progressbar(ps.lang('Crack.bagcrack'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('crack.bag'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:bagcrack", k)
end,
canInteract = function()
+38 -23
View File
@@ -1,33 +1,48 @@
local isActive = false
local dealer = {}
RegisterNetEvent('md-drugs:client:opendealermenu', function()
local rep = GetRep()
makeMenu('dealermenu', rep)
lib.showContext('dealermenu')
end)
local function SpawnDealer()
local getDealers = ps.callback('md-drugs:server:getDealers')
for k,v in pairs(getDealers) do
local Ped = "g_m_y_famdnf_01"
lib.requestModel(Ped, Config.RequestModelTime)
ps.requestModel(Ped, Config.RequestModelTime)
local loc = json.decode(v.coords)
dealer[k] = CreatePed(0, Ped,loc.x,loc.y, loc.z-1, loc.h, false, false)
Freeze(dealer[k], true, loc.h)
AddMultiModel(dealer[k], {
{ icon = 'fas fa-user-secret', label = string.format(Lang.targets.Delivery.Deliver, v.name),
action = function()
local bool, item, amount, coords = ps.callback('md-drugs:server:GetDeliveryItem', false, k)
if bool then
Email(Lang.Delivery.emailn, Lang.Delivery.emailsub, string.format(Lang.Delivery.emailcon, amount, GetLabel(item)))
TriggerEvent('md-drugs:client:setLocation', {bool = bool, item = item, amount = amount, coords = coords})
end
end,
},
{ icon = "fa-solid fa-store", label = string.format(Lang.targets.Delivery.open, v.name),
action = function() TriggerEvent('md-drugs:client:opendealermenu') end,
}}, dealer[k])
ps.entityTarget(dealer[k], {
{
icon = 'fas fa-user-secret',
label = ps.lang('Deliveries.targetGetDel'),
action = function()
local bool, item, amount, coords = ps.callback('md-drugs:server:GetDeliveryItem', false, k)
if bool then
TriggerEvent('md-drugs:client:setLocation', {bool = bool, item = item, amount = amount, coords = coords})
end
end,
},
{
icon = "fa-solid fa-store",
label = ps.lang('Deliveries.targetOpenShop'),
action = function()
local rep = GetRep()
local items = ps.callback('md-drugs:server:dealerList')
local options = {}
for m, d in pairs (items) do
if rep.dealerrep >= d.minrep then
options[#options+1] = {
title = ps.getLabel(d.name),
description = '$' .. d.price,
icon = ps.getImage(d.name),
action = function()
TriggerServerEvent('md-drugs:server:buyItemDealer', m)
end,
}
end
end
ps.menu(ps.lang('Deliveries.shopHeader'), ps.lang('Deliveries.shopHeader'), options)
end,
}
})
end
end
@@ -46,11 +61,11 @@ RegisterNetEvent('md-drugs:client:setLocation', function(data)
isActive = true
local Buyer = CreatePed(0, "g_m_y_famdnf_01",coord.x, coord.y, coord.z-1, coord.w, false, false)
Freeze(Buyer, true, coord.w)
AddSingleModel(Buyer, {
ps.entityTarget(Buyer, {
icon = 'fas fa-user-secret',
label = Lang.targets.Delivery.hand,
label = ps.lang('Deliveries.targetHandOff'),
action = function()
if not progressbar(Lang.Delivery.pack, 4000, 'uncuff') then return end
if not progressbar(ps.lang('Deliveries.delivering'), 4000, 'uncuff') then return end
isActive = false
DeletePed(Buyer)
TriggerServerEvent('md-drugs:server:giveDeliveryItems', data.item, data.amount)
+26 -124
View File
@@ -13,49 +13,23 @@ function loadParticle(dict)
SetPtfxAssetNextCall(dict)
end
function LoadModel(hash)
RequestModel(hash)
while not HasModelLoaded(hash) do
Wait(0)
end
end
function minigame()
local time = 0
local game = Config.Minigames
if minigametype == 'ps_circle' then
local check
exports['ps-ui']:Circle(function(success)
check = success
end, game['ps_circle'].amount, game['ps_circle'].speed)
local check = exports['ps-ui']:Circle(false, game['ps_circle'].amount, game['ps_circle'].speed)
return check
elseif minigametype == 'ps_maze' then
local check
exports['ps-ui']:Maze(function(success)
check = success
end, game['ps_maze'].timelimit)
repeat Wait(10) until check ~= nil
local check = exports['ps-ui']:Maze(false, game['ps_maze'].timelimit)
return check
elseif minigametype == 'ps_scrambler' then
local check
exports['ps-ui']:Scrambler(function(success)
check = success
end, game['ps_scrambler'].type, game['ps_scrambler'].time, game['ps_scrambler'].mirrored)
repeat Wait(10) until check ~= nil
local check = exports['ps-ui']:Scrambler(false, game['ps_scrambler'].type, game['ps_scrambler'].time, game['ps_scrambler'].mirrored)
return check
elseif minigametype == 'ps_var' then
local check
exports['ps-ui']:VarHack(function(success)
check = success
end, game['ps_var'].numBlocks, game['ps_var'].time)
repeat Wait(10) until check ~= nil
local check = exports['ps-ui']:VarHack(false, game['ps_var'].numBlocks, game['ps_var'].time)
return check
elseif minigametype == 'ps_thermite' then
local check
exports['ps-ui']:Thermite(function(success)
check = success
end, game['ps_thermite'].time, game['ps_thermite'].gridsize, game['ps_thermite'].incorrect)
repeat Wait(10) until check ~= nil
local check = exports['ps-ui']:Thermite(false, game['ps_thermite'].time, game['ps_thermite'].gridsize, game['ps_thermite'].incorrect)
return check
elseif minigametype == 'ox' then
local success = lib.skillCheck(game['ox'], {'1', '2', '3', '4'})
@@ -129,63 +103,6 @@ function sorter(sorting, value)
table.sort(sorting, function(a, b) return a[value] < b[value] end)
end
function makeMenu(name, rep)
local menu = {}
local data = ps.callback('md-drugs:server:menu', name)
for k, v in pairs (data.table) do
local allow = false
if rep == nil then
allow = true
else
if rep.dealerrep >= v.minrep then allow = true end
end
if allow then
menu[#menu + 1] = {
icon = GetImage(v.name),
description = '$'.. v.price,
title = GetLabel(v.name),
onSelect = function()
local settext = "Cost: $"..v.price
local dialog = exports.ox_lib:inputDialog(v.name .."!", {
{ type = 'select', label = "Payment Type", default = "cash", options = { { value = "cash"}, { value = "bank"},}},
{ type = 'number', label = "Amount to buy", description = settext, min = 0, max = v.amount, default = 1 },
})
if not dialog[1] then return end
TriggerServerEvent("md-drugs:server:purchaseGoods", dialog[2], dialog[1], v.name, v.price, data.table, k)
end,
}
end
end
sorter(menu, 'title')
lib.registerContext({id = data.id, title = data.title, options = menu})
end
function Email(sender, subject, message)
if Config.Phone == 'yflip' then
local receiver = GetPlayerServerId(PlayerId())
local insertId, received = exports["yflip-phone"]:SendMail({
title = subject,
sender = sender,
senderDisplayName = sender,
content = message,
}, 'phoneNumber', receiver)
elseif Config.Phone == 'qs' then
TriggerServerEvent('qs-smartphone:server:sendNewMail', {
sender = sender,
subject = subject,
message = message,
button = {}
})
else
TriggerServerEvent('qb-phone:server:sendNewMail', {
sender = sender,
subject = subject,
message = message,
})
end
end
function PoliceCall(chance)
local math = math.random(1,100)
if math <= chance then
@@ -242,28 +159,18 @@ function Freeze(entity, toggle, head)
SetBlockingOfNonTemporaryEvents(entity, toggle)
end
function tele(coords)
DoScreenFadeOut(500)
Wait(1000)
SetEntityCoords(PlayerPedId(),coords.x, coords.y, coords.z)
Wait(1000)
DoScreenFadeIn(500)
end
local created = false
local heading = 180.0
function StartRay()
local run = true
local pedcoord = GetEntityCoords(PlayerPedId())
lib.requestModel('v_ret_ml_tablea', 30000)
ps.requestModel('v_ret_ml_tablea', 30000)
local table = CreateObject('v_ret_ml_tablea', pedcoord.x, pedcoord.y, pedcoord.z+1, heading, false, false)
repeat
local hit, entityHit, endCoords, surfaceNormal, matHash = lib.raycast.cam(511, 4, 10)
local hit, endCoords, surfaceNormal, entityHit = ps.raycast()
if not created then
created = true
lib.showTextUI([[[E] To Place
ps.drawText([[[E] To Place
[DEL] To Cancel
[<-] To Move Left
[->] To Move Right]])
@@ -280,7 +187,7 @@ function StartRay()
heading = heading + 2
end
if IsControlPressed(0, 38) then
lib.hideTextUI()
ps.hideText()
run = false
DeleteObject(table)
created = false
@@ -288,7 +195,7 @@ function StartRay()
end
if IsControlPressed(0, 178) then
lib.hideTextUI()
ps.hideText()
run = false
created = false
DeleteObject(table)
@@ -301,13 +208,13 @@ end
function StartRay2()
local run = true
local pedcoord = GetEntityCoords(PlayerPedId())
lib.requestModel('bkr_prop_coke_press_01aa', 30000)
ps.requestModel('bkr_prop_coke_press_01aa', 30000)
local table = CreateObject('bkr_prop_coke_press_01aa', pedcoord.x, pedcoord.y, pedcoord.z+1, heading, false, false)
repeat
local hit, entityHit, endCoords, surfaceNormal, matHash = lib.raycast.cam(511, 4, 10)
local hit, endCoords, surfaceNormal, entityHit = ps.raycast()
if not created then
created = true
lib.showTextUI([[[E] To Place
ps.drawText([[[E] To Place
[DEL] To Cancel
[<-] To Move Left
[->] To Move Right]])
@@ -324,7 +231,7 @@ function StartRay2()
heading = heading + 2
end
if IsControlPressed(0, 38) then
lib.hideTextUI()
ps.hideText()
run = false
DeleteObject(table)
created = false
@@ -332,7 +239,7 @@ function StartRay2()
end
if IsControlPressed(0, 178) then
lib.hideTextUI()
ps.hideText()
run = false
created = false
DeleteObject(table)
@@ -343,10 +250,10 @@ function StartRay2()
end
CreateThread(function()
LoadModel('prop_plant_01b')
LoadModel('prop_plant_01a')
LoadModel('prop_cactus_03')
LoadModel('prop_weed_01')
ps.requestModel('prop_plant_01b')
ps.requestModel('prop_plant_01a')
ps.requestModel('prop_cactus_03')
ps.requestModel('prop_weed_01')
TriggerEvent('weed:init')
TriggerEvent('heroin:init')
TriggerEvent('coke:init')
@@ -363,18 +270,13 @@ end)
RegisterCommand('DrugRep', function()
if not Config.TierSystem then return end
local rep = ps.callback('md-drugs:server:GetRep', false)
lib.registerContext({
id = 'DrugRep',
title = 'Drug Reputation',
options = {
{icon = "fa-solid fa-face-flushed", title = 'Cocaine: '..rep.coke},
{icon = "fa-solid fa-syringe", title = 'Heroin: '..rep.heroin},
{icon = "fa-solid fa-vial", title = 'LSD: '..rep.lsd},
{icon = "fa-solid fa-plug", title = 'Dealer: '..rep.dealerrep},
{icon = "fa-solid fa-money-bill", title = 'Corner Selling: ' .. rep.cornerselling.rep, description = 'Rank: ' .. rep.cornerselling.label }
}
})
lib.showContext('DrugRep')
ps.menu('Drug Rep', 'Drug Rep', {
{icon = "fa-solid fa-face-flushed", title = 'Cocaine: '..rep.coke},
{icon = "fa-solid fa-syringe", title = 'Heroin: '..rep.heroin},
{icon = "fa-solid fa-vial", title = 'LSD: '..rep.lsd},
{icon = "fa-solid fa-plug", title = 'Dealer: '..rep.dealerrep},
{icon = "fa-solid fa-money-bill", title = 'Corner Selling: ' .. rep.cornerselling.rep, description = 'Rank: ' .. rep.cornerselling.label }
})
end, false)
function handleGang(gang)
+19 -20
View File
@@ -9,19 +9,18 @@ local function createLabKit(coord, head)
ps.entityTarget(heroinlabkit, {
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('Heroin.cook'),
label = ps.lang('heroin.targetCook'),
action = function()
if not ps.hasItem('emptyvial') then return end
if not minigame() then
dirty = true
TriggerServerEvent("md-drugs:server:failheatingheroin")
ps.requestPTFX("core")
lib.requestNamedPtfxAsset("core")
local heroinkit = StartParticleFxLoopedOnEntity("exp_air_molotov", heroinlabkit, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.5, false, false, false)
SetParticleFxLoopedAlpha(heroinkit, 3.0)
SetPedToRagdoll(PlayerPedId(), 1300, 1300, 0, 0, 0, 0)
return end
if not ps.progressbar(ps.lang('Heroin.success'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbCook'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:heatliquidheroin")
end,
canInteract = function()
@@ -30,9 +29,9 @@ local function createLabKit(coord, head)
},
{
icon = "fas fa-box-circle-check",
label = ps.lang('Heroin.up'),
label = ps.lang('heroin.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('Heroin.pickup'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbPickup'), 4000, 'uncuff') then return end
herointable = false
DeleteObject(heroinlabkit)
TriggerServerEvent("md-drugs:server:getheroinlabkitback")
@@ -43,12 +42,11 @@ local function createLabKit(coord, head)
end
},
{
event = "md-drugs:client:cleanheroinlabkit",
icon = "fa-solid fa-hand-sparkles",
label = ps.lang('Heroin.clean'),
label = ps.lang('heroin.targetClean'),
action = function()
if not ps.hasItem('cleaningkit') then return end
if not ps.progressbar(ps.lang('Heroin.clean'), 4000, 'clean') then return end
if not ps.progressbar(ps.lang('heroin.pbClean'), 4000, 'clean') then return end
local done = ps.callback('removeCleaningkit', false)
if done then dirty = false end
end,
@@ -62,10 +60,10 @@ end
for k, v in pairs (locations.dryplant) do
ps.boxTarget('dryHeroin'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.heroin.dry'),
label = ps.lang('heroin.targetDry'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.progressbar(ps.lang('Heroin.dryout'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbDry'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:dryplant", k)
end,
canInteract = function()
@@ -78,11 +76,11 @@ end
for k, v in pairs (locations.cutheroinone) do
ps.boxTarget('cutHeroin'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.heroin.cut'),
label = ps.lang('heroin.targetCutHeroin'),
icon = 'fa-solid fa-seedling',
action = function()
if not ps.hasItem('bakingsoda') then return end
if not ps.progressbar(ps.lang('Heroin.cutting'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbCutHeroin'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:cutheroin", k)
end,
canInteract = function()
@@ -100,15 +98,16 @@ for k, v in pairs (locations.buyKit) do
SetEntityInvincible(peds[k], true)
ps.entityTarget(peds[k], {
{
label = ps.lang('targets.heroin.buykit'),
label = ps.lang('heroin.targetBuyKit'),
icon = 'fa-solid fa-box-open',
action = function()
if not ps.progressbar(ps.lang('Heroin.secret'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbBuyKit'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getheroinlabkit", k)
end,
canInteract = function()
return true
end
if not handleGang(v.gang) then return false end
return true
end
}
})
end
@@ -116,13 +115,13 @@ end
ps.registerCallback("md-drugs:client:setheroinlabkit", function()
if herointable then
ps.notify(ps.lang('Heroin.tableout'), 'error')
ps.notify(ps.lang('heroin.tableout'), 'error')
return false
else
herointable = true
local location, head = StartRay()
if not location then herointable = false return end
if not ps.progressbar(ps.lang('Heroin.table'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.placing'), 4000, 'uncuff') then return end
createLabKit(location, head)
return true, location
end
@@ -131,11 +130,11 @@ end)
for k, v in pairs (locations.fillneedle) do
ps.boxTarget('fillNeedle'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.heroin.fill'),
label = ps.lang('heroin.targetFill'),
icon = 'fa-solid fa-syringe',
action = function()
if not minigame() then TriggerServerEvent("md-drugs:server:failheroin", k) return end
if not ps.progressbar(ps.lang('Heroin.needles'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.pbFill'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:fillneedle", k)
end,
canInteract = function()
+6 -2
View File
@@ -38,7 +38,7 @@ local function SpawnCarPedChase()
{
name = 'leancar',
icon = 'fa-solid fa-car',
label = Lang.targets.lean.st,
label = ps.lang('lean.stealFromTruck'),
action = function()
hit = hit + 1
if not minigame() then return end
@@ -68,10 +68,14 @@ for k, v in pairs (location.SyrupVendor) do
ps.entityTarget(leanPeds[k], {
{
icon = "fa-solid fa-hand-holding-medical",
label = ps.lang('Lean.buylean'),
label = ps.lang('lean.startMission'),
action = function()
SpawnCarPedChase()
end,
canInteract = function()
if not handleGang(v.gang) then return false end
return true
end
},
})
end
+20 -29
View File
@@ -11,16 +11,9 @@ local function createLabKit(coord, head)
local options = {
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('targets.lsd.heat'),
label = ps.lang('lsd.targetHeat'),
action = function()
local dict = "scr_ie_svm_technical2"
if not ps.hasItems({
lysergic_acid = 1,
diethylamide = 1
}) then
ps.notify(ps.lang('lsd.need'), 'error')
return
end
if not minigame() then
dirtylsd = true
loadParticle(dict)
@@ -28,7 +21,7 @@ local function createLabKit(coord, head)
SetParticleFxLoopedAlpha(exitPtfx, 3.0)
return
end
if not ps.progressbar(ps.lang('lsd.heat'), 7000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.heating'), 7000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:heatliquid")
end,
canInteract = function()
@@ -37,11 +30,11 @@ local function createLabKit(coord, head)
},
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('targets.lsd.refine'),
label = ps.lang('lsd.targetRefine'),
action = function()
if not ps.hasItem('lsd_one_vial') then return end
if not minigame() then TriggerServerEvent("md-drugs:server:failrefinequality") return end
if not ps.progressbar(ps.lang('lsd.refine'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.refining'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:refinequalityacid")
end,
canInteract = function()
@@ -50,11 +43,11 @@ local function createLabKit(coord, head)
},
{
icon = "fa-regular fa-note-sticky",
label = ps.lang('targets.lsd.dab'),
label = ps.lang('lsd.targetDipping'),
action = function()
if not ps.hasItem('tab_paper') then return end
if not minigame() then TriggerServerEvent("md-drugs:server:failtabs") return end
if not ps.progressbar(ps.lang('lsd.dip'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.dipping'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:maketabpaper")
end,
canInteract = function()
@@ -64,9 +57,9 @@ local function createLabKit(coord, head)
{
event = "md-drugs:client:getlabkitback",
icon = "fas fa-box-circle-check",
label = ps.lang('targets.lsd.back'),
label = ps.lang('lsd.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('lsd.tablepack'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.packup'), 4000, 'uncuff') then return end
DeleteObject(labkit)
TriggerServerEvent('md-drugs:server:getlabkitback')
tableout = false
@@ -77,13 +70,13 @@ local function createLabKit(coord, head)
},
{
icon = "fa-solid fa-hand-sparkles",
label = ps.lang('targets.lsd.clean'),
label = ps.lang('lsd.targetClean'),
action = function()
if not ps.hasItem('cleaningkit') then
ps.notify(ps.lang('lsd.needclean'), 'error')
ps.notify(ps.lang('lsd.needCleaning'), 'error')
return
end
if not ps.progressbar(ps.lang('lsd.clean'), 4000, 'clean') then return end
if not ps.progressbar(ps.lang('lsd.cleaning'), 4000, 'clean') then return end
local check = ps.callback('md-drugs:server:removecleaningkit')
if check then
dirtylsd = false
@@ -98,12 +91,11 @@ end
for k, v in pairs (locations.lysergicacid) do
ps.boxTarget('lysergicacid'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.lsd.lys'),
label = ps.lang('lsd.targetLys'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('empty_weed_bag') then return end
if not minigame() then TriggerServerEvent("md-drugs:server:faillysergic") return end
if not ps.progressbar(ps.lang('lsd.steallys'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.stealLys'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getlysergic", k)
end,
canInteract = function()
@@ -117,12 +109,12 @@ end
for k, v in pairs (locations.diethylamide) do
ps.boxTarget('diethylamide'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.lsd.die'),
label = ps.lang('lsd.targetDie'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('empty_weed_bag') then return end
if not minigame() then TriggerServerEvent("md-drugs:server:faildiethylamide") return end
if not ps.progressbar(ps.lang('lsd.stealdie'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.stealDie'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getdiethylamide", k)
end,
canInteract = function()
@@ -136,10 +128,9 @@ end
for k, v in pairs (locations.gettabs) do
ps.boxTarget('gettabs'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('targets.lsd.buyt'),
label = ps.lang('lsd.targetBuyTab'),
icon = 'fa-solid fa-hand-holding-dollar',
action = function()
if not ps.hasItem('lsdlabkit') then ps.notify(ps.lang('lsd.havlabkit'), 'error') return end
TriggerEvent("md-drugs:client:buytabs", k)
end,
canInteract = function()
@@ -156,11 +147,11 @@ for k, v in pairs (locations.buyLSDkit) do
Freeze(seller[k], true, v.loc.w)
ps.entityTarget(seller[k], {
{
label = ps.lang('targets.lsd.buy'),
label = ps.lang('lsd.targetBuyKit'),
icon = 'fa-solid fa-hand-holding-dollar',
action = function()
if ps.hasItem('lsdlabkit') then ps.notify(ps.lang('lsd.havlabkit'), 'error') return end
if not ps.progressbar(ps.lang('lsd.buykit'), 4000, 'uncuff') then return end
if ps.hasItem('lsdlabkit') then ps.notify(ps.lang('lsd.alreadyOwn'), 'error') return end
if not ps.progressbar(ps.lang('lsd.buyingKit'), 4000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:getlabkit', k)
end,
canInteract = function()
@@ -179,7 +170,7 @@ ps.registerCallback("md-drugs:client:setlsdlabkit", function()
tableout = true
local loc, head = StartRay()
if not loc then tableout = false return end
if not ps.progressbar(ps.lang('lsd.place'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('lsd.placing'), 4000, 'uncuff') then return end
createLabKit(loc, head)
return true, loc
end
+3 -3
View File
@@ -2,11 +2,11 @@ local locations = ps.callback('md-drugs:server:GetMescalineLocs')
for k, v in pairs (locations.DryOutMescaline) do
ps.boxTarget('dryoutMesc'..k, v.loc, {length = v.l, width = v.w, height = 1.0, rotation = v.rot}, {
{
label = ps.lang('mescaline.dry'),
label = ps.lang('mesc.targetDry'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('cactusbulb') then ps.notify(ps.lang('mescaline.needbulb'), 'error') return end
if not ps.progressbar(ps.lang('mescaline.dry'), 4000, 'drymescaline') then return end
if not ps.hasItem('cactusbulb') then ps.notify(ps.lang('Catches.itemNeeded', ps.getLabel('cactusbulb')), 'error') return end
if not ps.progressbar(ps.lang('mescaline.dry'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:drymescaline", k)
end,
canInteract = function()
+45 -37
View File
@@ -11,7 +11,7 @@ local function SpawnMethCarPedChase()
local stoploc = vector3(-1157.63, -3056.71, 13.94)
local start = locations.StartLoc[math.random(1,#locations.StartLoc)]
if startedmeth then
ps.notify(ps.lang('meth.act'),'error')
ps.notify(ps.lang('meth.alreadyChasing'),'error')
else
startedmeth = true
ps.callback('md-drugs:server:RegisterMeth')
@@ -42,7 +42,7 @@ local function SpawnMethCarPedChase()
{
name = 'methcar',
icon = 'fa-solid fa-car',
label = Lang.targets.meth.stealfromcar,
label = ps.lang('meth.targetStealFromCar'),
action = function()
if not minigame() then return end
TriggerServerEvent('md-drugs:server:givemethingridients')
@@ -71,9 +71,9 @@ for k, v in pairs (locations.MethHeist) do
{
name = 'methheist'..k,
icon = 'fa-solid fa-user-secret',
label = ps.lang('targets.meth.heist'),
label = ps.lang('meth.targetHeist'),
action = function()
if startedmeth then ps.notify(ps.lang('meth.act'),'error') return end
if startedmeth then ps.notify(ps.lang('meth.alreadyChasing'),'error') return end
SpawnMethCarPedChase()
end,
canInteract = function()
@@ -239,7 +239,7 @@ local function startcook(num, coords, offset, rotation)
MethCooking(coords, offset, rotation)
amonia = true
else
ps.notify(ps.lang('meth.inside'), "error")
ps.notify(ps.lang('meth.started'), "error")
end
end
@@ -251,7 +251,7 @@ local function dials(coords)
amonia = false
active = false
return end
ps.notify(ps.lang('meth.increaseheat'), "success")
ps.notify(ps.lang('meth.increaseHeat'), "success")
heated = true
end
end
@@ -266,7 +266,7 @@ local function smash(coords, offset, rotation, buckets, k)
{
name = 'bucket',
icon = "fa-solid fa-sack-xmark",
label = ps.lang('targets.meth.bag'),
label = ps.lang('meth.targetBag'),
canInteract = function()
if active == false then return false end
end,
@@ -309,22 +309,25 @@ end)
for k, v in pairs (locations.CookMeth) do
ps.boxTarget('cookMeth'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
{
label = 'Cook Meth',
label = ps.lang('meth.targetCook'),
icon = 'fa-solid fa-temperature-high',
action = function()
startcook(k, v.loc, v.offset or vec3(0,0,0), v.rotation or vector3(0,0,180.0))
end,
canInteract = function()
if not handleGang(v.gang) then return false end
if not amonia and not active then
return true
end
end,
},
{
icon = "fas fa-sign-in-alt",
label = ps.lang('targets.meth.tray'),
label = ps.lang('meth.targetGrabTray'),
action = function() trayscarry() end,
canInteract = function()
if not handleGang(v.gang) then return false end
if heated and amonia and not tray then
return true
end
@@ -338,11 +341,12 @@ for k, v in pairs (locations.MethDials) do
{
name = 'adjustdials',
icon = "fa-solid fa-temperature-three-quarters",
label = ps.lang('targets.meth.adjust'),
label = ps.lang('meth.targetHeat'),
action = function()
dials(locations.CookMeth[k].loc)
end,
canInteract = function()
if not handleGang(v.gang) then return false end
if amonia and heated == false then return true end
end
}
@@ -354,11 +358,12 @@ for k, v in pairs (locations.MethSmash) do
{
name = 'smash',
icon = "fa-solid fa-weight-scale",
label = ps.lang('targets.meth.smash'),
label = ps.lang('meth.targetSmash'),
action = function()
smash(v.loc, v.offset, v.rotation, v.bucket,k)
end,
canInteract = function()
if not handleGang(v.gang) then return false end
if heated and amonia and tray then return true end
end
}
@@ -372,30 +377,33 @@ RegisterCommand('offset', function()
print("Offset: ", offset)
end)
if not Config.MethHeist then
for k, v in pairs (locations.MethEph) do
ps.boxTarget('stealMethEph'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
{
label = 'Steal Ephedrine',
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar('Stealing Ephedrine', 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:geteph", k)
end,
}
})
end
for k, v in pairs (locations.Methace) do
ps.boxTarget('stealMethAce'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
{
label = 'Steal Acetone',
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar('Stealing Acetone', 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getace", k)
end,
}
})
end
for k, v in pairs (locations.MethEph) do
ps.boxTarget('stealMethEph'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
{
label = ps.lang('meth.targetStealEPH'),
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar(ps.lang('meth.stealingEPH'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:geteph", k)
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
end
for k, v in pairs (locations.Methace) do
ps.boxTarget('stealMethAce'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
{
label = ps.lang('meth.targetStealACE'),
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar(ps.lang('meth.stealingACE'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getace", k)
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
end
+12 -8
View File
@@ -1,10 +1,11 @@
local carryPackage = nil
local onMission = false
local locations = ps.callback('md-drugs:server:GetOxyLocs')
local function getRoute()
local Route = ps.callback('md-drugs:server:getRoute')
if not Route then
ps.notify(ps.lang('oxy.done'), "success")
ps.notify(ps.lang('oxy.ditchCar'), "error")
onMission = false
return false
end
@@ -23,11 +24,11 @@ local function getRoute()
PoliceCall(Config.PoliceAlertOxy)
ps.entityTarget(oxybuyer,{
{
label = ps.lang('targets.oxy.talk'),
label = ps.lang('oxy.targetHandoff'),
icon = "fa-solid fa-dollar-sign",
action = function()
if carryPackage then
if not ps.progressbar(ps.lang('oxy.hand'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('oxy.handingoff'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:giveoxybox")
DeleteEntity(oxybuyer)
DetachEntity(carryPackage, true, true)
@@ -35,7 +36,7 @@ local function getRoute()
carryPackage = nil
getRoute()
else
ps.notify(ps.lang('oxy.empty'), "error")
ps.notify(ps.lang('oxy.emptyHands'), "error")
end
end
}
@@ -46,7 +47,7 @@ for k, v in pairs(locations.OxyPayForTruck) do
ps.boxTarget('oxyTruckPur' ..k , v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-truck-fast',
label = ps.lang('targets.oxy.buytruck'),
label = ps.lang('oxy.targetPay'),
action = function()
ps.requestModel("burrito3", Config.RequestModelTime)
@@ -56,17 +57,17 @@ for k, v in pairs(locations.OxyPayForTruck) do
exports[Config.Fuel]:SetFuel(oxycar, 100.0)
TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(oxycar))
ps.notify(ps.lang('oxy.truck'), 'success')
ps.notify(ps.lang('oxy.keys'), 'success')
onMission = true
getRoute()
ps.entityTarget(oxycar, {
{
icon = "fa-solid fa-box",
label = ps.lang('targets.oxy.pack'),
label = ps.lang('oxy.targetGetPackage'),
action = function()
if carryPackage then
ps.notify(ps.lang('oxy.cantcarry'), "error")
ps.notify(ps.lang('oxy.alreadyCarrying'), "error")
else
local pos = GetEntityCoords(PlayerPedId(), true)
ps.requestAnim('anim@heists@box_carry@')
@@ -76,6 +77,9 @@ for k, v in pairs(locations.OxyPayForTruck) do
AttachEntityToEntity(carryPackage, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 57005), 0.05, 0.1, -0.3, 300.0, 250.0, 20.0, true, true, false, true, 1, true)
end
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
end,
+9 -8
View File
@@ -1,17 +1,18 @@
local locations = ps.callback('md-drugs:server:GetPharmaLocs')
ps.registerCallback("md-drugs:client:prescriptionpad", function(data, op)
if ps.getJobType() ~= 'ems' then return end
local input = exports.ps_lib:input('Who To Give A Prescription To?',{
{type = 'select', title = 'Player Name', options = data},
{type = 'select', title = 'Prescription', options = op}
local input = ps.input(ps.lang('pharma.input.header'), {
{type = 'select', title = ps.lang('pharma.input.title1'), options = data},
{type = 'select', title = ps.lang('pharma.input.title2'), options = op}
})
if not input[1] then return end
if not ps.progressbar(ps.lang('Pharma.write'), 4000, 'notepad') then return end
if not ps.progressbar(ps.lang('pharma.write'), 4000, 'notepad') then return end
return {who = input[1], what = input[2]}
end)
ps.registerCallback("md-drugs:client:unbottle", function()
if not ps.progressbar(ps.lang('Pharma.open'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('pharma.opening'), 4000, 'uncuff') then return end
return true
end)
@@ -20,11 +21,11 @@ for k, v in pairs (locations.FillPrescription) do
ps.boxTarget('pharma' ..k , v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-capsules',
label = ps.lang('Pharma.fillprescription'),
label = ps.lang('pharma.targetFill'),
action = function()
if not ps.progressbar(ps.lang('Pharma.fill'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('pharma.fill'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:fillprescription", k)
end
end,
}
})
end
+10 -30
View File
@@ -1,64 +1,44 @@
local DrugPlants = {
{model = 'prop_plant_01a', label = 'coke', langs = ps.lang('targets.coke.pick'), tbl = GlobalState.CocaPlant, plantTbl = {},
{model = 'prop_plant_01a', label = 'coke', langs = ps.lang('coke.targetPick'), tbl = GlobalState.CocaPlant, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('Coke.picking'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('coke.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("coke:pickupCane", loc)
return true
end,
target = {
icon = "fa-solid fa-seedling",
label = ps.lang('targets.coke.pick'),
},
allow = Config.Drugs.cocaine,
},
{model = 'prop_plant_01b', label = 'heroin',langs = ps.lang('targets.heroin.pick'), tbl = GlobalState.PoppyPlants, plantTbl = {},
{model = 'prop_plant_01b', label = 'heroin',langs = ps.lang('heroin.targetPick'), tbl = GlobalState.PoppyPlants, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('Heroin.pick'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('heroin.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("heroin:pickupCane", loc)
return true
end,
target = {
icon = "fa-solid fa-seedling",
label = ps.lang('targets.heroin.pick'),
},
allow = Config.Drugs.heroin,
},
{model = 'prop_cactus_03', label = 'Mescaline', langs = ps.lang('targets.mescaline.pick'), tbl = GlobalState.Mescaline, plantTbl = {},
{model = 'prop_cactus_03', label = 'Mescaline', langs = ps.lang('mesc.targetPick'), tbl = GlobalState.Mescaline, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('mescaline.pick'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('mesc.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("Mescaline:pickupCane", loc)
return true
end,
target = {
icon = "fa-solid fa-seedling",
label = ps.lang('targets.mescaline.pick'),
},
allow = Config.Drugs.mescaline,
},
{model = 'prop_weed_01', label = 'weed', langs = ps.lang('targets.weed.pick'), tbl = GlobalState.WeedPlant, plantTbl = {},
{model = 'prop_weed_01', label = 'weed', langs = ps.lang('weed.targetPick'), tbl = GlobalState.WeedPlant, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('Weed.picking'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('weed.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("weed:pickupCane", loc)
return true
end,
target = {
icon = "fa-solid fa-seedling",
label = ps.lang('targets.weed.pick'),
},
allow = Config.Drugs.weed,
},
{model = 'mushroom', label = 'shrooms', langs = ps.lang('targets.shrooms.pick'), tbl = GlobalState.shrooms, plantTbl = {},
{model = 'mushroom', label = 'shrooms', langs = ps.lang('shrooms.targetPick'), tbl = GlobalState.shrooms, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('Shrooms.pick'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('shrooms.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("shrooms:pickupCane", loc)
return true
end,
target = {
icon = "fa-solid fa-hand",
label = ps.lang('targets.shrooms.pick'),
},
allow = Config.Drugs.shrooms,
},
}
+1 -1
View File
@@ -1,6 +1,6 @@
ps.registerCallback("md-drugs:client:shrooms", function()
if not ps.progressbar(ps.lang('Shrooms.eat'), 5000, 'eat') then return end
if not ps.progressbar(ps.lang('shrooms.eat'), 5000, 'eat') then return end
CreateThread(function()
EcstasyEffect()
end)
+13 -13
View File
@@ -4,10 +4,10 @@ for k, v in pairs (locations.WeedDry) do
ps.boxTarget('weed_dry'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-cannabis',
label = ps.lang('targets.weed.dry'),
label = ps.lang('weed.targetDry'),
action = function()
if not ps.hasItem('wetcannabis', 1) then
ps.notify(ps.lang('Weed.nodry'), "error")
ps.notify(ps.lang('weed.nodry'), "error")
return
end
if drying then return end
@@ -15,12 +15,12 @@ for k, v in pairs (locations.WeedDry) do
local weedplant = CreateObject("bkr_prop_weed_drying_01a", loc.x, loc.y+.2, loc.z, true, false)
drying = true
FreezeEntityPosition(weedplant, true)
ps.notify(ps.lang('Weed.wait'), "success")
ps.notify(ps.lang('weed.wait'), "success")
Wait(math.random(1000,5000))
ps.notify(ps.lang('Weed.take'), "success")
ps.notify(ps.lang('weed.take'), "success")
ps.entityTarget(weedplant, {
icon = "fa-solid fa-cannabis",
label = ps.lang('targets.weed.dpick'),
label = ps.lang('weed.targetDryed'),
action = function()
DeleteEntity(weedplant)
drying = false
@@ -36,7 +36,7 @@ for k, v in pairs (locations.WeedTele) do
ps.boxTarget('weed_tele'..k, v.inside, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-door-open',
label = ps.lang('targets.weed.telein'),
label = ps.lang('weed.teleportOut'),
action = function()
SetEntityCoords(PlayerPedId(), v.outside)
end
@@ -45,7 +45,7 @@ for k, v in pairs (locations.WeedTele) do
ps.boxTarget('weed_teleout'..k, v.outside, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-door-closed',
label = ps.lang('targets.weed.teleout'),
label = ps.lang('weed.teleportIn'),
action = function()
SetEntityCoords(PlayerPedId(), v.inside)
end
@@ -66,13 +66,13 @@ CreateThread(function()
end)
RegisterNetEvent("md-drugs:client:dodabs", function()
if not ps.progressbar('Doing Dabs', 4000, 'bong2') then AlienEffect() return end
if not ps.progressbar(ps.lang('weed.dabs'), 4000, 'bong2') then AlienEffect() return end
AlienEffect()
end)
local function createBluntOptions(contextId, contextTitle, eventLabelPrefix, tableName)
local options = {}
local items = ps.callback('md-drugs:server:GetRecipe', 'weed',tableName)
local items = ps.callback('md-drugs:server:GetWeedRecipe', 'weed', tableName)
for k, v in pairs(items) do
local label = {}
local item = ''
@@ -94,11 +94,11 @@ local function createBluntOptions(contextId, contextTitle, eventLabelPrefix, tab
end
RegisterNetEvent('md-drugs:client:makeBluntWrap', function(data)
createBluntOptions('mddrugsbluntwraps', "Dipping Syrup", 'Dipping Syrup To Make ', 'bluntwrap')
createBluntOptions('mddrugsbluntwraps', "Dipping Syrup", ps.lang('weed.bluntWrap'), 'bluntwrap')
end)
RegisterNetEvent('md-drugs:client:rollBlunt', function(data)
createBluntOptions('mddrugsblunts', "Roll Blunts", 'Rolling A ', 'blunts')
createBluntOptions('mddrugsblunts', "Roll Blunts", ps.lang('weed.blunts'), 'blunts')
end)
for k, v in pairs (locations.WeedSalesman) do
@@ -110,7 +110,7 @@ for k, v in pairs (locations.WeedSalesman) do
ps.entityTarget(ped, {
{
icon = "fa-solid fa-cannabis",
label = ps.lang('targets.weed.salesman'),
label = ps.lang('weed.targetSales'),
action = function()
local itemList = ps.callback('md-drugs:server:getWeedItems')
local options = {}
@@ -124,7 +124,7 @@ for k, v in pairs (locations.WeedSalesman) do
{type = 'number', title = 'How Many To Buy', min = 1, max = 1000}
})
if not input and input[1] then return end
if not ps.progressbar('Buying ' .. ps.getLabel(m), 2000, 'uncuff') then return end
if not ps.progressbar(ps.lang('weed.buying', ps.getLabel(m)), 2000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:buyWeedItem', k, m, input[1])
end
}
+29 -10
View File
@@ -1,29 +1,48 @@
local miss = false
local function SetUpPeds()
AddRelationshipGroup('setups')
local ped = GetEntityCoords(PlayerPedId())
local peds = {
{x = ped.x+3, y = ped.y-5, z = ped.z-1, },
{x = ped.x+6, y = ped.y-10, z = ped.z-1,},
{x = ped.x+-2,y = ped.y+5, z = ped.z-1,},
{x = ped.x+8, y = ped.y-12, z = ped.z-1,},
{x = ped.x+5, y = ped.y-2, z = ped.z-1, },
{x = ped.x+2, y = ped.y-20, z = ped.z-1,},
{x = ped.x+1, y = ped.y-10, z = ped.z-1,},
}
for i = 1, #peds do
local k = peds[i]
i = CreatePed(0, "g_m_y_famdnf_01", k.x, k.y, k.z, 90.0, true, true)
SetPedRelationshipGroupHash(i, 'setups')
GiveWeaponToPed(i, "weapon_pistol", 1, false, true)
TaskCombatPed(i, PlayerPedId(), 0, 16)
SetPedCombatAttributes(i, 46, true)
end
end
RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
if not GetCops(Config.PoliceCount) then return end
if miss then
ps.notify(Lang.Wholesale.al, 'error')
ps.notify(ps.lang('wholesale.alreadyWholesale'), 'error')
else
local loc = drug.location
local timer = 0
miss = true
SetNewWaypoint(loc.x, loc.y)
lib.requestModel("g_m_y_famdnf_01", Config.RequestModelTime)
local current = "g_m_y_famdnf_01"
local drugdealer = CreatePed(0, current,loc.x,loc.y,loc.z-1, 90.0, false, false)
ps.requestModel("g_m_y_famdnf_01", Config.RequestModelTime)
local drugdealer = CreatePed(0, "g_m_y_famdnf_01",loc.x,loc.y,loc.z-1, 90.0, false, false)
FreezeEntityPosition(drugdealer, true)
SetEntityInvincible(drugdealer, true)
AddMultiModel(drugdealer, {{
label = Lang.targets.Wholesale.talk,
ps.entityTarget(drugdealer, {{
label = ps.lang('wholesale.targetBuyer'),
icon = "fas fa-eye",
action = function()
local luck = math.random(1,100)
if luck <= Config.SuccessfulChance then
if not ps.progressbar("Wholesaling Drugs", 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('wholesale.wholesaling'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:SuccessSale", drug)
else
ps.progressbar("YOU FUCKED NOW", 4000, 'uncuff')
ps.notify(ps.lang('wholesale.uhoh'), 'error')
SetUpPeds()
end
Wait(3000)
@@ -39,7 +58,7 @@ RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
if timer <= Config.WholesaleTimeout or #(GetEntityCoords(PlayerPedId()) - vector3(loc.x, loc.y, loc.z) ) < 4.0 then
timer = 0
else
ps.notify('The Buyer Waited To Long', 'error')
ps.notify(ps.lang('wholesale.tooLong'), 'error')
DeleteEntity(drugdealer)
end
end
+29 -19
View File
@@ -9,19 +9,19 @@ end
ps.registerCallback('md-drugs:client:setpress', function(xtcData)
if xtcpress then
ps.notify(Lang.xtc.out, 'error')
ps.notify(ps.lang('xtc.alreadyOut'), 'error')
return
end
local coords, head = StartRay2()
xtcpress = true
if not ps.progressbar('Setting Press On The Ground', 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.settingDown'), 4000, 'uncuff') then return end
local press = CreateObject("bkr_prop_coke_press_01aa", coords.x, coords.y, coords.z, true, false, false)
PlaceObjectOnGroundProperly(press)
Freeze(press, true, head)
local options = {
{
icon = "fas fa-eye",
label = ps.lang('targets.xtc.make'),
label = ps.lang('xtc.targetMake'),
distance = 2.0,
action = function()
local options = {}
@@ -33,7 +33,7 @@ ps.registerCallback('md-drugs:client:setpress', function(xtcData)
description = descript,
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(string.format(ps.lang('xtc.make'), ps.getLabel(k)), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.making', ps.getLabel(k)), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:makextc", k)
end,
distance = 2.0
@@ -47,9 +47,9 @@ ps.registerCallback('md-drugs:client:setpress', function(xtcData)
},
{
icon = "fas fa-eye",
label = ps.lang('targets.xtc.pick'),
label = ps.lang('xtc.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('xtc.pickup'), 5000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.picking'), 5000, 'uncuff') then return end
DeleteObject(press)
xtcpress = false
TriggerServerEvent("md-drugs:server:getpressback")
@@ -67,11 +67,14 @@ for k, v in pairs(locations.mdp2p) do
ps.boxTarget('mdp2p'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('targets.xtc.mdp2p'),
label = ps.lang('xtc.targetStealMDP2P'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.mdp2p'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.stealingMDP2P'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stealmdp2p", k)
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
@@ -80,11 +83,14 @@ for k, v in pairs(locations.isosafrole) do
ps.boxTarget('isosafrole'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('targets.xtc.isosafrole'),
label = ps.lang('xtc.targetStealIsosafrole'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.isosafrole'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.stealingIsosafrole'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stealisosafrole", k)
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
@@ -94,11 +100,14 @@ for k, v in pairs(locations.rawxtcloc) do
ps.boxTarget('xtc'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('targets.xtc.raw'),
label = ps.lang('xtc.targetRaw'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.raw'), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.makingRaw'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:makingrawxtc", k)
end,
canInteract = function()
return handleGang(v.gang)
end
}
})
@@ -111,7 +120,7 @@ for k, v in pairs(locations.xtcpress) do
ps.entityTarget(ped, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('targets.xtc.press'),
label = ps.lang('xtc.getPress'),
action = function()
local options = {}
local recipeList = ps.callback('md-drugs:server:getpressrecipes')
@@ -120,14 +129,13 @@ for k, v in pairs(locations.xtcpress) do
options[#options + 1] = {
icon = ps.getImage(m),
title = ps.getLabel(m),
description = ps.lang('xtc.press.buysingle', d.cash),
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)
end,
}
else
ps.debug(d.take)
local descript = getRecipeList(d.take)
options[#options + 1] = {
icon = ps.getImage(m),
@@ -142,7 +150,8 @@ for k, v in pairs(locations.xtcpress) do
end
end
ps.menu('XTC Presses', 'XTC Presses', options)
end
end,
canInteract = function() return handleGang(v.gang) end
}
})
end
@@ -151,7 +160,7 @@ for k, v in pairs (locations.stamp) do
ps.boxTarget('xtc'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('targets.xtc.' .. k),
label = ps.lang('xtc.targetStamp'),
action = function()
local item = {
{item = 'white_xtc', label = ps.getLabel('white_xtc'), color = 'white'},
@@ -167,14 +176,15 @@ for k, v in pairs (locations.stamp) do
description = ps.lang('xtc.stamp_desc', d.color),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(string.format(ps.lang('xtc.stamp'), d.label), 4000, 'uncuff') then return end
if not ps.progressbar(ps.lang('xtc.stamping'), d.label, 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stamp", k, d.color)
end,
distance = 2.0
}
end
ps.menu('Stamp Pills', 'Stamp Pills', options)
end
end,
canInteract = function() return handleGang(v.gang) end
}
})
end
+1 -1
View File
@@ -16,7 +16,7 @@ function loadFile(filePath)
ps.error("Error executing Lua chunk from '" .. filePath .. "': " .. tostring(execErr))
return false
end
ps.success("Successfully loaded module '" .. filePath .. "' from resource '" .. resourceName .. "'.")
return true
end
-3
View File
@@ -13,8 +13,6 @@ client_scripts {
server_scripts {
'server/functions.lua',
'server/locations.lua',
'server/recipes.lua',
'server/plantSpawns.lua',
'serverRun.lua',
'@oxmysql/lib/MySQL.lua',
@@ -22,7 +20,6 @@ server_scripts {
shared_scripts {
'shared/**.lua',
'@ox_lib/init.lua',
}
lua54 'yes'
+211 -262
View File
@@ -1,298 +1,247 @@
Lang = {}
Lang.targets = {
coke = {
pick = 'Pick Cocaine',
cut = 'Cut Cocaine',
bag = 'Bag Cocaine',
enter = 'Enter Building',
exit = 'Exit Building',
chop = 'Chop Coca Leaves',
},
CornerSell = {
sell = 'Sell %s Of %s For $%s',
deny = 'Deny Price'
},
crack = {
cook = 'Cook Crack',
bag = 'Bag Crack'
},
Delivery = {
Deliver = 'Deliver For %s',
open = 'Open %s Shop',
hand = 'Hand Over'
},
heroin = {
pick = 'Pick Poppies',
up = 'Pick Up Table',
dry = 'Dry Poppies',
cut = 'Cut Heroin',
cook = 'Cook Heroin',
kit = 'Buy Heroin Lab Kit',
clean = 'Clean Table',
fill = 'Fill Syringe',
vial = 'Make Vial',
},
lean = {
git = 'Get Task',
st = 'Steal From Car'
},
lsd = {
buy = 'Buy LSD Lab Kit',
heat = 'Heat Liquid',
refine = 'Refine Quality',
paper = 'Make Tab Paper',
back = 'Pick Up Lab Kit',
dab = 'Dab LSD on sheets',
clean = 'Clean Table',
lys = 'Steal Lysergic Acid',
die = 'Steal Diethylamide',
buyt = 'Buy Tabs',
},
mescaline = {
pick = 'Pick Cactus',
dry = 'Dry Out Cactus',
},
meth = {
bag = 'Bag Up Meth',
enter = 'Enter Buidling',
exit = 'Exit Building',
cook = 'Cook Meth',
tray = 'Grab Tray',
box = 'Box Up Meth',
adjust = 'Adjust Temperature',
eph = 'Steal Ephedrine',
ace = 'Steal Acetone',
mission = 'Get Mission',
stealfromcar = 'Steal From Car',
},
oxy = {
pack = 'Get Oxy Package',
talk = 'Talk To Buyer',
pay = 'Pay For Truck',
},
pha = {
fill = 'Fill Prescription',
},
shrooms = {
pick = 'Pick Shrooms',
},
travel = {
travel = 'Open Travelling Merchant',
},
xtc = {
iso = 'Steal Isosafrole',
mdp = 'Steal MDP2P',
raw = 'Make Raw XTC',
press = 'Buy XTC Press',
stamp = 'Stamp Pills',
make = 'Make XTC',
pick = 'Pick Up Press',
},
weed = {
pick = 'Pick Weed',
dry = 'Dry Weed',
dpick = 'Pick Dried Weed',
butt = 'Open Edible Menu',
oil = 'Make Oil'
},
Wholesale = {
talk = 'Talk To Buyer'
},
Lang.Catches = {
notIn = 'You Are Not In The Correct Location',
needItems = 'You Do Not Have The Required Items',
notEnoughMoney = 'Youre To Broke',
buySuccess = 'You Bought %s %s For $%s',
itemMissings = 'You Need \n',
itemNeeded = 'You Need %s',
cooldown = 'Slow Down Speed Racer',
invalidItem = 'This Item Is Not Sold Here',
}
Lang.Coke = {
-- client side progressbars
picking = "Picking Leaves",
makepow = 'Chopping Leaves Into A Powder',
cutting = 'Cutting Coke With Baking Soda',
bagging = "Bilbo Baggins This Bitch",
-- end progressbars
cut = "You Cut Some Coke",
nocutcoke = "You Cant Cut Coke With No Coke Idiot",
bagcoke = "You Bagged Up Coke",
nobagcoke = "You Cant Bag Up Coke Without Coke Idiot",
}
Lang.Crack = {
--client side
cookcrack = "Cooking Some Crack",
bagcrack = 'Bilbo Baggin This Bitch',
-- server
makecrack = 'Nice Crack',
nocoke = 'You Cant Make This Without Coke'
Lang.coke = {
targetPick = 'Pick Coca Leaf',
picking = 'Picking Coca Leaf',
targetMakePow = 'Make Cocaine Powder',
noleaf = 'You Need A Coke Leaf',
makePow = 'Chopping Leaves into Powder',
targetCutCoke = 'Cut Cocaine',
targetBagCoke = 'Bag Cocaine',
teleIn = 'Enter the Lab',
teleOut = 'Exit the Lab',
needBakingSoda = 'You Need Baking Soda For This',
}
Lang.Cornerselling = {
-- client side notifys
inveh = 'STRANGER DANGER, I WONT GET IN THE CAR WITH YOU',
toofar = "To Far From Your Corner Homie",
selling = 'Selling %s For $%s',
deny = "Fuck That Offer",
start = "Get That Paper",
stop = "Lazy Ass Cant Even Sell Drugs",
nodrugs = "What You Gonna sell? Air?",
notcops = "Not Enough Cops",
no = 'You Cant Sell Drugs Here!',
-- end client side notifys
-- progressbars
sell = "Selling Drugs",
}
Lang.Delivery = {
-- client side
emailn = 'Not A Drug Dealer',
emailsub = 'Hurry Up And Get The Package To The Buyer',
emailcon = 'I Swear To God If It Doesnt Get There I Will Tell Your Mom You Said Fuck Just Bring %s Of %s',
search = "Searching For A Delivery ...",
none = "Nothing Close By",
busy = "You Havent Even Finished The One I Told You Too",
found = "Marked On Your Map",
already = "Already Deliverying",
checkrep = "Current Dealer Rep: ",
-- progressbars
pack = 'Handing Off Package',
-- end client side
inVeh = 'Stranger Danger!',
selling = 'Selling %s for $%s',
deny = 'Fuck That Offer',
wait = 'Waiting For Customer',
nodrugs = 'You Do Not Have Any Drugs To Sell',
searching = 'Searching For Nearby Customers',
targetTakeBack = 'Take Back Drugs',
targetSell = 'Sell %s Of %s For $%s',
targetDeny = 'Deny Offer',
stopped = 'Your Lazy Ass Cant Even Sell Drugs!',
start = 'Go Make Your Mom Proud',
gotRobbed = 'You Got Robbed Nerd!',
gotBack = 'You Got Your Stuff Back!',
notEnough = 'You Dont Have Enough Of This Item',
comDes = 'Sell Things On The Corner'
}
Lang.Heroin = {
--client
pick = " Picking Poppies Up",
tableout = 'You Already Have A Table Out',
dryout = "Drying Out Poppies",
cutting = "Cutting Heroin With Baking Soda",
secret = "SHHHHHHHHH",
table = "Placing Table Down",
success = "Heated Heroin Properly",
clean = 'Cleaning Heroin Table',
needles = 'Filling Syringe',
pickup = 'Picking Up The Heroin Table',
--
cutheroin = 'You Made Some Cut Heroin',
noheroin = "How Can You Cut Heroin Without Heroin Idiot",
vial = 'You Made A Vial Of Heroin',
novial = "How Can You Make Heroin Vials Without Heroin Idiot",
fail = 'You Over Heated Them Idiot',
fill = 'Filled The Syringe',
nofill = 'How Are You Going To Fill Needles Of Heroin Without Heroin',
haskit = 'You Already Have A Heroin Lab Kit'
Lang.crack = {
targetMake = 'Cook Some Crack',
cook = 'Cooking Crack',
targetBag = 'Bag Crack',
bag = 'Bagging Crack',
}
Lang.Lean = {
marked = ' Car Has Been Marked On Your Map',
lean = 'You Got Purple Lean',
dextro = ' You Got Red Dextro',
act = 'You Already Have A Lean Task',
Lang.Deliveries = {
targetGetDel = 'Get Delivery Mission',
targetOpenShop = 'Open Dealer Shop',
shopHeader = 'Dealer Shop',
targetHandOff = 'Hand Off Delivery',
delivering = 'Handing The Package To Drug Dealer',
alreadyDelivering = 'You Are Already Delivering A Package',
slowAf = 'You Took To Long!',
newDealerHelp = {
help = 'Place A Dealer',
name = 'Dealer Name',
timeMin = 'Minimum Time',
timeMax = 'Maximum Time'
},
DealerExists = 'Dealer Already Exists',
deleteDealer = {
help = 'Delete A Dealer',
name = 'Dealer Name',
},
deleteDealerSuccess = 'Deleted Dealer',
deleteDealerFail = 'Failed To Delete Dealer',
}
Lang.heroin = {
targetPick = 'Pick Heroin',
picking = 'Picking Heroin',
targetCook = 'Cook Heroin',
pbCook = 'Cooking Up Heroin',
targetPickup = 'Pick Up Lab',
pbPickup = 'Picking Up Lab',
targetClean = 'Clean Lab',
pbClean = 'Cleaning Lab',
targetDry = 'Dry Out Plant',
pbDry = 'Drying Out Plant',
targetCutHeroin = 'Cut Heroin',
pbCutHeroin = 'Cutting Heroin',
targetBuyKit = 'Buy Heroin Lab Kit',
pbBuyKit = 'Buying Heroin Lab Kit',
tableout = 'You Already Have A Table Out',
placing = 'Placing Down Table',
targetFill = 'Fill Syringe',
pbFill = 'Filling Syringe',
hasKitAlready = 'You Already Have A Heroin Lab Kit',
notEnoughMoney = 'You Need $%s In Cash For This',
placedKit = 'You Placed Down Your Heroin Lab Kit',
failed = 'You Failed To Make Heroin And Lost Your Ingredients',
}
Lang.lean = {
stealFromTruck = 'Steal From Truck',
startMission = 'Start Lean Mission',
notOnRun = 'You Are Not On A Lean Run'
}
Lang.lsd = {
steallys = 'Stealing Lysergic Acid',
stealdie = 'Stealing Lysergic Acid',
targetHeat = 'Heating LSD',
heating = 'Heating Up LSD',
targetRefine = 'Refine The Acid',
refining = 'Refining The Acid',
targetDipping = 'Dip Tabs',
dipping = 'Dipping Tabs',
targetPickup = 'Pick Up Lab Kit',
packup = 'Packing Up Lab Kit',
targetClean = 'Clean Lab Kit',
needCleaning = 'You Need A Cleaning Kit To Clean The Lab',
cleaning = 'Cleaning Lab Kit',
targetLys = 'Steal Lysergic Acid',
stealLys = 'Stealing Lysergic Acid',
targetDie = 'Steal Diethylamide',
stealDie = 'Stealing Diethylamide',
targetBuyTab = 'Buy Tab Paper',
targetBuyKit = 'Buy LSD Lab Kit',
alreadyOwn = 'You Already Own This Item',
buyingKit = 'Buying LSD Lab Kit',
tableout = 'You Already Have A Table Out',
tablepack = 'Packing Table Up',
heat = 'Heating Up Liquids',
clean = 'Cleaning The Table',
refine = 'Refining The Quality',
dip = 'Dipping LSD On The Paper',
buypaper = 'Buying Tab Paper',
buykit = 'Buying Lab Kit',
place = 'Placing Table Down',
hav = 'You Already Have A Table',
-- server
lys = 'You Got Lysergic Acid',
die = 'You Got Diethylamide',
cleaned = 'You Cleaned It Perfectly',
madelsd = 'You Made LSD!',
failed = 'You Over Heated Them Idiot',
refined = 'You Refined Them!',
broke = 'Your Broke Ass Cant Afford these!',
novial = 'No LSD Vials Idiot',
placing = 'Placing Lab Kit Down!',
failed = 'You Suck At Making Drugs',
}
Lang.mescaline = {
pick = "Picking Cactus",
dry = 'Drying Out Cactus',
nocactus = 'No Cactus Bulbs',
eat = 'eating mescaline'
Lang.mesc = {
targetPick = 'Pick Cactus',
picking = 'Picking Cactus',
targetDry = 'Dry Cactus',
dry = 'Drying Cactus',
}
Lang.meth = {
inside = 'Stuff Inside Already',
increaseheat = 'Increasing Heat',
mission = 'Car Has Been Marked On Your Map',
ace = 'You Got Some Acetone',
eph = 'You Got Some Ephedrine',
mix = 'Adding Things To The Mix',
nobag = 'No Bags',
act = 'You Already Have A Meth Task',
alreadyChasing = 'You Already Are Chasing A Truck',
targetStealFromCar = 'Steal From Meth Car',
targetHeist = 'Start Meth Mission',
started = 'You Already Have Meth Cooking',
increaseHeat = 'You Increased The Heat',
targetBag = 'Bag Meth',
targetCook = 'Cook Meth',
targetGrabTray = 'Grab Meth Tray',
targetHeat = 'Adjust The Dials',
targetSmash = 'Smash The Tray',
targetStealEPH = 'Steal Ephedrine',
stealingEPH = 'Stealing Ephedrine',
targetStealACE = 'Steal Acetone',
stealingACE = 'Stealing Acetone',
notOnRun = 'You Are Not On A Meth Run',
onCooldown = 'You Are On A Cooldown'
}
Lang.oxy = {
truck = 'Your Truck Is Here',
cantcarry = 'You Aint That Strong, You Can Only Carry One',
hand = 'Handing Over oxy',
empty = 'You Cant Be Empty Handed Idiot',
broke = 'Your Broke Ass Cant Afford This',
hot = 'Car Is Hot Dump It Now',
next = 'Get To the Next Location'
ditchCar = 'The Van Is Hot, Leave It Somewhere',
targetHandoff = 'Hand Off The Package',
handingoff = 'Handing Off The Package',
emptyHands = 'You Are Not Carrying Anything',
targetPay = 'Rent Oxy Van',
keys = 'The Keys Are In The Van',
targetGetPackage = 'Grab Package',
alreadyCarrying = 'You Are Already Carrying A Package',
paid = 'You Paid $%s To Rent The Van',
notOn = 'You Are Not On A Route',
}
Lang.Pharma = {
notems = 'You Are Not A Medical Person',
Lang.pharma = {
input = {
header = 'Who To Give A Prescription To?',
title1 = 'Player Name',
title2 = 'Prescription',
},
write = 'Writing Prescription',
fill = 'Filling Prescription',
open = 'Opening Bottle',
pills = 'You Got Some Pills!',
no = 'You Dont Have A Prescription'
opening = 'Opening Prescription Bottle',
targetFill = 'Fill Prescription',
fill = 'Getting Prescription Filled',
canceled = 'You Canceled The Prescription',
unbottle = 'You Opened The Bottle',
}
Lang.Shrooms = {
pick = 'Picking Shrooms',
Lang.shrooms = {
targetPick = 'Pick Shrooms',
picking = 'Picking Shrooms',
eat = 'Eating Shrooms',
trip = 'Have A Good Trip!'
cancel = 'Decided To Not Do Shrooms',
took = 'You Took Some Shrooms!'
}
Lang.Weed = {
pick = 'Harvesting Weed',
busy = 'Already Drying One Out',
canna = 'Making Canna-butter',
brown = 'Making Special Brownies',
cook = 'Making Special Cookies',
Choc = 'Making Special Chocolate',
muff = 'Making Special Muffin',
stovehot = 'Stove Is Too Hot Wait 30 Seconds To Cool Down',
shat = 'Making Shatter',
roll = 'Rolling Blunts',
wait = 'Wait A Little Bit For To Drive',
take = 'Taking Down The Weed',
--
nodry = 'You Need Wet Cannabis To Dry',
noweed = 'Cant Roll A Blunt With Air',
noshat = 'You Need Shatter To Do A Dab',
notorch = 'You Need A butane Torch'
Lang.weed = {
targetPick = 'Pick Weed',
picking = 'Picking Weed',
targetDry = 'Dry Weed',
noDry = 'You Need Wet Weed For This',
wait = 'Waiting For Weed To Dry...',
take = 'Ready To Take Weed',
targetDryed = 'Pickup Weed',
teleportIn = 'Enter The Grow House',
teleportOut = 'Leave The Grow House',
dabs = 'Doing Some Dabs',
bluntWrap = 'Dipping Syrup To Make %s',
rollBlunt = 'Rolling A %s',
targetSales = 'Buy From Dealer',
buying = 'Buying %s From Dealer',
itemDoesntExist = 'This Item Does Not Exist Here',
needItem = 'You Need A %s For This',
crackBlunt = 'Cracking Open A Blunt'
}
Lang.wholesale = {
alreadyWholesale = 'Already Wholesaling',
targetBuyer = 'Talk To The Buyer',
wholesaling = 'Wholesaling Drugs',
uhoh = 'The Buyer Is Getting Sketchy',
tooLong = 'The Buyer Waited Too Long',
notEnoughCops = 'Not Enough Cops On Duty'
}
Lang.xtc = {
out = 'You Have A Press Out Already',
pressing = 'Pressing Pills',
raw = 'Making Raw XTC',
mdp2p = 'Stealing MDP2P',
iso = 'Stealing Isosafrole',
fail = 'Dude Its A Circle Not Rocket Science',
pickup = 'Picking Up The Press',
stamp = 'Stamping %s Pills',
buyp = "Buying Press",
--
cash = 'I need 20k In Cash',
press = {
title = {single = 'Single Press', dual = 'Dual Press', triple = 'Triple Press', quad = 'Quad Press'},
des = {single ='Buy a single press for 20k', dual = '20 of each unstamped single stack pill and your single press ',
triple = '50 of each unstamped dual stack pill and your dual press ', quad = '150 of each unstamped Triple stack pill and your triple press'
}
}
alreadyOut = 'You Have A Press Out Already',
settingDown = 'Setting Down The Press',
noPressOut = 'You Do Not Have A Press Out',
targetMake = 'Press Pills',
making = 'Pressing A %s',
targetPickup = 'Pick Up Press',
picking = 'Picking Up Press',
targetStealMDP2P = 'Steal MDP2P',
stealingMDP2P = 'Stealing MDP2P',
fail = 'Damn Dude You Suck',
targetStealIsosafrole = 'Steal Isosafrole',
stealingIsosafrole = 'Stealing Isosafrole',
targetRaw = 'Make Raw XTC',
makingRaw = 'Making Raw XTC',
getPress = 'Get Press',
buySingle = 'Buy Single Press For $%s',
buyp = 'Buying Press',
targetStamp = 'Stamp XTC',
stamp_desc = 'Stamp %s Pills',
stamping = 'Stamping %s Pills',
noPills = 'You Dont Have Any Unstamped Pills'
}
Lang.Wholesale = {
al = 'You Already Have A Delivery To Make',
na = 'No One Answered, Try Again Later',
}
return Lang
+64
View File
@@ -0,0 +1,64 @@
local Target = {
Travellingmerchant = {
vector4(-119.66, -977.43, 304.25, 88.21),
vector4(-1522.93, 1476.01, 111.45, 41.25),
vector4(-3278.98, 973.38, 5.35, 101.53),
},
}
local loc = Target.Travellingmerchant[math.random(1, #Target.Travellingmerchant)]
local stores = {
travel = {
tab_paper = 50,
bakingsoda = 25,
isosafrole = 25,
mdp2p = 25,
lysergic_acid = 25,
diethylamide = 25,
lockpick = 2,
emptyvial = 2,
needle = 2,
cokeburner = 25,
crackburner = 2,
lsdburner = 2,
heroinburner = 2,
mdlean = 50,
weedgrinder = 25,
mdbutter = 25,
flour = 25,
chocolate = 25,
butane = 25,
butanetorch = 2,
dabrig = 2,
mdwoods = 2,
leancup = 25,
xtcburner = 25,
},
}
ps.registerCallback('md-drugs:server:GetMerchant', function(source)
return loc, stores.travel
end)
RegisterServerEvent("md-drugs:server:purchaseGoods", function(item)
local src = source
if not ps.checkDistance(src, loc, 10) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
if not stores.travel[item] then
ps.notify(src, ps.lang('Catches.invalidItem'), "error")
return
end
if ps.removeMoney(src, 'cash', stores.travel[item]) then
ps.addItem(src, item, 1)
else
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
end
end)
+8 -8
View File
@@ -42,7 +42,7 @@ end)
RegisterServerEvent('md-drugs:server:makepowder', function(num)
local src = source
if not ps.checkDistance(src, cocaineLocations.MakePowder[num].loc, 3.5) then
ps.notify(src, 'You are not in the correct location', 'error')
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
@@ -55,7 +55,7 @@ RegisterServerEvent('md-drugs:server:makepowder', function(num)
end
end
if not ps.craftItem(src, cocaineRecipes['cocaine']['cokepowder'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, cocaineRecipes['cocaine']['cokepowder'][tier].take)
return
end
end)
@@ -64,7 +64,7 @@ RegisterServerEvent('md-drugs:server:cutcokeone', function(num)
local src = source
local tier = 'tier1'
if not ps.checkDistance(src, cocaineLocations.CuttingCoke[num].loc, 2.5) then
ps.notify(src, 'You are not in the correct location', 'error')
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
@@ -81,7 +81,7 @@ RegisterServerEvent('md-drugs:server:cutcokeone', function(num)
end
end
if not ps.craftItem(src, cocaineRecipes['cocaine']['cutcoke'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, cocaineRecipes['cocaine']['cutcoke'][tier].take)
return
end
end)
@@ -90,7 +90,7 @@ RegisterServerEvent('md-drugs:server:bagcoke', function(num)
local src = source
local tier = 'tier1'
if not ps.checkDistance(src, cocaineLocations.BaggingCoke[num].loc, 2.5) then
ps.notify(src, 'You are not in the correct location', 'error')
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
@@ -106,13 +106,13 @@ RegisterServerEvent('md-drugs:server:bagcoke', function(num)
end
end
if not ps.craftItem(src, cocaineRecipes['cocaine']['bagcoke'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, cocaineRecipes['cocaine']['bagcoke'][tier].take)
return
end
AddRep(src, 'coke')
else
if not ps.craftItem(src, cocaineRecipes['cocaine']['bagcoke'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, cocaineRecipes['cocaine']['bagcoke'][tier].take)
return
end
end
@@ -122,7 +122,7 @@ local cokecut = {loosecokestagetwo = 2, loosecokestagethree = 3}
for k, v in pairs (cokecut) do
ps.createUseable(k, function(source, item)
local src = source
if not ps.hasItem(src, 'bakingsoda') then ps.notify(src, 'You Need Baking Soda For this', 'error') return end
if not ps.hasItem(src, 'bakingsoda') then ps.notify(src, ps.lang('coke.needBakingSoda'), 'error') return end
if ps.hasItem(src,item.name) then
local check = ps.callback('md-drugs:client:uncuff', src, 'Cutting It Further')
if not check then return end
+8 -9
View File
@@ -21,8 +21,8 @@ strength = number -- how long you are strong boi
]]
local Consume = {
-- meth
methbags = { time = 4000, effect = 'meth', anim = "smoke", ps.progressbartext = "Injesting",
add = {health = -20, stress = -10, speed = 40, strength = 10, thirst = -30}},
methbags = { time = 4000, effect = 'meth', anim = "smoke", progressbartext = "Injesting",
add = {health = -20, stress = -10, speed = 40, strength = 10, thirst = -30}},
cokebaggy = { anim = 'smell', time = 1000, effect = 'coke', add = { stress = -10 }},
cokebaggystagetwo = { anim = 'smell', time = 1000, effect = 'coke', add = { stress = -10 }},
cokebaggystagethree = { anim = 'smell', time = 1000, effect = 'coke', add = { stress = -10 }},
@@ -143,22 +143,22 @@ xanax = { anim = 'pill', effect = 'none', add = { stress = -40
}
for k, v in pairs(Consume) do
CUI(k, function(source, item)
if not Itemcheck(source, k, 1) then return end
ps.createUseable(k, function(source, item)
if not ps.hasItem(source, k, 1) then return end
local time = v.time or Consumables.defaulttime
local effect = v.effect or 0
local anim = v.anim or Consumables.defaultanim
local ps.progressbartext = v.ps.progressbartext or Consumables.defaultprogresstext
local progressbartext = v.progressbartext or Consumables.defaultprogresstext
local add = v.add or {hunger = 0}
local done = ps.callback('md-drugs:client:consumedrugs', source, time, effect, anim, ps.progressbartext, add, k)
local done = ps.callback('md-drugs:client:consumedrugs', source, time, effect, anim, progressbartext, add, k)
if done then
RemoveItem(source, k, 1)
ps.removeItem(source, k, 1)
end
end)
end
RegisterNetEvent('md-drugs:server:updatestatus', function(stat, statval)
local Player = getPlayer(source)
local Player = ps.getPlayer(source)
local hunger, thirst = Player.PlayerData.metadata.hunger, Player.PlayerData.metadata.thirst
if stat == "thirst" then
local value = thirst + statval
@@ -176,6 +176,5 @@ RegisterNetEvent('md-drugs:server:updatestatus', function(stat, statval)
local value = Player.PlayerData.metadata.armor + statval
TriggerEvent('hospital:server:SetArmor', value)
TriggerClientEvent('hud:client:UpdateStress', source, Player.PlayerData.metadata.armor, value)
else
end
end)
+6 -7
View File
@@ -135,7 +135,7 @@ local function beingRobbed(source, item, amount, ped)
local math = math.random(1,100)
if math <= robChance then
ps.removeItem(src, item, amount)
ps.notify(src, 'You Got Robbed Nerd', 'error')
ps.notify(src, ps.lang('Cornerselling.gotRobbed'), 'error')
RobbedDrugs[ps.getIdentifier(source)] = {item = item, amount = amount, ped = ped}
return true
else
@@ -148,7 +148,7 @@ local function getDrugBack(source, item, amount)
if RobbedDrugs[ps.getIdentifier(source)] then
if RobbedDrugs[ps.getIdentifier(source)].item == item and RobbedDrugs[ps.getIdentifier(source)].amount == amount then
ps.addItem(src, item, amount)
ps.notify(src, 'You Got Your Drugs Back', 'success')
ps.notify(src, ps.lang('Cornerselling.gotBack'), 'success')
RobbedDrugs[ps.getIdentifier(source)] = nil
return true
end
@@ -180,7 +180,7 @@ end)
ps.registerCallback('md-drugs:server:hasDrugs', function(source)
for k, v in pairs(Drugs) do
if hasItem(source, k, 1) then
if ps.hasItem(source, k, 1) then
return true
end
end
@@ -208,12 +208,11 @@ RegisterNetEvent('md-drugs:server:sellCornerDrugs', function(item, amount, price
local src = source
if not csCheck(src, item, amount, price) then return end
if not ps.removeItem(src, item, amount) then
ps.notify(src, 'You Do Not Have Enough Of This Item', 'error')
ps.notify(src, ps.lang('Cornerselling.notEnough'), 'error')
DrugDeals[ps.getIdentifier(src)] = nil
return
end
AddRep(src, 'cornerselling', Drugs[item].rep * amount)
--Log(string.format('%s Sold %s Of %s For A Price Of $%s !', GetName(src),amount, item, price), 'cornerselling')
DrugDeals[ps.getIdentifier(src)] = nil
ps.addMoney(src, 'cash', price)
end)
@@ -225,8 +224,8 @@ RegisterNetEvent('md-drugs:server:getBackRobbed', function()
RobbedDrugs[ps.getIdentifier(source)] = nil
end)
lib.addCommand('cornersell', {
help = 'Sell Things On The Corner',
ps.registerCommand('cornersell', {
help = ps.lang('Cornerselling.comDes'),
params = {
},
}, function(source, args, raw)
+6 -6
View File
@@ -27,7 +27,7 @@ RegisterServerEvent('md-drugs:server:makecrackone', function(num)
local src = source
local tier = 'tier1'
if not ps.checkDistance(src, CrackLocations.makecrack[num].loc, 2.0) then
ps.notify(src, 'You are not in the correct location', 'error')
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
@@ -44,7 +44,7 @@ RegisterServerEvent('md-drugs:server:makecrackone', function(num)
end
end
if not ps.craftItem(src, crackRecipe['crack']['cookcrack'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, crackRecipe['crack']['cookcrack'][tier].take)
return
end
end)
@@ -54,7 +54,7 @@ RegisterServerEvent('md-drugs:server:bagcrack', function(num)
local src = source
local tier = 'tier1'
if not ps.checkDistance(src, CrackLocations.bagcrack[num].loc, 2.0) then
ps.notify(src, 'You are not in the correct location', 'error')
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
@@ -71,7 +71,7 @@ RegisterServerEvent('md-drugs:server:bagcrack', function(num)
end
end
if not ps.craftItem(src, crackRecipe['crack']['bagcrack'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, crackRecipe['crack']['bagcrack'][tier].take)
return
end
end)
@@ -93,8 +93,8 @@ end
RegisterNetEvent("md-drugs:server:failcrackone", function(num)
local src = source
if not ps.checkDistance(src, GlobalState.MDDrugsLocs.makecrack[num].loc, 2.0) then
ps.notify(src, 'You are not in the correct location', 'error')
if not ps.checkDistance(src, CrackLocations.makecrack[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
local items = {
+66 -31
View File
@@ -80,13 +80,25 @@ local dloc = {
{coords = vector4(223.98, 121.53, 102.76, 259.68)},
{coords = vector4(102.19, -255.02, 50.05, 83.59)},
}
ps.registerCallback('md-drugs:server:getDealers', function(data)
local Products = {
{name = "weed_whitewidow_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_skunk_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_purplehaze_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_ogkush_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_amnesia_seed", price = 15, amount = 150, minrep = 0},
}
ps.registerCallback('md-drugs:server:dealerList', function()
return Products
end)
ps.registerCallback('md-drugs:server:getDealers', function(source)
local check = MySQL.query.await('SELECT * FROM dealers', {})
local loc = json.encode({x = 899.98, y = -2603.24, z = 6.11, h = 176.12 })
if not check[1] then
MySQL.insert('INSERT INTO dealers SET name = ?, coords = ?, time = ?, createdby = ?', {'MD', loc, 'any', 'code Newb'})
Wait(2000)
local check2 = MySQL.query.await('SELECT * FROM dealers', {})
Wait(2000)
local check2 = MySQL.query.await('SELECT * FROM dealers', {})
return check2
else
return check
@@ -99,9 +111,9 @@ local DeliveryItems = {
{ item = "coke_brick", minrep = 0, payout = {min = 10, max = 50}},
}
ps.registerCallback('md-drugs:server:GetDeliveryItem', function(data)
ps.registerCallback('md-drugs:server:GetDeliveryItem', function(source, data)
local src = source
local Player = getPlayer(src)
local Player = ps.getPlayer(src)
local itemnum = math.random(1, #DeliveryItems)
local item = DeliveryItems[itemnum].item
local amount = math.random(1,4)
@@ -115,53 +127,62 @@ ps.registerCallback('md-drugs:server:GetDeliveryItem', function(data)
})
if not check[1] then
MySQL.insert('INSERT INTO deliveriesdealer SET cid = ?, itemdata = ?, timestart = ?, maxtime = ?, location = ?',
{Player.PlayerData.citizenid, json.encode({item = item, amount = amount}), os.time(), os.time() + (15 * 60), coord })
AddItem(Player.PlayerData.source, item, amount)
{ps.getIdentifier(src), json.encode({item = item, amount = amount}), os.time(), os.time() + (15 * 60), coord })
ps.addItem(src, item, amount)
return true, item, amount, coord
else
local time = os.time()
local timeout = math.floor(os.difftime(time, check[1].maxtime) / 60)
if timeout > 15 then MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {Player.PlayerData.citizenid}) ps.notify(src, 'You Failed To Make It In Time!', 'error' ) return false end
ps.notify(src,'You Already Have A Delivery To Make', 'error' ) return false, item, amount, coord
if timeout > 15 then
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
ps.notify(src, ps.lang('Deliveries.slowAf'), 'error' )
return false
end
ps.notify(src,ps.lang('Deliveries.alreadyDelivering'), 'error' )
return false, item, amount, coord
end
end)
RegisterNetEvent('md-drugs:server:giveDeliveryItems', function(item, amount)
local src = source
local Player = getPlayer(src)
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {Player.PlayerData.citizenid})
local Player = ps.getPlayer(src)
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
if not check[1] then return end
local time = os.time()
local timeout = math.floor(os.difftime(time, check[1].maxtime) / 60)
local itemData = json.decode(check[1].itemdata)
if timeout >= 15 then MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {Player.PlayerData.citizenid}) ps.notify(source, 'You Failed To Make It In Time!', 'error' ) return end
if timeout >= 15 then
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
ps.notify(src, ps.lang('Deliveries.slowAf'), 'error' )
return
end
if item ~= itemData.item then return end
if amount ~= itemData.amount then return end
if RemoveItem(src, item, amount) then
if ps.removeItem(src, item, amount) then
for k, v in pairs (DeliveryItems) do
if v.item == item then
local income = math.random(v.payout.min, v.payout.max)
Player.Functions.AddMoney('cash', income)
ps.addMoney(src, 'cash', income)
AddRep(src, 'dealerrep')
end
end
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {Player.PlayerData.citizenid})
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
end
end)
lib.addCommand("newdealer", {
help = "Place a dealer (Admin Only)",
params = {
{ name = "name", help = "Dealer Name", type = "string" },
{ name = "min", help = "Minimum Time", type = "number" },
{ name = "max", help = "Maximum Time", type = "number" }
ps.registerCommand("newdealer", {
help = ps.lang('Deliveries.newDealerHelp.help'),
description = {
{ name = "name", help = ps.lang('Deliveries.newDealerHelp.name'), type = "string" },
{ name = "min", help = ps.lang('Deliveries.newDealerHelp.timeMin'), type = "number" },
{ name = "max", help = ps.lang('Deliveries.newDealerHelp.timeMax'), type = "number" }
},
restricted = "admin"
admin = true,
}, function(source, args)
local ped = GetPlayerPed(source)
local coords = GetEntityCoords(ped)
local Player = getPlayer(source)
local Player = ps.getPlayer(source)
if not Player then return end
local dealerName = args.name
@@ -169,7 +190,7 @@ lib.addCommand("newdealer", {
local result = MySQL.scalar.await('SELECT name FROM dealers WHERE name = ?', { dealerName })
if result then
return ps.notify(source,"Already Exists", "error")
return ps.notify(source,ps.lang('Deliveries.DealerExists'), "error")
end
MySQL.insert('INSERT INTO dealers (name, coords, time, createdby) VALUES (?, ?, ?, ?)', {
@@ -188,12 +209,12 @@ lib.addCommand("newdealer", {
end)
end)
lib.addCommand("deletedealer", {
help = "Delete a dealer (Admin Only)",
params = {
{ name = "name", help = "Dealer Name", type = "string" }
ps.registerCommand("deletedealer", {
help = ps.lang('Deliveries.deleteDealerHelp.help'),
description = {
{ name = "name", help = ps.lang('Deliveries.deleteDealerHelp.name'), type = "string" }
},
restricted = 'group.admin'
admin = true
}, function(source, args)
local dealerName = args.name
local result = MySQL.scalar.await('SELECT * FROM dealers WHERE name = ?', { dealerName })
@@ -202,8 +223,22 @@ lib.addCommand("deletedealer", {
MySQL.query('DELETE FROM dealers WHERE name = ?', { dealerName })
QBConfig.Dealers[dealerName] = nil
TriggerClientEvent('md-drugs:client:RefreshDealers', -1, QBConfig.Dealers)
TriggerClientEvent('QBCore:ps.notify', source, "Dealer Deleted", "success")
ps.notify(source, ps.lang('Deliveries.deleteDealerSuccess'), "success")
else
TriggerClientEvent('QBCore:ps.notify', source, "Who You Tryna Delete", "error")
ps.notify(source, ps.lang('Deliveries.deleteDealerFail'), "error")
end
end)
RegisterNetEvent('md-drugs:server:buyItemDealer', function(num)
local src = source
local itemData = Products[num]
if not itemData then return end
local Player = ps.getPlayer(src)
if not Player then return end
if not ps.removeMoney(src, 'cash', itemData.price) or not ps.removeMoney(src,'bank', itemData.price) then
ps.notify(src, ps.lang('Catches.notEnoughMoney'), 'error')
return
end
ps.addItem(src, itemData.name, 1)
ps.notify(src, string.format(ps.lang('Deliveries.buyItemSuccess'), 1, ps.getLabel(itemData.name), itemData.price), 'success')
end)
+33 -64
View File
@@ -1,13 +1,36 @@
function verifyHas(source, items)
local need = 0
local have = 0
local missingList = {}
------------------------------------------ logging stuff
local logs = false
local logapi = GetConvar("fivemerrLogs", "")
local endpoint = 'https://api.fivemerr.com/v1/logs'
local headers = {
['Authorization'] = logapi,
['Content-Type'] = 'application/json',
}
for k, v in pairs(items) do
need = need + 1
if ps.hasItem(source, k, v) then
have = have + 1
else
local label = ps.getItemLabel(k) or k
table.insert(missingList, v .. " " .. label)
end
end
if need == have then
return true
end
local message = ps.lang('Catches.itemMissings') .. table.concat(missingList, "\n")
ps.notify(source, message, 'error')
return false
end
RegisterCommand('TestMissing', function(source)
local items = {
coke = 5,
heroin = 2,
lsd = 1
}
local src = source
verifyHas(src, items)
end)
local function handleFresh(source)
local table = json.encode({
@@ -68,62 +91,8 @@ function AddRep(source, type, amount)
end
end
lib.addCommand('addCornerSellingTOREP', {
help = 'RUN THIS ONCE AND DELETE',
restricted = 'group.admin'
}, function(source, args, raw)
local sql = MySQL.query.await('SELECT * FROM drugrep', {})
for k, v in pairs (sql) do
local new = {}
local old = json.decode(v.drugrep)
local get = old[1] or old
table.insert(new, {
coke = get.coke,
lsd = get.lsd,
heroin = get.heroin,
dealerrep = get.dealerrep,
cornerselling = {
price = QBConfig.SellLevel[1].price,
rep = 0,
label = QBConfig.SellLevel[1].label,
level = 1
}
})
local news = json.encode(new)
MySQL.query.await('UPDATE drugrep SET drugrep = ? WHERE cid = ?', {news, v.cid})
end
end)
function sortTab(tbl, type)
table.sort(tbl, function(a, b)
return a[type] < b[type]
end)
end
function handleCornersell(source, item, amount, price)
if RemoveItem(source, item, amount) then
if inventory == 'qb' then
local Player = getPlayer(source)
if QBConfig.MarkedBills == true then
Player.Functions.AddItem('markedbills',1,false, {worth = price})
return true
end
if QBConfig.CustomDirtyMoney == true then
AddItem(source, QBConfig.CustomDirtyMoneyitem,price)
return true
end
Player.Functions.AddMoney('cash', price)
elseif inventory == 'ox' then
AddItem(source, 'black_money', price)
return true
end
else
return false
end
end
lib.callback.register('md-drugs:server:GetCoppers', function(source, cb, args)
return getCops()
ps.registerCallback('md-drugs:server:GetCoppers', function(source, cb, args)
return ps.getJobTypeCount('leo')
end)
ps.registerCallback('md-drugs:server:GetRep', function(source, cb, args)
+35 -19
View File
@@ -59,8 +59,11 @@ end)
RegisterServerEvent('md-drugs:server:dryplant', function(num)
local src = source
if not ps.checkDistance(src, heroinLocations.dryplant[num].loc, 3.0) then return end
if not ps.hasItem(src, 'poppyresin', 1) then return end
if not ps.checkDistance(src, heroinLocations.dryplant[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
if Config.TierSystem then
local heroin = getRep(src, 'heroin')
@@ -73,15 +76,17 @@ RegisterServerEvent('md-drugs:server:dryplant', function(num)
end
end
if not ps.craftItem(src, heroinRecipes['dryheroin'][tier]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, heroinRecipes['dryheroin'][tier].take)
return
end
end)
RegisterServerEvent('md-drugs:server:cutheroin', function(num)
local src = source
if not ps.checkDistance(src, heroinLocations.cutheroinone[num].loc, 3.0) then return end
if not ps.hasItem(src, 'bakingsoda', 1) then return end
if not ps.checkDistance(src, heroinLocations.cutheroinone[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
local itemList = {
heroin = 'tier1',
@@ -92,7 +97,7 @@ RegisterServerEvent('md-drugs:server:cutheroin', function(num)
local cuth = ps.hasItem(src, k)
if cuth then
if not ps.craftItem(src, heroinRecipes['cutheroin'][v]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, heroinRecipes['cutheroin'][v].take)
return
end
AddRep(src, 'heroin')
@@ -101,7 +106,7 @@ RegisterServerEvent('md-drugs:server:cutheroin', function(num)
end
else
if not ps.craftItem(src, heroinRecipes['cutheroin']['tier1']) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, heroinRecipes['cutheroin']['tier1'].take)
return
end
end
@@ -109,13 +114,16 @@ end)
RegisterServerEvent('md-drugs:server:getheroinlabkit', function(num)
local src = source
if not ps.checkDistance(src, heroinLocations.buyKit[num].loc, 3.0) then return end
if not ps.checkDistance(src, heroinLocations.buyKit[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
local has = ps.hasItem(src, 'heroinlabkit')
if has then ps.notify(src, Lang.Heroin.haskit, 'error') return end
if has then ps.notify(src, ps.lang('heroin.hasKitAlready'), 'error') return end
if ps.removeMoney(src, 'cash', prices.heroinlabkitprice) then
ps.addItem(src, 'heroinlabkit', 1)
else
ps.notify(src, 'You Need '.. prices.heroinlabkitprice .. ' In Cash For This', 'error')
ps.notify(src, ps.lang('heroin.notEnoughMoney', prices.heroinlabkitprice), 'error')
end
end)
@@ -152,7 +160,7 @@ ps.createUseable('heroinlabkit', function(source, item)
coords = loc,
name = ps.getPlayerName(src)
})
ps.notify(src, ps.lang('Heroin.placed'), "success")
ps.notify(src, ps.lang('heroin.placedKit'), "success")
end
end)
@@ -170,7 +178,7 @@ RegisterServerEvent('md-drugs:server:heatliquidheroin', function()
local cuth = ps.hasItem(src, k)
if cuth then
if not ps.craftItem(src, heroinRecipes['fillvial'][v]) then
ps.notify(src, 'You do not have the required items', 'error')
verifyHas(src, heroinRecipes['fillvial'][v].take)
return
end
AddRep(src, 'heroin')
@@ -178,7 +186,10 @@ RegisterServerEvent('md-drugs:server:heatliquidheroin', function()
end
end
else
if not ps.craftItem(src, heroinRecipes['fillvial']['tier1']) then return end
if not ps.craftItem(src, heroinRecipes['fillvial']['tier1']) then
verifyHas(src, heroinRecipes['fillvial']['tier1'].take)
return
end
end
end)
@@ -194,7 +205,7 @@ RegisterServerEvent('md-drugs:server:failheatingheroin', function()
local cuth = ps.hasItem(src, k)
if cuth then
ps.removeItem(src, k, v)
ps.notify(src, ps.lang('Heroin.fail'), "error")
ps.notify(src, ps.lang('heroin.failed'), "error")
return
end
end
@@ -202,8 +213,8 @@ end)
RegisterServerEvent('md-drugs:server:fillneedle', function(num)
local src = source
if not ps.checkDistance(src, GlobalState.MDDrugsLocs.fillneedle[num].loc, 3.0) then
ps.notify(src, ps.lang('Heroin.noloc'), 'error')
if not ps.checkDistance(src, heroinLocations.fillNeedle[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
return
end
if not ps.hasItem(src, 'needle', 1) then return end
@@ -216,14 +227,19 @@ RegisterServerEvent('md-drugs:server:fillneedle', function(num)
for k, v in pairs(itemList) do
local vh = ps.hasItem(src, v.item)
if vh then
if not ps.craftItem(src, heroinRecipes['fillneedle'][v.tier]) then return end
if not ps.craftItem(src, heroinRecipes['fillneedle'][v.tier]) then
verifyHas(src, heroinRecipes['fillneedle'][v.tier].take)
return
end
AddRep(src, 'heroin')
return
end
end
ps.notify(src,Lang.Heroin.nofill, "error")
else
if not ps.craftItem(src, heroinRecipes['fillneedle']['tier1']) then return end
if not ps.craftItem(src, heroinRecipes['fillneedle']['tier1']) then
verifyHas(src, heroinRecipes['fillneedle']['tier1'].take)
return
end
end
end)
+1 -1
View File
@@ -37,7 +37,7 @@ end
RegisterServerEvent('md-drugs:server:givelean', function()
local src = source
local amount = math.random(1,5)
if not onRun[ps.getIdentifier(src)] then return ps.notify(src, Lang.lean.err, "error") end
if not onRun[ps.getIdentifier(src)] then return ps.notify(src, ps.lang('lean.notOnRun'), "error") end
onRun[ps.getIdentifier(src)] = onRun[ps.getIdentifier(src)] + 1
if math.random(1,100) <= 50 then
ps.addItem(src, "mdlean", amount)
+17 -12
View File
@@ -47,7 +47,7 @@ RegisterServerEvent('md-drugs:server:getlysergic', function(num)
local src = source
if timedOut[src] then return end
if not ps.checkDistance(src, lsdLocations.lysergicacid[num].loc, 2.0) then
ps.notify(src, ps.lang('lsd.notinloc'), "error")
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
timeout(src, 3000)
@@ -58,7 +58,7 @@ RegisterServerEvent('md-drugs:server:getdiethylamide', function(num)
local src = source
if timedOut[src] then return end
if not ps.checkDistance(src, lsdLocations.diethylamide[num].loc, 2.0) then
ps.notify(src, Lang.lsd.notinloc, "error")
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
timeout(src, 3000)
@@ -109,7 +109,7 @@ RegisterServerEvent('md-drugs:server:heatliquid', function()
local src = source
if not hasLabKit(src) then return end
if not ps.craftItem(src, lsdRecipes['vial']['heat']) then
ps.notify(src, ps.lang('lsd.noliquid'), "error")
verifyHas(src, lsdRecipes['vial']['heat'].take)
return
end
end)
@@ -119,14 +119,14 @@ RegisterServerEvent('md-drugs:server:failheating', function()
if not hasLabKit(src) then return end
ps.removeItem(src, 'lysergic_acid', 1)
ps.removeItem(src, 'diethylamide', 1)
ps.notify(src, ps.lang('prices.lsd.failed'), "error")
ps.notify(src, ps.lang('lsd.failed'), "error")
end)
RegisterServerEvent('md-drugs:server:refinequalityacid', function()
local src = source
if not hasLabKit(src) then return end
if not ps.hasItem(src, 'lsd_one_vial', 1) then return end
local src = source
if not hasLabKit(src) then return end
if not ps.hasItem(src, 'lsd_one_vial', 1) then return end
if Config.TierSystem then
local lsd = getRep(src, 'lsd')
if ps.removeItem(src, 'lsd_one_vial', 1) then
@@ -170,25 +170,30 @@ end)
RegisterServerEvent('md-drugs:server:gettabpaper', function(num)
local src = source
if not ps.checkDistance(src, lsdLocations.gettabs[num].loc, 3.0) then return end
if not ps.checkDistance(src, lsdLocations.gettabs[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
if ps.removeMoney(src, 'cash', prices.tabcost * 10) then
ps.addItem(src,'tab_paper', 10)
else
ps.notify(src, Lang.lsd.broke, "error")
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
end
end)
RegisterServerEvent('md-drugs:server:getlabkit', function(num)
local src = source
if ps.hasItem(src,'lsdlabkit', 1) then
ps.notify(src, ps.lang('lsd.havlabkit'), 'error')
return
end
if not ps.checkDistance(src, lsdLocations.buyLSDkit[num].loc, 3.0) then return end
if not ps.checkDistance(src, lsdLocations.buyLSDkit[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
if ps.removeMoney(src, 'cash', prices.lsdlabkitcost) then
ps.addItem(src,'lsdlabkit', 1)
else
ps.notify(src, Lang.lsd.broke, "error")
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
end
end)
+13 -3
View File
@@ -3,23 +3,33 @@ local mescalineLocation = {
{loc = vector3(1850.12, 2595.23, 45.67), l = 1.0, w = 1.0, rot = 0.0, gang = ""},
},
}
local mescalineRecipes = {
mescaline = {
dry = {
dried = {take = {cactusbulb = 1}, give = {driedmescaline = 1} }
}
},
}
ps.registerCallback('md-drugs:server:GetMescalineLocs', function(source)
return mescalineLocation
end)
RegisterNetEvent("md-drugs:server:drymescaline", function(num)
local src = source
if not ps.checkDistance(src, mescalineLocation.DryOutMescaline[num].loc, 3.0) then
ps.notify(src, "You are not in the right location", "error")
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
if not ps.craftItem(src, mescalineRecipes.mescaline.dry.dried) then
verifyHas(src, mescalineRecipes.mescaline.dry.dried.take)
return
end
if not GetRecipe(src, 'mescaline', 'dry', 'dried') then return end
end)
ps.createUseable("driedmescaline", function(source, item)
local src = source
if ps.removeItem(src, "driedmescaline", 1) then
TriggerClientEvent("md-drugs:client:takemescaline", src)
end
end)
+39 -19
View File
@@ -34,9 +34,19 @@ local methLocs = {
}
}
local methRecipes = {
cook = {
heat = {take = {ephedrine = 1, acetone = 1}, give = {}}
},
bag = {
bags = {take = {empty_weed_bag = 5}, give = {methbags = 5} }
}
}
ps.registerCallback('md-drugs:server:GetMethLocs', function(source)
return methLocs
end)
local function setTimeout(identifier)
if onRun[identifier] then
CreateThread(function()
@@ -62,7 +72,7 @@ end
RegisterServerEvent('md-drugs:server:givemethingridients', function()
local src = source
local amount = math.random(1,5)
if not onRun[ps.getIdentifier(src)] then return ps.notify(src, Lang.lean.err, "error") end
if not onRun[ps.getIdentifier(src)] then return ps.notify(src, ps.lang('meth.notOnRun'), "error") end
onRun[ps.getIdentifier(src)] = onRun[ps.getIdentifier(src)] + 1
if math.random(1,100) <= 50 then
ps.addItem(src, "ephedrine", amount)
@@ -74,41 +84,51 @@ RegisterServerEvent('md-drugs:server:givemethingridients', function()
end
end)
RegisterServerEvent('md-drugs:server:startcook', function(num)
local src = source
if not GetRecipe(source, 'meth', 'cook', 'heat') then return end
ps.notify(src, "Adding Things To The Mix", "success")
end)
RegisterServerEvent('md-drugs:server:getmeth', function(num)
local src = source
if not ps.checkDistance(src, methLocs.BagMeth[num].loc, 2.5) then return end
if not GetRecipe(src, 'meth', 'bag', 'bags') then return end
if not ps.checkDistance(src, methLocs.BagMeth[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
if not ps.craftItem(src, methRecipes.meth.bag.bags) then
verifyHas(src, methRecipes.meth.bag.bags.take)
return
end
end)
RegisterServerEvent('md-drugs:server:geteph', function(num)
local src = source
if not ps.checkDistance(src, methLocs.MethEph[num].loc, 2.5) then return end
if not coolDown(ps.getIdentifier(src)) then return ps.notify(src, ps.lang('meth.wait'), "error") end
if ps.addItem(src, 'ephedrine', 1) then
ps.notify(src, 'Got Ephedrine!', "success")
if not ps.checkDistance(src, methLocs.MethEph[num].loc, 2.5) then
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)
end)
RegisterServerEvent('md-drugs:server:getace', function(num)
local src = source
if not ps.checkDistance(src, methLocs.MethAce[num].loc, 2.5) then return end
if not coolDown(ps.getIdentifier(src)) then return ps.notify(src, ps.lang('meth.wait'), "error") end
if ps.addItem(src, 'acetone', 1) then
ps.notify(src, 'Got Acetone!', "success")
if not ps.checkDistance(src, methLocs.MethAce[num].loc, 2.5) then
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, 'acetone', 1)
end)
ps.registerCallback('md-drugs:server:startcook', function(source, num)
local src = source
if not ps.checkDistance(src, methLocs.CookMeth[num].loc, 2.5) then return false end
local recipe = GetRecipe(src, 'meth', 'cook', 'heat')
return recipe
if not ps.checkDistance(src, methLocs.CookMeth[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
return false
end
local recipe = ps.craftItem(src, methRecipes.meth.cook.heat)
if not recipe then
verifyHas(src, methRecipes.meth.cook.heat.take)
return false
end
return true
end)
ps.registerCallback('md-drugs:server:registerMeth', function(source)
+4 -4
View File
@@ -32,10 +32,10 @@ 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
onRoute[src] = true
ps.notify(src, ps.lang('oxy.paid') .. prices.payfortruck, "success")
ps.notify(src, ps.lang('oxy.paid', prices.payfortruck), "success")
return true
else
ps.notify(src, ps.lang('oxy.broke'), "error")
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
return false
end
end)
@@ -44,12 +44,12 @@ end)
RegisterServerEvent('md-drugs:server:giveoxybox', function()
local src = source
if not onRoute[src] then
ps.notify(src, ps.lang('oxy.notonroute'), "error")
ps.notify(src, ps.lang('oxy.notOn'), "error")
return
end
if not ps.checkDistance(src, oxyLocs.oxylocations[onRoute[src]], 3.5) then
ps.notify(src, ps.lang('oxy.toofar'), "error")
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
+8 -8
View File
@@ -7,6 +7,7 @@ local pharmaLocations = {
ps.registerCallback('md-drugs:server:GetPharmaLocs', function()
return pharmaLocations
end)
local function GetJob(source)
local src = source
return ps.getJobType(src) == 'ems'
@@ -17,15 +18,14 @@ ps.createUseable('prescription_pad', function(source, item)
local near = {}
if GetJob(src) then
near = ps.getNearbyPlayers(src, 5.0)
local options = {
{label = 'Vicodin', value = 'vicodin_prescription'},
{label = 'Adderal', value = 'adderal_prescription'},
{label = 'Morphine', value = 'morphine_prescription'},
{label = 'Xanax', value = 'xanax_prescription'}
{label = ps.getItemLabel('vicodin_prescription'), value = 'vicodin_prescription'},
{label = ps.getItemLabel('adderal_prescription'), value = 'adderal_prescription'},
{label = ps.getItemLabel('morphine_prescription'), value = 'morphine_prescription'},
{label = ps.getItemLabel('xanax_prescription'), value = 'xanax_prescription'}
}
local data = ps.callback('md-drugs:client:prescriptionpad', src, near, options)
if not data then return ps.notify(src, ps.lang('Pharma.cancel'), "error") end
if not data then return ps.notify(src, ps.lang('pharma.canceled'), "error") end
ps.addItem(ps.getSource(data.who), data.what, 1)
end
end)
@@ -46,7 +46,7 @@ for m, d in pairs (pharmabottle) do
if d == k then
if ps.removeItem(src, d, 1) then
ps.addItem(src, v, math.random(10,30))
ps.notify(src,ps.lang('Pharma.unbottle'), "success")
ps.notify(src,ps.lang('pharma.unbottle'), "success")
end
end
end
@@ -57,7 +57,7 @@ end
RegisterServerEvent('md-drugs:server:fillprescription', function(num)
local src = source
if not ps.checkDistance(src, pharmaLocations.FillPrescription[num].loc, 3.5) then
return ps.notify(src, ps.lang('Pharma.toofar'), "error")
return ps.notify(src, ps.lang('Catches.notIn'), "error")
end
local pres = {
vicodin_prescription = 'vicodinbottle',
+1 -1
View File
@@ -12,7 +12,7 @@ local drugModelsBuzz = {
weed = "bzzz_plant_weed_pot_green_d"
}
local function propsLabels(drugType)
if Config.Buzz[drugType] then
if Config.Bzz[drugType] then
return drugModelsBuzz[drugType]
else
return drugModels[drugType]
-66
View File
@@ -1,66 +0,0 @@
recipe = {
mescaline = {
dry = {
dried = {take = {cactusbulb = 1}, give = {driedmescaline = 1} }
}
},
lean = {
cups = {
cupoflean = {take = {leancup = 1, sprunk = 1, mdlean = 1}, give = {cupoflean = 1}},
cupofdextro = {take = {leancup = 1, sprunk = 1, mdreddextro = 1}, give = {cupofdextro = 1}},
}
},
meth = {
cook = {
heat = {take = {ephedrine = 1, acetone = 1}, give = {}}
},
bag = {
bags = {take = {empty_weed_bag = 5}, give = {methbags = 5} }
}
},
weed = {
oil = {
shatter = {take = {butane = 1, grindedweed = 1}, give = {shatter = 1}}
},
blunts = {
blunt = {take = {bluntwrap = 1, grindedweed = 1}, give = {blunt = 1}},
chewyblunt = {take = {bluntwrap = 1, grindedweed = 1, loosecoke = 1}, give = {chewyblunt = 1}},
leanblunts = {take = {leanbluntwrap = 1, grindedweed = 1}, give = {leanblunts = 1}},
dextroblunts = {take = {dextrobluntwrap = 1, grindedweed = 1}, give = {dextroblunts = 1}}
},
bluntwrap = {
leanbluntwrap = {take = {bluntwrap = 5, mdlean = 1}, give = {leanbluntwrap = 5}},
dextrobluntwrap = {take = {bluntwrap = 5, mdreddextro = 1}, give = {dextrobluntwrap = 5}},
}
},
}
function GetRecipe(source, type, method, tier)
return ps.craftItem(source, recipe[type][method][tier])
end
ps.registerCallback('md-drugs:server:GetRecipe', function(source, type, cat)
if not source then return false end
return recipe[type][cat]
end)
function craft(source, tbl, item)
local src = source
local need, have = 0,0
for k, v in pairs(tbl.take) do
if ps.hasItem(src, k, v) then
have = have + v
end
need = need + v
end
if need == have then
for k, v in pairs (tbl.take) do
ps.removeItem(src, k, v)
end
ps.addItem(src, item , tbl.amount)
return true
end
return false
end
-89
View File
@@ -1,89 +0,0 @@
local Target = {
Travellingmerchant = { -- where the travelling merchant can spawn
vector4(-119.66, -977.43, 304.25, 88.21),
vector4(-1522.93, 1476.01, 111.45, 41.25),
vector4(-3278.98, 973.38, 5.35, 101.53),
},
}
local loc = Target.Travellingmerchant[math.random(1, #Target.Travellingmerchant)]
ps.registerCallback('md-drugs:server:GetMerchant', function(source)
return loc
end)
function getRandW(src)
local rand = math.random(1, #Target.oxylocations)
return Target.oxylocations[rand]
end
local stores = {
travel = {
{name = "tab_paper", price = 50, amount = 50, },
{name = "bakingsoda", price = 25, amount = 50, },
{name = "isosafrole", price = 25, amount = 50, },
{name = "mdp2p", price = 25, amount = 50, },
{name = "lysergic_acid", price = 25, amount = 50, },
{name = "diethylamide", price = 25, amount = 50, },
{name = "lockpick", price = 2, amount = 1000, },
{name = "emptyvial", price = 2, amount = 1000, },
{name = "needle", price = 2, amount = 1000, },
{name = "cokeburner", price = 25, amount = 50, },
{name = "crackburner", price = 2, amount = 50, },
{name = "lsdburner", price = 2, amount = 50, },
{name = "heroinburner", price = 2, amount = 50, },
{name = "mdlean", price = 50, amount = 50, },
{name = "weedgrinder", price = 25, amount = 50, },
{name = "mdbutter", price = 25, amount = 50, },
{name = "flour", price = 25, amount = 50, },
{name = "chocolate", price = 25, amount = 50, },
{name = "butane", price = 25, amount = 50, },
{name = "butanetorch", price = 2, amount = 1000, },
{name = "dabrig", price = 2, amount = 1000, },
{name = "mdwoods", price = 2, amount = 1000, },
{name = "leancup", price = 25, amount = 50, },
{name = "xtcburner", price = 25, amount = 50, },
},
Products = {
{name = "weed_white-widow_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_skunk_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_purple-haze_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_og-kush_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_amnesia_seed", price = 15, amount = 150, minrep = 0},
},
ProductsStupidNameRewrite = {
{name = "weed_whitewidow_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_skunk_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_purplehaze_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_ogkush_seed", price = 15, amount = 150, minrep = 0},
{name = "weed_amnesia_seed", price = 15, amount = 150, minrep = 0},
}
}
ps.registerCallback('md-drugs:server:menu', function(source, data)
local src = source
if data == 'travellingMerchant' then
return {table = stores.travel, des = '$', id = 'travellingMerchant', title = 'travelling Merchant'}
elseif data == 'dealermenu' then
local table
if Config.StupidassNewQbItemName then table = stores.ProductsStupidNameRewrite else table = stores.Products end
return {table = table, id = 'dealermenu', title = "Dealer Menu"}
elseif data == 'WeedShop' then
return {table = stores.Weed, id = 'WeedShop', title = "Weed Shop"}
end
end)
RegisterServerEvent("md-drugs:server:purchaseGoods", function(amount, money, item, price,table,num)
local src = source local Player = getPlayer(src)
for i = 1, #table do
if table[i].name == item then
if not table[i].price == price then return end
if Player.Functions.RemoveMoney(tostring(money), tonumber(table[i].price) * tonumber(amount)) then
AddItem(src, item, amount)
--Log(GetName(src) .. ' Bought ' .. amount .. ' Of ' .. item .. ' For ' .. tonumber(price) * tonumber(amount) .. '!', 'merchant')
end
end
end
end)
+2 -2
View File
@@ -2,10 +2,10 @@
ps.createUseable('shrooms', function(source, item)
local src = source
if not ps.callback("md-drugs:client:shrooms", src) then
ps.notify(src, ps.lang('Shrooms.cancel'), "error")
ps.notify(src, ps.lang('shrooms.cancel'), "error")
return
end
ps.removeItem(src, 'shrooms', 1)
ps.notify(src, 'You Took Some Shrooms!', 'success')
ps.notify(src, ps.lang('shrooms.took'), 'success')
end)
+30 -8
View File
@@ -30,6 +30,24 @@ local weedStore = {
mdwoods =2,
}
local weed = {
blunts = {
blunt = {take = {bluntwrap = 1, grindedweed = 1}, give = {blunt = 1}},
chewyblunt = {take = {bluntwrap = 1, grindedweed = 1, loosecoke = 1}, give = {chewyblunt = 1}},
leanblunts = {take = {leanbluntwrap = 1, grindedweed = 1}, give = {leanblunts = 1}},
dextroblunts = {take = {dextrobluntwrap = 1, grindedweed = 1}, give = {dextroblunts = 1}}
},
bluntwrap = {
leanbluntwrap = {take = {bluntwrap = 5, mdlean = 1}, give = {leanbluntwrap = 5}},
dextrobluntwrap = {take = {bluntwrap = 5, mdreddextro = 1}, give = {dextrobluntwrap = 5}},
}
}
ps.registerCallback('md-drugs:server:GetWeedRecipe', function(source, tableName)
if not source then return false end
return weed[tableName]
end)
ps.registerCallback('md-drugs:server:GetWeedLocs', function(source)
return weedLocs
end)
@@ -37,20 +55,21 @@ end)
ps.registerCallback('md-drugs:server:getWeedItems', function(source)
return weedStore
end)
RegisterNetEvent('md-drugs:server:buyWeedItem', function(loc, name, amount)
local src = source
if not ps.checkDistance(src, weedLocs.WeedSalesman[loc].loc, 3.5) then
ps.notify(src, ps.lang('Weed.notHere'), "error")
ps.notify(src, ps.lang('Checks.notIn'), "error")
return
end
if not weedStore[name] then
ps.notify(src, ps.lang('Weed.notHere'), "error")
ps.notify(src, ps.lang('weed.itemDoesntExist'), "error")
return
end
if ps.removeMoney(src, 'cash', weedStore[name] * amount) or ps.removeMoney(src, 'bank', weedStore[name] * amount) then
ps.addItem(src, name, amount)
else
ps.notify(src, ps.lang('Weed.noMoney'), "error")
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
end
end)
@@ -59,7 +78,7 @@ RegisterServerEvent('md-drugs:server:dryoutweed', function()
if ps.removeItem(src,"wetcannabis", 1) then
ps.addItem(src,"drycannabis", 1)
else
ps.notify(src, ps.lang('Weed.nodry'), "error")
ps.notify(src, ps.lang('weed.noDry'), "error")
end
end)
@@ -77,7 +96,10 @@ end
RegisterServerEvent('md-drugs:server:MakeWeedItems', function(data)
local src = source
if not GetRecipe(src, data.recipe, data.table, data.item) then return end
if not ps.craftItem(src, weed[data.table][data.item]) then
verifyHas(src, weed[data.table][data.item].take)
return
end
end)
@@ -88,13 +110,13 @@ ps.createUseable("dabrig", function(source, item)
TriggerClientEvent("md-drugs:client:dodabs", src)
end
else
ps.notify(src, 'You Need A Butane Torch', 'error')
ps.notify(src, ps.lang('weed.needItem', ps.getItemLabel("butanetorch")), 'error')
end
end)
ps.createUseable("weedgrinder", function(source, item)
local src = source
if not ps.hasItem(src, "drycannabis") then ps.notify(src, 'You Need Dried Cannabis', 'error') return end
if not ps.hasItem(src, "drycannabis") then ps.notify(src, ps.lang('weed.needItem', ps.getItemLabel("drycannabis")), 'error') return end
local check = ps.callback('md-drugs:client:uncuff', src, 'Grinding Weed')
if not check then return end
if ps.removeItem(src, "drycannabis",1 ) then
@@ -104,7 +126,7 @@ end)
ps.createUseable("mdwoods", function(source, item)
local src = source
local check = ps.callback('md-drugs:client:uncuff', src, 'Breaking Blunt Open')
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)
+33 -12
View File
@@ -14,15 +14,33 @@ local Price = {
heroin = {min = 20, max = 60},
xtc = {min = 20, max = 60},
}
local locs = {
vector4(-2352.32, 266.78, 165.3, 23.46),
vector4(-1467.49, 874.01, 183.59, 298.45),
vector4(-856.71, 874.26, 202.85, 205.3),
vector4(950.58, -128.49, 74.42, 205.3),
vector4(1152.71, -328.43, 69.21, 205.3),
vector4(112.66, -1955.67, 20.75, 37.94),
vector4(-544.4, -1684.8, 19.89, 252.07),
vector4(-1185.02, -1805.4, 3.91, 184.83),
vector4(-1641.4, -981.99, 7.58, 35.38),
vector4(-1827.93, 782.36, 138.29, 219.99),
vector4(-320.84, 2818.73, 59.45, 337.22),
vector4(474.88, 2609.56, 44.48, 357.0),
}
function getRandW(src)
local rand = math.random(1, #locs)
return locs[rand]
end
for k, v in pairs (burners) do
CUI(k, function(source, item)
ps.createUseable(k, function(source, item)
local src = source
local Player = getPlayer(src)
if getCops() < Config.PoliceCount then return ps.notify(src, Lang.Wholesale.na, 'error') end
if getCops() < Config.PoliceCount then return ps.notify(src, ps.lang('wholesale.notEnoughCops'), 'error') end
for m, d in pairs (active) do
if d.cid == Player.PlayerData.citizenid then
return ps.notify(src, Lang.Wholesale.al, 'error' )
return ps.notify(src, ps.lang('wholesale.alreadyWholesale'), 'error' )
end
end
local tab = ''
@@ -31,17 +49,17 @@ for k, v in pairs (burners) do
if k == 'lsdburner' then tab = 'lsd' end
if k == 'heroinburner' then tab = 'heroin' end
if k == 'xtcburner' then tab = 'xtc' end
if RemoveItem(src, k, 1) then
if ps.removeItem(src, k, 1) then
table.insert(active, {
src = src,
item = k,
location = getRandW(src),
cid = Player.PlayerData.citizenid,
cid = ps.getIdentifier(src),
type = v,
price = Price[tab]
})
for m, d in pairs (active) do
if d.cid == Player.PlayerData.citizenid then
if d.cid == ps.getIdentifier(src) then
TriggerClientEvent("md-drugs:client:GetLocation", src, active[m])
end
end
@@ -51,15 +69,18 @@ end
RegisterNetEvent('md-drugs:server:SuccessSale', function(data)
local src = source
local Player = getPlayer(src)
for k, v in pairs (active) do
if v.cid == Player.PlayerData.citizenid then
if v.cid == ps.getIdentifier(src) then
if not ps.checkDistance(src, v.location, 4.0) then
return ps.notify(src, ps.lang('Catches.notIn'), "error")
end
local payout = math.random(v.price.min, v.price.max)
for m, d in pairs (v.type) do
local git = Player.Functions.GetItemByName(d)
if git and git.amount >= 1 then
RemoveItem(src, d, git.amount)
Player.Functions.AddMoney('cash', git.amount * payout)
local git = ps.getItemCount(src, d)
if git >= 1 then
if ps.removeItem(src, d, git) then
ps.addMoney('cash', git * payout)
end
end
table.remove(active, k)
end
+41 -13
View File
@@ -53,9 +53,30 @@ local xtcLocations = {
{loc = vector3(844.71, -900.56, 25.43), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
}
ps.registerCallback('md-drugs:server:GetXtcLocs', function(source)
return xtcLocations
end)
local function craft(source, tbl, item)
local src = source
local need, have = 0,0
for k, v in pairs(tbl.take) do
if ps.hasItem(src, k, v) then
have = have + v
end
need = need + v
end
if need == have then
for k, v in pairs (tbl.take) do
ps.removeItem(src, k, v)
end
ps.addItem(src, item , tbl.amount)
return true
end
return false
end
local activePresses = {}
local timeout = {}
@@ -69,9 +90,12 @@ end
RegisterServerEvent('md-drugs:server:stealisosafrole', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.isosafrole[num].loc, 3.0) then return end
if not ps.checkDistance(src, xtcLocations.isosafrole[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
return
end
if timeout[ps.getIdentifier(src)] then
ps.notify(src, 'You are still waiting for the last minigame to finish', 'error')
ps.notify(src, ps.lang('Catches.cooldown'), 'error')
return
end
timeOut(src)
@@ -80,9 +104,12 @@ end)
RegisterServerEvent('md-drugs:server:stealmdp2p', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.mdp2p[num].loc, 3.0) then return end
if not ps.checkDistance(src, xtcLocations.mdp2p[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
return
end
if timeout[ps.getIdentifier(src)] then
ps.notify(src, 'You are still waiting for the last minigame to finish', 'error')
ps.notify(src, ps.lang('Catches.cooldown'), 'error')
return
end
timeOut(src)
@@ -126,7 +153,7 @@ end)
RegisterServerEvent('md-drugs:server:makextc', function(data)
local src = source
if not activePresses[ps.getIdentifier(src)] then
ps.notify(src, 'You Dont Have A Pill Press', 'error')
ps.notify(src, ps.lang('xtc.noPressOut'), 'error')
return
end
craft(src, RecipeList[activePresses[ps.getIdentifier(src)].press][data], data)
@@ -137,14 +164,14 @@ RegisterServerEvent('md-drugs:server:buypress', function()
if ps.removeMoney(src,"cash", RecipeList.presses['singlepress'].cash) then
ps.addItem(src, "singlepress", 1)
else
ps.notify(ps.lang('xtc.cash'), "error")
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
end
end)
RegisterServerEvent('md-drugs:server:upgradepress', function(data)
local src = source
if not ps.checkDistance(src, xtcLocations.xtcpress[data].loc, 2.0) then
ps.notify(src, ps.lang('xtc.toofar'), "error")
ps.notify(src, ps.lang('Catches.notIn'), "error")
return
end
craft(src, RecipeList.presses[data], data)
@@ -156,9 +183,12 @@ end)
------------- making powder
RegisterServerEvent('md-drugs:server:makingrawxtc', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.rawxtcloc[num].loc, 3.0) then return end
if not ps.checkDistance(src, xtcLocations.rawxtcloc[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
return
end
if timeout[ps.getIdentifier(src)] then
ps.notify(src, 'You are still waiting for the last minigame to finish', 'error')
ps.notify(src, ps.lang('Catches.cooldown'), 'error')
return
end
timeOut(src)
@@ -174,10 +204,8 @@ local function getColor(color)
}
if colors[color] then
return colors[color][math.random(#colors[color])]
else
ps.notify('Invalid color specified', 'error')
return nil
end
return nil
end
RegisterServerEvent('md-drugs:server:stamp', function(num, color)
@@ -199,7 +227,7 @@ RegisterServerEvent('md-drugs:server:stamp', function(num, color)
elseif ps.removeItem(src, colors[color].."4", 1) then
ps.addItem(src, item..'4', 1)
else
ps.notify('You Dont Have Unstamped '..color..' Pills', 'error')
ps.notify(src, ps.lang('xtc.noPills'), 'error')
end
end)
-1
View File
@@ -16,7 +16,6 @@ function loadFile(filePath)
ps.error("Error executing Lua chunk from '" .. filePath .. "': " .. tostring(execErr))
return false
end
ps.success("Successfully loaded module '" .. filePath .. "' from resource '" .. resourceName .. "'.")
return true
end
+7 -11
View File
@@ -1,17 +1,12 @@
Config = {} --Ignore.
ps = exports.ps_lib:init()
ps.loadLangs("wookie")
Config.respawnTime = 3 -- Seconds
ps.loadLangs("en")
Config.respawnTime = 100 -- Seconds
Config.Fuel = "LegacyFuel" -- type the name of script you use i.e. ps-fuel, cdn-fuel, LegacyFuel
Config.TierSystem = true -- allows for three tiers of certain drugs ( coke, heroin, crack, lsd)
Config.StupidassNewQbItemName = true -- true if you have updated your items.lua from base qb after november 2023 because changing item names this far in a framework is 3 IQ points total
Config.RequestModelTime = 30000 -- if you need more time than this, uhhhh wow
Config.FancyCokeAnims = true -- if you want multi location this needs to be false
Config.Joblock = false -- if you want weed to be a job
Config.weedjob = "" -- what the job name is
Config.Badtrip = 20 -- number means % chance to spawn a clone that chases and attacks while on mescaline
Config.MethHeist = false
Config.SuccessfulChance = 90 --- this is the chance of a Success wholesale 1-100
Config.AlertPoliceWholesale = 90 -- 1-100 of how often it will alert police
Config.WholesaleTimeout = 600 -- time in seconds to get to the location
@@ -52,11 +47,11 @@ Config.minigametype = 'ox' -- look above for options or choose none if you dont
---
Config.Drugs = {
cocaine = true,
consumables =false,
crack = true,
consumables = true,
cornerselling = true,
crack = true,
deliveries = true,
heroin = true,
deliveries = false,
lean = true,
lsd = true,
mescaline = true,
@@ -64,6 +59,7 @@ Config.Drugs = {
oxyruns = true,
pharma = true,
shrooms = true,
TravelingMerchant = true,
weed = true,
wholesale = false,
xtc = true,