dobrograd-13-06-2022/garrysmod/addons/_config/lua/config/sweets-items.lua

332 lines
13 KiB
Lua
Raw Normal View History

2023-11-16 15:01:19 +05:00
local function attItem(mdl)
local attData = simfphys.getAttByModel(mdl)
return {'car_att', {
name = attData.name,
desc = attData.desc,
icon = attData.icon,
mass = attData.mass,
volume = attData.volume,
colorable = not attData.noPaint or nil,
attmdl = attData.mdl,
model = attData.mdl,
skin = attData.skin,
scale = attData.scale,
}}
end
local function sendItem(item, sentNo, sentYes)
return function(ply, amount)
local data
if isstring(item) then data = {{ item, amount }}
elseif istable(item) then
data = octolib.array.series(item, amount)
end
local sent, msg = halloween.sendItems(ply, data)
if not sent then
ply:Notify('warning', msg or sentNo)
else ply:Notify('hint', sentYes) end
return sent
end
end
local function icon(name)
return 'octoteam/icons-halloween/' .. name .. '.png'
end
halloween.registerItem('mystery_sweet', {
name = 'Загадочная конфета',
icon = icon('mystery_sweet'),
desc = 'Конфета, обладающая случайным вкусом. Арбуз? Яблоко? А может, рвота или ушная сера? Попробуй и узнаешь!',
price = 100,
deliver = sendItem('h20_sweets', 'Не удалось отправить загадочные конфеты', 'Загадочные конфеты отправлены по почте и придут через пару минут'),
})
halloween.registerItem('guitar', {
name = 'Гитара',
icon = icon('guitar'),
desc = 'Позволяет скрасить свое одиночество или задать атмосферу в компании',
price = 300,
deliver = sendItem({'weapon', {
name = L.guitar,
icon = octolib.icons.color('guitar'),
model = 'models/custom/guitar/m_d_45.mdl',
wepclass = 'guitar',
mass = 2,
volume = 5,
ammoadd = 0,
clip1 = 0,
clip2 = 0,
}}, 'Не удалось отправить гитару', 'Гитара отправлена по почте и придет через пару минут'),
})
local masks = { 'cleaver', 'monkey', 'zombie', 'hockey', 'gingerbread', 'top_hat', 'doctor', 'pig', 'bear', 'hoff_widesmile', 'hoff_tears', 'hoff_tinysmile', 'hoff_dude', 'hoff_killme', 'hoff_helpme' }
for _, v in ipairs(masks) do
local mask = CFG.masks[v]
local name = mask.name
if mask.desc then name = name .. ' ' .. mask.desc end
local item = {
name = mask.name,
icon = mask.icon,
desc = mask.desc,
mask = v,
}
halloween.registerItem('mask_' .. v, {
name = name,
icon = icon('mask_' .. v),
skin = mask.skin,
desc = 'Стильно, модно, молодежно. Можно надеть на голову',
price = 3000,
deliver = sendItem({'h_mask', item}, 'Не удалось отправить маску', 'Маска отправлена по почте и придет через пару минут'),
})
halloween.registerCaseItem('mask_' .. v, {
name = name,
icon = icon('mask_' .. v),
maxMass = 0.3,
maxVolume = 0.5,
give = function(_, cont)
cont:AddItem('h_mask', item)
end,
})
end
halloween.registerItem('theme', {
name = 'Очки с оранжевыми линзами',
icon = icon('theme'),
desc = 'Понравилось хэллоуинское настроение? Ты можешь продлить его, захватив с собой эти очки с оранжевыми линзами!\n\n- Хэллоуинская тема. Ее можно будет включить в любой момент в настройках',
price = 5000,
max = 1,
deliver = function(ply)
ply:SetDBVar('halloweenTheme', true)
ply:SetLocalVar('halloweenTheme', true)
ply:ConCommand('octogui_reloadf4')
ply:Notify('hint', 'Хэллоуинскую тему можно активировать в разделе "Другое" в настройках')
return true
end,
})
halloween.registerItem('jar', {
name = 'Банка с глазами',
icon = icon('jar'),
desc = 'Старая банка с устрашающими глазами. Будет хорошо смотреться на приборной панели твоего автомобиля!',
price = 6000,
deliver = function(ply, amount)
local data = octolib.array.series(attItem('models/props/spookington/eyejar.mdl'), amount)
local sent, msg = halloween.sendItems(ply, data)
if not sent then
ply:Notify('warning', msg or 'Не удалось отправить банку с глазами')
else ply:Notify('hint', 'Банка с глазами отправлена по почте и придет через пару минут') end
return sent
end,
})
halloween.registerItem('spider', {
name = 'Паучок',
icon = icon('spider'),
desc = 'Страшный, волосатый, но отчасти милый хэллоуинский паучок. Представляешь, если он повиснет в салоне твоего автомобиля? Это будет просто безумно круто!',
price = 6000,
deliver = function(ply, amount)
local data = octolib.array.series(attItem('models/props/spookington/spider_toy.mdl'), amount)
local sent, msg = halloween.sendItems(ply, data)
if not sent then
ply:Notify('warning', msg or 'Не удалось отправить паучка')
else ply:Notify('hint', 'Паучок отправлен по почте и придет через пару минут') end
return sent
end,
})
halloween.registerItem('sedan', {
name = 'Седан',
icon = icon('sedan'),
desc = 'Подарочный сертификат автосалона на эксклюзивный черный седан!\n\n- Автомобиль будет доставлен в гараж\n- При продаже авто деньги не начислятся',
price = 8500,
deliverAsync = function(ply, amount, callback)
octolib.func.parallel(
octolib.array.series(function(res)
carDealer.ownVeh(ply:SteamID(), 'halloween_sedan', function(_, plate)
res(plate)
end)
end, amount)
):Then(function(plates)
callback(true)
if not IsValid(ply) then return end
if amount == 1 then
ply:Notify('hint', 'Автомобиль с регистрационным номером ' .. plates[1] .. ' доставлен в твой гараж')
elseif amount == 2 then
ply:Notify('hint', 'Автомобили с регистрационными номерами ' .. plates[1] .. ' и ' .. plates[2] .. ' доставлены в твой гараж')
else
local last = plates[#plates]
table.remove(plates)
ply:Notify('hint', 'Автомобили с регистрационными номерами ' .. string.Implode(', ', plates) .. ' и ' .. last .. ' доставлены в твой гараж')
end
end):Catch(function(err)
ErrorNoHalt(err)
callback(false)
end)
end,
})
halloween.registerItem('pickup', {
name = 'Пикап',
icon = icon('pickup'),
desc = 'Подарочный сертификат автосалона на эксклюзивный оранжевый пикап!\n\n- Автомобиль будет доставлен в гараж\n- При продаже авто деньги не начислятся',
price = 8500,
deliverAsync = function(ply, amount, callback)
octolib.func.parallel(
octolib.array.series(function(res)
carDealer.ownVeh(ply:SteamID(), 'halloween_pickup', function(_, plate)
res(plate)
end)
end, amount)
):Then(function(plates)
callback(true)
if not IsValid(ply) then return end
if amount == 1 then
ply:Notify('hint', 'Автомобиль с регистрационным номером ' .. plates[1] .. ' доставлен в твой гараж')
elseif amount == 2 then
ply:Notify('hint', 'Автомобили с регистрационными номерами ' .. plates[1] .. ' и ' .. plates[2] .. ' доставлены в твой гараж')
else
local last = plates[#plates]
table.remove(plates)
ply:Notify('hint', 'Автомобили с регистрационными номерами ' .. string.Implode(', ', plates) .. ' и ' .. last .. ' доставлены в твой гараж')
end
end):Catch(function(err)
ErrorNoHalt(err)
callback(false)
end)
end,
})
-- CASE ITEMS
halloween.registerCaseItem('sweets_low', {
name = 'Загадочные конфеты',
icon = icon('mystery_sweet'),
maxMass = 0.03,
maxVolume = 0.03,
give = function(ply, cont)
local sweets = math.random(3)
cont:AddItem('h20_sweets', sweets)
ply:Notify('hint', 'Несколько загадочных конфет добавлено тебе в инвентарь')
end,
})
halloween.registerCaseItem('money_low', {
name = 'Потрепанный кошель',
icon = icon('money_low'),
maxMass = 0.04,
maxVolume = 0.04,
give = function(ply, cont)
local money = math.random(4000)
cont:AddItem('money', money)
ply:Notify('hint', 'Как неожиданно и приятно... ' .. DarkRP.formatMoney(money) .. ' добавлено тебе в инвентарь')
end,
})
halloween.registerCaseItem('money_large', {
name = 'Мешок с монетками',
icon = icon('money_large'),
maxMass = 0.25,
maxVolume = 0.25,
give = function(ply, cont)
local money = math.random(4000, 25000)
cont:AddItem('money', money)
ply:Notify('hint', 'Вот так везение... ' .. DarkRP.formatMoney(money) .. ' добавлено тебе в инвентарь')
end,
})
halloween.registerCaseItem('sweets_large', {
name = 'Горсть конфет',
icon = icon('mystery_sweet'),
maxMass = 0.13,
maxVolume = 0.13,
give = function(ply, cont)
local sweets = math.random(3, 13)
cont:AddItem('h20_sweets', sweets)
ply:Notify('hint', sweets .. octolib.string.formatCount(sweets, ' загадочная конфета добавлена', ' загадочных конфеты добавлены', ' загадочных конфет добавлено') .. ' тебе в инвентарь')
end,
})
halloween.registerCaseItem('candy', {
name = 'Испорченный леденец',
icon = icon('candy'),
maxMass = 0.1,
maxVolume = 0.05,
give = function(_, cont)
cont:AddItem('souvenir', {
name = 'Испорченный леденец',
icon = octolib.icons.color('food_candy2'),
model = 'models/griim/foodpack/candycane.mdl',
desc = 'Старый леденец. Присмотревшись к нему можно увидеть паутину. Лучше не пытаться его съесть, а как сувенир - очень даже неплохая вещица!',
})
end,
})
halloween.registerCaseItem('booze', {
name = 'Хэллоуинская настойка',
icon = icon('booze'),
maxMass = 1.5,
maxVolume = 1,
give = function(_, cont)
cont:AddItem('drug_booze2', {
name = 'Хэллоуинская настойка',
icon = octolib.icons.color('bottle_wine'),
})
end,
})
halloween.registerCaseItem('os_dobro', {
name = 'Карта клуба почетных жителей "Добродей"',
icon = icon('os_dobro'),
give = function(ply)
ply:osGiveItem('jobs_1m')
ply:Notify('hint', 'Ты получил плюшку "Добродей" на месяц! Активировать ее можно в F4 -> Плюшки')
end,
})
halloween.registerCaseItem('att_pumpkin', {
name = 'Тыква-лампа для автомобиля',
icon = icon('pumpkin'),
maxMass = 1,
maxVolume = 3,
give = function(_, cont)
cont:AddItem(unpack(attItem('models/halloween2015/pumbkin_n_f01.mdl')))
end,
})
halloween.registerCaseItem('att_spider', {
name = 'Паучок для автомобиля',
icon = icon('spider'),
maxMass = 0.7,
maxVolume = 1,
give = function(_, cont)
cont:AddItem(unpack(attItem('models/props/spookington/spider_toy.mdl')))
end,
})
-- CASES
halloween.registerCase('gift', {
name = 'Подарок от Джека',
icon = icon('gift'),
desc = 'Я кладу какой-то предмет в коробочку и отправляю тебе по почте. Что за предмет - узнаешь, когда откроешь ;)',
price = 750,
items = {
{31, 'sweets_low'},
{20, 'booze'},
{20, 'candy'},
{13, 'sweets_large'},
{9, 'money_low'},
{5, 'money_large'},
{2, 'os_dobro'},
{1.5, 'att_pumpkin'},
{1.5, 'att_spider'},
},
})
halloween.registerCase('mask', {
name = 'Какая-то маска',
icon = icon('case-masks'),
desc = 'Теряешься в моем огромном ассортименте масок? Я могу помочь выбрать! Никаких предпочтений по маскам у меня нет, поэтому я честно выберу случайную маску. Никакого мошенничества!',
price = 3000,
items = octolib.table.mapSequential(masks, function(v) return {1, 'mask_' .. v} end),
})