- half done

This commit is contained in:
Mustache Dom committed 2026-01-16 02:57:26 -07:00
1 parent d2f70d78ed
commit ebc47ba5d7
41 files changed
+1457 -970

No files matched your search

+1 -1
View File
@@ -7,7 +7,7 @@ local function spawn()
Freeze(ped, true, data.loc.w)
ps.entityTarget(ped, {
{
label = ps.lang('merchant.targetOpen'),
label = Bridge.Language.Locale('merchant.targetOpen'),
action = function()
local options = {}
for k, v in pairs (data.items) do
+24 -21
View File
@@ -1,11 +1,11 @@
local cuttingcoke = nil
local baggingcoke = nil
local locations = ps.callback('md-drugs:server:GetCokeLocations')
local locations = GlobalState.MDDrugsLocations.Cocaine
local function CutCoke(coords, offset, rotation)
cuttingcoke = true
local animDict, animName = "anim@amb@business@coc@coc_unpack_cut_left@", "coke_cut_v5_coccutter"
ps.requestAnim(animDict, 500)
Bridge.Anim.RequestDict(animDict, 500)
local animDuration = GetAnimDuration(animDict, animName) * 1000
local ped = PlayerPedId()
local scenePos, sceneRot = vector3(coords.x + offset.x, coords.y + offset.y,coords.z + offset.z), rotation
@@ -48,12 +48,14 @@ local function CutCoke(coords, offset, rotation)
end
RemoveAnimDict(animDict)
FreezeEntityPosition(ped, false)
cuttingcoke = nil
end
local function BagCoke(coords, offset, rotation)
baggingcoke = true
local ver = ""
local animDict, animName = "anim@amb@business@meth@meth_smash_weight_check@", "break_weigh_"..ver.."char01"
ps.requestAnim(animDict, 500)
Bridge.Anim.RequestDict(animDict, 500)
local animDuration = GetAnimDuration(animDict, animName) * 1000
local ped = PlayerPedId()
local scenePos, sceneRot = vector3(coords.x + offset.x, coords.y + offset.y,coords.z + offset.z), rotation
@@ -109,19 +111,20 @@ local function BagCoke(coords, offset, rotation)
end
RemoveAnimDict(animDict)
FreezeEntityPosition(ped, false)
baggingcoke = nil
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}, {
Bridge.Target.AddBoxZone('cocaplant'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('coke.targetMakePow'),
label = Bridge.Language.Locale('coke.targetMakePow'),
icon = 'fa-solid fa-seedling',
action = function()
if not ps.hasItem('coca_leaf') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('coca_leaf')), 'error')
if not Bridge.Inventory.HasItem('coca_leaf') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('coca_leaf').label), 'error')
return
end
if not ps.progressbar(ps.lang('coke.makePow'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('coke.makePow'), 4000, 'weld') then return end
TriggerServerEvent("md-drugs:server:makepowder", k)
end,
canInteract = function()
@@ -132,13 +135,13 @@ for k, v in pairs (locations.MakePowder) do
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}, {
Bridge.Target.AddBoxZone('cutcoke'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('coke.targetCutCoke'),
label = Bridge.Language.Locale('coke.targetCutCoke'),
icon = 'fa-solid fa-mortar-pestle',
action = function()
if not ps.hasItem('bakingsoda') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('bakingsoda')), 'error')
if not Bridge.Inventory.HasItem('bakingsoda') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('bakingsoda').label), 'error')
return
end
CutCoke(v.loc, v.offset, v.rotation)
@@ -154,13 +157,13 @@ for k, v in pairs (locations.CuttingCoke) do
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}, {
Bridge.Target.AddBoxZone('bagcoke'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('coke.targetBagCoke'),
label = Bridge.Language.Locale('coke.targetBagCoke'),
icon = 'fa-solid fa-sack-xmark',
action = function()
if not ps.hasItem('empty_weed_bag') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('empty_weed_bag')), 'error')
if not Bridge.Inventory.HasItem('empty_weed_bag') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('empty_weed_bag').label), 'error')
return
end
BagCoke(v.loc, v.offset, v.rotation)
@@ -176,10 +179,10 @@ for k, v in pairs (locations.BaggingCoke) do
end
for k, v in pairs (locations.cokeTele) do
ps.boxTarget('coke_tele'..k, v.inside, {length = v.l, width = v.w, heading = v.rot}, {
Bridge.Target.AddBoxZone('coke_tele'..k, v.inside, vector3(v.l, v.w, 2.0), v.inside.w or 180.0,{
{
icon = 'fa-solid fa-door-open',
label = ps.lang('coke.teleOut'),
label = Bridge.Language.Locale('coke.teleOut'),
action = function()
SetEntityCoords(PlayerPedId(), v.outside)
end,
@@ -188,10 +191,10 @@ for k, v in pairs (locations.cokeTele) do
end
}
})
ps.boxTarget('coke_teleout'..k, v.outside, {length = v.l, width = v.w, heading = v.rot}, {
Bridge.Target.AddBoxZone('coke_teleout'..k, v.outside, vector3(v.l, v.w, 2.0), v.outside.w or 180.0,{
{
icon = 'fa-solid fa-door-closed',
label = ps.lang('coke.teleIn'),
label = Bridge.Language.Locale('coke.teleIn'),
action = function()
SetEntityCoords(PlayerPedId(), v.inside)
end,
+57 -26
View File
@@ -9,31 +9,56 @@ end
local function sellDrug(item, amount, price, targ)
PoliceCall(20)
if ps.vehicleData() then
ps.notify(ps.lang('Cornerselling.inVeh'), 'error')
if IsPedInAnyVehicle(PlayerPedId(), true) then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Cornerselling.inVeh'), 'error')
walkAway(targ)
return
end
if not ps.progressbar(string.format(ps.lang('Cornerselling.selling', ps.getLabel(item), price)), 4000, 'uncuff') then walkAway(targ) return end
if not progressbar(Bridge.Language.Locale('Cornerselling.selling', Bridge.Inventory.GetItemInfo(item).label, price), 4000, 'uncuff') then
walkAway(targ)
return
end
buyers[targ] = 'sold'
TriggerServerEvent('md-drugs:server:sellCornerDrugs', item, amount, price)
TriggerServerEvent('md-drugs:server:sellCornerDrugs', item, amount, price, NetworkGetNetworkIdFromEntity(targ))
walkAway(targ)
end
local function deny(targ)
PoliceCall(20)
buyers[targ] = 'sold'
if not ps.progressbar(ps.lang('Cornerselling.deny'), 4000, 'argue5') then return end
if not progressbar(Bridge.Language.Locale('Cornerselling.deny'), 4000, 'argue5') then return end
walkAway(targ)
end
local function getClosestPed()
local coords = GetEntityCoords(PlayerPedId())
local distance = 10.0
local pedList = GetGamePool('CPed')
local closestDistance = 1000.0
local PED = nil
for i = 1, #pedList do
local ped = pedList[i]
if ped ~= PlayerPedId() then
local pedCoords = GetEntityCoords(ped)
local dist = #(coords - pedCoords)
if dist < closestDistance then
PED = ped
closestDistance = dist
end
end
end
if PED and closestDistance < distance then
return PED, closestDistance
else
return nil
end
end
local function findPed()
local targ = nil
repeat
Wait(100)
targ = ps.getNearestPed(GetEntityCoords(PlayerPedId()), 8)
targ = getClosestPed()
if IsPedInAnyVehicle(targ, false) or GetEntityHealth(targ) == 0 or not IsPedHuman(targ) then
targ = nil
end
@@ -47,15 +72,17 @@ local function findPed()
if not sell then return end
buyers[targ] = true
ps.drawText(ps.lang('Cornerselling.wait'))
Bridge.HelpText.ShowHelpText(Bridge.Language.Locale('Cornerselling.wait'))
repeat
Wait(1000)
TaskGoToCoordAnyMeans(targ, GetEntityCoords(PlayerPedId()), 1.0, 0, 0, 0, 0)
until #(GetEntityCoords(PlayerPedId()) - GetEntityCoords(targ)) < 2.0 or sell == false or inZone
if not sell then return end
TaskTurnPedToFaceEntity(targ, PlayerPedId(), -1)
ps.hideText()
Bridge.HelpText.HideHelpText()
CreateThread(function()
Wait(45000)
walkAway(targ)
@@ -65,14 +92,17 @@ local function findPed()
end
local function checkItems()
local count = 0
local has = false
for k, v in pairs (GlobalState.DrugNames) do
if ps.hasItem(v) then
count = count + 1
if Bridge.Inventory.HasItem(v) then
has = true
break
end
end
if count == 0 then ps.notify(ps.lang('Cornerselling.nodrugs', 'error')) return false end
if not has then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Cornerselling.nodrugs', 'error'))
return false
end
return true
end
@@ -89,10 +119,10 @@ local function Cornersell()
return
end
ps.drawText(ps.lang('Cornerselling.searching'))
Bridge.HelpText.ShowHelpText(Bridge.Language.Locale('Cornerselling.searching'))
local targ = findPed()
local data = ps.callback('md-drugs:server:cornerselling:getAvailableDrugs', targ)
local data = Bridge.Callback.Trigger('md-drugs:server:cornerselling:getAvailableDrugs', NetworkGetNetworkIdFromEntity(targ))
if data == false then
sell = false
return
@@ -102,13 +132,13 @@ local function Cornersell()
TaskGoStraightToCoord(targ, -1858.232910, -1242.395630, 8.60510, 100.0, -1, 0.0, 0.0)
SetPedMoveRateOverride(targ, 10.0)
local got = false
ps.entityTarget(targ, {
Bridge.Target.AddLocalEntity(targ, {
{
label = ps.lang('Cornerselling.targetTakeBack'),
label = Bridge.Language.Locale('Cornerselling.targetTakeBack'),
icon ="fa-solid fa-money-bill",
action = function()
got = true
TriggerServerEvent('md-drugs:server:getBackRobbed')
TriggerServerEvent('md-drugs:server:getBackRobbed', NetworkGetNetworkIdFromEntity(targ))
Cornersell()
end,
canInteract = function()
@@ -116,14 +146,15 @@ local function Cornersell()
return true
end
end,
}}, nil)
}
})
else
ps.requestAnim("rcmme_tracey1")
Bridge.Anim.RequestDict("rcmme_tracey1")
TaskStartScenarioInPlace(targ, "WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT", 0, false)
FreezeEntityPosition(targ, true)
ps.entityTarget(targ, {
Bridge.Target.AddLocalEntity(targ, {
{
label = string.format(ps.lang('Cornerselling.targetSell'), data.amount, ps.getLabel(data.item), data.price),
label = Bridge.Language.Locale('Cornerselling.targetSell', data.amount, Bridge.Inventory.GetItemInfo(data.item).label, data.price),
icon ="fa-solid fa-money-bill",
action = function()
sellDrug(data.item, data.amount, data.price, targ)
@@ -136,7 +167,7 @@ local function Cornersell()
end,
},
{
label = ps.lang('Cornerselling.targetDeny'),
label = Bridge.Language.Locale('Cornerselling.targetDeny'),
icon = "fa-solid fa-person-harassing",
action = function()
deny(targ)
@@ -156,11 +187,11 @@ end
RegisterNetEvent('md-drugs:client:cornerselling', function()
if sell then
sell = false
ps.hideText()
ps.notify(ps.lang('Cornerselling.stopped'), 'error')
Bridge.HelpText.HideHelpText()
Bridge.Notify.SendNotify(Bridge.Language.Locale('Cornerselling.stopped'), 'error')
else
sell = true
ps.notify(ps.lang('Cornerselling.start'), 'success')
Bridge.Notify.SendNotify(Bridge.Language.Locale('Cornerselling.start'), 'success')
Cornersell()
end
end)
+11 -11
View File
@@ -1,20 +1,20 @@
local locations = ps.callback('md-drugs:server:GetCrackLocations')
local locations = GlobalState.MDDrugsLocations.Crack
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}, {
Bridge.Target.AddBoxZone('makeCrack'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('crack.targetMake'),
label = Bridge.Language.Locale('crack.targetMake'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('bakingsoda') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('bakingsoda')), 'error')
if not Bridge.Inventory.HasItem('bakingsoda') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('bakingsoda').label), 'error')
return
end
if not minigame() then
TriggerServerEvent("md-drugs:server:failcrackone", k)
return
end
if not ps.progressbar(ps.lang('crack.cook'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('crack.cook'), 4000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:makecrackone', k)
end,
canInteract = function()
@@ -26,16 +26,16 @@ for k, v in pairs (locations.makecrack) do
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}, {
Bridge.Target.AddBoxZone('bagCrack'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('crack.targetBag'),
label = Bridge.Language.Locale('crack.targetBag'),
icon = 'fa-solid fa-weight-scale',
action = function()
if not ps.hasItem('empty_weed_bag') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('empty_weed_bag')), 'error')
if not Bridge.Inventory.HasItem('empty_weed_bag') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('empty_weed_bag').label), 'error')
return
end
if not ps.progressbar(ps.lang('crack.bag'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('crack.bag'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:bagcrack", k)
end,
canInteract = function()
+27 -17
View File
@@ -1,20 +1,25 @@
local isActive = false
local dealer = {}
--TODO: Finish Dealers
local function SpawnDealer()
local getDealers = ps.callback('md-drugs:server:getDealers')
for k,v in pairs(getDealers) do
if #dealer >= 1 then
for k,v in pairs (dealer) do
DeletePed(v)
end
dealer = {}
end
for k,v in pairs(GlobalState.MDDrugsLocations.Dealers) do
local Ped = "g_m_y_famdnf_01"
ps.requestModel(Ped, 30000)
requestModel(Ped, 30000)
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)
ps.entityTarget(dealer[k], {
Bridge.Target.AddLocalEntity(dealer[k], {
{
icon = 'fas fa-user-secret',
label = ps.lang('Deliveries.targetGetDel'),
label = Bridge.Language.Locale('Deliveries.targetGetDel'),
action = function()
local data = ps.callback('md-drugs:server:GetDeliveryItem', k)
local data = Bridge.Callback.Trigger('md-drugs:server:GetDeliveryItem', k)
if type(data) == 'table' and data.coords then
TriggerEvent('md-drugs:client:setLocation', data)
end
@@ -22,24 +27,29 @@ local function SpawnDealer()
},
{
icon = "fa-solid fa-store",
label = ps.lang('Deliveries.targetOpenShop'),
label = Bridge.Language.Locale('Deliveries.targetOpenShop'),
action = function()
local rep = GetRep()
local items = ps.callback('md-drugs:server:dealerList')
local items = Bridge.Callback.Trigger('md-drugs:server:dealerList', k)
local options = {}
for m, d in pairs (items) do
if rep.dealerrep >= d.minrep then
options[#options+1] = {
title = ps.getLabel(d.name),
title = Bridge.Inventory.GetItemInfo(d.name).label,
description = '$' .. d.price,
icon = ps.getImage(d.name),
action = function()
TriggerServerEvent('md-drugs:server:buyItemDealer', m)
icon = Bridge.Inventory.GetItemInfo(d.name).image,
onSelect = function()
TriggerServerEvent('md-drugs:server:buyItemDealer', m, k)
end,
}
end
end
ps.menu(ps.lang('Deliveries.shopHeader'), ps.lang('Deliveries.shopHeader'), options)
Bridge.Menu.Open({
id = 'DealerMenu',
title = Bridge.Language.Locale('Deliveries.shopHeader'),
description = Bridge.Language.Locale('Deliveries.shopHeader'),
options = options
})
end,
}
})
@@ -59,12 +69,12 @@ 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)
ps.entityTarget(Buyer, {
Bridge.Target.AddLocalEntity(Buyer, {
{
icon = 'fas fa-user-secret',
label = ps.lang('Deliveries.targetHandOff'),
label = Bridge.Language.Locale('Deliveries.targetHandOff'),
action = function()
if not ps.progressbar(ps.lang('Deliveries.delivering'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('Deliveries.delivering'), 4000, 'uncuff') then return end
isActive = false
DeletePed(Buyer)
TriggerServerEvent('md-drugs:server:giveDeliveryItems', data.item, data.amount)
+98 -35
View File
@@ -2,6 +2,20 @@
local minigametype = Config.minigametype
local dispatch = Config.Dispatch
function requestModel(ped, timeout)
timeout = timeout or 15000
local startTime = GetGameTimer()
RequestModel(ped)
while not HasModelLoaded(ped) do
Wait(0)
if GetGameTimer() - startTime > timeout then
Bridge.Prints.Debug('requestModel timed out', ped, GetGameTimer() - startTime)
return false
end
end
return true
end
function minigame()
local time = 0
local game = Config.Minigames
@@ -90,39 +104,19 @@ end
function PoliceCall(chance)
local math = math.random(1,100)
if math <= chance then
if dispatch == 'ps' then
exports['ps-dispatch']:DrugSale()
elseif dispatch == 'cd' then
local data = exports['cd_dispatch']:GetPlayerInfo()
TriggerServerEvent('cd_dispatch:AddNotification', {
job_table = {'police', },
coords = data.coords,
title = '420-69 Drug Sale',
message = 'A '..data.sex..' robbing a store at '..data.street,
flash = 0,
unique_id = data.unique_id,
sound = 1,
blip = { sprite = 431, scale = 1.2, colour = 3, flashes = false, text = '420-69 Drug Sale', time = 5, radius = 0,}
Bridge.Dispatch.SendAlert({
message = "Suspisous Handoff",
code = "10-31",
coords = GetEntityCoords(PlayerPedId()),
jobs = {"police"},
blipData = {
sprite = 161,
color = 1,
scale = 1.0
},
time = 300000,
icon = "fas fa-exclamation-triangle"
})
elseif dispatch == 'core' then
exports['core_dispatch']:addCall("420-69", "Drugs Are Being Sold", {
{icon="fa-ruler", info="4.5 MILES"},
}, {GetEntityCoords(PlayerPedId())}, "police", 3000, 11, 5 )
elseif dispatch == 'aty' then
exports["aty_dispatch"]:SendDispatch('Drug Sale', '420-69', 40, {'police'})
elseif dispatch == 'qs' then
exports['qs-dispatch']:DrugSale()
elseif dispatch == 'codem' then
local Data = {
type = 'Drug Sale',
header = 'Someone Selling Drugs',
text = 'Hurry up and save the community',
code = '420-69',
}
exports['codem-dispatch']:CustomDispatch(Data)
else
print('Congrats, You Choose 0 of the options :)')
end
else
return
end
@@ -131,7 +125,7 @@ end
function GetCops(number)
if number == 0 then return true end
local amount = ps.callback('md-drugs:server:GetCoppers')
if amount >= number then return true else ps.notify('You Need '.. number - amount .. ' More Cops To Do This', 'error') end
if amount >= number then return true else Bridge.Notify.SendNotify('You Need '.. number - amount .. ' More Cops To Do This', 'error') end
end
function Freeze(entity, toggle, head)
@@ -249,8 +243,77 @@ RegisterCommand('DrugRep', function()
})
end, false)
if Bridge.Framework.GetResourceName() == 'es_extended' then
function handleGang(gang)
if gang == nil or gang == '' or gang == "" then return true end
if ps.getGangName() == gang or gang == 1 then return true end
return true
end
else
function handleGang(gang)
if not gang then
return true
end
if #gang == 0 then
return true
end
local data = Bridge.Framework.GetPlayerData()
if not data.gang then
return false
end
return data.gang.name == gang
end
end
if Config.Emotes == 'rp' then
function playEmote(emote)
return exports["rpemotes"]:EmoteCommandStart(emote)
end
function stopEmote()
return exports["rpemotes"]:EmoteCancel()
end
end
if Config.Emotes == 'dp' then
function playEmote(emote)
TriggerEvent('animations:client:EmoteCommandStart', {emote})
end
function stopEmote()
TriggerEvent('animations:client:EmoteCommandStart', {"c"})
end
end
if Config.Emotes == 'scully' then
function playEmote(emote)
exports.scully_emotemenu:playEmoteByCommand(emote)
end
function stopEmote()
exports.scully_emotemenu:cancelEmote()
end
end
if Config.Emotes == 'custom' then
function playEmote(emote)
TriggerEvent('animations:client:EmoteCommandStart', {emote})
end
function stopEmote()
TriggerEvent('animations:client:EmoteCommandStart', {"c"})
end
end
function progressbar(text, time, emote, cancel)
playEmote(emote)
if not cancel then
cancel = {
move = true,
car = true,
combat = true
}
end
local success = Bridge.ProgressBar.Open({
duration = time,
label = text,
canCancel = true,
disable = cancel,
})
stopEmote()
return success
end
+36 -35
View File
@@ -1,32 +1,32 @@
local herointable = false
local dirty = false
local locations = ps.callback('md-drugs:server:GetHeroinLocations')
local locations = GlobalState.MDDrugsLocations.Heroin
local function createLabKit(coord, head)
local heroinlabkit = CreateObject("v_ret_ml_tablea", coord.x, coord.y, coord.z - 1, true, false,false)
SetEntityHeading(heroinlabkit, head)
PlaceObjectOnGroundProperly(heroinlabkit)
ps.entityTarget(heroinlabkit, {
Bridge.Target.AddLocalEntity(heroinlabkit, {
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('heroin.targetCook'),
label = Bridge.Language.Locale('heroin.targetCook'),
action = function()
if not ps.hasItem('emptyvial') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('emptyvial')), 'error')
if not Bridge.Inventory.HasItem('emptyvial') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('emptyvial').label), 'error')
return
end
if not minigame() then
dirty = true
TriggerServerEvent("md-drugs:server:failheatingheroin")
ps.requestPTFX("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)
local coords = GetEntityCoords(heroinlabkit)
AddExplosion(coords.x, coords.y, coords.z-1.0, 34, 0.0, true, false, true)
SetParticleFxLoopedAlpha(heroinkit, 3.0)
SetPedToRagdoll(PlayerPedId(), 1300, 1300, 0, 0, 0, 0)
return end
if not ps.progressbar(ps.lang('heroin.pbCook'), 4000, 'uncuff') then return end
return
end
if not progressbar(Bridge.Language.Locale('heroin.pbCook'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:heatliquidheroin")
end,
canInteract = function()
@@ -35,9 +35,9 @@ local function createLabKit(coord, head)
},
{
icon = "fas fa-box-circle-check",
label = ps.lang('heroin.targetPickup'),
label = Bridge.Language.Locale('heroin.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('heroin.pbPickup'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.pbPickup'), 4000, 'uncuff') then return end
herointable = false
DeleteObject(heroinlabkit)
TriggerServerEvent("md-drugs:server:getheroinlabkitback")
@@ -49,14 +49,14 @@ local function createLabKit(coord, head)
},
{
icon = "fa-solid fa-hand-sparkles",
label = ps.lang('heroin.targetClean'),
label = Bridge.Language.Locale('heroin.targetClean'),
action = function()
if not ps.hasItem('cleaningkit') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('cleaningkit')), 'error')
if not Bridge.Inventory.HasItem('cleaningkit') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('cleaningkit').label), 'error')
return
end
if not ps.progressbar(ps.lang('heroin.pbClean'), 4000, 'clean') then return end
local done = ps.callback('removeCleaningkit', false)
if not progressbar(Bridge.Language.Locale('heroin.pbClean'), 4000, 'clean') then return end
local done = Bridge.Callback.Trigger('md-drugs:server:removeCleaningKitHeroin', false)
if done then dirty = false end
end,
canInteract = function()
@@ -67,12 +67,12 @@ local function createLabKit(coord, head)
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}, {
Bridge.Target.AddBoxZone('dryHeroin'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('heroin.targetDry'),
label = Bridge.Language.Locale('heroin.targetDry'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.progressbar(ps.lang('heroin.pbDry'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.pbDry'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:dryplant", k)
end,
canInteract = function()
@@ -83,16 +83,16 @@ for k, v in pairs (locations.dryplant) do
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}, {
Bridge.Target.AddBoxZone('cutHeroin'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('heroin.targetCutHeroin'),
label = Bridge.Language.Locale('heroin.targetCutHeroin'),
icon = 'fa-solid fa-seedling',
action = function()
if not ps.hasItem('bakingsoda') then
ps.notify(ps.lang('Catches.itemMissings', ps.getLabel('bakingsoda')), 'error')
if not Bridge.Inventory.HasItem('bakingsoda') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemMissings', Bridge.Inventory.GetItemInfo('bakingsoda').label), 'error')
return
end
if not ps.progressbar(ps.lang('heroin.pbCutHeroin'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.pbCutHeroin'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:cutheroin", k)
end,
canInteract = function()
@@ -101,19 +101,20 @@ for k, v in pairs (locations.cutheroinone) do
}
})
end
local peds = {}
for k, v in pairs (locations.buyKit) do
ps.requestModel(v.ped, 1000)
requestModel(v.ped, 1000)
peds[k] = CreatePed(4, v.ped, v.loc.x, v.loc.y, v.loc.z, v.loc.w, false, false)
Freeze(peds[k], true, v.loc.w)
SetBlockingOfNonTemporaryEvents(peds[k], true)
SetEntityInvincible(peds[k], true)
ps.entityTarget(peds[k], {
Bridge.Target.AddLocalEntity(peds[k], {
{
label = ps.lang('heroin.targetBuyKit'),
label = Bridge.Language.Locale('heroin.targetBuyKit'),
icon = 'fa-solid fa-box-open',
action = function()
if not ps.progressbar(ps.lang('heroin.pbBuyKit'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.pbBuyKit'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getheroinlabkit", k)
end,
canInteract = function()
@@ -125,28 +126,28 @@ for k, v in pairs (locations.buyKit) do
end
ps.registerCallback("md-drugs:client:setheroinlabkit", function()
Bridge.Callback.Register("md-drugs:client:setheroinlabkit", function()
if herointable then
ps.notify(ps.lang('heroin.tableout'), 'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('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.placing'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.placing'), 4000, 'uncuff') then return end
createLabKit(location, head)
return true, location
end
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}, {
Bridge.Target.AddBoxZone('fillNeedle'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('heroin.targetFill'),
label = Bridge.Language.Locale('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.pbFill'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('heroin.pbFill'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:fillneedle", k)
end,
canInteract = function()
+3 -3
View File
@@ -7,7 +7,7 @@ local function SpawnCarPedChase()
local stoploc = vector3(-1157.63, -3056.71, 13.94)
local start = location.StartLoc[math.random(1,#location.StartLoc)]
if started then ps.notify(ps.lang('lean.alreadyChasing'), 'error') return end
if started then Bridge.Notify.SendNotify(Bridge.Language.Locale('lean.alreadyChasing'), 'error') return end
started = true
ps.callback('md-drugs:server:RegisterLean')
@@ -39,7 +39,7 @@ local function SpawnCarPedChase()
{
name = 'leancar',
icon = 'fa-solid fa-car',
label = ps.lang('lean.stealFromTruck'),
label = Bridge.Language.Locale('lean.stealFromTruck'),
action = function()
hit = hit + 1
if not minigame() then return end
@@ -69,7 +69,7 @@ for k, v in pairs (location.SyrupVendor) do
ps.entityTarget(leanPeds[k], {
{
icon = "fa-solid fa-hand-holding-medical",
label = ps.lang('lean.startMission'),
label = Bridge.Language.Locale('lean.startMission'),
action = function()
SpawnCarPedChase()
end,
+41 -50
View File
@@ -1,18 +1,10 @@
local tableout = false
local dirtylsd = false
local locations = ps.callback('md-drugs:server:GetLSDLocations')
local locations = GlobalState.MDDrugsLocations.LSD
local function loadParticle(dict)
if not HasNamedPtfxAssetLoaded(dict) then
RequestNamedPtfxAsset(dict)
end
while not HasNamedPtfxAssetLoaded(dict) do
Wait(0)
end
SetPtfxAssetNextCall(dict)
end
local function createLabKit(coord, head)
requestModel("v_ret_ml_tablea")
local labkit = CreateObject("v_ret_ml_tablea", coord.x, coord.y, coord.z - 1, true, false)
SetEntityHeading(labkit, head)
PlaceObjectOnGroundProperly(labkit)
@@ -21,17 +13,16 @@ local function createLabKit(coord, head)
local options = {
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('lsd.targetHeat'),
label = Bridge.Language.Locale('lsd.targetHeat'),
action = function()
local dict = "scr_ie_svm_technical2"
if not minigame() then
local coords = GetEntityCoords(labkit)
AddExplosion(coords.x, coords.y, coords.z-1.0, 34, 0.0, true, false, true)
dirtylsd = true
loadParticle(dict)
local exitPtfx = StartParticleFxLoopedOnEntity("scr_dst_cocaine", labkit, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.5, false, false, false)
SetParticleFxLoopedAlpha(exitPtfx, 3.0)
TriggerServerEvent("md-drugs:server:failheating")
return
end
if not ps.progressbar(ps.lang('lsd.heating'), 7000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.heating'), 7000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:heatliquid")
end,
canInteract = function()
@@ -40,14 +31,14 @@ local function createLabKit(coord, head)
},
{
icon = "fa-solid fa-temperature-high",
label = ps.lang('lsd.targetRefine'),
label = Bridge.Language.Locale('lsd.targetRefine'),
action = function()
if not ps.hasItem('lsd_one_vial') then
ps.notify(ps.lang('Catches.itemNeeded', ps.getLabel('lsd_one_vial')), 'error')
if not Bridge.Inventory.HasItem('lsd_one_vial') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemNeeded', Bridge.Inventory.GetItemInfo('lsd_one_vial').label), 'error')
return
end
if not minigame() then TriggerServerEvent("md-drugs:server:failrefinequality") return end
if not ps.progressbar(ps.lang('lsd.refining'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.refining'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:refinequalityacid")
end,
canInteract = function()
@@ -56,14 +47,14 @@ local function createLabKit(coord, head)
},
{
icon = "fa-regular fa-note-sticky",
label = ps.lang('lsd.targetDipping'),
label = Bridge.Language.Locale('lsd.targetDipping'),
action = function()
if not ps.hasItem('tab_paper') then
ps.notify(ps.lang('Catches.itemNeeded', ps.getLabel('tab_paper')), 'error')
if not Bridge.Inventory.HasItem('tab_paper') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemNeeded', Bridge.Inventory.GetItemInfo('tab_paper').label), 'error')
return
end
if not minigame() then TriggerServerEvent("md-drugs:server:failtabs") return end
if not ps.progressbar(ps.lang('lsd.dipping'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.dipping'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:maketabpaper")
end,
canInteract = function()
@@ -71,11 +62,10 @@ local function createLabKit(coord, head)
end
},
{
event = "md-drugs:client:getlabkitback",
icon = "fas fa-box-circle-check",
label = ps.lang('lsd.targetPickup'),
label = Bridge.Language.Locale('lsd.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('lsd.packup'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.packup'), 4000, 'uncuff') then return end
DeleteObject(labkit)
TriggerServerEvent('md-drugs:server:getlabkitback')
tableout = false
@@ -86,14 +76,14 @@ local function createLabKit(coord, head)
},
{
icon = "fa-solid fa-hand-sparkles",
label = ps.lang('lsd.targetClean'),
label = Bridge.Language.Locale('lsd.targetClean'),
action = function()
if not ps.hasItem('cleaningkit') then
ps.notify(ps.lang('Catches.itemNeeded', ps.getLabel('cleaningkit')), 'error')
if not Bridge.Inventory.HasItem('cleaningkit') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemNeeded', Bridge.Inventory.GetItemInfo('cleaningkit').label), 'error')
return
end
if not ps.progressbar(ps.lang('lsd.cleaning'), 4000, 'clean') then return end
local check = ps.callback('md-drugs:server:removecleaningkit')
if not progressbar(Bridge.Language.Locale('lsd.cleaning'), 4000, 'clean') then return end
local check = Bridge.Callback.Trigger('md-drugs:server:removecleaningkit')
if check then
dirtylsd = false
end
@@ -101,17 +91,17 @@ local function createLabKit(coord, head)
canInteract = function() if dirtylsd then return true end end
}
}
ps.entityTarget(labkit, options)
Bridge.Target.AddLocalEntity(labkit, options)
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}, {
Bridge.Target.AddBoxZone('lysergicacid'..k,v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('lsd.targetLys'),
label = Bridge.Language.Locale('lsd.targetLys'),
icon = 'fa-solid fa-temperature-high',
action = function()
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 progressbar(Bridge.Language.Locale('lsd.stealLys'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getlysergic", k)
end,
canInteract = function()
@@ -123,13 +113,13 @@ for k, v in pairs (locations.lysergicacid) do
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}, {
Bridge.Target.AddBoxZone('diethylamide'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('lsd.targetDie'),
label = Bridge.Language.Locale('lsd.targetDie'),
icon = 'fa-solid fa-temperature-high',
action = function()
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 progressbar(Bridge.Language.Locale('lsd.stealDie'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getdiethylamide", k)
end,
canInteract = function()
@@ -141,9 +131,9 @@ for k, v in pairs (locations.diethylamide) do
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}, {
Bridge.Target.AddBoxZone('gettabs'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('lsd.targetBuyTab'),
label = Bridge.Language.Locale('lsd.targetBuyTab'),
icon = 'fa-solid fa-hand-holding-dollar',
action = function()
TriggerServerEvent("md-drugs:server:gettabpaper", k)
@@ -155,21 +145,22 @@ for k, v in pairs (locations.gettabs) do
}
})
end
local seller = {}
for k, v in pairs (locations.buyLSDkit) do
ps.requestModel(v.ped, 1000)
requestModel(v.ped, 1000)
seller[k] = CreatePed(4, v.ped, v.loc.x, v.loc.y, v.loc.z, v.loc.w, false, false)
Freeze(seller[k], true, v.loc.w)
ps.entityTarget(seller[k], {
Bridge.Target.AddLocalEntity(seller[k], {
{
label = ps.lang('lsd.targetBuyKit'),
label = Bridge.Language.Locale('lsd.targetBuyKit'),
icon = 'fa-solid fa-hand-holding-dollar',
action = function()
if ps.hasItem('lsdlabkit') then
ps.notify(ps.lang('lsd.alreadyOwn'), 'error')
if Bridge.Inventory.HasItem('lsdlabkit') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('lsd.alreadyOwn'), 'error')
return
end
if not ps.progressbar(ps.lang('lsd.buyingKit'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.buyingKit'), 4000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:getlabkit', k)
end,
canInteract = function()
@@ -180,15 +171,15 @@ for k, v in pairs (locations.buyLSDkit) do
})
end
ps.registerCallback("md-drugs:client:setlsdlabkit", function()
Bridge.Callback.Register("md-drugs:client:setlsdlabkit", function()
if tableout then
ps.notify(ps.lang('lsd.tableout'), 'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('lsd.tableout'), 'error')
return false
else
tableout = true
local loc, head = StartRay()
if not loc then tableout = false return end
if not ps.progressbar(ps.lang('lsd.placing'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('lsd.placing'), 4000, 'uncuff') then return end
createLabKit(loc, head)
return true, loc
end
+15 -12
View File
@@ -1,28 +1,30 @@
local locations = ps.callback('md-drugs:server:GetMescalineLocs')
local badTrip = 20
local badTrip = 100
local function AlienEffect()
CreateThread(function()
StartScreenEffect("DrugsMichaelAliensFightIn", 3.0, 0)
Wait(math.random(5000, 8000))
StartScreenEffect("DrugsMichaelAliensFight", 3.0, 0)
Wait(math.random(5000, 8000))
Wait(math.random(25000, 35000))
StartScreenEffect("DrugsMichaelAliensFightOut", 3.0, 0)
StopScreenEffect("DrugsMichaelAliensFightIn")
StopScreenEffect("DrugsMichaelAliensFight")
StopScreenEffect("DrugsMichaelAliensFightOut")
end)
end
local locations = GlobalState.MDDrugsLocations.Mescaline
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}, {
Bridge.Target.AddBoxZone('dryoutMesc'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0,{
{
label = ps.lang('mesc.targetDry'),
label = Bridge.Language.Locale('mesc.targetDry'),
icon = 'fa-solid fa-temperature-high',
action = function()
if not ps.hasItem('cactusbulb') then
ps.notify(ps.lang('Catches.itemNeeded', ps.getLabel('cactusbulb')), 'error')
if not Bridge.Inventory.HasItem('cactusbulb') then
Bridge.Notify.SendNotify(Bridge.Language.Locale('Catches.itemNeeded', Bridge.Inventory.GetItemInfo('cactusbulb').label), 'error')
return
end
if not ps.progressbar(ps.lang('mescaline.dry'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('mescaline.dry'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:drymescaline", k)
end,
canInteract = function()
@@ -37,10 +39,11 @@ RegisterNetEvent("md-drugs:client:takemescaline", function()
local chance, chance2 = math.random(1,100), math.random(1,100)
local weapon = ''
if chance2 == 100 then weapon = 'weapon_rpg' else weapon = 'weapon_flaregun' end
if not ps.progressbar(ps.lang('mescaline.eat'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('mescaline.eat'), 4000, 'uncuff') then return end
if chance <= badTrip then
AlienEffect()
local clone = ClonePed(PlayerPedId(), false, false, true)
Wait(math.random(3000,6000))
local clone = ClonePed(PlayerPedId(), true, true, true)
SetEntityAsMissionEntity(clone)
SetPedFleeAttributes(clone, false)
GiveWeaponToPed(clone, weapon, 1, false, true)
+67 -70
View File
@@ -1,37 +1,36 @@
local amonia = false
local tray = false
local heated = false
local active = false
local trays = nil
local locations = ps.callback('md-drugs:server:GetMethLocs')
local amonia, tray, heated, active, trays, startedmeth, methVan = false, false, false, false, nil, false, nil
local locations = GlobalState.MDDrugsLocations.Meth
--- meth heist
local startedmeth = false
local function SpawnMethCarPedChase()
local function SpawnMethCarPedChase(loc)
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.alreadyChasing'),'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('meth.alreadyChasing'),'error')
else
startedmeth = true
ps.callback('md-drugs:server:registerMeth')
ps.requestModel("journey", 30000)
ps.requestModel("a_m_m_hillbilly_02", 30000)
ps.requestModel("cargobob3", 30000)
local methcar = CreateVehicle("journey", start.x+3, start.y-2, start.z-1, 52.0, true, false)
requestModel("journey", 30000)
requestModel("a_m_m_hillbilly_02", 30000)
requestModel("cargobob3", 30000)
methVan = CreateVehicle("journey", start.x+3, start.y-2, start.z-1, 52.0, true, false)
local methdriver = CreatePed(26, "a_m_m_hillbilly_02", start.x, start.y, start.z, 268.9422, false, false)
local methpilot = CreatePed(26, "a_m_m_hillbilly_02", stoploc.x-3, stoploc.y-3, stoploc.z-1, 268.9422, false, false)
local can = Bridge.Callback.Trigger('md-drugs:server:registerMeth', loc, NetworkGetNetworkIdFromEntity(methVan))
if not can then
startedmeth = false
DeleteVehicle(methVan)
DeleteEntity(methdriver)
DeleteEntity(methpilot)
return
end
FreezeEntityPosition(methpilot, true)
SetEntityInvincible(methpilot, true)
SetEntityAsMissionEntity(methcar)
AddBlipForEntity(methcar)
SetPedIntoVehicle(methdriver, methcar, -1)
SetEntityAsMissionEntity(methVan)
AddBlipForEntity(methVan)
SetPedIntoVehicle(methdriver, methVan, -1)
SetPedFleeAttributes(methdriver,false)
TaskVehicleDriveToCoordLongrange(methdriver, methcar, stoploc.x, stoploc.y, stoploc.z-1, 50.0, 524288, 25.0)
TaskVehicleDriveToCoordLongrange(methdriver, methVan, stoploc.x, stoploc.y, stoploc.z-1, 50.0, 524288, 25.0)
SetPedKeepTask(methdriver, true)
repeat
@@ -39,25 +38,22 @@ local function SpawnMethCarPedChase()
until #(GetEntityCoords(methdriver) - stoploc) < 20.0 or GetEntityHealth(methdriver) == 0
if GetEntityHealth(methdriver) == 0 then
ps.entityTarget(methcar, {
Bridge.Target.AddLocalEntity(methVan, {
{
name = 'methcar',
icon = 'fa-solid fa-car',
label = ps.lang('meth.targetStealFromCar'),
label = Bridge.Language.Locale('meth.targetStealFromCar'),
action = function()
if not minigame() then return end
TriggerServerEvent('md-drugs:server:givemethingridients')
TriggerServerEvent('md-drugs:server:givemethingridients', NetworkGetNetworkIdFromEntity(methVan))
startedmeth = false
if math.random(1,100) <= 30 then
DeleteVehicle(methcar)
DeleteEntity(methdriver)
DeleteEntity(methpilot)
end
end,
}
})
else
DeleteVehicle(methcar)
DeleteVehicle(methVan)
DeleteEntity(methdriver)
DeleteEntity(methpilot)
end
@@ -68,14 +64,13 @@ local peds = {}
for k, v in pairs (locations.MethHeist) do
peds[k] = CreatePed(4, GetHashKey(v.ped), v.loc.x, v.loc.y, v.loc.z, v.loc.w, false, true)
Freeze(peds[k], true, v.loc.w)
ps.entityTarget(peds[k], {
Bridge.Target.AddLocalEntity(peds[k], {
{
name = 'methheist'..k,
icon = 'fa-solid fa-user-secret',
label = ps.lang('meth.targetHeist'),
label = Bridge.Language.Locale('meth.targetHeist'),
action = function()
if startedmeth then ps.notify(ps.lang('meth.alreadyChasing'),'error') return end
SpawnMethCarPedChase()
if startedmeth then Bridge.Notify.SendNotify(Bridge.Language.Locale('meth.alreadyChasing'),'error') return end
SpawnMethCarPedChase(k)
end,
canInteract = function()
return handleGang(v.gang)
@@ -94,21 +89,23 @@ local function loadParticle(dict)
end
SetPtfxAssetNextCall(dict)
end
local function dialSuccess(coords)
ps.requestModel('hei_prop_heist_thermite', 2000)
requestModel('hei_prop_heist_thermite', 2000)
loadParticle('scr_ornate_heist')
local thermite = CreateObject('hei_prop_heist_thermite', vector3(1006.09, -3201.29, -39.30), true, false, false)
local thermite = CreateObject('hei_prop_heist_thermite', coords.x - 0.5, coords.y - 0.5, coords.z -0.5, true, false, false)
FreezeEntityPosition(thermite, true)
SetEntityRotation(thermite, 190.0, 90.0, 140.0, 3, true )
SetEntityVisible(thermite, false)
Wait(1000)
local therm = StartParticleFxLoopedOnEntity('scr_heist_ornate_thermal_burn', thermite, 0.0, 1.4, 0.0, 0.0, 0.0, 0.0, 1.5, false, false, false)
Wait(math.random(10000, 20000))
StopParticleFxLooped(therm, true)
DeleteObject(thermite)
end
local function MethCooking(coords, offset, rotation)
local animDict, animName = "anim@amb@business@meth@meth_monitoring_cooking@cooking@", "chemical_pour_short_cooker"
ps.requestAnim(animDict, 500)
Bridge.Anim.RequestDict(animDict)
SetEntityCoords(PlayerPedId(), coords)
local targetPosition = GetEntityCoords(PlayerPedId())
local animDuration = GetAnimDuration(animDict, animName) * 800
@@ -131,7 +128,7 @@ end
local function SmashMeth(coords, offset, rotation)
local ver = ""
local animDict, animName = "anim@amb@business@meth@meth_smash_weight_check@", "break_weigh_"..ver.."char02"
ps.requestAnim(animDict, 500)
Bridge.Anim.RequestDict(animDict, 500)
local ped = PlayerPedId()
local targetPosition = coords
SetEntityCoords(ped, targetPosition)
@@ -166,7 +163,7 @@ end
local function BagMeth(coords, offset, rotation)
local ver = ""
local animDict, animName = "anim@amb@business@meth@meth_smash_weight_check@", "break_weigh_"..ver.."char01"
ps.requestAnim(animDict, 500)
Bridge.Anim.RequestDict(animDict, 500)
local animDuration = GetAnimDuration(animDict, animName) * 1000
local ped = PlayerPedId()
SetEntityCoords(ped, coords)
@@ -235,13 +232,13 @@ end
local function startcook(num, coords, offset, rotation)
if not amonia then
local adding = ps.callback('md-drugs:server:startcook', num)
local adding = Bridge.Callback.Trigger('md-drugs:server:startcook', num)
if not adding then return end
active = true
MethCooking(coords, offset, rotation)
amonia = true
else
ps.notify(ps.lang('meth.started'), "error")
Bridge.Notify.SendNotify(Bridge.Language.Locale('meth.started'), "error")
end
end
@@ -252,8 +249,9 @@ local function dials(coords)
AddExplosion(coords.x, coords.y,coords.z, 49, 10, true, false, true)
amonia = false
active = false
return end
ps.notify(ps.lang('meth.increaseHeat'), "success")
return
end
Bridge.Notify.SendNotify(Bridge.Language.Locale('meth.increaseHeat'), "success")
dialSuccess(coords)
heated = true
end
@@ -267,11 +265,11 @@ local function smash(coords, offset, rotation, buckets, k)
Freeze(bucket, true, buckets.w)
SmashMeth(coords, offset, rotation)
Wait(100)
ps.entityTarget(bucket, {
Bridge.Target.AddLocalEntity(bucket, {
{
name = 'bucket',
icon = "fa-solid fa-sack-xmark",
label = ps.lang('meth.targetBag'),
label = Bridge.Language.Locale('meth.targetBag'),
action = function()
DeleteObject(bucket)
active = false
@@ -293,9 +291,9 @@ end
local function trayscarry()
if amonia and heated then
local pos = GetEntityCoords(PlayerPedId(), true)
ps.requestAnim('anim@heists@box_carry@')
Bridge.Anim.RequestDict('anim@heists@box_carry@')
TaskPlayAnim(PlayerPedId(), 'anim@heists@box_carry@', 'idle', 5.0, -1, -1, 50, 0, false, false, false)
ps.requestModel('bkr_prop_meth_tray_02a')
requestModel('bkr_prop_meth_tray_02a')
trays = CreateObject("bkr_prop_meth_tray_02a", pos.x, pos.y, pos.z, true, true, true)
AttachEntityToEntity(trays, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 28422), 0.01, -0.2,-0.2, 20.0, 0.0, 0.0, true, true, false, true, 1, true)
tray = true
@@ -311,9 +309,9 @@ CreateThread(function()
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},{
Bridge.Target.AddBoxZone('cookMeth'..k, v.loc, vector3(v.l, v.w, 2.0), v.loc.w or 180.0, {
{
label = ps.lang('meth.targetCook'),
label = Bridge.Language.Locale('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))
@@ -327,7 +325,7 @@ for k, v in pairs (locations.CookMeth) do
},
{
icon = "fas fa-sign-in-alt",
label = ps.lang('meth.targetGrabTray'),
label = Bridge.Language.Locale('meth.targetGrabTray'),
action = function() trayscarry() end,
canInteract = function()
if not handleGang(v.gang) then return false end
@@ -340,28 +338,28 @@ for k, v in pairs (locations.CookMeth) do
end
for k, v in pairs (locations.MethDials) do
ps.boxTarget('adjustMethDials'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
Bridge.Target.AddBoxZone('adjustMethDials'..k, v.loc, vector3(v.l, v.w, 1.0), v.loc.w or 180.0, {
{
name = 'adjustdials',
icon = "fa-solid fa-temperature-three-quarters",
label = ps.lang('meth.targetHeat'),
label = Bridge.Language.Locale('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
--canInteract = function()
-- if not handleGang(v.gang) then return false end
-- if amonia and heated == false then return true end
--end
}
})
end
for k, v in pairs (locations.MethSmash) do
ps.boxTarget('smashMeth'..k, v.loc, {length = v.l, width = v.w, rotation = v.rot, height = 1.0},{
Bridge.Target.AddBoxZone('smashMeth'..k, v.loc, vector3(v.l, v.w, 1.0), v.loc.w or 180.0, {
{
name = 'smash',
icon = "fa-solid fa-weight-scale",
label = ps.lang('meth.targetSmash'),
label = Bridge.Language.Locale('meth.targetSmash'),
action = function()
smash(v.loc, v.offset, v.rotation, v.bucket,k)
end,
@@ -374,10 +372,10 @@ for k, v in pairs (locations.MethSmash) do
end
for k, v in pairs (locations.MethTele) do
ps.boxTarget('meth_tele'..k, v.inside, {length = v.l, width = v.w, heading = v.rot}, {
Bridge.Target.AddBoxZone('meth_tele'..k, v.inside, vector3(v.l, v.w, 1.0), v.rot, {
{
icon = 'fa-solid fa-door-open',
label = ps.lang('coke.teleOut'),
label = Bridge.Language.Locale('coke.teleOut'),
action = function()
SetEntityCoords(PlayerPedId(), v.outside)
end,
@@ -386,10 +384,10 @@ for k, v in pairs (locations.MethTele) do
end
}
})
ps.boxTarget('meth_teleout'..k, v.outside, {length = v.l, width = v.w, heading = v.rot}, {
Bridge.Target.AddBoxZone('meth_teleout'..k, v.outside, vector3(v.l, v.w, 1.0), v.rot, {
{
icon = 'fa-solid fa-door-closed',
label = ps.lang('coke.teleIn'),
label = Bridge.Language.Locale('coke.teleIn'),
action = function()
SetEntityCoords(PlayerPedId(), v.inside)
end,
@@ -408,12 +406,12 @@ RegisterCommand('offset', function()
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},{
Bridge.Target.AddBoxZone('stealMethEph'..k, v.loc, vector3(v.l, v.w, 1.0), v.loc.w or 180.0, {
{
label = ps.lang('meth.targetStealEPH'),
label = Bridge.Language.Locale('meth.targetStealEPH'),
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar(ps.lang('meth.stealingEPH'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('meth.stealingEPH'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:geteph", k)
end,
canInteract = function()
@@ -423,12 +421,12 @@ for k, v in pairs (locations.MethEph) do
})
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},{
Bridge.Target.AddBoxZone('stealMethAce'..k, v.loc, vector3(v.l, v.w, 1.0), v.loc.w or 180.0, {
{
label = ps.lang('meth.targetStealACE'),
label = Bridge.Language.Locale('meth.targetStealACE'),
icon = 'fa-solid fa-bucket',
action = function()
if not ps.progressbar(ps.lang('meth.stealingACE'), 4000, 'uncuff') then return end
if not progressbar(Bridge.Language.Locale('meth.stealingACE'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:getace", k)
end,
canInteract = function()
@@ -438,4 +436,3 @@ for k, v in pairs (locations.MethAce) do
})
end
+8 -8
View File
@@ -6,7 +6,7 @@ local pdAlert = 90
local function getRoute()
local Route = ps.callback('md-drugs:server:getRoute')
if not Route then
ps.notify(ps.lang('oxy.ditchCar'), "error")
Bridge.Notify.SendNotify(Bridge.Language.Locale('oxy.ditchCar'), "error")
onMission = false
return false
end
@@ -25,11 +25,11 @@ local function getRoute()
PoliceCall(pdAlert)
ps.entityTarget(oxybuyer,{
{
label = ps.lang('oxy.targetHandoff'),
label = Bridge.Language.Locale('oxy.targetHandoff'),
icon = "fa-solid fa-dollar-sign",
action = function()
if carryPackage then
if not ps.progressbar(ps.lang('oxy.handingoff'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('oxy.handingoff'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:giveoxybox")
DeleteEntity(oxybuyer)
DetachEntity(carryPackage, true, true)
@@ -37,7 +37,7 @@ local function getRoute()
carryPackage = nil
getRoute()
else
ps.notify(ps.lang('oxy.emptyHands'), "error")
Bridge.Notify.SendNotify(Bridge.Language.Locale('oxy.emptyHands'), "error")
end
end
}
@@ -48,7 +48,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('oxy.targetPay'),
label = Bridge.Language.Locale('oxy.targetPay'),
action = function()
ps.requestModel("burrito3", 30000)
@@ -62,17 +62,17 @@ for k, v in pairs(locations.OxyPayForTruck) do
exports[Config.Fuel]:SetFuel(oxycar, 100.0)
end
TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(oxycar))
ps.notify(ps.lang('oxy.keys'), 'success')
Bridge.Notify.SendNotify(Bridge.Language.Locale('oxy.keys'), 'success')
onMission = true
getRoute()
ps.entityTarget(oxycar, {
{
icon = "fa-solid fa-box",
label = ps.lang('oxy.targetGetPackage'),
label = Bridge.Language.Locale('oxy.targetGetPackage'),
action = function()
if carryPackage then
ps.notify(ps.lang('oxy.alreadyCarrying'), "error")
Bridge.Notify.SendNotify(Bridge.Language.Locale('oxy.alreadyCarrying'), "error")
else
local pos = GetEntityCoords(PlayerPedId(), true)
ps.requestAnim('anim@heists@box_carry@')
+13 -9
View File
@@ -1,18 +1,22 @@
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 = 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}
Bridge.Callback.Register("md-drugs:client:prescriptionpad", function(data, op)
local job = ps.getPlayerData().job.name
if job ~= 'ambulance' then
Bridge.Notify.SendNotify(Bridge.Language.Locale('pharma.notPharma'), 'error')
return
end
local input = ps.input(Bridge.Language.Locale('pharma.input.header'), {
{type = 'select', title = Bridge.Language.Locale('pharma.input.title1'), options = data},
{type = 'select', title = Bridge.Language.Locale('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(Bridge.Language.Locale('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.opening'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('pharma.opening'), 4000, 'uncuff') then return end
return true
end)
@@ -21,9 +25,9 @@ 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.targetFill'),
label = Bridge.Language.Locale('pharma.targetFill'),
action = function()
if not ps.progressbar(ps.lang('pharma.fill'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('pharma.fill'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:fillprescription", k)
end,
}
+10 -10
View File
@@ -1,41 +1,41 @@
local DrugPlants = {
{model = 'prop_plant_01a', label = 'coke', langs = ps.lang('coke.targetPick'), tbl = GlobalState.CocaPlant, plantTbl = {},
{model = 'prop_plant_01a', label = 'coke', langs = Bridge.Language.Locale('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(Bridge.Language.Locale('coke.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("coke:pickupCane", loc)
return true
end,
allow = Config.Drugs.cocaine,
},
{model = 'prop_plant_01b', label = 'heroin',langs = ps.lang('heroin.targetPick'), tbl = GlobalState.PoppyPlants, plantTbl = {},
{model = 'prop_plant_01b', label = 'heroin',langs = Bridge.Language.Locale('heroin.targetPick'), tbl = GlobalState.PoppyPlants, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('heroin.picking'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('heroin.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("heroin:pickupCane", loc)
return true
end,
allow = Config.Drugs.heroin,
},
{model = 'prop_cactus_03', label = 'Mescaline', langs = ps.lang('mesc.targetPick'), tbl = GlobalState.Mescaline, plantTbl = {},
{model = 'prop_cactus_03', label = 'Mescaline', langs = Bridge.Language.Locale('mesc.targetPick'), tbl = GlobalState.Mescaline, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('mesc.picking'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('mesc.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("Mescaline:pickupCane", loc)
return true
end,
allow = Config.Drugs.mescaline,
},
{model = 'prop_weed_01', label = 'weed', langs = ps.lang('weed.targetPick'), tbl = GlobalState.WeedPlant, plantTbl = {},
{model = 'prop_weed_01', label = 'weed', langs = Bridge.Language.Locale('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(Bridge.Language.Locale('weed.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("weed:pickupCane", loc)
return true
end,
allow = Config.Drugs.weed,
},
{model = 'mushroom', label = 'shrooms', langs = ps.lang('shrooms.targetPick'), tbl = GlobalState.shrooms, plantTbl = {},
{model = 'mushroom', label = 'shrooms', langs = Bridge.Language.Locale('shrooms.targetPick'), tbl = GlobalState.shrooms, plantTbl = {},
pick = function(loc)
if not ps.progressbar(ps.lang('shrooms.picking'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('shrooms.picking'), 4000, 'uncuff') then return end
TriggerServerEvent("shrooms:pickupCane", loc)
return true
end,
+1 -1
View File
@@ -17,7 +17,7 @@ local function EcstasyEffect()
end
ps.registerCallback("md-drugs:client:shrooms", function()
if not ps.progressbar(ps.lang('shrooms.eat'), 5000, 'eat') then return end
if not ps.progressbar(Bridge.Language.Locale('shrooms.eat'), 5000, 'eat') then return end
CreateThread(function()
EcstasyEffect()
end)
+12 -12
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('weed.targetDry'),
label = Bridge.Language.Locale('weed.targetDry'),
action = function()
if not ps.hasItem('wetcannabis', 1) then
ps.notify(ps.lang('weed.noDry'), "error")
Bridge.Notify.SendNotify(Bridge.Language.Locale('weed.noDry'), "error")
return
end
if drying then return end
@@ -15,13 +15,13 @@ 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")
Bridge.Notify.SendNotify(Bridge.Language.Locale('weed.wait'), "success")
Wait(math.random(1000,5000))
ps.notify(ps.lang('weed.take'), "success")
Bridge.Notify.SendNotify(Bridge.Language.Locale('weed.take'), "success")
ps.entityTarget(weedplant, {
{
icon = "fa-solid fa-cannabis",
label = ps.lang('weed.targetDryed'),
label = Bridge.Language.Locale('weed.targetDryed'),
action = function()
DeleteEntity(weedplant)
drying = false
@@ -42,7 +42,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('weed.teleportOut'),
label = Bridge.Language.Locale('weed.teleportOut'),
action = function()
SetEntityCoords(PlayerPedId(), v.outside)
end
@@ -51,7 +51,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('weed.teleportIn'),
label = Bridge.Language.Locale('weed.teleportIn'),
action = function()
SetEntityCoords(PlayerPedId(), v.inside)
end
@@ -83,7 +83,7 @@ local function AlienEffect()
end
RegisterNetEvent("md-drugs:client:dodabs", function()
if not ps.progressbar(ps.lang('weed.dabs'), 4000, 'bong2') then AlienEffect() return end
if not ps.progressbar(Bridge.Language.Locale('weed.dabs'), 4000, 'bong2') then AlienEffect() return end
end)
local function createBluntOptions(contextId, contextTitle, eventLabelPrefix, tableName)
@@ -110,11 +110,11 @@ local function createBluntOptions(contextId, contextTitle, eventLabelPrefix, tab
end
RegisterNetEvent('md-drugs:client:makeBluntWrap', function(data)
createBluntOptions('mddrugsbluntwraps', "Dipping Syrup", ps.lang('weed.bluntWrap'), 'bluntwrap')
createBluntOptions('mddrugsbluntwraps', "Dipping Syrup", Bridge.Language.Locale('weed.bluntWrap'), 'bluntwrap')
end)
RegisterNetEvent('md-drugs:client:rollBlunt', function(data)
createBluntOptions('mddrugsblunts', "Roll Blunts", ps.lang('weed.blunts'), 'blunts')
createBluntOptions('mddrugsblunts', "Roll Blunts", Bridge.Language.Locale('weed.blunts'), 'blunts')
end)
for k, v in pairs (locations.WeedSalesman) do
@@ -126,7 +126,7 @@ for k, v in pairs (locations.WeedSalesman) do
ps.entityTarget(ped, {
{
icon = "fa-solid fa-cannabis",
label = ps.lang('weed.targetSales'),
label = Bridge.Language.Locale('weed.targetSales'),
action = function()
local itemList = ps.callback('md-drugs:server:getWeedItems')
local options = {}
@@ -140,7 +140,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(ps.lang('weed.buying', ps.getLabel(m)), 2000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('weed.buying', ps.getLabel(m)), 2000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:buyWeedItem', k, m, input[1])
end
}
+26 -26
View File
@@ -45,32 +45,32 @@ local function spawnShops()
FreezeEntityPosition(ped, true)
SetEntityInvincible(ped, true)
SetBlockingOfNonTemporaryEvents(ped, true)
ps.entityTarget(ped, {
{
label = ps.lang('Whippit.targetShop'),
icon = 'fa-solid fa-cart-shopping',
action = function()
local menu = {}
local items = ps.callback('md-drugs:server:getwhippitShop')
for item, price in pairs (items) do
menu[#menu + 1] = {
title = ps.getLabel(item),
icon = ps.getImage(item),
description = '$' .. price,
action = function()
local amount = ps.input(ps.getLabel(item), {
{type = 'number', label = 'Amount', name = 'amount', min = 1, max = 100, default = 1}
})
if amount and amount[1] then
TriggerServerEvent('md-drugs:server:buyWhippitItem', k, item, amount[1])
end
end
}
end
ps.menu(ps.lang('Whippit.shopHeader'), ps.lang('Whippit.shopHeader'), menu)
end
},
})
--ps.entityTarget(ped, {
-- {
-- label = Bridge.Language.Locale('Whippit.targetShop'),
-- icon = 'fa-solid fa-cart-shopping',
-- action = function()
-- local menu = {}
-- local items = ps.callback('md-drugs:server:getwhippitShop')
-- for item, price in pairs (items) do
-- menu[#menu + 1] = {
-- title = ps.getLabel(item),
-- icon = ps.getImage(item),
-- description = '$' .. price,
-- action = function()
-- local amount = ps.input(ps.getLabel(item), {
-- {type = 'number', label = 'Amount', name = 'amount', min = 1, max = 100, default = 1}
-- })
-- if amount and amount[1] then
-- TriggerServerEvent('md-drugs:server:buyWhippitItem', k, item, amount[1])
-- end
-- end
-- }
-- end
-- ps.menu(Bridge.Language.Locale('Whippit.shopHeader'), Bridge.Language.Locale('Whippit.shopHeader'), menu)
-- end
-- },
--})
end
end
+9 -9
View File
@@ -67,7 +67,7 @@ function SetUpPeds(drugCount)
elseif drugCount > settings.WholesaleAmbushTier1 then
tierName = "Medium"
end
ps.notify(string.format(ps.lang('wholesale.ambush'), attackerCount, tierName), 'error')
Bridge.Notify.SendNotify(string.format(Bridge.Language.Locale('wholesale.ambush'), attackerCount, tierName), 'error')
end
RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
@@ -86,13 +86,13 @@ RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
local maxPayout = math.floor(drug.price.max * (1 + potentialBonus))
local totalMinPayout = drug.count * minPayout
local totalMaxPayout = drug.count * maxPayout
ps.notify(string.format(ps.lang('wholesale.count'), drug.count), 'info')
Bridge.Notify.SendNotify(string.format(Bridge.Language.Locale('wholesale.count'), drug.count), 'info')
if bonusPercent > 0 then
ps.notify(string.format(ps.lang('wholesale.bonus'), bonusPercent), 'info')
Bridge.Notify.SendNotify(string.format(Bridge.Language.Locale('wholesale.bonus'), bonusPercent), 'info')
end
ps.notify(string.format(ps.lang('wholesale.estimate'), totalMinPayout, totalMaxPayout), 'info')
Bridge.Notify.SendNotify(string.format(Bridge.Language.Locale('wholesale.estimate'), totalMinPayout, totalMaxPayout), 'info')
elseif drug.count <= 0 then
ps.notify(ps.lang('wholesale.no_drugs'), 'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('wholesale.no_drugs'), 'error')
end
ps.requestModel("g_m_y_famdnf_01", settings.RequestModelTime)
local current = "g_m_y_famdnf_01"
@@ -100,12 +100,12 @@ RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
FreezeEntityPosition(drugdealer, true)
SetEntityInvincible(drugdealer, true)
ps.entityTarget(drugdealer, {{
label = ps.lang('wholesale.targetBuyer'),
label = Bridge.Language.Locale('wholesale.targetBuyer'),
icon = "fas fa-eye",
action = function()
local luck = math.random(1,100)
if luck <= settings.SuccessfulChance then
if not ps.progressbar(ps.lang('wholesale.wholesaling'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('wholesale.wholesaling'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:SuccessSale", drug)
else
ps.progressbar("Deal Going Bad", 4000, 'uncuff')
@@ -133,7 +133,7 @@ RegisterNetEvent("md-drugs:client:GetLocation", function(drug)
if timer <= settings.WholesaleTimeout or #(GetEntityCoords(PlayerPedId()) - vector3(loc.x, loc.y, loc.z) ) < 4.0 then
timer = 0
else
ps.notify(ps.lang('wholesale.tooLong'), 'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('wholesale.tooLong'), 'error')
DeleteEntity(drugdealer)
TriggerServerEvent('md-drugs:server:CleanupWholesale')
if settings.WholesaleResetOnTimeout then
@@ -148,5 +148,5 @@ RegisterNetEvent('md-drugs:client:WholesaleComplete', function(data)
if data.bonus > 0 then
bonusText = " (+" .. data.bonus .. "% quantity bonus)"
end
ps.notify(string.format(ps.lang('wholesale.complete'), data.quantity, data.payout, bonusText), 'success')
Bridge.Notify.SendNotify(string.format(Bridge.Language.Locale('wholesale.complete'), data.quantity, data.payout, bonusText), 'success')
end)
+24 -24
View File
@@ -9,19 +9,19 @@ end
ps.registerCallback('md-drugs:client:setpress', function(xtcData)
if xtcpress then
ps.notify(ps.lang('xtc.alreadyOut'), 'error')
Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.alreadyOut'), 'error')
return
end
local coords, head = StartRay2()
xtcpress = true
if not ps.progressbar(ps.lang('xtc.settingDown'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('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('xtc.targetMake'),
label = Bridge.Language.Locale('xtc.targetMake'),
distance = 2.0,
action = function()
local options = {}
@@ -32,8 +32,8 @@ ps.registerCallback('md-drugs:client:setpress', function(xtcData)
title = ps.getLabel(k),
description = descript,
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.making', ps.getLabel(k)), 4000, 'uncuff') then return end
if not minigame() then Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.fail'), "error") return end
if not ps.progressbar(Bridge.Language.Locale('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('xtc.targetPickup'),
label = Bridge.Language.Locale('xtc.targetPickup'),
action = function()
if not ps.progressbar(ps.lang('xtc.picking'), 5000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('xtc.picking'), 5000, 'uncuff') then return end
DeleteObject(press)
xtcpress = false
TriggerServerEvent("md-drugs:server:getpressback")
@@ -67,10 +67,10 @@ 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('xtc.targetStealMDP2P'),
label = Bridge.Language.Locale('xtc.targetStealMDP2P'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.stealingMDP2P'), 4000, 'uncuff') then return end
if not minigame() then Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.fail'), "error") return end
if not ps.progressbar(Bridge.Language.Locale('xtc.stealingMDP2P'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stealmdp2p", k)
end,
canInteract = function()
@@ -83,10 +83,10 @@ 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('xtc.targetStealIsosafrole'),
label = Bridge.Language.Locale('xtc.targetStealIsosafrole'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.stealingIsosafrole'), 4000, 'uncuff') then return end
if not minigame() then Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.fail'), "error") return end
if not ps.progressbar(Bridge.Language.Locale('xtc.stealingIsosafrole'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stealisosafrole", k)
end,
canInteract = function()
@@ -100,10 +100,10 @@ for k, v in pairs(locations.rawxtcloc) do
ps.boxTarget('xtcraw'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('xtc.targetRaw'),
label = Bridge.Language.Locale('xtc.targetRaw'),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.makingRaw'), 4000, 'uncuff') then return end
if not minigame() then Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.fail'), "error") return end
if not ps.progressbar(Bridge.Language.Locale('xtc.makingRaw'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:makingrawxtc", k)
end,
canInteract = function()
@@ -120,7 +120,7 @@ for k, v in pairs(locations.xtcpress) do
ps.entityTarget(ped, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('xtc.getPress'),
label = Bridge.Language.Locale('xtc.getPress'),
action = function()
local options = {}
local recipeList = ps.callback('md-drugs:server:getpressrecipes')
@@ -129,10 +129,10 @@ for k, v in pairs(locations.xtcpress) do
options[#options + 1] = {
icon = ps.getImage(m),
title = ps.getLabel(m),
description = ps.lang('xtc.buySingle', d.cash),
description = Bridge.Language.Locale('xtc.buySingle', d.cash),
type = d.type,
action = function()
if not ps.progressbar(ps.lang('xtc.buyp'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('xtc.buyp'), 4000, 'uncuff') then return end
TriggerServerEvent('md-drugs:server:buypress',k, m)
end,
}
@@ -144,7 +144,7 @@ for k, v in pairs(locations.xtcpress) do
description = descript,
type = d.type,
action = function()
if not ps.progressbar(ps.lang('xtc.buyp'), 4000, 'uncuff') then return end
if not ps.progressbar(Bridge.Language.Locale('xtc.buyp'), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:upgradepress", k, m)
end,
distance = 2.0
@@ -163,7 +163,7 @@ for k, v in pairs (locations.stamp) do
ps.boxTarget('xtcstamp'..k, v.loc, {length = v.l, width = v.w, heading = v.rot}, {
{
icon = 'fa-solid fa-flask',
label = ps.lang('xtc.targetStamp'),
label = Bridge.Language.Locale('xtc.targetStamp'),
action = function()
local item = {
{item = 'white_xtc', label = ps.getLabel('white_xtc'), color = 'white'},
@@ -176,10 +176,10 @@ for k, v in pairs (locations.stamp) do
options[#options + 1] = {
icon = ps.getImage(d.item),
title = d.label,
description = ps.lang('xtc.stamp_desc', d.color),
description = Bridge.Language.Locale('xtc.stamp_desc', d.color),
action = function()
if not minigame() then ps.notify(ps.lang('xtc.fail'), "error") return end
if not ps.progressbar(ps.lang('xtc.stamping', d.label), 4000, 'uncuff') then return end
if not minigame() then Bridge.Notify.SendNotify(Bridge.Language.Locale('xtc.fail'), "error") return end
if not ps.progressbar(Bridge.Language.Locale('xtc.stamping', d.label), 4000, 'uncuff') then return end
TriggerServerEvent("md-drugs:server:stamp", k, d.color)
end,
distance = 2.0
+4 -2
View File
@@ -11,10 +11,11 @@ client_scripts {
}
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/functions.lua',
'server/plantSpawns.lua',
'serverRun.lua',
'@oxmysql/lib/MySQL.lua',
}
shared_scripts {
@@ -27,5 +28,6 @@ lua54 'yes'
files {
'client/**.lua',
'server/**.lua',
'locales/**.lua'
'locales/**.lua',
'locales/**.json'
}
+267
View File
@@ -0,0 +1,267 @@
{
"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 %s",
"itemNeeded": "You Need %s",
"cooldown": "Slow Down Speed Racer",
"invalidItem": "This Item Is Not Sold Here",
"onCooldownWarn": "%s Attempted To Run Event %s \n while on cooldown",
"noCops": "Not Enough Police Online"
},
"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"
},
"Cornerselling": {
"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"
},
"crack": {
"targetMake": "Cook Some Crack",
"cook": "Cooking Crack",
"targetBag": "Bag Crack",
"bag": "Bagging Crack"
},
"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"
},
"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"
},
"lean": {
"stealFromTruck": "Steal From Truck",
"startMission": "Start Lean Mission",
"notOnRun": "You Are Not On A Lean Run",
"alreadyChasing": "You Are Already Chasing A Truck"
},
"lsd": {
"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",
"placing": "Placing Lab Kit Down!",
"failed": "You Suck At Making Drugs"
},
"mesc": {
"targetPick": "Pick Cactus",
"picking": "Picking Cactus",
"targetDry": "Dry Cactus",
"dry": "Drying Cactus"
},
"meth": {
"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",
"teleIn": "Enter the Lab",
"teleOut": "Exit the Lab"
},
"oxy": {
"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"
},
"pharma": {
"input": {
"header": "Who To Give A Prescription To?",
"title1": "Player Name",
"title2": "Prescription"
},
"write": "Writing Prescription",
"opening": "Opening Prescription Bottle",
"targetFill": "Fill Prescription",
"fill": "Getting Prescription Filled",
"canceled": "You Canceled The Prescription",
"unbottle": "You Opened The Bottle"
},
"shrooms": {
"targetPick": "Pick Shrooms",
"picking": "Picking Shrooms",
"eat": "Eating Shrooms",
"cancel": "Decided To Not Do Shrooms",
"took": "You Took Some Shrooms!"
},
"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"
},
"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",
"count": "Quantity detected: %s",
"bonus": "Quantity bonus: +%s%%",
"estimate": "Estimated payout: $%s - $%s",
"no_drugs": "You do not have any of this drug to sell",
"ambush": "Ambush! %s attackers with %s weapons are approaching!",
"complete": "Sold %s items for $%s%s",
"min_quantity": "You must sell at least %s items to wholesale",
"deal_failed_cleanup": "Deal failed - you can try again"
},
"xtc": {
"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"
},
"merchant": {
"targetOpen": "Open Merchant Menu"
},
"Whippit": {
"targetShop": "Open Whippit Shop",
"needBalloon": "You Need A Balloon For This",
"needCanister": "You Need A Canister For This",
"shopHeader": "Whippit Shop"
}
}
+3 -3
View File
@@ -47,16 +47,16 @@ 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")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if not stores.travel[item] then
ps.notify(src, ps.lang('Catches.invalidItem'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
end
end)
+68 -59
View File
@@ -1,5 +1,7 @@
Recipes = Recipes or {}
Locations = Locations or {}
local cocaineRecipes = {
Recipes.Cocaine = {
cokepowder = {
tier1 = {take = {coca_leaf = 1}, give = {coke = 1}},
tier2 = {take = {coca_leaf = 1}, give = {cokestagetwo = 1}},
@@ -16,123 +18,130 @@ local cocaineRecipes = {
tier3 = {take = {loosecokestagethree = 1, empty_weed_bag = 1}, give = {cokebaggystagethree = 1}},
}
}
GlobalState.MDDrugsRecipes = Recipes
local cocaineLocations = {
Locations.Cocaine = {
MakePowder = {
{loc = vector3(1086.20, -3195.30, -39.20), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
CuttingCoke = {
{loc = vector3(1095.61, -3195.62, -39.13), l = 1.0, w = 1.0, rot = 45.0, offset = vec3(-1.782227, 0.445068, -0.502701), rotation = vector3(0,0,0), gang = ""},
--{loc = vector3(1092.74, -3196.68, -38.99), l = 1.0, w = 1.0, rot = 45.0, offset = vec3(1.983398, 0.407959, -0.642696), rotation = vector3(0,0,180.0), gang = ""},
},
BaggingCoke = {
{loc = vector3(1093.16, -3195.78, -39.19), l = 1.0, w = 1.0, rot = 45.0,offset = vec3(4.515137, 2.542969, -0.814194), rotation = vector3(0,0,180.0), gang = ""},
--{loc = vector3(1090.17, -3196.59, -38.99), l = 1.0, w = 1.0, rot = 45.0, offset = vec3(-5.207642, -1.666504, -1.014198), rotation = vector3(0,0, 0.0), gang = ""},
},
cokeTele = {
{inside = vector3(1088.81, -3187.57, -38.99), outside = vector3(198.16, -1276.92, 29.33), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
}
}
GlobalState.MDDrugsLocations = Locations
ps.registerCallback('md-drugs:server:GetCokeLocations', function()
return cocaineLocations
end)
local function getTier(source)
if not Config.TierSystem then
return 'tier1'
end
local rep = tonumber(getRep(source, 'coke'))
if not rep then
return
end
if rep < Config.Tier1 then
return 'tier1'
end
if rep >= Config.Tier1 and rep <= Config.Tier2 then
return 'tier2'
end
if rep >= Config.Tier2 then
return 'tier3'
end
return nil
end
RegisterServerEvent('md-drugs:server:makepowder', function(num)
local src = source
if timeOut(src, 'md-drugs:server:makepowder') then return end
if not ps.checkDistance(src, cocaineLocations.MakePowder[num].loc, 3.5) then
ps.warn(ps.lang('Catches.notIn', ps.getPlayerName(src)), 'md-drugs:server:makepowder')
if not checkDistance(src, Locations.Cocaine.MakePowder[num].loc, 3.5) then
Bridge.Prints.Warm(Bridge.Language.Locale('Catches.notIn', ps.getPlayerName(src)), 'md-drugs:server:makepowder')
return
end
local tier = 'tier1'
if Config.TierSystem then
local coke = tonumber(getRep(src, 'coke'))
if coke > Config.Tier1 and coke <= Config.Tier2 then
tier = 'tier2'
elseif coke > Config.Tier2 then
tier = 'tier3'
local tier = getTier(src)
if not tier then
return
end
end
if not ps.craftItem(src, cocaineRecipes['cokepowder'][tier]) then
verifyHas(src, cocaineRecipes['cokepowder'][tier].take)
if not craft(src, Recipes.Cocaine.cokepowder[tier]) then
return
end
end)
RegisterServerEvent('md-drugs:server:cutcokeone', function(num)
local src = source
local tier = 'tier1'
if timeOut(src, 'md-drugs:server:cutcokeone') then return end
if not ps.checkDistance(src, cocaineLocations.CuttingCoke[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Cocaine.CuttingCoke[num].loc, 2.5) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
local cokeTiers = {
{item = 'coke', tier = 'tier1', log = ' Cut Coke'},
{item = 'cokestagetwo', tier = 'tier2', log = ' Cut Coke tier 2'},
{item = 'cokestagethree', tier = 'tier3', log = ' Cut Coke tier 3'}
local tier = 'tier1'
local itemCheck = {
{check = Bridge.Inventory.HasItem(src,'loosecoke'), tier = 'tier1'},
{check = Bridge.Inventory.HasItem(src, 'loosecokestagetwo'), tier = 'tier2'},
{check = Bridge.Inventory.HasItem(src, 'loosecokestagethree'), tier = 'tier3'},
}
for _, v in ipairs(cokeTiers) do
if ps.hasItem(src, v.item) then
tier = v.tier
for i = 1, #itemCheck do
if itemCheck[i].check then
tier = itemCheck[i].tier
break
end
end
end
if not ps.craftItem(src, cocaineRecipes['cutcoke'][tier]) then
verifyHas(src, cocaineRecipes['cutcoke'][tier].take)
if not craft(src, Recipes.Cocaine.cutcoke[tier]) then
return
end
end)
RegisterServerEvent('md-drugs:server:bagcoke', function(num)
local src = source
local tier = 'tier1'
if timeOut(src, 'md-drugs:server:bagcoke') then return end
if not ps.checkDistance(src, cocaineLocations.BaggingCoke[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Cocaine.BaggingCoke[num].loc, 2.5) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
if Config.TierSystem then
local cokeTiers = {
{item = 'loosecoke', tier = 'tier1', log = ' Bagged Coke'},
{item = 'loosecokestagetwo', tier = 'tier2', log = ' Bagged Coke tier 2'},
{item = 'loosecokestagethree', tier = 'tier3', log = ' Bagged Coke tier 3'}
local tier = 'tier1'
local itemCheck = {
{check = Bridge.Inventory.HasItem(src,'coke'), tier = 'tier1'},
{check = Bridge.Inventory.HasItem(src, 'cokestagetwo'), tier = 'tier2'},
{check = Bridge.Inventory.HasItem(src, 'cokestagethree'), tier = 'tier3'},
}
for _, v in ipairs(cokeTiers) do
if ps.hasItem(src, v.item) then
tier = v.tier
for i = 1, #itemCheck do
if itemCheck[i].check then
tier = itemCheck[i].tier
break
end
end
if not ps.craftItem(src, cocaineRecipes['bagcoke'][tier]) then
verifyHas(src, cocaineRecipes['bagcoke'][tier].take)
if not craft(src, Recipes.Cocaine.bagcoke[tier]) then
return
end
AddRep(src, 'coke')
else
if not ps.craftItem(src, cocaineRecipes['bagcoke'][tier]) then
verifyHas(src, cocaineRecipes['bagcoke'][tier].take)
return
end
end
AddRep(src, 'coke', 1)
end)
local cokecut = {loosecokestagetwo = 2, loosecokestagethree = 3}
for k, v in pairs (cokecut) do
ps.createUseable(k, function(source, item)
Bridge.Framework.RegisterUsableItem(k, function(source, item)
local src = source
if not ps.hasItem(src, 'bakingsoda') then
ps.notify(src, ps.lang('coke.needBakingSoda'), 'error')
if not Bridge.Inventory.HasItem(src, 'bakingsoda') then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('coke.needBakingSoda'), 'error')
return
end
if ps.hasItem(src,item.name) then
if Bridge.Inventory.HasItem(src,item.name) then
local check = ps.callback('md-drugs:client:uncuff', src, 'Cutting It Further')
if not check then return end
if ps.removeItem(src, k, 1) and ps.removeItem(src, 'bakingsoda', 1) then
ps.addItem(src, 'loosecoke', v)
if Bridge.Inventory.RemoveItem(src, k, 1) and Bridge.Inventory.RemoveItem(src, 'bakingsoda', 1) then
Bridge.Inventory.AddItem(src, 'loosecoke', v)
end
end
end)
+77 -40
View File
@@ -122,6 +122,7 @@ local Drugs = {
}
local drugsNames = {}
local soldPeds = {}
for k, v in pairs(Drugs) do
table.insert(drugsNames, k)
end
@@ -135,53 +136,73 @@ local cornsellConfig = {
policeRequired = 0, -- if you want cops to be required to sell set this to a number above 0
robChance = 1, -- Chance To Be Robbed 1 = 1%
}
local function beingRobbed(source, item, amount, ped)
local src = source
ps.removeItem(src, item, amount)
ps.notify(src, ps.lang('Cornerselling.gotRobbed'), 'error')
RobbedDrugs[ps.getIdentifier(source)] = {item = item, amount = amount, ped = ped}
Bridge.Inventory.RemoveItem(src, item, amount)
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Cornerselling.gotRobbed'), 'error')
RobbedDrugs[src] = {item = item, amount = amount, ped = ped}
return true
end
local function getDrugBack(source, item, amount)
local src = source
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, ps.lang('Cornerselling.gotBack'), 'success')
RobbedDrugs[ps.getIdentifier(source)] = nil
if RobbedDrugs[src] then
if RobbedDrugs[src].item == item and RobbedDrugs[src].amount == amount then
Bridge.Inventory.AddItem(src, item, amount)
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Cornerselling.gotBack'), 'success')
RobbedDrugs[src] = nil
return true
end
end
end
ps.registerCallback('md-drugs:server:cornerselling:getAvailableDrugs', function(source, ped)
local Player = ps.getPlayer(source)
local function getLoc(src, ped)
local coords, peds = GetEntityCoords(GetPlayerPed(src)), GetEntityCoords(ped)
local dist = #(coords - peds)
if dist < 5.0 then
return true
end
return false
end
Bridge.Callback.Register('md-drugs:server:cornerselling:getAvailableDrugs', function(source, ped)
local src = source
local rep = getRep(source, 'cornerselling')
local priceAdjust = json.decode(rep).price
if not Player then return nil end
local priceAdjust = rep.price
local ped = NetworkGetEntityFromNetworkId(ped)
if not getLoc(src, ped) then
return false
end
if soldPeds[src] == nil then
soldPeds[src] = {}
end
if soldPeds[src][ped] then
return false
end
for k, v in pairs(Drugs) do
local item = ps.getItemCount(source, k) or 0
if item >= 1 then
local count = Bridge.Inventory.GetItemCount(src, k)
if count >= 1 then
local maths = math.random(1,100)
if maths <= cornsellConfig.robChance then
beingRobbed(source, k, item, ped)
beingRobbed(source, k, count, ped)
soldPeds[src][ped] = {item = k, amount = count}
return 'robbed'
else
if item > 15 then item = 15 end
local amount = math.random(1, item)
if count > 15 then count = 15 end
local amount = math.random(1, count)
local price = (math.random(Drugs[k]['min'], Drugs[k]['max']) * amount) * priceAdjust
DrugDeals[ps.getIdentifier(source)] = {item = k, amount = amount, price = math.floor(price), ped = ped}
return DrugDeals[ps.getIdentifier(source)]
DrugDeals[src] = {item = k, amount = amount, price = math.floor(price), ped = ped}
soldPeds[src][ped] = DrugDeals[src]
return DrugDeals[src]
end
end
end
return false
end)
ps.registerCallback('md-drugs:server:hasDrugs', function(source)
Bridge.Callback.Register('md-drugs:server:hasDrugs', function(source)
for k, v in pairs(Drugs) do
if ps.hasItem(source, k, 1) then
if Bridge.Inventory.HasItem(source, k) then
return true
end
end
@@ -196,51 +217,67 @@ local function csCheck(src, item, amount, price)
end
end
if not isIn then return false end
if DrugDeals[ps.getIdentifier(src)] then
if DrugDeals[ps.getIdentifier(src)].item == item and DrugDeals[ps.getIdentifier(src)].amount == amount and DrugDeals[ps.getIdentifier(src)].price == price then
if DrugDeals[src] then
if DrugDeals[src].item == item and DrugDeals[src].amount == amount and DrugDeals[src].price == price then
return true
end
end
return false
end
RegisterNetEvent('md-drugs:server:sellCornerDrugs', function(item, amount, price)
RegisterNetEvent('md-drugs:server:sellCornerDrugs', function(item, amount, price, peds)
local src = source
if not csCheck(src, item, amount, price) then return end
if not ps.removeItem(src, item, amount) then
ps.notify(src, ps.lang('Cornerselling.notEnough'), 'error')
DrugDeals[ps.getIdentifier(src)] = nil
if not csCheck(src, item, amount, price) then
return
end
local ped = NetworkGetEntityFromNetworkId(peds)
if not getLoc(src, ped) then
print('not close enough to ped')
return
end
if not soldPeds[src] or not soldPeds[src][ped] then
print('ped not in soldPeds')
return
end
if not Bridge.Inventory.RemoveItem(src, item, amount) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Cornerselling.notEnough'), 'error')
DrugDeals[src] = nil
return
end
AddRep(src, 'cornerselling', Drugs[item].rep * amount)
DrugDeals[ps.getIdentifier(src)] = nil
DrugDeals[src] = nil
if cornsellConfig.MarkedBills then
ps.addItem(src, 'markedbills', price, {worth = price})
Bridge.Inventory.AddItem(src, 'markedbills', price, nil, {worth = price})
return
end
if cornsellConfig.CustomItem ~= '' then
ps.addItem(src, cornsellConfig.CustomItem, price)
Bridge.Inventory.AddItem(src, cornsellConfig.CustomItem, price)
return
end
ps.addMoney(src, 'cash', price)
Bridge.Framework.AddAccountBalance(src, 'cash', price)
end)
RegisterNetEvent('md-drugs:server:getBackRobbed', function()
local tabl = RobbedDrugs[ps.getIdentifier(source)]
RegisterNetEvent('md-drugs:server:getBackRobbed', function(peds)
local src = source
local tabl = RobbedDrugs[src]
if tabl == nil then return end
getDrugBack(source, tabl.item, tabl.amount)
RobbedDrugs[ps.getIdentifier(source)] = nil
local ped = NetworkGetEntityFromNetworkId(peds)
if ped ~= tabl.ped then return end
if not getLoc(src, ped) then return end
getDrugBack(src, tabl.item, tabl.amount)
RobbedDrugs[src] = nil
end)
ps.registerCommand('cornersell', {
help = ps.lang('Cornerselling.comDes'),
help = Bridge.Language.Locale('Cornerselling.comDes'),
params = {
},
}, function(source, args, raw)
local src = source
local jobCount = ps.getJobTypeCount('leo')
if jobCount < cornsellConfig.policeRequired then
ps.notify(src, ps.lang('Catches.noCops'), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.noCops'), 'error')
return
end
TriggerClientEvent('md-drugs:client:cornerselling', src)
@@ -248,7 +285,7 @@ end)
RegisterServerEvent('md-drugs:server:cornerselling:stop', function()
local src = source
if DrugDeals[ps.getIdentifier(src)] then
DrugDeals[ps.getIdentifier(src)] = nil
if DrugDeals[src] then
DrugDeals[src] = nil
end
end)
+37 -33
View File
@@ -1,4 +1,6 @@
local crackRecipe = {
Recipes, Locations = Recipes or {}, Locations or {}
Recipes.Crack = {
cookcrack = {
tier1 = {take = {loosecoke = 1, bakingsoda = 1}, give = {crackrock = 1}},
tier2 = {take = {loosecokestagetwo = 1, bakingsoda = 1}, give = {crackrockstagetwo = 1}},
@@ -10,8 +12,9 @@ local crackRecipe = {
tier3 = {take = {crackrockstagethree = 1, empty_weed_bag = 1}, give = {baggedcrackedstagethree = 1}},
}
}
GlobalState.MDDrugsRecipes = Recipes
local CrackLocations = {
Locations.Crack = {
makecrack = { -- make crack with baking soda with cut coke 1-3
{loc = vector3(2433.47, 4970.02, 42.18), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
@@ -19,21 +22,18 @@ local CrackLocations = {
{loc = vector3(2436.55, 4964.96, 42.18), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
}
ps.registerCallback('md-drugs:server:GetCrackLocations', function()
return CrackLocations
end)
GlobalState.MDDrugsLocations = Locations
RegisterServerEvent('md-drugs:server:makecrackone', function(num)
local src = source
local tier = 'tier1'
if timeOut(src, 'md-drugs:server:makecrackone') then return end
if not ps.checkDistance(src, CrackLocations.makecrack[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Crack.makecrack[num].loc, 2.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
if Config.TierSystem then
local crackTiers = {
{item = 'loosecoke', tier = 'tier1'},
@@ -41,14 +41,13 @@ RegisterServerEvent('md-drugs:server:makecrackone', function(num)
{item = 'loosecokestagethree', tier = 'tier3'}
}
for _, v in ipairs(crackTiers) do
if ps.hasItem(src, v.item) then
if Bridge.Inventory.HasItem(src, v.item) then
tier = v.tier
break
end
end
end
if not ps.craftItem(src, crackRecipe['cookcrack'][tier]) then
verifyHas(src, crackRecipe['cookcrack'][tier].take)
if not craft(src, Recipes.Crack.cookcrack[tier]) then
return
end
end)
@@ -56,12 +55,15 @@ end)
RegisterServerEvent('md-drugs:server:bagcrack', function(num)
local src = source
local tier = 'tier1'
if timeOut(src, 'md-drugs:server:bagcrack') then return end
if not ps.checkDistance(src, CrackLocations.bagcrack[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Crack.bagcrack[num].loc, 2.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
if Config.TierSystem then
local crackTiers = {
{item = 'crackrock', tier = 'tier1'},
@@ -69,28 +71,30 @@ RegisterServerEvent('md-drugs:server:bagcrack', function(num)
{item = 'crackrockstagethree', tier = 'tier3'}
}
for _, v in ipairs(crackTiers) do
if ps.hasItem(src, v.item) then
if Bridge.Inventory.HasItem(src, v.item) then
tier = v.tier
break
end
end
end
if not ps.craftItem(src, crackRecipe['bagcrack'][tier]) then
verifyHas(src, crackRecipe['bagcrack'][tier].take)
if not craft(src, Recipes.Crack.bagcrack[tier]) then
return
end
end)
local cokecut = {crackrockstagetwo = 2, crackrockstagethree = 3}
for k, v in pairs (cokecut) do
ps.createUseable(k, function(source, item)
Bridge.Framework.RegisterUsableItem(k, function(source, item)
local src = source
if ps.hasItem(src, item.name) then
if not ps.hasItem(src, 'bakingsoda', 1) then return end
local check = ps.callback('md-drugs:client:uncuff', src, 'Cutting Crack Rock Further')
if not Bridge.Inventory.HasItem(src, 'bakingsoda') then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('coke.needBakingSoda'), 'error')
return
end
if Bridge.Inventory.HasItem(src,item.name) then
local check = ps.callback('md-drugs:client:uncuff', src, 'Cutting It Further')
if not check then return end
if ps.removeItem(src, k, 1) and ps.removeItem(src, 'bakingsoda', 1) then
ps.addItem(src, 'crackrock', v)
if Bridge.Inventory.RemoveItem(src, k, 1) and Bridge.Inventory.RemoveItem(src, 'bakingsoda', 1) then
Bridge.Inventory.AddItem(src, 'crackrock', v)
end
end
end)
@@ -98,18 +102,18 @@ end
RegisterNetEvent("md-drugs:server:failcrackone", function(num)
local src = source
if not ps.checkDistance(src, CrackLocations.makecrack[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Crack.makecrack[num].loc, 2.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local items = {
loosecoke = 1,
loosecokestagetwo = 1,
loosecokestagethree = 1
'loosecoke',
'loosecokestagetwo',
'loosecokestagethree',
}
for k,v in pairs(items) do
if ps.hasItem(src, k, v) then
ps.removeItem(src, k, v)
if Bridge.Inventory.HasItem(src, v) then
Bridge.Inventory.RemoveItem(src, v, 1)
return
end
end
+67 -63
View File
@@ -1,4 +1,4 @@
Locations = Locations or {}
local dloc = {
{coords = vector4(282.48, -1814.32, 27.23, 145.11)},
@@ -88,36 +88,29 @@ local Products = {
{name = "weed_amnesia_seed", price = 15, amount = 150, minrep = 0},
}
ps.registerCallback('md-drugs:server:dealerList', function()
local Dealers = {}
Bridge.Callback.Register('md-drugs:server:dealerList', function(source, location)
local coords = json.decode(Dealers[location].coords)
coords = vector3(coords.x, coords.y, coords.z)
if not checkDistance(source, coords, 4.0) then
return
end
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', {})
return check2
else
return check
end
end)
local DeliveryItems = {
{ item = "weed_brick", minrep = 0, payout = {min = 10, max = 50}},
{ item = "coke_brick", minrep = 0, payout = {min = 10, max = 50}},
}
ps.registerCallback('md-drugs:server:GetDeliveryItem', function(source, data)
Bridge.Callback.Register('md-drugs:server:GetDeliveryItem', function(source, data)
local src = source
local Player = ps.getPlayer(src)
local itemnum = math.random(1, #DeliveryItems)
local item = DeliveryItems[itemnum].item
local amount = math.random(1,4)
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {Bridge.Framework.GetPlayerIdentifier(src)})
local locnum = math.random(1, #dloc)
local coord = json.encode({
x = dloc[locnum].coords.x,
@@ -127,8 +120,8 @@ ps.registerCallback('md-drugs:server:GetDeliveryItem', function(source, data)
})
if not check[1] then
MySQL.insert('INSERT INTO deliveriesdealer SET cid = ?, itemdata = ?, timestart = ?, maxtime = ?, location = ?',
{ps.getIdentifier(src), json.encode({item = item, amount = amount}), os.time(), os.time() + (15 * 60), coord })
ps.addItem(src, item, amount)
{Bridge.Framework.GetPlayerIdentifier(src), json.encode({item = item, amount = amount}), os.time(), os.time() + (15 * 60), coord })
Bridge.Inventory.AddItem(src, item, amount)
local tab = {
bool = true,
item = item,
@@ -141,11 +134,11 @@ ps.registerCallback('md-drugs:server:GetDeliveryItem', function(source, data)
local timeout = math.floor(os.difftime(time, check[1].maxtime) / 60)
if timeout > 15 then
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
ps.notify(src, ps.lang('Deliveries.slowAf'), 'error' )
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {Bridge.Framework.GetPlayerIdentifier(src)})
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Deliveries.slowAf'), 'error' )
return {bool = false}
end
ps.notify(src,ps.lang('Deliveries.alreadyDelivering'), 'error' )
Bridge.Notify.SendNotify(src,Bridge.Language.Locale('Deliveries.alreadyDelivering'), 'error' )
local tab = {
bool = false,
item = item,
@@ -158,37 +151,43 @@ end)
RegisterNetEvent('md-drugs:server:giveDeliveryItems', function(item, amount)
local src = source
local Player = ps.getPlayer(src)
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
local id = Bridge.Framework.GetPlayerIdentifier(src)
local check = MySQL.query.await('SELECT * FROM deliveriesdealer WHERE cid = ?', {id})
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 = ?', {ps.getIdentifier(src)})
ps.notify(src, ps.lang('Deliveries.slowAf'), 'error' )
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {id})
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Deliveries.slowAf'), 'error' )
return
end
if item ~= itemData.item then return end
if amount ~= itemData.amount then return end
if ps.removeItem(src, item, amount) then
local coords = json.decode(check[1].location)
coords = vector3(coords.x, coords.y, coords.z)
if not checkDistance(src, coords, 5.0) then
return
end
if Bridge.Inventory.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)
ps.addMoney(src, 'cash', income)
Bridge.Framework.AddAccountBalance(src, 'cash', income)
AddRep(src, 'dealerrep')
end
end
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {ps.getIdentifier(src)})
MySQL.query.await('DELETE FROM deliveriesdealer WHERE cid = ?', {id})
end
end)
-- TODO: COmmands
ps.registerCommand("newdealer", {
help = ps.lang('Deliveries.newDealerHelp.help'),
help = Bridge.Language.Locale('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" }
{ name = "name", help = Bridge.Language.Locale('Deliveries.newDealerHelp.name'), type = "string" },
{ name = "min", help = Bridge.Language.Locale('Deliveries.newDealerHelp.timeMin'), type = "number" },
{ name = "max", help = Bridge.Language.Locale('Deliveries.newDealerHelp.timeMax'), type = "number" }
},
admin = true,
}, function(source, args)
@@ -202,29 +201,22 @@ ps.registerCommand("newdealer", {
local result = MySQL.scalar.await('SELECT name FROM dealers WHERE name = ?', { dealerName })
if result then
return ps.notify(source,ps.lang('Deliveries.DealerExists'), "error")
return Bridge.Notify.SendNotify(source,Bridge.Language.Locale('Deliveries.DealerExists'), "error")
end
MySQL.insert('INSERT INTO dealers (name, coords, time, createdby) VALUES (?, ?, ?, ?)', {
dealerName, pos, 'nil', ps.getIdentifier(source)
}, function()
QBConfig.Dealers[dealerName] = {
name = dealerName,
coords = {
x = coords.x,
y = coords.y,
z = coords.z,
h = GetEntityHeading(ped)
},
}
TriggerClientEvent('md-drugs:client:RefreshDealers', -1, QBConfig.Dealers)
end)
dealerName, pos, 'nil', Bridge.Framework.GetPlayerIdentifier(source)
})
Wait(1000)
Locations.Dealers = MySQL.query.await('SELECT * FROM dealers')
GlobalState.MDDrugsLocations = Locations
TriggerClientEvent('md-drugs:client:RefreshDealers', -1)
end)
ps.registerCommand("deletedealer", {
help = ps.lang('Deliveries.deleteDealerHelp.help'),
help = Bridge.Language.Locale('Deliveries.deleteDealerHelp.help'),
description = {
{ name = "name", help = ps.lang('Deliveries.deleteDealerHelp.name'), type = "string" }
{ name = "name", help = Bridge.Language.Locale('Deliveries.deleteDealerHelp.name'), type = "string" }
},
admin = true
}, function(source, args)
@@ -233,24 +225,36 @@ ps.registerCommand("deletedealer", {
if result and result[1] then
MySQL.query('DELETE FROM dealers WHERE name = ?', { dealerName })
QBConfig.Dealers[dealerName] = nil
TriggerClientEvent('md-drugs:client:RefreshDealers', -1, QBConfig.Dealers)
ps.notify(source, ps.lang('Deliveries.deleteDealerSuccess'), "success")
Wait(1000)
Locations.Dealers = MySQL.query.await('SELECT * FROM dealers')
GlobalState.MDDrugsLocations = Locations
TriggerClientEvent('md-drugs:client:RefreshDealers', -1)
Bridge.Notify.SendNotify(source, Bridge.Language.Locale('Deliveries.deleteDealerSuccess'), "success")
else
ps.notify(source, ps.lang('Deliveries.deleteDealerFail'), "error")
Bridge.Notify.SendNotify(source, Bridge.Language.Locale('Deliveries.deleteDealerFail'), "error")
end
end)
RegisterNetEvent('md-drugs:server:buyItemDealer', function(num)
RegisterNetEvent('md-drugs:server:buyItemDealer', function(num, loc)
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')
local coords = json.decode(Dealers[loc].coords)
coords = vector3(coords.x, coords.y, coords.z)
if not checkDistance(src, coords, 5.0) then
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')
if not Bridge.Framework.RemoveAccountBalance(src, 'cash', itemData.price) or not Bridge.Framework.RemoveAccountBalance(src,'bank', itemData.price) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), 'error')
return
end
Bridge.Inventory.AddItem(src, itemData.name, 1)
Bridge.Notify.SendNotify(src, string.format(Bridge.Language.Locale('Deliveries.buyItemSuccess'), 1, ps.getLabel(itemData.name), itemData.price), 'success')
end)
Dealers = MySQL.query.await('SELECT * FROM dealers')
if Dealers and not Dealers[1] then
MySQL.insert('INSERT INTO dealers SET name = ?, coords = ?, time = ?, createdby = ?', {'MD', json.encode({x = 899.98, y = -2603.24, z = 6.11, h = 176.12 }), 'any', 'code Newb'})
end
Locations.Dealers = Dealers
GlobalState.MDDrugsLocations = Locations
+87 -62
View File
@@ -1,111 +1,136 @@
local timeOutPlayers = {}
local playerRep = {}
function checkDistance(src, coords, dist)
local pcoords = GetEntityCoords(GetPlayerPed(src))
coords = vector3(coords.x, coords.y, coords.z)
if #(pcoords - coords) > dist then
return false
end
return true
end
local function timeOutThread(src)
local id = Bridge.Framework.GetPlayerIdentifier(src)
CreateThread(function()
timeOutPlayers[ps.getIdentifier(src)] = true
timeOutPlayers[id] = true
Wait(3000)
timeOutPlayers[ps.getIdentifier(src)] = nil
timeOutPlayers[id] = nil
end)
end
function timeOut(src, event)
if timeOutPlayers[ps.getIdentifier(src)] then
ps.warn(ps.lang('Catches.onCooldownWarn', ps.getPlayerName(src), event))
if timeOutPlayers[src] then
local first, last = Bridge.Framework.GetPlayerName(src)
Bridge.Prints.Warn(Bridge.Language.Locale('Catches.onCooldownWarn', first .. ' ' .. last, event))
return true
end
timeOutThread(src)
return false
end
function verifyHas(source, items)
local need = 0
local have = 0
local missingList = {}
for k, v in pairs(items) do
function craft(source, recipe)
local need, have, oops = 0,0,{}
for item, amount in pairs (recipe.take) do
need = need + 1
if ps.hasItem(source, k, v) then
local count = Bridge.Inventory.GetItemCount(source, item)
if count >= amount then
have = have + 1
else
local label = ps.getItemLabel(k) or k
table.insert(missingList, v .. " " .. label)
table.insert(oops, 'You Need ' .. amount .. ' X ' .. Bridge.Inventory.GetItemInfo(item).label)
end
end
if need == have then
if have ~= need then
for index, text in pairs (oops) do
Bridge.Notify.SendNotify(source, text, 'error')
end
return false
end
for item, amount in pairs (recipe.take) do
if not Bridge.Inventory.RemoveItem(source, item, amount) then
return false
end
end
for item, amount in pairs (recipe.give) do
Bridge.Inventory.AddItem(source, item, amount)
end
return true
end
local message = ps.lang('Catches.itemMissings') .. table.concat(missingList, "\n")
ps.notify(source, message, 'error')
return false
local function handleFresh(source)
local id = Bridge.Framework.GetPlayerIdentifier(source)
local player = {
coke = 0,
lsd = 0,
heroin = 0,
dealerrep = 0,
cornerselling = {
price = QBConfig.SellLevel[1].price,
rep = 0,
label = QBConfig.SellLevel[1].label,
level = 1
}
}
playerRep[id] = player
local first, last = Bridge.Framework.GetPlayerName(source)
MySQL.insert('INSERT INTO drugrep SET cid = ?, drugrep = ?, name = ?', {id, player, first .. ' ' .. last})
end
local function handleFresh(source)
local table = json.encode({
coke = 0,lsd = 0,heroin = 0,dealerrep = 0,
cornerselling = { price = QBConfig.SellLevel[1].price,rep = 0,label = QBConfig.SellLevel[1].label,level = 1}
})
MySQL.insert('INSERT INTO drugrep SET cid = ?, drugrep = ?, name = ?', {ps.getIdentifier(source), table, ps.getPlayerName(source)})
return json.decode(table)
local function loadRep(source)
local id = Bridge.Framework.GetPlayerIdentifier(source)
local hasRep = MySQL.query.await('SELECT * FROM drugrep WHERE cid = ?', {id})
if hasRep and not hasRep[1] then
handleFresh(source)
end
if hasRep and hasRep[1] then
playerRep[id] = json.decode(hasRep[1].drugrep)
end
end
function getRep(source, type)
local sql = MySQL.query.await('SELECT JSON_UNQUOTE(JSON_EXTRACT(drugrep, ?)) AS rep FROM drugrep WHERE cid = ?', {'$.' .. type, ps.getIdentifier(source)})
if not sql[1] then
local new = handleFresh(source)
return new[type]
else
return sql[1].rep
local id = Bridge.Framework.GetPlayerIdentifier(source)
if not playerRep[id] then
loadRep(source)
end
return playerRep[id][type]
end
function GetAllRep(source)
local sql = MySQL.query.await('SELECT * FROM drugrep WHERE cid = ?', {ps.getIdentifier(source)})
if not sql[1] then
local new = handleFresh(source)
return new
else
local rep = json.decode(sql[1].drugrep)
if rep.coke == nil then return rep[1] end
return rep
local id = Bridge.Framework.GetPlayerIdentifier(source)
if not playerRep[id] then
loadRep(source)
end
return playerRep[id]
end
function AddRep(source, type, amount)
if not Config.TierSystem then return false end
if not amount then amount = 1 end
local sql = MySQL.query.await('SELECT * FROM drugrep WHERE cid = ?', {ps.getIdentifier(source)})
local reps = json.decode(sql[1].drugrep)
local update
local rep = ''
if reps.coke == nil then rep = reps[1] else rep = reps end
local id = Bridge.Framework.GetPlayerIdentifier(source)
if not playerRep[id] then
loadRep(source)
end
if type == 'cornerselling' then
for k, v in pairs (QBConfig.SellLevel) do
if rep.cornerselling.level == k then
if rep.cornerselling.rep + amount >= v.maxrep then
update = json.encode({coke = rep.coke, heroin = rep.heroin, lsd = rep.lsd, dealerrep = rep.dealerrep, cornerselling = {label = v.label, price = v.price, rep = rep.cornerselling.rep + amount, level = k + 1}})
local rep = playerRep[id].cornerselling
local cornerData = QBConfig.SellLevel[rep.level]
if rep.rep + amount >= cornerData.maxrep then
rep.level = rep.level + 1
rep.label = QBConfig.SellLevel[rep.level].label
rep.price = QBConfig.SellLevel[rep.level].price
end
rep.rep = rep.rep + amount
else
update = json.encode({coke = rep.coke, heroin = rep.heroin, lsd = rep.lsd, dealerrep = rep.dealerrep, cornerselling = {label = v.label, price = v.price, rep = rep.cornerselling.rep + amount, level = k}})
playerRep[id][type] = playerRep[id][type] + amount
end
MySQL.query.await('UPDATE drugrep SET drugrep = ? WHERE cid = ?', {json.encode(playerRep[id]), id})
end
end
if update == '' then return false end
MySQL.update('UPDATE drugrep SET drugrep = ? WHERE cid = ?', {update, ps.getIdentifier(source)})
return true
else
rep[type] = rep[type] + amount
MySQL.update('UPDATE drugrep SET drugrep = ? WHERE cid = ?', {json.encode(rep), ps.getIdentifier(source)})
return true
end
end
-- TODO: Callbacks
ps.registerCallback('md-drugs:server:GetCoppers', function(source, cb, args)
return ps.getJobTypeCount('leo')
return Bridge.Framework.GetPlayersByJob('police')
end)
ps.registerCallback('md-drugs:server:GetRep', function(source, cb, args)
local rep = GetAllRep(source)
return rep
end)
ps.versionCheck('md-drugs', 'https://raw.githubusercontent.com/Mustachedom/md-drugs/refs/heads/main/version.txt', 'https://github.com/Mustachedom/md-drugs/')
--TODO: fix versioncheck
Bridge.Version.VersionChecker('Mustachedom/md-drugs/', false)
+124 -126
View File
@@ -1,5 +1,7 @@
Recipes, Locations = Recipes or {}, Locations or {}
local heroinLabKits = {}
local heroinRecipes = {
Recipes.Heroin = {
dryheroin = {
tier1 = {take = {poppyresin = 1}, give = {heroin = 1}},
tier2 = {take = {poppyresin = 1}, give = {heroinstagetwo = 1}},
@@ -21,8 +23,9 @@ local heroinRecipes = {
tier3 = {take = {heroinvialstagethree = 1, needle = 1}, give = {heroin_readystagethree = 1}},
}
}
GlobalState.MDDrugsRecipes = Recipes
local heroinLocations = {
Locations.Heroin = {
dryplant = { -- turn resin into powder
{loc = vector3(-1353.77, -335.58, 43.92), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
@@ -36,48 +39,46 @@ local heroinLocations = {
{ped = 'a_m_m_farmer_01',loc = vector4(-1366.32, -334.40, 44.44,180.0), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
}
}
GlobalState.MDDrugsLocations = Locations
local prices = {
heroinlabkitprice = 10000
}
ps.registerCallback('md-drugs:server:GetHeroinLocations', function(source)
return heroinLocations
end)
ps.registerCallback('removeCleaningkit', function(source)
for k, v in pairs(heroinLabKits) do
if v.ownerid == ps.getIdentifier(source) then
ps.removeItem(source, 'cleaningkit', 1)
return true
end
Bridge.Callback.Register('md-drugs:server:removeCleaningKitHeroin', function(source)
if heroinLabKits[source] then
return Bridge.Inventory.RemoveItem(source, 'cleaningkit', 1)
end
return false
end)
local function getTier(source)
if not Config.TierSystem then
return 'tier1'
end
local heroin = tonumber(getRep(source, 'heroin'))
if heroin <= Config.Tier1 then
return 'tier1'
elseif heroin >= Config.Tier1 and heroin <= Config.Tier2 then
return'tier2'
else
return 'tier3'
end
end
RegisterServerEvent('md-drugs:server:dryplant', function(num)
local src = source
if timeOut(src, 'md-drugs:server:dryplant') then return end
if not ps.checkDistance(src, heroinLocations.dryplant[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Heroin.dryplant[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
if Config.TierSystem then
local heroin = tonumber(getRep(src, 'heroin'))
if heroin <= Config.Tier1 then
tier = 'tier1'
elseif heroin >= Config.Tier1 and heroin <= Config.Tier2 then
tier = 'tier2'
else
tier = 'tier3'
end
end
if not ps.craftItem(src, heroinRecipes['dryheroin'][tier]) then
verifyHas(src, heroinRecipes['dryheroin'][tier].take)
local tier = getTier(src)
if not craft(src, Recipes.Heroin.dryheroin[tier]) then
return
end
end)
@@ -87,85 +88,92 @@ RegisterServerEvent('md-drugs:server:cutheroin', function(num)
if timeOut(src, 'md-drugs:server:cutheroin') then return end
if not ps.checkDistance(src, heroinLocations.cutheroinone[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Heroin.cutheroinone[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local tier = 'tier1'
if Config.TierSystem then
local itemList = {
heroin = 'tier1',
heroinstagetwo = 'tier2',
heroinstagethree = 'tier3'
}
for k, v in pairs(itemList) do
local cuth = ps.hasItem(src, k)
if cuth then
if not ps.craftItem(src, heroinRecipes['cutheroin'][v]) then
verifyHas(src, heroinRecipes['cutheroin'][v].take)
for item, tiers in pairs (itemList) do
if Bridge.Inventory.HasItem(src, item) then
tier = tiers
end
end
end
if not craft(src, Recipes.Heroin.cutheroin[tier]) then
return
end
AddRep(src, 'heroin')
return
end
end
else
if not ps.craftItem(src, heroinRecipes['cutheroin']['tier1']) then
verifyHas(src, heroinRecipes['cutheroin']['tier1'].take)
return
end
end
end)
RegisterServerEvent('md-drugs:server:getheroinlabkit', function(num)
local src = source
if timeOut(src, 'md-drugs:server:getheroinlabkit') then return end
if not ps.checkDistance(src, heroinLocations.buyKit[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Heroin.buyKit[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local has = ps.hasItem(src, 'heroinlabkit')
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)
local has = Bridge.Inventory.HasItem(src, 'heroinlabkit')
if has then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('heroin.hasKitAlready'), 'error')
return
end
if Bridge.Framework.RemoveAccountBalance(src, 'cash', prices.heroinlabkitprice) then
Bridge.Inventory.AddItem(src, 'heroinlabkit', 1)
else
ps.notify(src, ps.lang('heroin.notEnoughMoney', prices.heroinlabkitprice), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('heroin.notEnoughMoney', prices.heroinlabkitprice), 'error')
end
end)
local function hasHKit(src)
for k, v in pairs(heroinLabKits) do
if v.ownerid == ps.getIdentifier(src) then
return true
end
end
return false
end
RegisterServerEvent('md-drugs:server:getheroinlabkitback', function()
local src = source
if not hasHKit(src) then return end
for k, v in pairs (heroinLabKits) do
if v.ownerid == ps.getIdentifier(src) then
table.remove(heroinLabKits, k)
ps.addItem(src, 'heroinlabkit', 1)
if not heroinLabKits[src] then
return
end
local loc = vector3(heroinLabKits[src].coords.x, heroinLabKits[src].coords.y, heroinLabKits[src].coords.z)
if not checkDistance(src, loc, 5.0) then
return
end
heroinLabKits[src] = nil
Bridge.Inventory.AddItem(src, 'heroinlabkit', 1)
end)
ps.createUseable('heroinlabkit', function(source, item)
Bridge.Framework.RegisterUsableItem('heroinlabkit', function(source, item)
local src = source
if not ps.hasItem(src, 'heroinlabkit', 1) then return end
local placed, loc = ps.callback('md-drugs:client:setheroinlabkit', src)
if not Bridge.Inventory.HasItem(src, 'heroinlabkit', 1) then
return
end
if heroinLabKits[src] then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('heroin.hasKitAlreadyPlaced'), "error")
return
end
local placed, loc = Bridge.Callback.Trigger('md-drugs:client:setheroinlabkit', src)
if placed then
if ps.removeItem(src, 'heroinlabkit', 1) then
table.insert(heroinLabKits, {
if Bridge.Inventory.RemoveItem(src, 'heroinlabkit', 1) then
heroinLabKits[src] = {
src = src,
ownerid = ps.getIdentifier(src),
ownerid = Bridge.Framework.GetPlayerIdentifier(src),
coords = loc,
name = ps.getPlayerName(src)
})
ps.notify(src, ps.lang('heroin.placedKit'), "success")
}
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('heroin.placedKit'), "success")
end
end
end)
@@ -175,9 +183,13 @@ RegisterServerEvent('md-drugs:server:heatliquidheroin', function()
if timeOut(src, 'md-drugs:server:heatliquidheroin') then return end
if not hasHKit(src) then return end
if not ps.hasItem(src, 'emptyvial', 1) then return end
if not heroinLabKits[src] then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
if not Bridge.Inventory.HasItem(src, 'emptyvial', 1) then return end
local tier = 'tier1'
if Config.TierSystem then
local itemList = {
heroincut = 'tier1',
@@ -185,37 +197,34 @@ RegisterServerEvent('md-drugs:server:heatliquidheroin', function()
heroincutstagethree = 'tier3'
}
for k, v in pairs(itemList) do
local cuth = ps.hasItem(src, k)
if cuth then
if not ps.craftItem(src, heroinRecipes['fillvial'][v]) then
verifyHas(src, heroinRecipes['fillvial'][v].take)
if Bridge.Inventory.HasItem(src, k) then
tier = v
break
end
end
end
if not craft(src, Recipes.Heroin.fillvial[tier]) then
return
end
AddRep(src, 'heroin')
return
end
end
else
if not ps.craftItem(src, heroinRecipes['fillvial']['tier1']) then
verifyHas(src, heroinRecipes['fillvial']['tier1'].take)
return
end
end
end)
RegisterServerEvent('md-drugs:server:failheatingheroin', function()
local src = source
if not hasHKit(src) then return end
if not heroinLabKits[src] then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
local itemList = {
heroincut = 1,
heroincutstagetwo = 1,
heroincutstagethree = 1
}
for k, v in pairs(itemList) do
local cuth = ps.hasItem(src, k)
if cuth then
ps.removeItem(src, k, v)
ps.notify(src, ps.lang('heroin.failed'), "error")
if Bridge.Inventory.RemoveItem(src, k, v) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('heroin.failed'), "error")
return
end
end
@@ -224,34 +233,28 @@ end)
RegisterServerEvent('md-drugs:server:fillneedle', function(num)
local src = source
if timeOut(src, 'md-drugs:server:fillneedle') then return end
if not ps.checkDistance(src, heroinLocations.fillneedle[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), 'error')
if not checkDistance(src, Locations.Heroin.fillneedle[num].loc, 3.0) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
end
if not ps.hasItem(src, 'needle', 1) then return end
local tier = 'tier1'
if Config.TierSystem then
local itemList = {
{item = 'heroinvial', tier = 'tier1', log = ' Filled Heroin Needle'},
{item = 'heroinvialstagetwo', tier = 'tier2', log = ' Filled Heroin Needle tier 2'},
{item = 'heroinvialstagethree', tier = 'tier3', log = ' Filled Heroin Needle tier 3'}
heroinvial = 'tier1',
heroinvialstagetwo = 'tier2',
heroinvialstagethree = 'tier3'
}
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
verifyHas(src, heroinRecipes['fillneedle'][v.tier].take)
for item, tiers in pairs (itemList) do
if Bridge.Inventory.HasItem(src, item) then
tier = tiers
break
end
end
end
if not craft(src, Recipes.Heroin.fillneedle[tier]) then
return
end
AddRep(src, 'heroin')
return
end
end
else
if not ps.craftItem(src, heroinRecipes['fillneedle']['tier1']) then
verifyHas(src, heroinRecipes['fillneedle']['tier1'].take)
return
end
end
end)
RegisterServerEvent('md-drugs:server:failheroin', function()
@@ -263,25 +266,20 @@ RegisterServerEvent('md-drugs:server:failheroin', function()
heroinvialstagethree = 1
}
for k, v in pairs (itemList) do
local cuth = ps.hasItem(src, k)
if cuth then
ps.removeItem(src, k, v)
ps.notify(src, ps.lang('Heroin.failneedle'), "error")
if Bridge.Inventory.RemoveItem(src, k, v) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Heroin.failneedle'), "error")
return
end
end
else
ps.removeItem(src, 'heroinvial', 1)
Bridge.Inventory.RemoveItem(src, 'heroinvial', 1)
end
end)
AddEventHandler('playerDropped', function()
local src = source
for k, v in pairs(heroinLabKits) do
if v.src == src then
table.remove(heroinLabKits, k)
ps.addItem(src, 'heroinlabkit', 1)
if heroinLabKits[src] then
heroinLabKits[src] = nil
Bridge.Inventory.AddItem(src, 'heroinlabkit', 1)
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, ps.lang('lean.notOnRun'), "error") end
if not onRun[ps.getIdentifier(src)] then return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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)
+124 -95
View File
@@ -1,214 +1,245 @@
Recipes, Locations = Recipes or {}, Locations or {}
local prices = {
tabcost = 100, -- price per piece of tab paper event does 10 at a time
lsdlabkitcost = 10000 -- price of the lsd lab kit
}
local lsdRecipes = {
Recipes.LSD = {
vial = {
heat = {take = {lysergic_acid = 1, diethylamide = 1,}, give = {lsd_one_vial = 1}}
},
}
local lsdLocations = {
GlobalState.MDDrugsRecipes = Recipes
Locations.LSD = {
lysergicacid = { -- get lysergic acid
{loc = vector3(-1381.21, -327.75, 39.85), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
{loc = vector3(2405.53, 5008.39, 46.02), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
diethylamide = { -- get diethylamide
{loc = vector3(-1371.71, -316.02, 39.53), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
{loc = vector3(-1372.89, -319.47, 39.05), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
{loc = vector3(2408.38, 5011.18, 46.08), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
gettabs = { -- buy tab paper
{loc = vector3(-1370.77, -314.51, 39.58), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
{loc = vector3(-1378.26, -336.56, 39.31), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
{loc = vector3(2409.59, 5012.45, 46.09), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
},
buyLSDkit = {
{ped = 'g_f_y_families_01', loc = vector4(2598.47, 5033.06, 105.86, 283.51), l = 1.0, w = 1.0, rot = 283.51, gang = ""},
{ped = 'g_f_y_families_01', loc = vector4(-1376.66, -325.52, 39.63, 142.1), l = 1.0, w = 1.0, rot = 283.51, gang = ""},
},
}
ps.registerCallback('md-drugs:server:GetLSDLocations', function(source)
return lsdLocations
end)
GlobalState.MDDrugsLocations = Locations
local lsdTables = {}
RegisterServerEvent('md-drugs:server:getlysergic', function(num)
local src = source
if timeOut(src, 'md-drugs:server:getlysergic') then return end
if not ps.checkDistance(src, lsdLocations.lysergicacid[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.LSD.lysergicacid[num].loc, 2.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
ps.addItem(src, 'lysergic_acid', 2)
Bridge.Inventory.AddItem(src, 'lysergic_acid', 2)
end)
RegisterServerEvent('md-drugs:server:getdiethylamide', function(num)
local src = source
if timeOut(src, 'md-drugs:server:getdiethylamide') then return end
if not ps.checkDistance(src, lsdLocations.diethylamide[num].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.LSD.diethylamide[num].loc, 2.0) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
ps.addItem(src, 'diethylamide', 2)
Bridge.Inventory.AddItem(src, 'diethylamide', 2)
end)
ps.createUseable('lsdlabkit', function(source, item)
Bridge.Framework.RegisterUsableItem('lsdlabkit', function(source, item)
local src = source
local placed, loc = ps.callback('md-drugs:client:setlsdlabkit', src)
local placed, loc = Bridge.Callback.Trigger('md-drugs:client:setlsdlabkit', src)
if placed then
if ps.removeItem(src, 'lsdlabkit', 1) then
table.insert(lsdTables, {
owner = ps.getPlayerName(src),
ownerid = ps.getIdentifier(src),
if Bridge.Inventory.RemoveItem(src, 'lsdlabkit', 1) then
lsdTables[src] = {
src = src,
loc = loc
})
}
end
end
end)
local function hasLabKit(source)
local src = source
for k, v in pairs (lsdTables) do
if v.ownerid == ps.getIdentifier(src) then
return true
end
end
end
ps.registerCallback('md-drugs:server:removecleaningkit', function(source)
Bridge.Callback.Register('md-drugs:server:removecleaningkit', function(source)
local src = source
return ps.removeItem(src, "cleaningkit", 1)
if not lsdTables[src] then return false end
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return false
end
return Bridge.Inventory.RemoveItem(src, "cleaningkit", 1)
end)
RegisterServerEvent('md-drugs:server:getlabkitback', function()
local src = source
for k, v in pairs (lsdTables) do
if v.ownerid == ps.getIdentifier(src) then
table.remove(lsdTables, k)
ps.addItem(src, 'lsdlabkit', 1)
end
if timeOut(src, 'md-drugs:server:getlabkitback') then return end
if lsdTables[src] then
lsdTables[src] = nil
Bridge.Inventory.AddItem(src, 'lsdlabkit', 1)
end
end)
RegisterServerEvent('md-drugs:server:heatliquid', function()
local src = source
if not hasLabKit(src) then return end
if not lsdTables[src] then return end
if timeOut(src, 'md-drugs:server:heatliquid') then return end
if not ps.craftItem(src, lsdRecipes['vial']['heat']) then
verifyHas(src, lsdRecipes['vial']['heat'].take)
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if not craft(src, Recipes.LSD['vial']['heat']) then
return
end
end)
RegisterServerEvent('md-drugs:server:failheating', function()
local src = source
if not hasLabKit(src) then return end
ps.removeItem(src, 'lysergic_acid', 1)
ps.removeItem(src, 'diethylamide', 1)
ps.notify(src, ps.lang('lsd.failed'), "error")
if not lsdTables[src] then return end
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
Bridge.Inventory.RemoveItem(src, 'lysergic_acid', 1)
Bridge.Inventory.RemoveItem(src, 'diethylamide', 1)
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('lsd.failed'), "error")
end)
RegisterServerEvent('md-drugs:server:refinequalityacid', function()
local src = source
if not hasLabKit(src) then return end
if timeOut(src, 'md-drugs:server:refinequalityacid') then return end
if not ps.hasItem(src, 'lsd_one_vial', 1) then return end
if not lsdTables[src] then
return
end
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:refinequalityacid') then
return
end
local removed = Bridge.Inventory.RemoveItem(src, 'lsd_one_vial', 1)
if not removed then
return
end
if Config.TierSystem then
local lsd = tonumber(getRep(src, 'lsd'))
if ps.removeItem(src, 'lsd_one_vial', 1) then
if lsd <= 30 then
ps.addItem(src,'lsd_vial_two', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_two', 1)
elseif lsd >= 31 and lsd <= 60 then
ps.addItem(src,'lsd_vial_three', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_three', 1)
elseif lsd >= 61 and lsd <= 90 then
ps.addItem(src,'lsd_vial_four', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_four', 1)
elseif lsd >= 91 and lsd <= 120 then
ps.addItem(src,'lsd_vial_five', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_five', 1)
else
ps.addItem(src,'lsd_vial_six', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_six', 1)
end
AddRep(src,'lsd')
end
else
local randomchance = math.random(1,100)
if ps.removeItem(src,'lsd_one_vial', 1) then
if randomchance <= 60 then
ps.addItem(src,'lsd_vial_two', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_two', 1)
elseif randomchance >= 61 and randomchance <= 75 then
ps.addItem(src,'lsd_vial_three', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_three', 1)
elseif randomchance >= 76 and randomchance <= 85 then
ps.addItem(src,'lsd_vial_four', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_four', 1)
elseif randomchance >= 86 and randomchance <= 93 then
ps.addItem(src,'lsd_vial_five', 1)
Bridge.Inventory.AddItem(src,'lsd_vial_five', 1)
else
ps.addItem(src,'lsd_vial_six', 1)
end
Bridge.Inventory.AddItem(src,'lsd_vial_six', 1)
end
end
end)
RegisterServerEvent('md-drugs:server:failrefinequality', function()
local src = source
if not hasLabKit(src) then return end
ps.removeItem(src,'lsd_one_vial', 1)
if not lsdTables[src] then return end
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
Bridge.Inventory.RemoveItem(src,'lsd_one_vial', 1)
end)
RegisterServerEvent('md-drugs:server:gettabpaper', function(num)
local src = source
if timeOut(src, 'md-drugs:server:gettabpaper') then return end
if not ps.checkDistance(src, lsdLocations.gettabs[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.LSD.gettabs[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if ps.removeMoney(src, 'cash', prices.tabcost * 10) then
ps.addItem(src,'tab_paper', 10)
if Bridge.Framework.RemoveAccountBalance(src, 'cash', prices.tabcost * 10) then
Bridge.Inventory.AddItem(src,'tab_paper', 10)
else
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
end
end)
RegisterServerEvent('md-drugs:server:getlabkit', function(num)
local src = source
if timeOut(src, 'md-drugs:server:getlabkit') then return end
if ps.hasItem(src,'lsdlabkit', 1) then
if Bridge.Inventory.HasItem(src,'lsdlabkit', 1) then
return
end
if not ps.checkDistance(src, lsdLocations.buyLSDkit[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.LSD.buyLSDkit[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if ps.removeMoney(src, 'cash', prices.lsdlabkitcost) then
ps.addItem(src,'lsdlabkit', 1)
if Bridge.Framework.RemoveAccountBalance(src, 'cash', prices.lsdlabkitcost) then
Bridge.Inventory.AddItem(src,'lsdlabkit', 1)
else
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
end
end)
RegisterServerEvent('md-drugs:server:maketabpaper', function()
local src = source
if timeOut(src, 'md-drugs:server:maketabpaper') then return end
if not hasLabKit(src) then return end
if not ps.hasItem(src,'tab_paper', 1) then return end
if not lsdTables[src] then return end
if not checkDistance(src, lsdTables[src].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
local vialdata = {
{vial = 'lsd_one_vial', sheet = 'smileyfacesheet', log = 'Made A Smiley Face Sheet'},
{vial = 'lsd_vial_two', sheet = 'wildcherrysheet', log = 'Made A Wild Cherry Sheet'},
{vial = 'lsd_vial_three', sheet = 'yinyangsheet', log = 'Made A Yin Yang Sheet'},
{vial = 'lsd_vial_four', sheet = 'pineapplesheet', log = 'Made A Pine Apple Sheet'},
{vial = 'lsd_vial_five', sheet = 'bartsheet', log = 'Made A Cluckin Bell Sheet'},
{vial = 'lsd_vial_six', sheet = 'gratefuldeadsheet', log = 'Made A Maze Sheet'}
{vial = 'lsd_one_vial', give = {smileyfacesheet = 1}, take = {lsd_one_vial = 1, tab_paper = 1}},
{vial = 'lsd_vial_two', give = {wildcherrysheet = 1}, take = {lsd_vial_two = 1, tab_paper = 1}},
{vial = 'lsd_vial_three', give = {yinyangsheet = 1}, take = {lsd_vial_three = 1, tab_paper = 1}},
{vial = 'lsd_vial_four', give = {pineapplesheet = 1}, take = {lsd_vial_four = 1, tab_paper = 1}},
{vial = 'lsd_vial_five', give = {bartsheet = 1}, take = {lsd_vial_five = 1, tab_paper = 1}},
{vial = 'lsd_vial_six', give = {gratefuldeadsheet = 1}, take = {lsd_vial_six = 1, tab_paper = 1}}
}
local vial = 1
for k, v in ipairs (vialdata) do
local check = ps.hasItem(src, v.vial) and ps.hasItem(src, 'tab_paper')
local check = Bridge.Inventory.HasItem(src, v.vial)
if check then
if ps.removeItem(src, v.vial, 1) and ps.removeItem(src, 'tab_paper', 1) then
ps.addItem(src, v.sheet, 1)
vial = k
break
end
end
if not craft(src, vialdata[vial]) then
return
end
end)
@@ -222,21 +253,19 @@ local sheets = {
}
for k, v in pairs (sheets) do
ps.createUseable(v.item, function(source)
Bridge.Framework.RegisterUsableItem(v.item, function(source)
local src = source
local math = math.random(1,10)
if ps.removeItem(src, v.item, 1) then
ps.addItem(src, v.recieve, math)
if Bridge.Inventory.RemoveItem(src, v.item, 1) then
Bridge.Inventory.AddItem(src, v.recieve, math)
end
end)
end
AddEventHandler('playerDropped', function()
local src = source
for k, v in pairs (lsdTables) do
if v.ownerid == ps.getPlayerCitizenId(src) then
table.remove(lsdTables, k)
ps.addItem(src, 'lsdlabkit', 1)
end
if lsdTables[src] then
lsdTables[src] = nil
Bridge.Inventory.AddItem(src, 'lsdlabkit', 1)
end
end)
+13 -11
View File
@@ -1,36 +1,38 @@
local mescalineLocation = {
Recipes, locations = Recipes or {}, locations or {}
Locations.Mescaline = {
DryOutMescaline = { -- where to dry out your mescaline
{loc = vector3(1850.12, 2595.23, 45.67), l = 1.0, w = 1.0, rot = 0.0, gang = ""},
},
}
local mescalineRecipes = {
GlobalState.MDDrugsLocations = Locations
Recipes.Mescaline = {
mescaline = {
dry = {
dried = {take = {cactusbulb = 1}, give = {driedmescaline = 1} }
}
},
}
GlobalState.MDDrugsRecipes = Recipes
ps.registerCallback('md-drugs:server:GetMescalineLocs', function(source)
return mescalineLocation
end)
RegisterNetEvent("md-drugs:server:drymescaline", function(num)
local src = source
if timeOut(src, 'md-drugs:server:drymescaline') then return end
if not ps.checkDistance(src, mescalineLocation.DryOutMescaline[num].loc, 3.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.Mescaline.DryOutMescaline[num].loc, 3.0) then
Bridge.Prints.Warn(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if not ps.craftItem(src, mescalineRecipes.mescaline.dry.dried) then
verifyHas(src, mescalineRecipes.mescaline.dry.dried.take)
if not craft(src, Recipes.Mescaline.mescaline.dry.dried) then
return
end
end)
ps.createUseable("driedmescaline", function(source, item)
Bridge.Framework.RegisterUsableItem("driedmescaline", function(source, item)
local src = source
if ps.removeItem(src, "driedmescaline", 1) then
if Bridge.Inventory.RemoveItem(src, "driedmescaline", 1) then
TriggerClientEvent("md-drugs:client:takemescaline", src)
end
end)
+66 -59
View File
@@ -1,8 +1,7 @@
Recipes, Locations = Recipes or {}, Locations or {}
local onRun = {}
local cool = {}
local methLocs = {
local vehicles = {}
Locations.Meth = {
CookMeth = {
{loc = vector3(1006.09, -3200.59, -38.52), l = 1.0, w = 1.0, rot = 45.0, offset = vec3(4.79, 2.13, -0.41), rotation = vector3(0,0,0.0), gang = ""},
},
@@ -33,113 +32,121 @@ local methLocs = {
{inside = vector3(996.91, -3200.83, -36.39), outside = vector3(-2222.04, 303.99, 174.6), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
}
}
GlobalState.MDDrugsLocations = Locations
local methRecipes = {
Recipes.Meth = {
cook = {
heat = {take = {ephedrine = 1, acetone = 1}, give = {}} --Missing item
heat = {take = {ephedrine = 1, acetone = 1}, give = {}}
},
bag = {
bags = {take = {empty_weed_bag = 5}, give = {methbags = 5} }
}
}
GlobalState.MDDrugsRecipes = Recipes
ps.registerCallback('md-drugs:server:GetMethLocs', function(source)
return methLocs
end)
local function setTimeout(identifier)
if onRun[identifier] then
local function setTimeout(src)
if onRun[src] then
CreateThread(function()
Wait(10 * 60 * 1000)
onRun[identifier] = nil
onRun[src] = nil
end)
end
end
local function coolDown(identifier)
if cool[identifier] then
return false
else
cool[identifier] = true
CreateThread(function()
Wait(3500)
cool[identifier] = nil
end)
return true
end
end
RegisterServerEvent('md-drugs:server:givemethingridients', function()
RegisterServerEvent('md-drugs:server:givemethingridients', function(veh)
local src = source
local amount = math.random(1,5)
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)
else
ps.addItem(src, "acetone", amount)
local vehicle = NetworkGetEntityFromNetworkId(veh)
if vehicles[src] ~= vehicle then
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('meth.noVehicle'), "error")
end
if onRun[ps.getIdentifier(src)] >= 4 then
onRun[ps.getIdentifier(src)] = nil
if not DoesEntityExist(vehicle) and GetEntityModel(vehicle) == GetHashKey('journey') then
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('meth.noVehicle'), "error")
end
if timeOut(src, 'md-drugs:server:givemethingridients') then return end
if not onRun[src] then
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('meth.notOnRun'), "error")
end
onRun[src] = onRun[src] + 1
local chance = math.random(1,2) == 1 and 'ephedrine' or 'acetone'
if onRun[src] == 5 then
DeleteEntity(vehicle)
onRun[src] = nil
vehicles[src] = nil
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('meth.finishedRun'), "success")
end
Bridge.Inventory.AddItem(src, chance, amount)
end)
RegisterServerEvent('md-drugs:server:getmeth', function(num)
local src = source
if timeOut(src, 'md-drugs:server:getmeth') then return end
if not ps.checkDistance(src, methLocs.BagMeth[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.Meth.BagMeth[num].loc, 2.5) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if not ps.craftItem(src, methRecipes.bag.bags) then
verifyHas(src, methRecipes.bag.bags.take)
if not craft(src, Recipes.Meth.bag.bags) then
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
ps.notify(src, ps.lang('Catches.notIn'), "error")
if timeOut(src, 'md-drugs:server:geteph') then return end
if not checkDistance(src, Locations.Meth.MethEph[num].loc, 2.5) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:geteph') then return end
ps.addItem(src, 'ephedrine', 1)
Bridge.Inventory.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
ps.notify(src, ps.lang('Catches.notIn'), "error")
if timeOut(src, 'md-drugs:server:getace') then return end
if not checkDistance(src, Locations.Meth.MethAce[num].loc, 2.5) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:getace') then return end
ps.addItem(src, 'acetone', 1)
Bridge.Inventory.AddItem(src, 'acetone', 1)
end)
ps.registerCallback('md-drugs:server:startcook', function(source, num)
Bridge.Callback.Register('md-drugs:server:startcook', function(source, num)
local src = source
if not ps.checkDistance(src, methLocs.CookMeth[num].loc, 2.5) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
if not checkDistance(src, Locations.Meth.CookMeth[num].loc, 2.5) then
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return false
end
local recipe = ps.craftItem(src, methRecipes.cook.heat)
if not recipe then
verifyHas(src, methRecipes.cook.heat.take)
if not craft(src, Recipes.Meth.cook.heat) then
return false
end
return true
end)
ps.registerCallback('md-drugs:server:registerMeth', function(source)
local identifier = ps.getIdentifier(source)
if not identifier then return false end
if onRun[identifier] then
Bridge.Callback.Register('md-drugs:server:registerMeth', function(source, loc, vehNetId)
local src = source
if onRun[source] then
return false
else
onRun[identifier] = 0
setTimeout(identifier)
if checkDistance(src, Locations.Meth.MethHeist[loc].loc, 10.0) then
local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
if DoesEntityExist(vehicle) and GetEntityModel(vehicle) == GetHashKey('journey') then
vehicles[src] = vehicle
else
return false
end
else
return false
end
onRun[source] = 0
setTimeout(source)
return true
end
end)
+4 -4
View File
@@ -33,10 +33,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")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('oxy.paid', prices.payfortruck), "success")
return true
else
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
return false
end
end)
@@ -46,12 +46,12 @@ RegisterServerEvent('md-drugs:server:giveoxybox', function()
local src = source
if timeOut(src, 'md-drugs:server:giveoxybox') then return end
if not onRoute[src] then
ps.notify(src, ps.lang('oxy.notOn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('oxy.notOn'), "error")
return
end
if not ps.checkDistance(src, oxyLocs.oxylocations[onRoute[src]], 3.5) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
+3 -3
View File
@@ -25,7 +25,7 @@ ps.createUseable('prescription_pad', function(source, item)
{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.canceled'), "error") end
if not data then return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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")
Bridge.Notify.SendNotify(src,Bridge.Language.Locale('pharma.unbottle'), "success")
end
end
end
@@ -58,7 +58,7 @@ RegisterServerEvent('md-drugs:server:fillprescription', function(num)
local src = source
if timeOut(src, 'md-drugs:server:fillprescription') then return end
if not ps.checkDistance(src, pharmaLocations.FillPrescription[num].loc, 3.5) then
return ps.notify(src, ps.lang('Catches.notIn'), "error")
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
end
local pres = {
vicodin_prescription = 'vicodinbottle',
+1 -1
View File
@@ -228,7 +228,7 @@ for k, v in pairs (plantData) do
v.itemGive(src)
end
else
ps.notify(src, ps.lang('Catches.notIn'), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), 'error')
return
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")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('shrooms.cancel'), "error")
return
end
ps.removeItem(src, 'shrooms', 1)
ps.notify(src, ps.lang('shrooms.took'), 'success')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('shrooms.took'), 'success')
end)
+7 -7
View File
@@ -59,17 +59,17 @@ 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('Checks.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Checks.notIn'), "error")
return
end
if not weedStore[name] then
ps.notify(src, ps.lang('weed.itemDoesntExist'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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('Catches.notEnoughMoney'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
end
end)
@@ -79,7 +79,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")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('weed.noDry'), "error")
end
end)
@@ -112,13 +112,13 @@ ps.createUseable("dabrig", function(source, item)
TriggerClientEvent("md-drugs:client:dodabs", src)
end
else
ps.notify(src, ps.lang('weed.needItem', ps.getItemLabel("butanetorch")), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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, ps.lang('weed.needItem', ps.getItemLabel("drycannabis")), 'error') return end
if not ps.hasItem(src, "drycannabis") then Bridge.Notify.SendNotify(src, Bridge.Language.Locale('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
@@ -128,7 +128,7 @@ end)
ps.createUseable("mdwoods", function(source, item)
local src = source
local check = ps.callback('md-drugs:client:uncuff', src, ps.lang('weed.crackBlunt'))
local check = ps.callback('md-drugs:client:uncuff', src, Bridge.Language.Locale('weed.crackBlunt'))
if not check then return end
if ps.removeItem(src, "mdwoods",1 ) then
ps.addItem(src, "bluntwrap", 5)
+3 -3
View File
@@ -38,7 +38,7 @@ RegisterServerEvent('md-drugs:server:buyWhippitItem', function(loc, item,amount)
if not itemShop[item] then return end
local price = itemShop[item] * amount
if not ps.removeMoney(src, 'cash', price, 'whippit-shop') then
return ps.notify(src, ps.lang('Whippit.notEnoughMoney', price), 'error')
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Whippit.notEnoughMoney', price), 'error')
end
ps.addItem(src, item, amount)
end)
@@ -56,11 +56,11 @@ ps.createUseable('cracker', function(source)
end
end
if not balloonItem then
return ps.notify(src, ps.lang('Whippit.needBalloon'), 'error')
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Whippit.needBalloon'), 'error')
end
if not ps.removeItem(src, 'whipped_cream_cannister', 1) then
return ps.notify(src, ps.lang('Whippit.needCanister'), 'error')
return Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Whippit.needCanister'), 'error')
end
if not ps.removeItem(src, balloonItem, 1) then
return ps.warn(src, 'Failed to remove balloon', 'error')
+6 -6
View File
@@ -108,7 +108,7 @@ for k, v in pairs (burners) do
TriggerClientEvent("md-drugs:client:GetLocation", active[ps.getIdentifier(source)].src, active[ps.getIdentifier(source)])
return
end
if ps.getJobTypeCount('leo') < settings.PoliceCount then return ps.notify(source, ps.lang('wholesale.notEnoughCops'), 'error') end
if ps.getJobTypeCount('leo') < settings.PoliceCount then return Bridge.Notify.SendNotify(source, Bridge.Language.Locale('wholesale.notEnoughCops'), 'error') end
if ps.removeItem(source, k, 1) then
local drugs, count = {}, 0
for m, d in pairs (v) do
@@ -120,7 +120,7 @@ for k, v in pairs (burners) do
end
if count < settings.WholesaleMinQuantity then
ps.addItem(source, k, 1)
ps.notify(source, ps.lang('wholesale.not_enough_drugs') or 'Not enough drugs for wholesale deal', 'error')
Bridge.Notify.SendNotify(source, Bridge.Language.Locale('wholesale.not_enough_drugs') or 'Not enough drugs for wholesale deal', 'error')
return
end
active[ps.getIdentifier(source)] = {
@@ -152,7 +152,7 @@ RegisterNetEvent('md-drugs:server:SuccessSale', function()
end
local deal = active[id]
if deal.count < settings.WholesaleMinQuantity then
ps.notify(src, 'Not enough drugs for wholesale deal', 'error')
Bridge.Notify.SendNotify(src, 'Not enough drugs for wholesale deal', 'error')
active[id] = nil
return
end
@@ -167,7 +167,7 @@ RegisterNetEvent('md-drugs:server:SuccessSale', function()
end
end
if need ~= have then
ps.notify(src, 'You are missing some drugs for the deal', 'error')
Bridge.Notify.SendNotify(src, 'You are missing some drugs for the deal', 'error')
active[id] = nil
return
end
@@ -179,12 +179,12 @@ RegisterNetEvent('md-drugs:server:SuccessSale', function()
end
end
if not removed then
ps.notify(src,'Failed to remove drugs for the deal', 'error')
Bridge.Notify.SendNotify(src,'Failed to remove drugs for the deal', 'error')
active[id] = nil
return
end
ps.addMoney(src, 'cash', finalPrice, 'Wholesale sale successful' .. ' $' .. finalPrice)
ps.notify(src, 'Wholesale sale successful' .. ' $' .. finalPrice, 'success')
Bridge.Notify.SendNotify(src, 'Wholesale sale successful' .. ' $' .. finalPrice, 'success')
active[id] = nil
end)
+8 -8
View File
@@ -63,7 +63,7 @@ local activePresses = {}
RegisterServerEvent('md-drugs:server:stealisosafrole', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.isosafrole[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Checks.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:stealisosafrole') then return end
@@ -73,7 +73,7 @@ end)
RegisterServerEvent('md-drugs:server:stealmdp2p', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.mdp2p[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Checks.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:stealmdp2p') then return end
@@ -118,7 +118,7 @@ end)
RegisterServerEvent('md-drugs:server:makextc', function(data)
local src = source
if not activePresses[src] then
ps.notify(src, ps.lang('xtc.noPressOut'), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('xtc.noPressOut'), 'error')
return
end
if timeOut(src, 'md-drugs:server:makextc') then return end
@@ -132,14 +132,14 @@ end)
RegisterServerEvent('md-drugs:server:buypress', function(loc, item)
local src = source
if not ps.checkDistance(src, xtcLocations.xtcpress[loc].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:buypress') then return end
if ps.removeMoney(src,"cash", RecipeList.presses['singlepress'].cash) then
ps.addItem(src, "singlepress", 1)
else
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notEnoughMoney'), "error")
end
end)
@@ -147,7 +147,7 @@ RegisterServerEvent('md-drugs:server:upgradepress', function(data, item)
local src = source
if timeOut(src, 'md-drugs:server:upgradepress') then return end
if not ps.checkDistance(src, xtcLocations.xtcpress[data].loc, 2.0) then
ps.notify(src, ps.lang('Catches.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Catches.notIn'), "error")
return
end
if not ps.craftItem(src, RecipeList.presses[item]) then
@@ -164,7 +164,7 @@ end)
RegisterServerEvent('md-drugs:server:makingrawxtc', function(num)
local src = source
if not ps.checkDistance(src, xtcLocations.rawxtcloc[num].loc, 3.0) then
ps.notify(src, ps.lang('Checks.notIn'), "error")
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('Checks.notIn'), "error")
return
end
if timeOut(src, 'md-drugs:server:makingrawxtc') then return end
@@ -207,7 +207,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(src, ps.lang('xtc.noPills'), 'error')
Bridge.Notify.SendNotify(src, Bridge.Language.Locale('xtc.noPills'), 'error')
end
end)
+2 -2
View File
@@ -10,13 +10,13 @@ if GetResourceState('ps_lib') == 'missing' then
print('^1You can find ps_lib here: https://github.com/Project-Sloth/ps_lib')
return
end
Bridge = exports.community_bridge:Bridge()
ps = exports.ps_lib:init() --Ignore.
ps.loadLangs("en") -- set your language
Config.Fuel = "LegacyFuel" -- type the name of script you use i.e. ps-fuel, cdn-fuel, LegacyFuel, ox_fuel
Config.TierSystem = true -- allows for three tiers of certain drugs ( coke, heroin, crack, lsd)
Config.Emotes = 'rp' -- rp, dp, scully, custom
----------------------------------- TierSystem levels ** ONLY IN USE IF CONFIG.TIERSYTEM IS TRUE
Config.Tier1 = 100 -- amount to hit for level 2
Config.Tier2 = 300 -- amount to hit for level 3