Instantly share code, notes, and snippets.

Embed
What would you like to do?
Пример конфигурационного файла автодоната для опытных пользователей. Здесь учтены практически все возможные типы услуг, которые можно продавать. Этот конфиг используется на проекте TRIGON.IM. Вид главной страницы автодоната: https://img.qweqwe.ovh/1493841193669.png и вот: https://img.qweqwe.ovh/1493841163338.png
local IGS_CAT_SETS = "Набор прав"
local IGS_CAT_PEX = "Отдельные права"
local IGS_CAT_KNIVES = "Ножи навсегда"
local IGS_CAT_LVL = "Система уровней"
local IGS_CAT_CHARITY = "Благотворительность"
local IGS_CAT_BUILD = "Строительство"
IGS_CAT_DECOR = "Украшательства" -- таб + чат
hook.Add("IGS.OnSettingsLoaded","JesusRag",function()
IGS("Иисусья тряпка","jesus_rag")
:SetPrice(IGS.RealPrice(19.95))
:SetTerm()
:SetStackable(true)
:SetCategory(IGS_CAT_CHARITY)
:SetDescription(
"ВНИМАНИЕ. ЭТОТ ПРЕДМЕТ ЧИСТО ДЛЯ ФАНА, ЧТОБЫ ПОНТАНУТЬСЯ МАЖОРСТВОМ И В ЧАРТАХ. ОНО НИЧЕГО НЕ ДЕЛАЕТ\n\n" ..
"С помощью тряпки вы с легкостью сможете замести следы убийства на вашей машине, на яхте, на троллейбусе. " ..
"Вы скажите: 'О, Господи, куда мир катится?', когда всякий раз будете вытирять ею всякую хуйню." ..
"\n\nС ее помощью вы можете воровать одежду, резать, прикрывать мину, практиковать ганнибализм, живодерство. Можете вернуть одежду в магазин и снова спиздить!" ..
"\n\nИисусья тряпка поможет вам справиться с проблемой, даже, если вы насрали мимо умывальника." ..
"\n\nВсе эти салфетки и мочалки исключительно для евреев. Вы еврей?" ..
"\n\nЗакажите всю хуйню прямо сейчас и вы получите бесплатные Иисусьи щипцы в подарок, с помощью которых помимо всего прочьего вы сможете чесать свои яйца"
)
:SetIcon("http://i.imgur.com/MvrhKX0.png") -- подушка
:SetImage("http://i.imgur.com/32iTOFi.jpg")
.isJesusRag = true
end)
-- Спонсирование аренды сервера
IGS("Помощь с сервером","dedic_rent_1d")
:SetPrice(215)
:SetTerm()
:SetStackable(true)
:SetCategory(IGS_CAT_CHARITY)
:SetDescription(
"Наш комплекс серверов не использует дешевые некачественные игровые хостинги, коими пользуются владельцы проектов, не умеющее ничего делать своими руками.\n\n" ..
"Вместо этого мы арендуем физические сервера (настоящие компьютеры у крупных провайдеров), что позволяет нам без проблем внедрять уникальные технологии, " ..
"которых нет на 99% других серверов, делать сотни гигабайт резервных копий на лучай ЧП и, самое главное, у нас намного меньше лагов и крашей серверов.\n\n" ..
"Но арендовать целый дедик (dedicated server. Компьютер, о котором идет речь) это достаточно дорогое удовольствие.\n\n" ..
"Месяц аренды нашего главного дедика обходится в примерно в 6500 рублей/месяц (80тыс/год, 215р/сутки) и это далеко не все расходы\n\n" ..
"Вы не обязаны покупать именно эту услугу, чтобы помочь с арендой, но сделав это, нам было бы намного приятнее, зная что есть не безразличные люди, думающие не только о личной выгоде"
)
:SetOnActivate(function(pl)
local purchased = IGS.PlayerPurchases(pl)["dedic_rent_1d"] or 0
purchased = purchased + 1
local money_spent = purchased * 99
-- Через раз
if purchased % 2 == 1 then
-- \/ NICE_MAN
REP.AddAction("STEAM_0:1:55598730",pl,7,"Продлил срок жизни проекта",function()
qq.notify(pl,3,60,"Ваша репутация изменена /rep")
end)
end
IGS.NotifyAll(pl:Name() .. " пожертвовал " .. money_spent .. " руб на продление " .. purchased .. " дней жизни проекта\nСпасибо, чувак!")
end)
:SetIcon("http://i.imgur.com/qqKhvjg.png") -- database
:SetImage("http://i.imgur.com/5bwrt3m.jpg")
-- Подарок персоналу
IGS("Подарок персоналу","staff_premia")
:SetPrice(99)
:SetTerm()
:SetStackable(true)
:SetCategory(IGS_CAT_CHARITY)
:SetDescription(
"Таким образом вы можете отблагодарить персонал за их работу. Деньги будут перечислены на счет активного, по мнению администрации, члена персонала" ..
"\n\nИли вы можете сами выбрать кто получит эти деньги. Для этого напишите в чат бот (вкладка help)" ..
"\n\nТакже вы попадете в список донатеров на подарок персоналу во вкладке чартов"
)
:SetOnActivate(function(pl)
local total = IGS.PlayerPurchases(pl)["staff_premia"] or 0
total = (total + 1) * 99
-- \/ NICE_MAN
REP.AddAction("STEAM_0:1:55598730",pl,7,"Не пожалел " .. total .. " руб на премии персоналу",function()
qq.notify(pl,3,60,"Ваша репутация изменена /rep")
end)
TLG.notifyGroup({TLG_AMD,TLG_DOS},string.format(
"📣 %s(%s) пожертвовал %s рублей на зарплату персоналу",
pl:Name(),pl:SteamID(),total
))
IGS.NotifyAll(pl:Name() .. " дал " .. total .. " руб на подарок персоналу через F1")
end)
:SetIcon("http://i.imgur.com/UaUoVBw.png") -- иконка подарка в коробке
-- Надпись в ТАБе
IGS("Звание в TAB","tab_pref")
:SetPrice(150)
:SetTerm()
:SetCategory(IGS_CAT_DECOR)
:SetDescription(
"Подчеркните свою личность вечной надписью в табе, которая будет отображаться в колонке \"Звание\" возле вашего имени в TAB меню" ..
"\n\nУлучшение позволяет вам в любое время установить себе любой текст через команду /TabPref, но при выборе учитывайте правила сервера" ..
"\n\nВы могли видеть такие надписи у персонала (Волонтер, Прокурор, Министр), также у донат групп (ВИП, Премиум) и у тех, кто покупал это право отдельно"
)
:SetOnActivate(function(pl) pl:SetNWString("IGS.TabPrefix", "/TabPrefix в чат") end)
:SetIcon("http://i.imgur.com/UNj9t3H.png")
:SetImage("http://i.imgur.com/OoUT22r.png")
:SetNetworked(true) -- для проверки в /TabPref
--[[-------------------------------------------------------------------------
Ножики
---------------------------------------------------------------------------]]
local knifes_description =
"Это те самые ножи, которые вы, возможно, видели в CS:GO, но намного дешевле ;)" ..
"\n\nОни покупаются раз и навсегда и купить их вы сможете в любое время в любой профессии." ..
"\n\nФото ножей можно увидеть здесь: http://imgur.com/a/3ZWxT" ..
"\n\nВсе ножи имеют свою анимацию, посмотреть котую можно нажав кнопку перезарядки." ..
"\n\nТакже они имеют одинаково большой урон (со спины убивает человека без брони с первого раза) и их ношение легально в любой профессии, если это только не запрещено мэром"
local KN_FREE = {
["csgo_butterfly"] = true,
["csgo_cssource"] = true,
["csgo_default_knife"] = true,
["csgo_default_t"] = true,
}
-- hook.Add("loadCustomDarkRPItems","IGS.AddKnives",function()
-- flip, huntsman etc
local groups = {}
local icons = {
["Shadow Daggers"] = "http://i.imgur.com/plg9w6o.png",
["Flip Knife"] = "http://i.imgur.com/cynmSus.png",
["Butterfly Knife"] = "http://i.imgur.com/gOoapXb.png",
["Huntsman Knife"] = "http://i.imgur.com/BSnEyx8.png",
["Karambit Knife"] = "http://i.imgur.com/8Mqufan.png",
["Falchion Knife"] = "http://i.imgur.com/iXS605T.png",
}
local knprice = 250
for _,v in pairs(CustomShipments) do
if !KN_FREE[v.entity] and string.sub(v.entity,1,5) == "csgo_" then
local ITEM = IGS(v.name,"wep_" .. v.entity) -- wep_csgo_butterfly_case
:SetPrice(knprice)
:SetTerm()
:SetDescription(knifes_description)
:SetCategory(IGS_CAT_KNIVES)
:SetImage(v.igs_banner)
:SetDarkRPItem(v.entity)
local p = v.name:Split(" | ")
local g,c = p[1],p[2] -- [1]Flip Knife, [2]Fade
groups[g] = groups[g] or IGS.NewGroup(g):SetIcon(icons[g])
groups[g]:AddItem(ITEM,c)
end
end
local GROUP_KNIVES_KITS = IGS.NewGroup("Наборы ножей")
:SetIcon("http://i.imgur.com/D4f6npP.png")
for name,GROUP in pairs(groups) do
-- \/ выбирает буквы до первого пробела (Karambit)
local ITEM = IGS("Доступ ко всем " .. name,"wep_knset_" .. GROUP:Name():match("%a+"):lower()) -- wep_knset_huntsman
:SetPrice(#GROUP:Items() * knprice * 0.6)
:SetTerm()
:SetDescription("Дает доступ ко всем ножам из категории " .. name)
:SetCategory(IGS_CAT_KNIVES)
GROUP_KNIVES_KITS:AddItem(ITEM,"Все " .. name:Split(" | ")[1])
end
GROUP_KNIVES_KITS:AddItem(
IGS("Доступ к абсолютно всем ножам","wep_knset_all")
:SetPrice(999)
:SetTerm()
:SetDescription("Дает доступ абсолютно ко всем сейчас доступным ножам и тем, что могут быть добавлены в будущем")
:SetCategory(IGS_CAT_KNIVES)
)
-- end) -- /hook
--[[-------------------------------------------------------------------------
Группы прав
---------------------------------------------------------------------------]]
local vip_description = [[
ПРИ ПОКУПКЕ ВЫДАЕТСЯ 5 000 000 ИГРОВОЙ ВАЛЮТЫ
Чат:
• Объявления посередине экрана (ulx csay)
Разное:
• Удаление всего мусора (декалей) (ulx cleardecals)
• Изменение цвета своей модельки (ulx color)
• Остановка всех звуков на сервере. Помогает, когда багуется какой-то звук по всей карте (ulx stopsounds)
• Точки быстрого перемещения (ulx warp)
Fun:
• Установка себе брони (ulx armor)
• Установка себе ХП (ulx hp)
• Ослепление нарушителей (ulx blind)
• Заморозка нарушителей (ulx freeze)
• Забрасывание нарушителей в клетку (ulx jail)
Teleport:
• ТП игрока к себе (ulx bring)
• Возврат игрока на позицию до телепортации (ulx return)
• Телепорт на указанную точку (ulx teleport)
Utility:
• Удаление игрока с сервера (ulx kick)
• Блокировка доступа игрока к серверу (ulx ban)
Не связанные с админкой права
• Возможность покупки C4
• Доступ к дополнительным профессиями
• Игнорирование лимита уровня при взятии профы
• Бонус за лечение игрока медицинским набором
• Просмотр баланса кошельков игроков
• Выделение в табе цветом
]]
local premium_description = vip_description .. "\n\n" .. [[+++
Цветной ник в чате
Более длительные баны (1 неделя VS 1 день у MEGA)
Более сильное ослепление (Полное VS чистичное)\
Телепортация не только игроков к себе, но и к игрокам (ulx goto)
Бан вышедших игроков по SteamID (ulx banid)
Полет по карте (ulx noclip)
Поднятие игроков физганом
Глушение голосового чата нарушителей (ulx gag)
Взрыв пукана нарушителя (ulx explode)
Мгновенное возрождение (ulx forcespawn)
Запуск нарушителя в небо (ulx launch)
Нанесение материала на своего персонажа (ulx material)
Отправка цветного сообщения без ника в чат каждого игрока
Поджег игрока (ulx ignite)
Натравление монстров на нарушителя (ulx maul)
Превращение себя в марионетку (ulx ragdoll)
Дистанционное нанесение урона без оружия нарушителю (ulx slap)
Просмотр админского чата, куда игроки пишут запросы о помощи
Доступ к логам !plogs
Бонус 10% при снятии денег с принтеров
Доступ к лучшим дополнительным профессиями (Премиум вместо Вип)
Больший бонус за лечение игрока медицинским набором (30% вместо 20%)
Намного большие лимиты покупок предметов. В основном 20 штук вместо 5, но есть и лучшие вариенты
Возможность снятия денег с принтеров, будучи полицией (ГО)
Вам доступно 3 одновременных оружия с раздатчика ГО вместо 2
]]
for group,t in pairs({
["vip"] = {
name = "MEGA",
alias = "Модерка",
desc = vip_description,
image = "http://i.imgur.com/vUWfnVu.jpg",
icon = "http://i.imgur.com/31PJ1p2.png",
{150,15}, -- цена, срок
{250,30},
{450},
},
["premium"] = {
name = "LORD",
alias = "Админка",
desc = premium_description,
image = "http://i.imgur.com/iqr75Sj.jpg",
icon = "http://i.imgur.com/lpVnFDu.png",
{390,15},
{490,30},
{1337},
},
}) do
local GROUP = IGS.NewGroup(t["name"])
GROUP:SetIcon(t["icon"])
for _,v in ipairs(t) do
local ITEM = IGS(t["name"],"group_" .. group .. "_" .. (v[2] or "~") .. "d") -- group_premium_15d
:SetPrice(v[1])
:SetTerm(v[2])
:SetCategory(IGS_CAT_SETS)
:SetDescription(t["desc"])
:SetIcon(t["icon"])
:SetImage(t["image"])
:SetULXGroup(group)
GROUP:AddItem(ITEM,t["alias"])
end
end
--[[-------------------------------------------------------------------------
Отдельные права
---------------------------------------------------------------------------]]
for cmd,t in pairs({
["model"] = {
name = "Изменение модельки",
icon = "http://i.imgur.com/idiv55O.png",
price = 149,
desc =
"Это право позволяет изменять модельку вашего игрока на абсолютно любую другую модель, в т.ч. и на пропы.\n\n" ..
"Для изменения модельки используйте команду !model ^ <model>. Саму команду необходимо вводить в чат\n\n" ..
"Пример использования команды: !model ^ models/props_borealis/bluebarrel001.mdl (Превратит вас в бочку :с)\n\n" ..
"В случае применения НонРП модельки, вам запрещается вмешиться в РП процесс любым образом, который на него влияет"
},
["noclip"] = {
name = "Режим полета",
icon = "http://i.imgur.com/csKhrcD.png",
price = 149,
desc =
"Это право позволяет включать режим полета (ноуклип).\n\n" ..
"Для включения полета введите ulx noclip в консоль или !noclip в чат\n\n" ..
"Для удобства можно забиндить данную команду на любую кнопку. Пример: bind v \"ulx noclip\" будет переключать ноуклип по нажатию на V\n\n" ..
"Обратите внимание, что использование ноуклипа резрешено только в случае, если это не влияет на РП процесс"
},
}) do
IGS(t["name"],"permission_" .. cmd .. "_30d") -- permission_model_30d
:SetPrice(t["price"])
:SetTerm(30)
:SetCategory(IGS_CAT_PEX)
:SetDescription(t["desc"])
:SetIcon(t["icon"])
:SetULXCommandAccess("ulx " .. cmd) -- "ulx model"
end
--[[-------------------------------------------------------------------------
Игровая валюта
---------------------------------------------------------------------------]]
PL_MILLIONS = PL.Add("millions",{"миллион", "миллиона", "миллионов"})
local GROUP_MONEY = IGS.NewGroup("Игровая валюта")
:SetIcon("http://i.imgur.com/07EFSDu.png")
for _,t in ipairs({
-- кол-во лямов, цена
{1,15},
{5,45},
{10,75},
{50,350},
{100,550},
}) do
local ITEM = IGS(PL_MILLIONS(t[1]),"money_" .. t[1] .. "mi") -- money_10mi
:SetPrice(t[2])
:SetDescription("Мгновенно и без проблем пополняет баланс игровой валюты на " .. t[1] .. " миллионов тригов. Чем больше валюты вы покупаете - тем выгоднее цена")
:SetDarkRPMoney(t[1] * 1000000)
GROUP_MONEY:AddItem(ITEM)
end
timer.Simple(1,function() -- attempt to index global 'LVL' (a nil value)
if !LVL then return end
--[[-------------------------------------------------------------------------
Система уровней. ОПЫТ
---------------------------------------------------------------------------]]
local GROUP_EXP = IGS.NewGroup("Опыт")
:SetIcon("http://i.imgur.com/sccYfaP.png") -- Прогресс бары
local exp_description =
"Помогает быстрее достичть желаемого ;)" ..
"\n\nДля подсчета необходимого опыта можно воспользоваться этой табличкой: http://vk.cc/5qsRt1" ..
"\n\nПри покупке опыта учитывайте, что автоматического перехода на новый уровень не будет. " ..
"Старайтесь не покупать опыта больше, чем \"влезает\" в ваш текущий уровень, иначе он просто упрется в лимит"
for _,t in ipairs({
-- XP, цена
{100,19},
{300,39},
{500,49},
}) do
local ITEM = IGS(t[1] .. " единиц опыта","lvl_exp_" .. t[1]) -- lvl_exp_100
:SetPrice(t[2])
:SetCategory(IGS_CAT_LVL)
:SetDescription(exp_description)
:SetOnActivate(function(pl) LVL.addClampedXP(pl,t[1]) end)
GROUP_EXP:AddItem(ITEM,t[1] .. " exp")
end
--[[-------------------------------------------------------------------------
Система уровней. УРОВНИ
---------------------------------------------------------------------------]]
local GROUP_LVL = IGS.NewGroup("Уровни")
:SetIcon("http://i.imgur.com/LZ2ydqs.png") -- Чарты
local lvl_description =
"Мгновенно перебрасывает вас на %s уровень." ..
"\n\nЭкономит %s и %s времени." ..
"\n\nДоступные бонусы можно увидить здесь: http://vk.cc/5qsRt1" ..
"\n\nПосле покупки вас кикнет, чтобы установить ЛВЛ, но вы сможете сразу зайти"
for _,t in ipairs({
-- LVL, цена
{10,90},
{20,245},
{25,399},
{30,450},
}) do
local lvlexp = LVL.lvlToExp(t[1])
local need_time = string.sub(timeToStr(lvlexp / LVL.exp_for_playtime * LVL.time_between_exp_increments),0,-6)
local ITEM = IGS(t[1] .. " уровень","lvl_lvl_" .. t[1]) -- lvl_lvl_10
:SetPrice(t[2])
:SetCategory(IGS_CAT_LVL)
:SetDescription(lvl_description:format( t[1], qq.formatMoney(LVL.getUpgradePrice(t[1])), need_time) )
:SetOnActivate(function(pl)
LVL.storeXP(pl:SteamID(),lvlexp,function()
pl:Kick("Установка уровня. Необходим перезаход")
end)
end)
GROUP_LVL:AddItem(ITEM,t[1] .. " exp")
end
end)
--[[-------------------------------------------------------------------------
Доступ к инструментам
---------------------------------------------------------------------------]]
-- hook.Add("InitPostEntity","IGS.AddTools",function()
local GROUP_TOOLS = IGS.NewGroup("Инструменты")
:SetIcon("http://i.imgur.com/1d0OHR9.png")
local tools = weapons.GetStored("gmod_tool").Tool
for _,t in ipairs({
{
tool = "wire_expression2",
price = 399,
desc = "После приобретения вам станет доступен к использованию инструмент с огромным множеством всяких интересных возможностей." ..
"\n\nПодробнее о нем вы можете почитать в интернете, но инструмент реально стоящий и очень многофункциональный",
},
{
tool = "wire_user",
price = 228,
desc = "Позволяет делать автоматические фермы маников и кокса, а также много других замечательных вещей." ..
"\n\nСам инструмент представляет с себя 'удаленную руку'. При активации имитирует на любом расстоянии нажатие кнопки использования." ..
"\n\nПри использовании в нонрп целях инструмент может быть безвозвратно отобран",
},
{
tool = "rope",
price = 50,
desc = "После приобретения вам станет доступен к использованию инструмент, " ..
"благодаря которому вы сможете делать качели, змейки и прочие конструкции, требующие крепления." ..
"\n\nТакже при помощи данного инструмента можно делать надписи на стенах :)",
},
{
tool = "winch",
price = 60,
desc = "Лебедка - незаменимый инструмент в создании лифтов или конструкций, которые нужно двигать. " ..
"Она может делаться длиннее или короче по нажатию кнопки. Подробнее о веревке можно почитать, выбрав ее рядом в списке",
},
{
tool = "slider",
price = 35,
desc = "При помощи слайдера можно делать раздвижные двери, которые были бы идеальны при защите от полиции, " ..
"т.к. они бы не выбивались тараном. Отличнейший инструмент",
}
}) do
local ITEM = IGS("Тул " .. tools[t.tool].Name,"tool_" .. t.tool .. "_30d") -- tool_rope_30d
:SetPrice(t.price)
:SetTerm(30)
:SetCategory(IGS_CAT_BUILD)
:SetDescription(t.desc)
:SetTool(t.tool)
GROUP_TOOLS:AddItem(ITEM,tools[t.tool].Name)
end
-- end)
-- Антифриз
IGS("Антифриз пропов","tpp_nofreeze")
:SetPrice(99)
:SetTerm(90)
:SetCategory(IGS_CAT_BUILD)
:SetDescription(
"С данным приорбретением для вас больше не станет проблемой постройка каких-либо сооружений, требующих подвижности пропов." ..
"\n\nВсе, что вы будете поднимать физганом больше не будет оставаться висеть в воздухе."
)
:SetIcon("http://i.imgur.com/q3dpiJZ.png") -- кубик без стен
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment