Files
wnsrc/gamemodes/darkrp/schema/sh_schema.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

494 lines
17 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
| 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/
--]]
Schema.name = "HL2 RP"
Schema.author = "willard.network"
Schema.description = "Experience a next-level Half-Life 2 Roleplay experience. Taking inspiration from games such as Divinity Original Sin and Xcom 2. Featuring a completely overhauled combat system, gameplay and UI."
ix.util.Include("sh_configs.lua")
ix.util.Include("sh_commands.lua")
ix.util.Include("cl_schema.lua")
ix.util.Include("cl_hooks.lua")
ix.util.Include("sh_groups.lua")
ix.util.Include("sh_hooks.lua")
ix.util.Include("sh_voices.lua")
ix.util.Include("sh_voices_ota.lua")
ix.util.Include("sv_schema.lua")
ix.util.Include("sv_hooks.lua")
ix.util.Include("libs/thirdparty/cl_imgui.lua")
ix.util.Include("libs/thirdparty/cl_3d2dvgui.lua")
-- CP models
for i = 1, 9 do
ix.anim.SetModelClass("models/wn7new/metropolice/male_0"..i..".mdl", "metrocop")
end
for i = 1, 7 do
ix.anim.SetModelClass("models/wn7new/metropolice/female_0"..i..".mdl", "metrocop_female")
end
for i = 1, 9 do
ix.anim.SetModelClass("models/wn7new/metropolice_c8/male_0"..i..".mdl", "metrocop")
end
for i = 1, 7 do
ix.anim.SetModelClass("models/wn7new/metropolice_c8/female_0"..i..".mdl", "metrocop_female")
end
for i = 1, 9 do
ix.anim.SetModelClass("models/wn7new/metropolice_rebel/male_0"..i..".mdl", "metrocop")
end
for i = 1, 7 do
ix.anim.SetModelClass("models/wn7new/metropolice_rebel/female_0"..i..".mdl", "metrocop_female")
end
-- Combine 2.0 pack
ix.anim.SetModelClass("models/willardnetworks/combine/antibody.mdl", "citizen_male")
ix.anim.SetModelClass("models/wn/ordinal.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_commander.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_elite.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_elite_summit.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_shotgunner.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_skylegion.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/ota_soldier.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/soldier.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/suppressor.mdl", "overwatch")
ix.anim.SetModelClass("models/wn/wallhammer.mdl", "overwatch")
if (SERVER) then
resource.AddWorkshop("2066864990") -- WN Content Pack
resource.AddWorkshop("2920298301") -- Willard Networks V2 Models
resource.AddWorkshop("131759821") -- VJ Base
resource.AddWorkshop("2126368202") -- [VJ] Short Stories NPCs
resource.AddWorkshop("1336622735") -- Modular Canal Props
resource.AddWorkshop("2875205147") -- Willard Sound Pack
resource.AddWorkshop("2228994615") -- [Half Life: Alyx] Xen Pack (Props)
resource.AddWorkshop("2473879362") -- Willard 2.0 Combine Pack
resource.AddWorkshop("2875203234") -- [Optional] WN HL:A Voicelines
resource.AddWorkshop("2233731395") -- Scene Builder
resource.AddWorkshop("2447979470") -- StormFox 2 Content
resource.AddWorkshop("2043900984") -- [Half Life: Alyx] Infestation Control props
resource.AddWorkshop("2225220690") -- [Half Life: Alyx] Xen Foam Pack (Props)
resource.AddWorkshop("2350858257") -- eProtect - Content
resource.AddWorkshop("2206993805") -- slib - Stromic's Library
resource.AddWorkshop("2169730364") -- Half Life: Alyx - Combine VO
resource.AddWorkshop("2840031720") -- [TFA] Base
resource.AddWorkshop("2131057232") -- [ArcCW] Arctic's Customizable Weapons (Base Only)
resource.AddWorkshop("3044111523") -- [ArcCW] Willard Shared Attachments
resource.AddWorkshop("3143931771") -- [ArcCW] Willard Resistance Weapons
resource.AddWorkshop("3143867497") -- [ArcCW] Willard Overwatch Weapons
resource.AddWorkshop("3043853773") -- [ArcCW] Willard Junk Weapons
resource.AddWorkshop("2548809283") -- Half-Life Resurgence
resource.AddWorkshop("1551310214") -- Placeable Particle Effects
-- T6
resource.AddWorkshop("151119348") -- Conscripts
resource.AddWorkshop("164165599") -- Female Conscripts
resource.AddWorkshop("172374701") -- Hazmat Conscripts
resource.AddWorkshop("2639959090") -- Manable Emplacements
end
Schema.colors = {
["aliceblue"] = Color(240, 248, 255),
["antiquewhite"] = Color(250, 235, 215),
["aqua"] = Color(0, 255, 255),
["aquamarine"] = Color(127, 255, 212),
["azure"] = Color(240, 255, 255),
["beige"] = Color(245, 245, 220),
["bisque"] = Color(255, 228, 196),
["black"] = Color(0, 0, 0),
["blanchedalmond"] = Color(255, 235, 205),
["blue"] = Color(0, 100, 255),
["blueviolet"] = Color(138, 43, 226),
["brown"] = Color(165, 42, 42),
["burlywood"] = Color(222, 184, 135),
["cadetblue"] = Color(95, 158, 160),
["chartreuse"] = Color(127, 255, 0),
["chocolate"] = Color(210, 105, 30),
["coral"] = Color(255, 127, 80),
["cornflowerblue"] = Color(100, 149, 237),
["cornsilk"] = Color(255, 248, 220),
["crimson"] = Color(220, 20, 60),
["cyan"] = Color(0, 255, 255),
["darkblue"] = Color(0, 0, 139),
["darkcyan"] = Color(0, 139, 139),
["darkgoldenrod"] = Color(184, 134, 11),
["darkgray"] = Color(169, 169, 169),
["darkgreen"] = Color(0, 100, 0),
["darkgrey"] = Color(169, 169, 169),
["darkkhaki"] = Color(189, 183, 107),
["darkmagenta"] = Color(139, 0, 139),
["darkolivegreen"] = Color(85, 107, 47),
["darkorange"] = Color(255, 140, 0),
["darkorchid"] = Color(153, 50, 204),
["darkred"] = Color(139, 0, 0),
["darksalmon"] = Color(233, 150, 122),
["darkseagreen"] = Color(143, 188, 143),
["darkslateblue"] = Color(72, 61, 139),
["darkslategray"] = Color(47, 79, 79),
["darkslategrey"] = Color(47, 79, 79),
["darkturquoise"] = Color(0, 206, 209),
["darkviolet"] = Color(148, 0, 211),
["deeppink"] = Color(255, 20, 147),
["deepskyblue"] = Color(0, 191, 255),
["dimgray"] = Color(105, 105, 105),
["dimgrey"] = Color(105, 105, 105),
["dodgerblue"] = Color(30, 144, 255),
["firebrick"] = Color(178, 34, 34),
["floralwhite"] = Color(255, 250, 240),
["forestgreen"] = Color(34, 139, 34),
["fuchsia"] = Color(255, 0, 255),
["gainsboro"] = Color(220, 220, 220),
["ghostwhite"] = Color(248, 248, 255),
["gold"] = Color(255, 215, 0),
["goldenrod"] = Color(218, 165, 32),
["gray"] = Color(81, 81, 81),
["green"] = Color(38, 106, 46),
["greenyellow"] = Color(173, 255, 47),
["grey"] = Color(81, 81, 81),
["honeydew"] = Color(240, 255, 240),
["hotpink"] = Color(255, 105, 180),
["indianred"] = Color(205, 92, 92),
["indigo"] = Color(75, 0, 130),
["ivory"] = Color(255, 255, 240),
["khaki"] = Color(240, 230, 140),
["lavender"] = Color(230, 230, 250),
["lavenderblush"] = Color(255, 240, 245),
["lawngreen"] = Color(124, 252, 0),
["lemonchiffon"] = Color(255, 250, 205),
["lightblue"] = Color(173, 216, 230),
["lightcoral"] = Color(240, 128, 128),
["lightcyan"] = Color(224, 255, 255),
["lightgoldenrodyellow"] = Color(250, 250, 210),
["lightgray"] = Color(211, 211, 211),
["lightgreen"] = Color(144, 238, 144),
["lightgrey"] = Color(211, 211, 211),
["lightpink"] = Color(255, 182, 193),
["lightsalmon"] = Color(255, 160, 122),
["lightseagreen"] = Color(32, 178, 170),
["lightskyblue"] = Color(135, 206, 250),
["lightslategray"] = Color(119, 136, 153),
["lightslategrey"] = Color(119, 136, 153),
["lightsteelblue"] = Color(176, 196, 222),
["lightyellow"] = Color(255, 255, 224),
["lime"] = Color(0, 255, 0),
["limegreen"] = Color(50, 205, 50),
["linen"] = Color(250, 240, 230),
["magenta"] = Color(255, 0, 255),
["maroon"] = Color(103, 0, 42),
["mediumaquamarine"] = Color(102, 205, 170),
["mediumblue"] = Color(0, 0, 205),
["mediumorchid"] = Color(186, 85, 211),
["mediumpurple"] = Color(147, 112, 219),
["mediumseagreen"] = Color(60, 179, 113),
["mediumslateblue"] = Color(123, 104, 238),
["mediumspringgreen"] = Color(0, 250, 154),
["mediumturquoise"] = Color(72, 209, 204),
["mediumvioletred"] = Color(199, 21, 133),
["midnightblue"] = Color(25, 25, 112),
["mintcream"] = Color(245, 255, 250),
["mistyrose"] = Color(255, 228, 225),
["moccasin"] = Color(255, 228, 181),
["navajowhite"] = Color(255, 222, 173),
["navy"] = Color(0, 0, 128),
["oldlace"] = Color(253, 245, 230),
["olive"] = Color(128, 128, 0),
["olivedrab"] = Color(107, 142, 35),
["orange"] = Color(255, 122, 0),
["orangered"] = Color(255, 69, 0),
["orchid"] = Color(218, 112, 214),
["palegoldenrod"] = Color(238, 232, 170),
["palegreen"] = Color(152, 251, 152),
["paleturquoise"] = Color(175, 238, 238),
["palevioletred"] = Color(219, 112, 147),
["papayawhip"] = Color(255, 239, 213),
["peachpuff"] = Color(255, 218, 185),
["peru"] = Color(205, 133, 63),
["pink"] = Color(255, 192, 203),
["plum"] = Color(221, 160, 221),
["powderblue"] = Color(176, 224, 230),
["purple"] = Color(102, 51, 153),
["rebeccapurple"] = Color(102, 51, 153),
["red"] = Color(255, 0, 0),
["rosybrown"] = Color(188, 143, 143),
["royalblue"] = Color(65, 105, 225),
["saddlebrown"] = Color(139, 69, 19),
["salmon"] = Color(250, 128, 114),
["sandybrown"] = Color(244, 164, 96),
["seagreen"] = Color(46, 139, 87),
["seashell"] = Color(255, 245, 238),
["sienna"] = Color(160, 82, 45),
["silver"] = Color(192, 192, 192),
["skyblue"] = Color(135, 206, 235),
["slateblue"] = Color(106, 90, 205),
["slategray"] = Color(112, 128, 144),
["slategrey"] = Color(112, 128, 144),
["snow"] = Color(255, 250, 250),
["springgreen"] = Color(0, 255, 127),
["steelblue"] = Color(70, 130, 180),
["tan"] = Color(210, 180, 140),
["teal"] = Color(0, 128, 128),
["thistle"] = Color(216, 191, 216),
["tomato"] = Color(255, 99, 71),
["turquoise"] = Color(64, 224, 208),
["violet"] = Color(238, 130, 238),
["wheat"] = Color(245, 222, 179),
["white"] = Color(255, 255, 255),
["whitesmoke"] = Color(245, 245, 245),
["yellow"] = Color(255, 255, 0),
["yellowgreen"] = Color(154, 205, 50),
}
if (CLIENT) then
CHAT_RECOGNIZED = CHAT_RECOGNIZED or {}
CHAT_RECOGNIZED["wd"] = true
end
function Schema:ZeroNumber(number, length)
number = tostring(number)
local amount = math.max(0, length - string.len(number))
return string.rep("0", amount)..number
end
function Schema:IsCombineRank(text, rank)
return string.find(text, "[%D+]"..rank.."[%D+]")
end
do
local CLASS = {}
CLASS.color = Color(254, 39, 39)
CLASS.format = "Dispatch yayın yapıyor \"%s\""
function CLASS:CanSay(speaker, text)
if (speaker:IsWorld()) then return true end
if (!speaker:IsDispatch() and speaker:Team() != FACTION_SERVERADMIN) then
speaker:NotifyLocalized("notAllowed")
return false
end
end
local dispatchIcon = ix.util.GetMaterial("willardnetworks/chat/dispatch_icon.png")
function CLASS:OnChatAdd(speaker, text)
local oldFont = self.font
local font = hook.Run("GetSpeakerFont", speaker)
self.font = font
if ix.option.Get("standardIconsEnabled") then
chat.AddText(dispatchIcon, self.color, string.format(self.format, text))
else
chat.AddText(self.color, string.format(self.format, text))
end
self.font = oldFont
end
ix.chat.Register("dispatch", CLASS)
ix.chat.Register("worlddispatch", CLASS)
end
do
local CLASS = {}
CLASS.color = Color(175, 125, 100)
CLASS.format = "%s requests \"%s\""
function CLASS:CanHear(speaker, listener)
if (ix.chat.classes.request:CanHear(speaker, listener)) then
return false
end
local chatRange = ix.config.Get("chatRange", 280)
return (speaker:Team() == FACTION_CITIZEN and listener:Team() == FACTION_CITIZEN)
and (speaker:GetPos() - listener:GetPos()):LengthSqr() <= (chatRange * chatRange)
end
function CLASS:OnChatAdd(speaker, text)
chat.AddText(self.color, string.format(self.format, speaker:Name(), text))
end
ix.chat.Register("request_eavesdrop", CLASS)
end
do
local CLASS = {}
CLASS.color = Color(151, 161, 255)
CLASS.format = "%s duyuru yapıyor \"%s\""
function CLASS:CanSay(speaker, text)
if (speaker and speaker:Team() != FACTION_ADMIN and !speaker:GetCharacter():GetInventory():HasItem("broadcasting_device") and !speaker:GetNetVar("broadcastAuth", false)) then
speaker:NotifyLocalized("notAllowed")
return false
end
end
local broadcastIcon = ix.util.GetMaterial("willardnetworks/chat/broadcast_icon.png")
function CLASS:OnChatAdd(speaker, text, anonymous, data)
if (ix.option.Get("standardIconsEnabled")) then
chat.AddText(broadcastIcon, self.color, string.format(self.format, (speaker and speaker.Name and speaker:Name() or data and data.speakerName and data.speakerName or ""), text))
else
chat.AddText(self.color, string.format(self.format, (speaker and speaker.Name and speaker:Name() or data and data.speakerName and data.speakerName or ""), text))
end
end
ix.chat.Register("broadcast", CLASS)
end
do
local CLASS = {}
CLASS.color = Color(151, 161, 255)
CLASS.format = "*** %s %s"
function CLASS:CanSay(speaker, text)
if (speaker:Team() != FACTION_ADMIN and !speaker:GetCharacter():GetInventory():HasItem("broadcasting_device")) then
speaker:NotifyLocalized("notAllowed")
return false
end
end
local broadcastIcon = ix.util.GetMaterial("willardnetworks/chat/broadcast_icon.png")
function CLASS:OnChatAdd(speaker, text)
if ix.option.Get("standardIconsEnabled") then
chat.AddText(broadcastIcon, self.color, string.format(self.format, (speaker and speaker.Name and speaker:Name() or ""), text))
else
chat.AddText(self.color, string.format(self.format, (speaker and speaker.Name and speaker:Name() or ""), text))
end
end
ix.chat.Register("broadcastMe", CLASS)
end
do
local CLASS = {}
CLASS.color = Color(151, 161, 255)
CLASS.format = "***' %s"
function CLASS:CanSay(speaker, text)
if (speaker:Team() != FACTION_ADMIN and !speaker:GetCharacter():GetInventory():HasItem("broadcasting_device")) then
speaker:NotifyLocalized("notAllowed")
return false
end
end
local broadcastIcon = ix.util.GetMaterial("willardnetworks/chat/broadcast_icon.png")
function CLASS:OnChatAdd(speaker, text)
if ix.option.Get("standardIconsEnabled") then
chat.AddText(broadcastIcon, self.color, string.format(self.format, text))
else
chat.AddText(self.color, string.format(self.format, text))
end
end
ix.chat.Register("broadcastIt", CLASS)
end
ix.chat.Register("wd", {
format = "%s whispers to %s \"%s\"",
icon = "willardnetworks/chat/whisper_icon.png",
color = Color(158, 162, 191, 255),
OnChatAdd = function(self, speaker, text, bAnonymous, data)
local name = bAnonymous and L"someone" or hook.Run("GetCharacterName", speaker, chatType) or (IsValid(speaker) and speaker:Name() or "Console")
local targetName = bAnonymous and L"someone" or hook.Run("GetCharacterName", data.target, chatType) or (IsValid(data.target) and data.target:Name() or "Console")
local oldFont = self.font
local font = hook.Run("GetSpeakerFont", speaker)
self.font = font
if (ix.option.Get("standardIconsEnabled")) then
chat.AddText(ix.util.GetMaterial(self.icon), self.color, string.format(self.format, name, targetName, text))
else
chat.AddText(self.color, string.format(self.format, name, targetName, text))
end
self.font = oldFont
end,
prefix = {"/W", "/Whisper"},
description = "@cmdW",
indicator = "chatWhispering"
})
function Schema:IsVowel(letter)
letter = string.utf8lower(letter);
return (letter == "a" or letter == "e" or letter == "i"
or letter == "o" or letter == "u");
end
function Schema:FirstToUpper(str)
return (str:gsub("^%l", string.upper))
end
function Schema:Pluralize(text)
if (string.utf8sub(text, -2) != "fe") then
local lastLetter = string.utf8sub(text, -1)
if (lastLetter == "y") then
if (self:IsVowel(string.utf8sub(text, string.utf8len(text) - 1, 2))) then
return string.utf8sub(text, 1, -2).."ies"
else
return text.."s"
end
elseif (lastLetter == "h") then
return text.."es"
elseif (lastLetter != "s") then
return text.."s"
else
return text
end
else
return string.utf8sub(text, 1, -3).."ves"
end
end
-- A function to shuffle text but still maintain a sort of "readability" xD
function Schema:ShuffleText(shuffleText)
if !isstring(shuffleText) then
return false
end
local shuffleTable = {}
local n = 0
shuffleText:gsub("%a", function(c)
if shuffleTable[c] == nil then
n = n + 1
shuffleTable[n] = c
shuffleTable[c] = n
end
end)
for i = n, 2, -1 do
local j = math.random(i)
shuffleTable[i], shuffleTable[j] = shuffleTable[j] -- , shuffleTable[i] (adding this will cause it to shuffle completely)
end
local shuffledText = shuffleText:gsub("%a", function (c) return shuffleTable[shuffleTable[c]] end)
return shuffledText
end
ix.flag.Add("U", "Access to certain Combine commands.")
ix.flag.Add("M", "Access to modify Combine Locks and Cards")
ix.flag.Add("F", "Access to use or modify Reversed-Engineered Combine Tech")
ix.flag.Add("J", "Access to computer.")
ix.flag.Add("B", "Access to Black Market")
ix.flag.Add("D", "Removes all drug effects")
ix.flag.Add("1", "For BMD Characters - Alpha")
ix.flag.Add("2", "For BMD Characters - Beta")
ix.flag.Add("3", "For BMD Characters - Gamma")
ix.flag.Add("4", "For BMD Characters - Delta")
ix.flag.Add("5", "For BMD Characters - Epsilon")
ix.flag.Add("6", "For BMD Characters - Zeta")