mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
472
gamemodes/helix/plugins/willardinterface/sh_plugin.lua
Normal file
472
gamemodes/helix/plugins/willardinterface/sh_plugin.lua
Normal file
@@ -0,0 +1,472 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
PLUGIN.name = "Willard UI"
|
||||
PLUGIN.author = "Fruity"
|
||||
PLUGIN.description = "The UI for Willard Industries."
|
||||
PLUGIN.menuBackgrounds = PLUGIN.menuBackgrounds or {}
|
||||
PLUGIN.logoData = PLUGIN.logoData or {}
|
||||
PLUGIN.buttonColors = PLUGIN.buttonColors or {}
|
||||
|
||||
ix.util.Include("sh_fonts.lua")
|
||||
ix.util.Include("sh_hud.lua")
|
||||
ix.util.Include("cl_overrides.lua")
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
ix.util.IncludeDir("helix/plugins/willardinterface/editablequiz", true)
|
||||
ix.util.IncludeDir("helix/plugins/willardinterface/mainmenu-manager", true)
|
||||
ix.util.IncludeDir("helix/plugins/willardinterface/editablequiz/derma", true)
|
||||
ix.util.IncludeDir("helix/plugins/willardinterface/mainmenu-manager/derma", true)
|
||||
|
||||
CAMI.RegisterPrivilege({
|
||||
Name = "Helix - Character Creation Bypass",
|
||||
MinAccess = "admin"
|
||||
})
|
||||
|
||||
ix.config.Add("CharCreationDisabled", false, "Whether or not char creation is enabled.", nil, {
|
||||
category = "Characters"
|
||||
})
|
||||
|
||||
ix.config.Add("IntroTextLong", "", "The long text shown in the intro.", nil, {
|
||||
category = "Appearance",
|
||||
type = ix.type.string
|
||||
})
|
||||
|
||||
ix.lang.AddTable("english", {
|
||||
optDisableAutoScrollChat = "Chati Otomatik Kaydırmayı Kapat",
|
||||
optdDisableAutoScrollChat = "Chatbox otomatik olarak aşağı kaymalı mı?"
|
||||
})
|
||||
|
||||
ix.lang.AddTable("spanish", {
|
||||
optDisableAutoScrollChat = "Desactiva el Auto Scroll del Chat"
|
||||
})
|
||||
|
||||
ix.option.Add("disableAutoScrollChat", ix.type.bool, false, {
|
||||
category = "Chat"
|
||||
})
|
||||
|
||||
ix.config.Add("ShowCPsOnScoreboard", true, "Whether or not CP's show on scoreboard.", nil, {
|
||||
category = "Characters"
|
||||
})
|
||||
|
||||
ix.config.Add("CheckCrimeAmountNeeded", 4,
|
||||
"How many CP's are required to be online before the CheckCrime command allows crime.", nil, {
|
||||
data = {min = 1, max = 10},
|
||||
category = "Characters"
|
||||
})
|
||||
|
||||
ix.config.Add("CheckPettyAmountNeeded", 2,
|
||||
"How many CP's are required to be online before the CheckPetty command allows petty crime.", nil, {
|
||||
data = {min = 1, max = 5},
|
||||
category = "Characters"
|
||||
})
|
||||
|
||||
ix.config.Add("CheckOverwatchAmountNeeded", 4,
|
||||
"How many CCG or OTA are required to be online before the CheckOverwatch command allows crime.", nil, {
|
||||
data = {min = 1, max = 8},
|
||||
category = "Characters"
|
||||
})
|
||||
|
||||
ix.command.Add("CheckCrime", {
|
||||
description = "See if there are enough CP's online to commit a crime.",
|
||||
OnRun = function(self, client)
|
||||
local count = 0
|
||||
for _, v in pairs(player.GetAll()) do
|
||||
if !IsValid(v) then continue end
|
||||
--luacheck: ignore 1
|
||||
if v:Team() != FACTION_CP then continue end
|
||||
|
||||
count = count + 1
|
||||
end
|
||||
|
||||
if count >= ix.config.Get("CheckCrimeAmountNeeded", 4) then
|
||||
client:Notify("Suç işlemek için yeterli SK mevcut.")
|
||||
else
|
||||
client:Notify("Suç işlemek için yeterli SK mevcut değil.")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("CheckPetty", {
|
||||
description = "See if there are enough CP's online to commit a petty crime.",
|
||||
OnRun = function(self, client)
|
||||
local count = 0
|
||||
for _, v in pairs(player.GetAll()) do
|
||||
if !IsValid(v) then continue end
|
||||
--luacheck: ignore 1
|
||||
if v:Team() != FACTION_CP then continue end
|
||||
|
||||
count = count + 1
|
||||
end
|
||||
|
||||
if count >= ix.config.Get("CheckPettyAmountNeeded", 2) then
|
||||
client:Notify("Küçük suç işlemek için yeterli SK mevcut.")
|
||||
else
|
||||
client:Notify("Küçük suç işlemek için yeterli SK mevcut değil.")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("CheckOverwatch", {
|
||||
description = "See if there are enough CCG or OTA online to commit a major crime on Nexus or Administrative functions.",
|
||||
OnRun = function(self, client)
|
||||
local count = 0
|
||||
for _, v in pairs(player.GetAll()) do
|
||||
if !IsValid(v) then continue end
|
||||
--luacheck: ignore 1
|
||||
if v:Team() != FACTION_OTA then continue end
|
||||
|
||||
count = count + 1
|
||||
end
|
||||
|
||||
if count >= ix.config.Get("CheckOverwatchAmountNeeded", 4) then
|
||||
client:Notify("Overwatch'a saldırı düzenlemek için yeterli OTA mevcut.")
|
||||
else
|
||||
client:Notify("Overwatch'a saldırı düzenlemek için yeterli OTA mevcut değil.")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
if (SERVER) then
|
||||
function PLUGIN:CanPlayerCreateCharacter(client)
|
||||
if (ix.config.Get("CharCreationDisabled") and !CAMI.PlayerHasAccess(client, "Helix - Character Creation Bypass")) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
else
|
||||
local genDescColor = Color(255, 255, 255)
|
||||
function PLUGIN:PopulateCharacterInfo(client, character, tooltip)
|
||||
if (character) then
|
||||
local faction = ix.faction.Get(client:Team())
|
||||
if (faction.noGenDesc) then return end
|
||||
|
||||
local geneticDesc = {}
|
||||
local bMask = client:GetNetVar("ixMaskEquipped")
|
||||
if (!faction.noAge and !bMask and character:GetAge() != "N/A") then
|
||||
geneticDesc[#geneticDesc + 1] = character:GetAge()
|
||||
end
|
||||
if (!faction.noEyeColor and !bMask and character:GetEyeColor() != "N/A") then
|
||||
geneticDesc[#geneticDesc + 1] = character:GetEyeColor().." eyes"
|
||||
end
|
||||
if (!faction.noHeight and character:GetHeight() != "N/A") then
|
||||
table.insert(geneticDesc, math.min(2, #geneticDesc + 1), character:GetHeight()..(#geneticDesc > 0 and "" or " tall"))
|
||||
end
|
||||
|
||||
if (#geneticDesc > 0) then
|
||||
local genDesc = tooltip:AddRow("geneticDesc")
|
||||
genDesc:SetBackgroundColor(genDescColor)
|
||||
genDesc:SetText(string.utf8upper(table.concat(geneticDesc, " | ")))
|
||||
genDesc:SizeToContents()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ix.char.RegisterVar("background", {
|
||||
field = "background",
|
||||
fieldType = ix.type.string,
|
||||
default = "",
|
||||
isLocal = true,
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
ix.char.RegisterVar("age", {
|
||||
field = "age",
|
||||
fieldType = ix.type.string,
|
||||
default = "N/A",
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
ix.char.RegisterVar("height", {
|
||||
field = "height",
|
||||
fieldType = ix.type.string,
|
||||
default = "N/A",
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
ix.char.RegisterVar("eyeColor", {
|
||||
field = "eyeColor",
|
||||
fieldType = ix.type.string,
|
||||
default = "N/A",
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
ix.char.RegisterVar("hairColor", {
|
||||
field = "hairColor",
|
||||
fieldType = ix.type.string,
|
||||
default = "N/A",
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
function PLUGIN:AdjustCreationPayload(client, payload, newPayload)
|
||||
if (newPayload.data.background) then
|
||||
newPayload.background = newPayload.data.background
|
||||
newPayload.data.background = nil
|
||||
end
|
||||
|
||||
if (newPayload.data.age) then
|
||||
newPayload.age = newPayload.data.age
|
||||
newPayload.data.age = nil
|
||||
end
|
||||
|
||||
if (newPayload.data.height) then
|
||||
newPayload.height = newPayload.data.height
|
||||
newPayload.data.height = nil
|
||||
end
|
||||
|
||||
if (newPayload.data["eye color"]) then
|
||||
newPayload.eyeColor = newPayload.data["eye color"]
|
||||
newPayload.data["eye color"] = nil
|
||||
end
|
||||
end
|
||||
|
||||
if (CLIENT) then
|
||||
hook.Add("CreateMenuButtons", "ixConfig", function(tabs)
|
||||
if (!CAMI.PlayerHasAccess(LocalPlayer(), "Helix - Manage Config", nil)) then
|
||||
return
|
||||
end
|
||||
|
||||
tabs["Admin"] = {
|
||||
|
||||
Width = 16,
|
||||
|
||||
Height = 17,
|
||||
|
||||
Right = true,
|
||||
|
||||
Icon = "willardnetworks/tabmenu/navicons/admin.png",
|
||||
|
||||
Create = function(info, container)
|
||||
local settings = container:Add("ixSettings")
|
||||
settings:SetSearchEnabled(true)
|
||||
|
||||
if settings.settingsTitle then
|
||||
settings.settingsTitleIcon:SetImage("willardnetworks/tabmenu/navicons/admin.png")
|
||||
settings.settingsTitleIcon:SetSize(SScaleMin(16 / 3), SScaleMin(17 / 3))
|
||||
|
||||
settings.settingsTitle:SetFont("TitlesFontNoClamp")
|
||||
settings.settingsTitle:SetText("Admin")
|
||||
settings.settingsTitle:SetPos(SScaleMin(26 / 3))
|
||||
settings.settingsTitle:SizeToContents()
|
||||
settings.settingsTitle:SetPos(SScaleMin(26 / 3), settings.settingsTitleIcon:GetTall()
|
||||
* 0.5 - settings.settingsTitle:GetTall() * 0.5)
|
||||
end
|
||||
|
||||
-- gather categories
|
||||
local categories = {}
|
||||
local categoryIndices = {}
|
||||
|
||||
for k, v in pairs(ix.config.stored) do
|
||||
local index = v.data and v.data.category or "misc"
|
||||
|
||||
categories[index] = categories[index] or {}
|
||||
categories[index][k] = v
|
||||
end
|
||||
|
||||
-- sort by category phrase
|
||||
for k, _ in pairs(categories) do
|
||||
categoryIndices[#categoryIndices + 1] = k
|
||||
end
|
||||
|
||||
table.sort(categoryIndices, function(a, b)
|
||||
return L(a) < L(b)
|
||||
end)
|
||||
|
||||
-- add panels
|
||||
for _, category in ipairs(categoryIndices) do
|
||||
local categoryPhrase = L(category)
|
||||
settings:AddCategory(categoryPhrase)
|
||||
|
||||
-- we can use sortedpairs since configs don't have phrases to account for
|
||||
for k, v in SortedPairs(categories[category]) do
|
||||
if (isfunction(v.hidden) and v.hidden()) then
|
||||
continue
|
||||
end
|
||||
|
||||
local data = v.data.data
|
||||
local type = v.type
|
||||
local value = ix.util.SanitizeType(type, ix.config.Get(k))
|
||||
|
||||
-- @todo check ix.gui.properties
|
||||
local row = settings:AddRow(type, categoryPhrase)
|
||||
row:SetText(ix.util.ExpandCamelCase(k))
|
||||
row:Populate(v.data.key, v.data)
|
||||
|
||||
-- type-specific properties
|
||||
if (type == ix.type.number) then
|
||||
row:SetMin(data and data.min or 0)
|
||||
row:SetMax(data and data.max or 1)
|
||||
row:SetDecimals(data and data.decimals or 0)
|
||||
end
|
||||
|
||||
row:SetValue(value, true)
|
||||
row:SetShowReset(value != v.default, k, v.default)
|
||||
|
||||
row.OnValueChanged = function(panel)
|
||||
local newValue = ix.util.SanitizeType(type, panel:GetValue())
|
||||
|
||||
panel:SetShowReset(newValue != v.default, k, v.default)
|
||||
|
||||
net.Start("ixConfigSet")
|
||||
net.WriteString(k)
|
||||
net.WriteType(newValue)
|
||||
net.SendToServer()
|
||||
end
|
||||
|
||||
row.OnResetClicked = function(panel)
|
||||
panel:SetValue(v.default, true)
|
||||
panel:SetShowReset(false)
|
||||
|
||||
net.Start("ixConfigSet")
|
||||
net.WriteString(k)
|
||||
net.WriteType(v.default)
|
||||
net.SendToServer()
|
||||
end
|
||||
|
||||
row:GetLabel():SetHelixTooltip(function(tooltip)
|
||||
local title = tooltip:AddRow("name")
|
||||
title:SetImportant()
|
||||
title:SetText(k)
|
||||
title:SizeToContents()
|
||||
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
||||
|
||||
local description = tooltip:AddRow("description")
|
||||
description:SetText(v.description)
|
||||
description:SizeToContents()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
settings:SizeToContents()
|
||||
container.panel = settings
|
||||
|
||||
if settings.titlePanel then
|
||||
local pluginManager = settings.titlePanel:Add("DButton")
|
||||
pluginManager:Dock(RIGHT)
|
||||
pluginManager:SetWide(SScaleMin(100 / 3))
|
||||
pluginManager:SetFont("TitlesFontNoClamp")
|
||||
pluginManager:SetText("PLUGINS")
|
||||
pluginManager:DockMargin(0, 0, 0, settings.titlePanel:GetTall() - SScaleMin(26 / 3))
|
||||
pluginManager.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_white, 100))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
pluginManager.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
for _, v in pairs(container.panel:GetChildren()) do
|
||||
v:SetVisible(false)
|
||||
end
|
||||
|
||||
ix.gui.pluginManager = container.panel:Add("ixPluginManager")
|
||||
|
||||
if ix.gui.pluginManager.settingsTitle then
|
||||
ix.gui.pluginManager.settingsTitle:SetText("Plugins")
|
||||
|
||||
local configManager = ix.gui.pluginManager.titlePanel:Add("DButton")
|
||||
configManager:Dock(RIGHT)
|
||||
configManager:SetWide(SScaleMin(100 / 3))
|
||||
configManager:SetFont("TitlesFontNoClamp")
|
||||
configManager:SetText("CONFIG")
|
||||
configManager:DockMargin(0, 0, 0, settings.titlePanel:GetTall() - SScaleMin(26 / 3))
|
||||
configManager.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_white, 100))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
configManager.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
for _, v in pairs(container.panel:GetChildren()) do
|
||||
v:SetVisible(true)
|
||||
end
|
||||
|
||||
ix.gui.pluginManager:Remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local quizManager = settings.titlePanel:Add("DButton")
|
||||
quizManager:Dock(RIGHT)
|
||||
quizManager:SetWide(SScaleMin(150 / 3))
|
||||
quizManager:SetFont("TitlesFontNoClamp")
|
||||
quizManager:SetText("QUIZ MANAGER")
|
||||
quizManager:DockMargin(0, 0, SScaleMin(10 / 3), settings.titlePanel:GetTall() - SScaleMin(26 / 3))
|
||||
quizManager.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_white, 100))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
quizManager.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
vgui.Create("QuizPanel")
|
||||
end
|
||||
|
||||
local mainMenuManager = settings.titlePanel:Add("DButton")
|
||||
mainMenuManager:Dock(RIGHT)
|
||||
mainMenuManager:SetWide(SScaleMin(220 / 3))
|
||||
mainMenuManager:SetFont("TitlesFontNoClamp")
|
||||
mainMenuManager:SetText("MAIN MENU MANAGER")
|
||||
mainMenuManager:DockMargin(0, 0, SScaleMin(10 / 3), settings.titlePanel:GetTall() - SScaleMin(26 / 3))
|
||||
mainMenuManager.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_white, 100))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
mainMenuManager.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
vgui.Create("MainMenuManager")
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
OnSelected = function(info, container)
|
||||
container.panel.searchEntry:RequestFocus()
|
||||
end,
|
||||
|
||||
RowNumber = 6
|
||||
}
|
||||
end)
|
||||
|
||||
hook.Add("Think", "F1Menu", function()
|
||||
if input.IsKeyDown( KEY_F1 ) then
|
||||
if ix.gui.menu and ix.gui.menu:IsVisible() then
|
||||
return
|
||||
end
|
||||
|
||||
if ix.gui.characterMenu and ix.gui.characterMenu:IsVisible() then
|
||||
return
|
||||
end
|
||||
|
||||
if ix.gui.protectionTeams and ix.gui.protectionTeams:IsVisible() then
|
||||
return
|
||||
end
|
||||
|
||||
if LocalPlayer():GetCharacter() then
|
||||
if ix.gui.F1Menu and ix.gui.F1Menu:IsVisible() then
|
||||
return
|
||||
end
|
||||
|
||||
ix.gui.F1Menu = vgui.Create("ixF1Menu")
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function PLUGIN:LoadData()
|
||||
local loaded = ix.data.Get("menuData", {})
|
||||
self.menuBackgrounds = loaded[1] or {}
|
||||
self.logoData = loaded[2] or {}
|
||||
self.buttonColors = loaded[3] or {}
|
||||
end
|
||||
|
||||
function PLUGIN:SaveData()
|
||||
ix.data.Set("menuData", {self.menuBackgrounds, self.logoData, self.buttonColors})
|
||||
end
|
||||
Reference in New Issue
Block a user