[SAM] Gban Fix New

в хуке отрисовываешь vgui “DButton” и делаешь её воздействие, как: «igs, unbanbuy»
эт я к примеру, возьми gban для ulx от свянова, там будет эта кнопка и её консольная команда, только не забудь, что у них была своя личная донат-система, а не igs

Не вижу смысла делать поддержку(переписать) MySQL, так как если 1 сервер то это полностью бесполезно, лишь создаёт задержки ожидая ответ от базы.
Что значит засорять sv.db ? Она для этого и сделана.
Но раз переводишь все аддоны то должен знать что там нужно поменять :slight_smile:

1ГБ будет весить, если у тебя как минимум 10к забаненных

делаешь топовый ради 10к банов?)

1 лайк

Решением твоей проблемы будет - прочесть первое сообщение в этом топике полностью, а не просто качать без раздумий файл.

Был на работе, не мог ответить. А так - да. Перепрочитай 1. Первое сообщение. Если использовал Gban, то в Бд нужно создать столбец. Но это на случай, если не хочешь терять список забаненых. А так, если баны не важны, можешь удалить таблицу в Бд. код создаст сам новую.

после перезахода бан пропадает

сервер локалка? Не знаю что у тебя там но у меня прекрастно всё работает на выделенном сервере.

просто еще прикол в том что таблицы забаненных нет в бдшке, может знаешь как правильно таблицу создать?

Удали бд таблицу

полностью, всю с самкой?

Нет только бд gban, я с телефона отвечаю так что подробности не жди


так ее вообще нет

Это mysql? Её бд в sv.db в файлах сервера.
Смотри инструкции в закрепе

[script_donate] addons/script_donate/lua/autorun/delete_me.lua:28: attempt to call global 'PL_MONEY' (a nil value)
  1. PayTimer - addons/script_donate/lua/autorun/delete_me.lua:28
   2. v - addons/script_donate/lua/autorun/delete_me.lua:38
    3. hook_Run - lua/includes/modules/hook.lua:96
     4. func - addons/script_admin/lua/sam/modules/gban.lua:602
      5. unknown - lua/includes/extensions/net.lua:38

Все работает, но после перезахода такая ошибка я появляюсь в месте забаненного в профе гражданина

Функция которая переводит число в строку с знаком денег, Отсутствует или не прогруженна в момент вызова, можешь заменить функцию на
t*PayTime…" Рублей".
Более отвечать не смогу Часовой Пояс UTC +8 (это +5 к Мск)

[script_donate] addons/script_donate/lua/autorun/delete_me.lua:54: attempt to perform arithmetic on global 'Рублей' (a nil value)
  1. unknown - addons/script_donate/lua/autorun/delete_me.lua:54
   2. unknown - lua/includes/modules/concommand.lua:54
local PayTime = 1 --Аля конфиг --PayTime сколько нужно заплатить за 1 мин (можно дробь)
local TimeMin = 1 --TimeMin минимальное колл времени для доступа к покупки разбана
local math_floor = math.floor
local timer_TimeLeft = timer.TimeLeft
local function MinMAx(t) --округляем в большую сторону  0.1 -> 1 , 5.0001 -> 6  и т.д
    local f = math_floor(t)
    local n = t - f
    return n > 0 and f + 1 or f
end



if CLIENT then
local function Check_time_UnBanPay(pl) -- возвращает true\false и само время до разбана
    local time = MinMAx(timer_TimeLeft('GBanTime') / 60 or 0)
    return time > TimeMin, time
end
    local GC = Color(200, 55, 13)
    local GC2 = Color(255, 255, 255)
    local GCM=Color(16, 210, 60)
    local function PayTimer()
        local y, t = Check_time_UnBanPay()
        if not y then
            timer.Remove('TimerPayUnBan')
            return
        end

        chat.AddText(GC, GC2, 'Заплати за разбан ',GCM, PL_MONEY(t * Рублей),GC2, ' введи в консоль UnBanPay')
    end

    hook.Add('GBan.BanLocalPlayer', 'TimerPayUnBan', function(ban)
        if not ban then
            timer.Remove('TimerPayUnBan')
            return
        end

        timer.Create('TimerPayUnBan', 30, 0, PayTimer) -- пока игрок забанен , каждые 30 секунд будем писать ему в чат о платном разбане 
        PayTimer() -- так же делаем первый запуск, ну чтоб сразу игрок знал об этом
    end)
else
    local SteamID=FindMetaTable('Player').SteamID
