После каждого рестарта сервера будет определяться N случайных предметов, которые получат скидку. Делайте рестарт каждый день и набор будет меняться ежедневно
Установка:
Создайте файл addons/igs-modification/lua/igs/modules/randomdiscounts/_main.lua с следующим содержимым и перезапустите сервер:
local MAX_DISCOUNTS = 3 -- Количество товаров, которые получат скидку
local PERCENT_DISCOUNT = .15 -- Процент скидки. Здесь 15%
local function applyDiscounts(items_ids)
for _,item_id in ipairs(items_ids) do
local ITEM = IGS.GetItem(item_id)
if not ITEM.null then
local old_price = ITEM.price
ITEM:SetPrice(old_price * (1 - PERCENT_DISCOUNT))
ITEM:SetDiscountedFrom(old_price)
end
end
end
if SERVER then
util.AddNetworkString("IGS.RegularDiscounts")
local items_ids = {}
for _ = 1, MAX_DISCOUNTS do
local ITEM = table.Random(IGS.ITEMS.STORED)
if not ITEM.null and not table.HasValue(items_ids, ITEM.id) then
table.insert(items_ids, ITEM.id)
end
end
applyDiscounts(items_ids)
SetGlobalString("igs_discounts", util.TableToJSON(items_ids))
else
hook.Add("IGS.Loaded", "fetch_discounts", function()
local items_ids = GetGlobalString("igs_discounts")
items_ids = util.JSONToTable(items_ids)
applyDiscounts(items_ids)
end)
end
Просто для заметки. Более полная версия. Больше кода, но немного более оптимизирована (хотя в этом случае это не оправдано. Просто хочу где-то сохранить)
Спойлер
local MAX_DISCOUNTS = 3 -- Максимальное колмчество товаров, каким будет прописывать скидку
local PERC_DISCOUNT = math.random(5, 15) -- Число в процентах, какой будет скидка. В нашем случае - каждый рестарт случайное от 5 до 15
if SERVER then
util.AddNetworkString("IGS.PostDiscount")
local DISCOUNTS = {} -- Таблица, в которой хранятся значения на сервере
local ITEMS_COUNT = IGS.ITEMS.count -- Количество товаров в магазине
local DISCOUNT_MULT = (100 - PERC_DISCOUNT) * .01 -- Множитель цены ( число от 0 до 1 )
for i = 1, MAX_DISCOUNTS do
local item_id = math.random(ITEMS_COUNT)
local item = IGS.ITEMS.STORED[item_id]
local price = item.price
local new_price = math.Round(price * DISCOUNT_MULT)
item:SetPrice(new_price)
item:SetDiscountedFrom(price)
DISCOUNTS[item_id] = new_price
end
net.Receive("IGS.PostDiscount", function(_, ply)
net.Start("IGS.PostDiscount")
net.WriteTable(DISCOUNTS)
net.Send(ply)
end)
else
local function AssignDiscounts(discounts)
for id, price in pairs(discounts) do
local item = IGS.ITEMS.STORED[id]
local old_price = item.price
item:SetPrice(price)
item:SetDiscountedFrom(old_price)
end
end
net.Receive("IGS.PostDiscount", function()
local discounts = net.ReadTable()
AssignDiscounts(discounts)
end)
hook.Add("IGS.Loaded", "IGS.FetchDiscount", function() -- IGS загрузился. Запрашиваем скидки
net.Start("IGS.PostDiscount")
net.SendToServer()
end)
end