[SAM] Команда выдачи донат валюты

Простенький модуль на выдавание донат валюты через SAM Admin Mo

изображение

-- Установить по пути
-- garrysmod/addons/igs-modification/lua/sam/modules
if SAM_LOADED then return end

local sam, command = sam, sam.command

print("[SAM] IGS модуль загружен!")

local limits_by_rank = {
    ["superadmin"] = 0, -- ЕСЛИ НОЛЬ ТО БЕСКОНЕЧНО!!!
    ["D-Creator"] = 100,
}

local block_data_file = "sam_igs_block_data.txt"
local block_duration = 30 * 24 * 60 * 60

local cooldown_data = {}

local function save_block_data()
    if file.Exists(block_data_file, "DATA") then
        file.Delete(block_data_file)
    end
    file.Write(block_data_file, util.TableToJSON(cooldown_data))
end

local function load_block_data()
    if file.Exists(block_data_file, "DATA") then
        local json_data = file.Read(block_data_file, "DATA")
        cooldown_data = util.JSONToTable(json_data) or {}
    end
end

load_block_data()

local function is_player_blocked(ply)
    local steamID = ply:SteamID()
    local block_info = cooldown_data[steamID]

    if block_info then
        local time_remaining = block_info.block_until - os.time()

        if time_remaining > 0 then
            return true, time_remaining
        end
    end

    return false
end

local function block_player(ply)
    local steamID = ply:SteamID()
    cooldown_data[steamID] = {
        block_until = os.time() + block_duration
    }
    save_block_data()
end

sam.command.set_category("IGS")

command.new("addfunds")
    :SetPermission("igs_addfunds", "superadmin")
    :Help("Выдать игроку донат валюту.")

    :AddArg("player", {optional = true, default = "^"})
    :AddArg("number", {default = 100, hint = "Сколько валюты дать."})

    :OnExecute(function(ply, targets, don_amount)
        local ply_rank = ply:GetUserGroup()
        local max_limit = limits_by_rank[ply_rank]

        local is_blocked, time_remaining = is_player_blocked(ply)
        if is_blocked then
            ply:ChatPrint("Вы исчерпали свой лимит на выдачу валюты. Попробуйте снова через " .. math.ceil(time_remaining / 86400) .. " дней.")
            return
        end

        if not max_limit then
            ply:ChatPrint("Для вашей привилегии не установлен лимит на выдачу валюты.")
            return
        end
        
        if max_limit > 0 then
            if don_amount > max_limit then
                ply:ChatPrint("Ваш лимит на выдачу валюты: " .. max_limit .. ". Вы не можете выдать больше.")
                return
            end
       	end

        for i = 1, #targets do
            local target = targets[i]
            target:AddIGSFunds(don_amount, "Выдача донат валюты через SAM.")
            
            sam.player.send_message(nil, "{A} дал {T} {V} донат валюты.", {
                A = ply, T = targets, V = don_amount
            })

            target:ChatPrint("Вам выдали " .. don_amount .. " донат валюты!")
        end
        
        if max_limit == 0 then
            return
        else
            block_player(ply)
            ply:ChatPrint("Вы исчерпали свой лимит на выдачу валюты и теперь не можете использовать эту команду в течении ".. math.ceil(time_remaining / 86400) .. " дней.")
        end
    end)
:End()
1 лайк

Залил сюда кодом, а не файлом. Все же кода не очень много, хотя для такой простой задачи получилось прям как-то очень много

П.С. Тему переименовал

  • Как выдать донат-валюту через SAM
  • [SAM] Команда выдачи донат валюты
1 лайк