local function Check_time_UnBanPay(pl) -- возвращает true\false и само время до разбана
    local time = MinMAx(timer_TimeLeft('GBanPlayer'..SteamID(pl)) / 60 or 0)
    return time > TimeMin, time
end
    local IsValid = IsValid
    function UnBanPay_Donate(pl)
        if not IsValid(pl) then --защита от ошибок при вводе с консоли.
            return
        end

        local y, t = Check_time_UnBanPay(pl)
        if not y then return IGS.Notify(pl, 'Остаток веремени слишком мал.') end
        local pay = t * Рублей --конечная цена (время*цена)
        local pl_Bal = pl:GetIGSVar("igs_balance") or 0 --Баланс игрока
        if pay > pl_Bal then return IGS.Notify(pl, 'Не достаточно денег.') end
        pl:AddIGSFunds(-pay, 'UnBan price: ' .. pay, function()
            IGS.Notify(pl, "Вы купили разбан за " .. PL_MONEY(pay))
            GBan.RemoveBanPlayer(pl, 'Console',false) -- false пишет {A} снял бан {T}, true пишет Срок бана {T} закончился!.
        end)
    end

    concommand.Add('UnBanPay', UnBanPay_Donate)
end

if SERVER then
    hook.Add("PlayerInitialSpawn", "EnforceGBanOnReconnect", function(ply)
        if timer.Exists("GBanPlayer" .. ply:SteamID()) then
            hook.Call("GBan.BanLocalPlayer", GAMEMODE, ply, true)
        end
    end)
end

Х взахахахазпзп жди как встану за пк отпишу заеб через телефон писать

:hot_face: :hot_face: :hot_face: :hot_face: :hot_face: :hot_face:

local PayTime = 1 --Аля конфиг --PayTime сколько нужно заплатить за 1 мин (можно дробь)
local TimeMin = 1 --TimeMin минимальное колл времени для доступа к покупки разбана
local math_floor = math.floor
local timer_TimeLeft = timer.TimeLeft
local function MinMAx(t) --округляем в большую сторону  0.1 -> 1 , 5.0001 -> 6  и т.д
    local f = math_floor(t)
    local n = t - f
    return n > 0 and f + 1 or f
end



if CLIENT then
local function Check_time_UnBanPay(pl) -- возвращает true\false и само время до разбана
    local time = MinMAx(timer_TimeLeft('GBanTime') / 60 or 0)
    return time > TimeMin, time
end
    local GC = Color(200, 55, 13)
    local GC2 = Color(255, 255, 255)
    local GCM=Color(16, 210, 60)
    local function PayTimer()
        local y, t = Check_time_UnBanPay()
        if not y then
            timer.Remove('TimerPayUnBan')
            return
        end

        chat.AddText(GC, '[GBan] ', GC2, 'Заплати за разбан ',GCM, PL_MONEY(t * PayTime),GC2, ' введи в консоль UnBanPay')
    end

    hook.Add('GBan.BanLocalPlayer', 'TimerPayUnBan', function(ban)
        if not ban then
            timer.Remove('TimerPayUnBan')
            return
        end

        timer.Create('TimerPayUnBan', 30, 0, PayTimer) -- пока игрок забанен , каждые 30 секунд будем писать ему в чат о платном разбане 
        if not PL_MONEY then return end 
        PayTimer() -- так же делаем первый запуск, ну чтоб сразу игрок знал об этом
    end)
else
    local SteamID=FindMetaTable('Player').SteamID
local function Check_time_UnBanPay(pl) -- возвращает true\false и само время до разбана
    local time = MinMAx(timer_TimeLeft('GBanPlayer'..SteamID(pl)) / 60 or 0)
    return time > TimeMin, time
end
    local IsValid = IsValid
    function UnBanPay_Donate(pl)
        if not IsValid(pl) then --защита от ошибок при вводе с консоли.
            return
        end

        local y, t = Check_time_UnBanPay(pl)
        if not y then return IGS.Notify(pl, 'Остаток веремени слишком мал.') end
        local pay = t * PayTime --конечная цена (время*цена)
        local pl_Bal = pl:GetIGSVar("igs_balance") or 0 --Баланс игрока
        if pay > pl_Bal then return IGS.Notify(pl, 'Не достаточно денег.') end
        pl:AddIGSFunds(-pay, 'UnBan price: ' .. pay, function()
            IGS.Notify(pl, "Вы купили разбан за " .. PL_MONEY(pay))
            GBan.RemoveBanPlayer(pl, 'Console',false) -- false пишет {A} снял бан {T}, true пишет Срок бана {T} закончился!.
        end)
    end

    concommand.Add('UnBanPay', UnBanPay_Donate)
end

1 лайк