--[[ | 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") ix.anim.SetModelClass("models/willardnetworks/combine/ordinal.mdl", "overwatch") ix.anim.SetModelClass("models/wn/soldier.mdl", "overwatch") ix.anim.SetModelClass("models/willardnetworks/combine/soldier.mdl", "overwatch") ix.anim.SetModelClass("models/willardnetworks/combine/suppressor.mdl", "overwatch") ix.anim.SetModelClass("models/willardnetworks/combine/charger.mdl", "overwatch") ix.anim.SetModelClass("models/echoone/hla/ordinal/eoordinal.mdl", "overwatch") ix.anim.SetModelClass("models/nemez/combine_soldiers/combine_soldier_elite_wpu_h.mdl", "overwatch") ix.anim.SetModelClass("models/nemez/combine_soldiers/combine_soldier_h.mdl", "overwatch") ix.anim.SetModelClass("models/nemez/combine_soldiers/combine_soldier_recon_h.mdl", "overwatch") -- 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 -- Combine 2.0 pack ix.anim.SetModelClass("models/hlvr/characters/hazmat_worker/npc/wneo_hazmat_worker.mdl", "citizen_male") 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") -- jQueary Half-Life: Alyx Combine Soldiers ix.anim.SetModelClass("models/jq/hlvr/characters/combine/combine_captain/combine_captain_hlvr_ragdoll.mdl", "overwatch") ix.anim.SetModelClass("models/jq/hlvr/characters/combine/grunt/combine_grunt_hlvr_ragdoll.mdl", "overwatch") ix.anim.SetModelClass("models/jq/hlvr/characters/combine/heavy/combine_heavy_hlvr_ragdoll.mdl", "overwatch") ix.anim.SetModelClass("models/jq/hlvr/characters/combine/suppressor/combine_suppressor_hlvr_ragdoll.mdl", "overwatch") ix.anim.SetModelClass("models/theparrygod/transition_shotgunner.mdl", "overwatch") if (SERVER) then resource.AddWorkshop("2447774443") -- STORMFOX resource.AddWorkshop("2350858257") -- eProtect resource.AddWorkshop("2875205147") -- Willard Sound Pack resource.AddWorkshop("2473879362") -- Willard 2.0 Combine Pack resource.AddWorkshop("2447979470") -- STORMFOX CONTENT resource.AddWorkshop("2206993805") -- SLIB resource.AddWorkshop("2920298301") -- Willard Networks V2 Models resource.AddWorkshop("2066864990") -- WN CONTENT PACK resource.AddWorkshop("2131057232") -- ArcCW BASE resource.AddWorkshop("2847969071") -- ArcCW Junk resource.AddWorkshop("2844521758") -- ArcCW Overwatch Weapons resource.AddWorkshop("2849833628") -- ArcCW Unusual resource.AddWorkshop("2043900984") -- Infestation Control props resource.AddWorkshop("2230543274") -- Precision Tool resource.AddWorkshop("264467687") -- Sky's HL2RP resource.AddWorkshop("1907060869") -- Image Tool resource.AddWorkshop("104603291") -- Extended Spawnmenu resource.AddWorkshop("2911725032") -- Enhanced Ammunition resource.AddWorkshop("3052473609") -- Map & Content I13 resource.AddWorkshop("493751477") -- Advanced Light Entites resource.AddWorkshop("104619813") -- Half Life 2 Tools resource.AddWorkshop("105565372") -- Half Life 2 Extra resource.AddWorkshop("104607712") -- Extended Properties resource.AddWorkshop("104604709") -- Easy Animation Tool resource.AddWorkshop("116892991") -- Resizer resource.AddWorkshop("108024198") -- Food and household resource.AddWorkshop("2225220690") -- Xen Foam Pack resource.AddWorkshop("2228994615") -- Xen Pack resource.AddWorkshop("1551310214") -- Placeable Particle Effects resource.AddWorkshop("2213193621") -- NPC Tools 2 resource.AddWorkshop("399012711") -- Matrix SFX resource.AddWorkshop("950845673") -- Pills Pack resource.AddWorkshop("417428923") -- Episodic Pills Pack resource.AddWorkshop("225481532") -- Special Effect resource.AddWorkshop("2052642961") -- SNPC Particles Effect resource.AddWorkshop("131759821") -- VJ BASE resource.AddWorkshop("2754008911") -- Glossy Foliage resource.AddWorkshop("1158858580") -- Fallout resource.AddWorkshop("3003703539") -- WN Content - French 1 G resource.AddWorkshop("2870384635") -- The Ultra xen resource.AddWorkshop("522292706") -- Schnitzel's COMPLETE Office Prop Pack 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 = "[Haut-Parleurs] %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 demande \"%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 diffuse \"%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 ix.chat.Register("wd", { format = "%s chuchote à %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", "Accès à certaines commandes Combine.") ix.flag.Add("M", "Accès à modifié des cartes et des vérous combine") ix.flag.Add("F", "Accès pour utiliser ou modifier la technologie Combine") ix.flag.Add("J", "Accès à l'ordinateur.") ix.flag.Add("B", "Accès au marché noir") ix.flag.Add("K", "Accès à Blacker Market comprend pas mdrrrr")