2025-08-06 02:25:06 -06:00
|
|
|
|
2023-12-07 15:45:48 -08:00
|
|
|
-------------------- stealing ingridients
|
2025-08-06 02:25:06 -06:00
|
|
|
local RecipeList = {
|
|
|
|
|
raw = {
|
|
|
|
|
raw_xtc = {take = {mdp2p = 1, isosafrole = 1}, give = {raw_xtc = 1}}
|
|
|
|
|
},
|
|
|
|
|
singlestack = {
|
2025-10-02 23:03:09 -06:00
|
|
|
white_xtc = {give = {white_xtc = 1}, take = {raw_xtc = 1}},
|
|
|
|
|
red_xtc = {give = {red_xtc = 1}, take = {raw_xtc = 1, loosecoke = 1},},
|
|
|
|
|
orange_xtc = {give = {orange_xtc = 1}, take = {raw_xtc = 1, heroinvial = 1},},
|
|
|
|
|
blue_xtc = {give = {blue_xtc = 1}, take = {raw_xtc = 1, crackrock = 1},},
|
2025-08-06 02:25:06 -06:00
|
|
|
},
|
|
|
|
|
dualstack = {
|
2025-10-02 23:03:09 -06:00
|
|
|
white_xtc2 = {give = {white_xtc2 = 1}, take = {raw_xtc = 1},},
|
|
|
|
|
red_xtc2 = {give = {red_xtc2 = 1}, take = {raw_xtc = 1, loosecoke = 1},},
|
|
|
|
|
orange_xtc2 = {give = {orange_xtc2 = 1}, take = {raw_xtc = 1, heroinvial = 1},},
|
|
|
|
|
blue_xtc2 = {give = {blue_xtc2 = 1}, take = {raw_xtc = 1, crackrock = 1},},
|
2025-08-06 02:25:06 -06:00
|
|
|
},
|
|
|
|
|
triplestack = {
|
2025-10-02 23:03:09 -06:00
|
|
|
white_xtc3 = {give = {white_xtc3 = 1}, take = {raw_xtc = 1},},
|
|
|
|
|
red_xtc3 = {give = {red_xtc3 = 1}, take = {raw_xtc = 1, loosecoke = 1},},
|
|
|
|
|
orange_xtc3 = {give = {orange_xtc3 = 1}, take = {raw_xtc = 1, heroinvial = 1},},
|
|
|
|
|
blue_xtc3 = {give = {blue_xtc3 = 1}, take = {raw_xtc = 1, crackrock = 1},},
|
2025-08-06 02:25:06 -06:00
|
|
|
},
|
|
|
|
|
quadstack = {
|
2025-10-02 23:03:09 -06:00
|
|
|
white_xtc4 = {give = {white_xtc4 = 1}, take = {raw_xtc = 1},},
|
|
|
|
|
red_xtc4 = {give = {red_xtc4 = 1}, take = {raw_xtc = 1, loosecoke = 1},},
|
|
|
|
|
orange_xtc4 = {give = {orange_xtc4 = 1}, take = {raw_xtc = 1, heroinvial = 1},},
|
|
|
|
|
blue_xtc4 = {give = {blue_xtc4 = 1}, take = {raw_xtc = 1, crackrock = 1},},
|
2025-08-06 02:25:06 -06:00
|
|
|
},
|
|
|
|
|
presses = {
|
|
|
|
|
singlepress = {cash = 10000},
|
2025-10-02 23:03:09 -06:00
|
|
|
dualpress = {give = {dualpress = 1}, take = {white_xtc = 20, blue_xtc = 20, red_xtc = 20, orange_xtc = 20, singlepress = 1}},
|
|
|
|
|
triplepress = {give = {triplepress = 1}, take = {white_xtc2 = 50, blue_xtc2 = 50, red_xtc2 = 50, orange_xtc2 = 50, dualpress = 1}},
|
|
|
|
|
quadpress = {give = {quadpress = 1}, take = {white_xtc3 = 50, blue_xtc3 = 50, red_xtc3 = 50, orange_xtc3 = 50, triplepress = 1}},
|
2025-08-06 02:25:06 -06:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local xtcLocations = {
|
|
|
|
|
isosafrole = { -- where to steal isosafrole
|
|
|
|
|
{loc = vector3(844.39, -902.92, 25.42), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
|
|
|
|
|
},
|
|
|
|
|
mdp2p = { -- where to steal mdp2p
|
|
|
|
|
{loc = vector3(844.4, -898.79, 25.23), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
|
|
|
|
|
},
|
|
|
|
|
rawxtcloc = { -- where to combine the 2 ingridents to make raw xtc
|
|
|
|
|
{loc = vector3(844.71, -910.33, 25.37), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
|
|
|
|
|
},
|
|
|
|
|
xtcpress = {
|
|
|
|
|
{ped = 'g_f_y_families_01',loc = vector4(845.82, -884.79, 25.18, 180.0), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
|
|
|
|
|
},
|
|
|
|
|
stamp = { -- where to stamp pills
|
|
|
|
|
{loc = vector3(844.71, -900.56, 25.43), l = 1.0, w = 1.0, rot = 45.0, gang = ""},
|
|
|
|
|
},
|
|
|
|
|
}
|
2025-08-09 03:10:00 -06:00
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
ps.registerCallback('md-drugs:server:GetXtcLocs', function(source)
|
|
|
|
|
return xtcLocations
|
|
|
|
|
end)
|
2025-08-09 03:10:00 -06:00
|
|
|
|
2024-11-22 01:35:25 -08:00
|
|
|
local activePresses = {}
|
2025-08-06 02:25:06 -06:00
|
|
|
|
2024-05-02 18:34:49 -07:00
|
|
|
RegisterServerEvent('md-drugs:server:stealisosafrole', function(num)
|
|
|
|
|
local src = source
|
2025-08-09 03:10:00 -06:00
|
|
|
if not ps.checkDistance(src, xtcLocations.isosafrole[num].loc, 3.0) then
|
|
|
|
|
ps.notify(src, ps.lang('Checks.notIn'), "error")
|
|
|
|
|
return
|
|
|
|
|
end
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:stealisosafrole') then return end
|
2025-08-09 03:10:00 -06:00
|
|
|
ps.addItem(src, "isosafrole", 1)
|
2024-05-02 18:34:49 -07:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
RegisterServerEvent('md-drugs:server:stealmdp2p', function(num)
|
|
|
|
|
local src = source
|
2025-08-09 03:10:00 -06:00
|
|
|
if not ps.checkDistance(src, xtcLocations.mdp2p[num].loc, 3.0) then
|
|
|
|
|
ps.notify(src, ps.lang('Checks.notIn'), "error")
|
|
|
|
|
return
|
|
|
|
|
end
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:stealmdp2p') then return end
|
2025-08-06 02:25:06 -06:00
|
|
|
ps.addItem(src, "mdp2p", 1)
|
2024-05-02 18:34:49 -07:00
|
|
|
end)
|
2024-09-24 15:07:41 -07:00
|
|
|
|
2024-05-02 18:34:49 -07:00
|
|
|
local presses = {
|
2025-08-06 02:25:06 -06:00
|
|
|
{item = 'singlepress', data = 'singlestack', recipes = RecipeList.singlestack},
|
|
|
|
|
{item = 'dualpress', data = 'dualstack', recipes = RecipeList.dualstack},
|
|
|
|
|
{item = 'triplepress', data = 'triplestack', recipes = RecipeList.triplestack},
|
|
|
|
|
{item = 'quadpress', data = 'quadstack', recipes = RecipeList.quadstack},
|
2024-05-02 18:34:49 -07:00
|
|
|
}
|
2023-12-07 15:45:48 -08:00
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
for k, v in pairs (presses) do
|
|
|
|
|
ps.createUseable(v.item, function(source, item)
|
2024-11-22 01:35:25 -08:00
|
|
|
local src = source
|
2025-09-11 21:41:40 -06:00
|
|
|
local location = ps.callback('md-drugs:client:setpress', src, v)
|
|
|
|
|
if location then
|
2025-08-06 02:25:06 -06:00
|
|
|
if ps.removeItem(src, v.item, 1) then
|
2025-10-02 23:03:09 -06:00
|
|
|
activePresses[src] = {
|
2025-08-06 02:25:06 -06:00
|
|
|
press = v.data,
|
|
|
|
|
get = v.item,
|
|
|
|
|
owner = ps.getPlayerName(src),
|
|
|
|
|
ownerid = ps.getIdentifier(src),
|
|
|
|
|
src = src,
|
2025-09-11 21:41:40 -06:00
|
|
|
loc = location
|
2025-08-06 02:25:06 -06:00
|
|
|
}
|
2024-11-22 01:35:25 -08:00
|
|
|
end
|
|
|
|
|
end
|
2025-08-06 02:25:06 -06:00
|
|
|
end)
|
2024-11-22 01:35:25 -08:00
|
|
|
end
|
2023-12-07 15:45:48 -08:00
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
RegisterServerEvent('md-drugs:server:getpressback', function()
|
|
|
|
|
local src = source
|
2025-10-02 23:03:09 -06:00
|
|
|
if not activePresses[src] then return end
|
|
|
|
|
local press = activePresses[src]
|
2025-08-16 23:43:20 -07:00
|
|
|
if not ps.checkDistance(src, press.loc, 2.0) then return end
|
2025-08-06 02:25:06 -06:00
|
|
|
ps.addItem(src, press.get, 1)
|
2025-10-02 23:03:09 -06:00
|
|
|
activePresses[src] = nil
|
2025-08-06 02:25:06 -06:00
|
|
|
end)
|
|
|
|
|
|
2024-05-02 18:34:49 -07:00
|
|
|
RegisterServerEvent('md-drugs:server:makextc', function(data)
|
2025-08-06 02:25:06 -06:00
|
|
|
local src = source
|
2025-10-02 23:03:09 -06:00
|
|
|
if not activePresses[src] then
|
2025-08-09 03:10:00 -06:00
|
|
|
ps.notify(src, ps.lang('xtc.noPressOut'), 'error')
|
2025-08-06 02:25:06 -06:00
|
|
|
return
|
|
|
|
|
end
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:makextc') then return end
|
2025-10-02 23:03:09 -06:00
|
|
|
if not ps.checkDistance(src, activePresses[src].loc, 2.0) then return end
|
|
|
|
|
if not ps.craftItem(src, RecipeList[activePresses[src].press][data]) then
|
|
|
|
|
verifyHas(src, RecipeList[activePresses[src].press][data].take)
|
2025-09-11 21:41:40 -06:00
|
|
|
return
|
|
|
|
|
end
|
2023-12-07 15:45:48 -08:00
|
|
|
end)
|
|
|
|
|
|
2025-08-16 23:43:20 -07:00
|
|
|
RegisterServerEvent('md-drugs:server:buypress', function(loc, item)
|
2024-05-02 18:34:49 -07:00
|
|
|
local src = source
|
2025-08-16 23:43:20 -07:00
|
|
|
if not ps.checkDistance(src, xtcLocations.xtcpress[loc].loc, 2.0) then
|
|
|
|
|
ps.notify(src, ps.lang('Catches.notIn'), "error")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if timeOut(src, 'md-drugs:server:buypress') then return end
|
2025-08-06 02:25:06 -06:00
|
|
|
if ps.removeMoney(src,"cash", RecipeList.presses['singlepress'].cash) then
|
|
|
|
|
ps.addItem(src, "singlepress", 1)
|
2024-05-02 18:34:49 -07:00
|
|
|
else
|
2025-08-09 03:10:00 -06:00
|
|
|
ps.notify(src, ps.lang('Catches.notEnoughMoney'), "error")
|
2023-12-07 15:45:48 -08:00
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
RegisterServerEvent('md-drugs:server:upgradepress', function(data)
|
|
|
|
|
local src = source
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:upgradepress') then return end
|
2025-08-06 02:25:06 -06:00
|
|
|
if not ps.checkDistance(src, xtcLocations.xtcpress[data].loc, 2.0) then
|
2025-08-09 03:10:00 -06:00
|
|
|
ps.notify(src, ps.lang('Catches.notIn'), "error")
|
2025-08-06 02:25:06 -06:00
|
|
|
return
|
|
|
|
|
end
|
2025-09-11 21:41:40 -06:00
|
|
|
if not ps.craftItem(src, RecipeList.presses[data]) then
|
|
|
|
|
verifyHas(src, RecipeList.presses[data].take)
|
|
|
|
|
return
|
|
|
|
|
end
|
2025-08-06 02:25:06 -06:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
ps.registerCallback('md-drugs:server:getpressrecipes', function(source)
|
|
|
|
|
return RecipeList.presses
|
|
|
|
|
end)
|
2025-09-11 21:41:40 -06:00
|
|
|
|
2024-05-02 18:34:49 -07:00
|
|
|
------------- making powder
|
|
|
|
|
RegisterServerEvent('md-drugs:server:makingrawxtc', function(num)
|
2024-11-11 20:22:48 -08:00
|
|
|
local src = source
|
2025-08-09 03:10:00 -06:00
|
|
|
if not ps.checkDistance(src, xtcLocations.rawxtcloc[num].loc, 3.0) then
|
|
|
|
|
ps.notify(src, ps.lang('Checks.notIn'), "error")
|
|
|
|
|
return
|
|
|
|
|
end
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:makingrawxtc') then return end
|
2025-09-11 21:41:40 -06:00
|
|
|
if not ps.craftItem(src, RecipeList.raw.raw_xtc) then
|
|
|
|
|
verifyHas(src, RecipeList.raw.raw_xtc.take)
|
|
|
|
|
return
|
|
|
|
|
end
|
2023-12-07 15:45:48 -08:00
|
|
|
end)
|
|
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
local function getColor(color)
|
|
|
|
|
local colors = {
|
|
|
|
|
white = {'white_playboys', 'white_aliens', 'white_pl', 'white_trolls', 'white_cats'},
|
|
|
|
|
red = {'red_playboys', 'red_aliens', 'red_pl', 'red_trolls', 'red_cats'},
|
|
|
|
|
orange = {'orange_playboys', 'orange_aliens', 'orange_pl', 'orange_trolls', 'orange_cats'},
|
|
|
|
|
blue = {'blue_playboys', 'blue_aliens', 'blue_pl', 'blue_trolls', 'blue_cats'}
|
|
|
|
|
}
|
|
|
|
|
if colors[color] then
|
|
|
|
|
return colors[color][math.random(#colors[color])]
|
|
|
|
|
end
|
2025-08-09 03:10:00 -06:00
|
|
|
return nil
|
2025-08-06 02:25:06 -06:00
|
|
|
end
|
2023-12-07 15:45:48 -08:00
|
|
|
|
2025-08-06 02:25:06 -06:00
|
|
|
RegisterServerEvent('md-drugs:server:stamp', function(num, color)
|
|
|
|
|
local src = source
|
|
|
|
|
if not ps.checkDistance(src, xtcLocations.stamp[num].loc, 3.0) then return end
|
2025-08-16 23:43:20 -07:00
|
|
|
if timeOut(src, 'md-drugs:server:stamp') then return end
|
2025-08-06 02:25:06 -06:00
|
|
|
local item = getColor(color)
|
|
|
|
|
local colors = {
|
|
|
|
|
white = 'white_xtc',
|
|
|
|
|
red = 'red_xtc',
|
|
|
|
|
orange = 'orange_xtc',
|
|
|
|
|
blue = 'blue_xtc'
|
|
|
|
|
}
|
|
|
|
|
if ps.removeItem(src, colors[color], 1) then
|
|
|
|
|
ps.addItem(src, item, 1)
|
|
|
|
|
elseif ps.removeItem(src, colors[color].."2", 1) then
|
|
|
|
|
ps.addItem(src, item..'2', 1)
|
|
|
|
|
elseif ps.removeItem(src, colors[color].."3", 1) then
|
|
|
|
|
ps.addItem(src, item..'3', 1)
|
|
|
|
|
elseif ps.removeItem(src, colors[color].."4", 1) then
|
|
|
|
|
ps.addItem(src, item..'4', 1)
|
|
|
|
|
else
|
2025-08-09 03:10:00 -06:00
|
|
|
ps.notify(src, ps.lang('xtc.noPills'), 'error')
|
2025-08-06 02:25:06 -06:00
|
|
|
end
|
2024-11-22 12:26:27 -08:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
AddEventHandler('playerDropped', function()
|
|
|
|
|
local src = source
|
2025-10-02 23:03:09 -06:00
|
|
|
if activePresses[src] then
|
|
|
|
|
ps.addItem(src, activePresses[src].get, 1)
|
|
|
|
|
activePresses[src] = nil
|
2024-11-22 12:26:27 -08:00
|
|
|
end
|
2024-05-02 18:34:49 -07:00
|
|
|
end)
|