mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
313
gamemodes/darkrp/plugins/combinesuits/sh_plugin.lua
Normal file
313
gamemodes/darkrp/plugins/combinesuits/sh_plugin.lua
Normal file
@@ -0,0 +1,313 @@
|
||||
--[[
|
||||
| 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 ix = ix
|
||||
local CAMI = CAMI
|
||||
local player_manager = player_manager
|
||||
local LocalPlayer = LocalPlayer
|
||||
local bit = bit
|
||||
local string = string
|
||||
local SetNetVar = SetNetVar
|
||||
local net = net
|
||||
local pairs = pairs
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
PLUGIN.name = "Combine Suits"
|
||||
PLUGIN.author = "Gr4Ss"
|
||||
PLUGIN.description = "Adds combine suits and visual stuff."
|
||||
|
||||
ix.util.Include("meta/sh_player.lua")
|
||||
ix.util.Include("meta/sh_character.lua")
|
||||
ix.util.Include("cl_hooks.lua")
|
||||
ix.util.Include("cl_plugin.lua")
|
||||
ix.util.Include("sh_hooks.lua")
|
||||
ix.util.Include("sv_hooks.lua")
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
|
||||
ix.char.RegisterVar("passiveSCProgress", {
|
||||
field = "passiveSCProgress",
|
||||
fieldType = ix.type.number,
|
||||
default = 0,
|
||||
bNoDisplay = true
|
||||
})
|
||||
|
||||
ix.config.Add("passiveStcTimer", 60, "How often, in minutes, CPs should receive STC. Set to 0 to disable.", nil, {
|
||||
data = {min = 0, max = 300}
|
||||
})
|
||||
|
||||
ix.config.Add("suitsNoConnection", false, "Disable some features on Combine suits that require connection to OCIN.", function(oldVal, newVal)
|
||||
if (!SERVER) then return end
|
||||
if (newVal) then
|
||||
SetNetVar("visorStatus", "OFFLINE")
|
||||
SetNetVar("visorColor", "red")
|
||||
SetNetVar("visorText", PLUGIN.visorStatus.offline[1])
|
||||
else
|
||||
SetNetVar("visorStatus", "blue")
|
||||
SetNetVar("visorColor", "blue")
|
||||
SetNetVar("visorText", PLUGIN.visorStatus.blue[1])
|
||||
end
|
||||
end, {
|
||||
category = "Miscellaneous"
|
||||
})
|
||||
|
||||
CAMI.RegisterPrivilege({
|
||||
Name = "Helix - Combine Suit Admin Control",
|
||||
MinAccess = "superadmin"
|
||||
})
|
||||
|
||||
ix.lang.AddTable("english", {
|
||||
optNewCPOverlayEnabled = "Activer overlay PC",
|
||||
optdNewCPOverlayEnabled = "Vous permet de choisir entre l'ancien overlay et le nouvel overlay PC",
|
||||
optCPGUIEnabled = "Activer l'interface graphique PC",
|
||||
optdCPGUIEnabled = "Vous permet d'activer ou de désactiver l'interface graphique PC (GUI)",
|
||||
optCPGUIAlpha = "CP GUI Alpha",
|
||||
optdCPGUIAlpha = "Définit l'alpha (transparence) du PC GUI",
|
||||
optChatterEnabled = "Activer le chat",
|
||||
optChatterInterval = "Intervalle de conversation",
|
||||
optdChatterEnabled = "Activer et désactiver l'émission de messages radio par votre personnage PC à un intervalle donné",
|
||||
optdChatterInterval = "Combien de fois votre personnage doit émettre des messages radio",
|
||||
optOTAESP = "OTA ESP Actif",
|
||||
optdOTAESP = "Activer ou désactiver le ESP OTA mettant en évidence les unités amies",
|
||||
unitOnDuty = "Unité %s en service",
|
||||
unitOffDuty = "Unité %s hors service",
|
||||
unitPromotedPTLead = "Unité %s promue à la tête de l'escouade E-%d",
|
||||
ptEnteredArea = "E-%d relocalisée dans le secteur '%s'",
|
||||
unitEnteredArea = "L'Unité %s entre dans le secteur '%s'",
|
||||
unitCompromised = "ATTENTION ! ANONYMAT DE L'UNITÉ %s COMPROMIS",
|
||||
nexus = "Nexus",
|
||||
suitBiosignalMistmach = "%s : biosignal de la tenue incorrect.",
|
||||
suitDeactivated = "%s : tenue désactivée",
|
||||
suitNoValidFound = "Aucune tenue trouvée à désactiver",
|
||||
suitDeactivateNotif = "TENUE DE L'UNITÉ %s DÉSACTIVÉE",
|
||||
suitDisableTracker = "Le traceur de cette tenue est toujours actif ! S'il n'est pas désactivé, les PC seront alertés chaque fois que cette tenue sera équipée",
|
||||
visorInvalidColor = "Cette couleur de visière n'est pas valide !",
|
||||
visorInvalidCode = "Ce n'est pas un code de visière valide !",
|
||||
optCombineHud = "Activer l'HUD Combine",
|
||||
optdCombineHud = "Activation ou non de l'HUD Combine"
|
||||
})
|
||||
|
||||
ix.lang.AddTable("spanish", {
|
||||
optNewCPOverlayEnabled = "Habilitar la nueva interfaz de PC",
|
||||
unitPromotedPTLead = "Unidad %s ascendida a líder de escuadron-%d",
|
||||
unitOnDuty = "Unidad %s de servicio",
|
||||
nexus = "Nexo",
|
||||
suitDeactivateNotif = "TRAJE DESACTIVADO PARA %s",
|
||||
suitDeactivated = "%s su traje está ahora desactivado.",
|
||||
suitNoValidFound = "No se ha encontrado ningún traje para desactivar.",
|
||||
optdNewCPOverlayEnabled = "Le permite elegir entre la interfaz de CPC clásica o la nueva interfaz de CPC de Willard Networks.",
|
||||
unitOffDuty = "Unidad %s fuera de servicio",
|
||||
unitCompromised = "¡ADVERTENCIA! UNIDAD %s ANONIMIDAD COMPROMETIDA",
|
||||
suitDisableTracker = "El rastreador de este traje sigue activo. Si no se desactiva, la CPC recibirá una alerta cada vez que se equipe este traje.",
|
||||
optCPGUIEnabled = "Habilitar la GUI de CPC",
|
||||
optdCPGUIEnabled = "Permite activar o desactivar la UI del CPC",
|
||||
optdChatterInterval = "Frecuencia con la que tu personaje emite sonidos de radio",
|
||||
suitBiosignalMistmach = "DISCORDANCIA EN LA BIOSEÑAL %s",
|
||||
optdChatterEnabled = "Activa o desactiva que tu Unidad de Protección Civil emita transmisiones de radio en un intervalo establecido",
|
||||
optVoiceToggle = "Alternar voz del juego",
|
||||
optdVoiceToggle = "Cambiar entre voces HL2 o HLA",
|
||||
optCPGUIAlpha = "Canal Alpha del IU de PC",
|
||||
optdOTAESP = "Activa o desactiva el ESP de la OTA destacando a las unidades aliadas",
|
||||
optOTAESP = "Activar ESP de la OTA",
|
||||
optdCPGUIAlpha = "Establece el canal Alfa (Transparencia) de la IU de PC.",
|
||||
ptEnteredArea = "EP-%d relocalizado al vector '%s'",
|
||||
optChatterInterval = "Intervalos de Charla",
|
||||
optChatterEnabled = "Activar Charla",
|
||||
unitEnteredArea = "Unidad %s entrando en el vector '%s'"
|
||||
})
|
||||
|
||||
-- Hand fixes by M!NT
|
||||
for i = 1, 9 do
|
||||
player_manager.AddValidModel("CPModel", "models/wn7new/metropolice/male_0"..i..".mdl")
|
||||
end
|
||||
for i = 1, 7 do
|
||||
player_manager.AddValidModel("CPModel", "models/wn7new/metropolice/female_0"..i..".mdl")
|
||||
end
|
||||
player_manager.AddValidModel("CPModel", "models/willardnetworks/combine/ordinal.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/willardnetworks/combine/soldier.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/willardnetworks/combine/suppressor.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/willardnetworks/combine/charger.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_commander.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_elite.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_elite_summit.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_shotgunner.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_soldier.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/combine_super_soldier.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ota_skylegion.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/wn/ordinal.mdl")
|
||||
player_manager.AddValidModel("CPModel", "models/willardnetworks/combine/antibody.mdl")
|
||||
|
||||
player_manager.AddValidHands("CPModel", "models/weapons/c_arms_combine.mdl", 0, "00000000")
|
||||
|
||||
PLUGIN.ranks = {
|
||||
[1] = "RCT",
|
||||
[2] = "i5",
|
||||
[3] = "i4",
|
||||
[4] = "i3",
|
||||
[5] = "i2",
|
||||
[6] = "i1",
|
||||
[7] = "RL",
|
||||
[8] = "CmD",
|
||||
[9] = "CmD",
|
||||
[10] = false,
|
||||
[11] = "OWS",
|
||||
[12] = "ORD",
|
||||
[13] = "EOW",
|
||||
[14] = false,
|
||||
[15] = "SCN",
|
||||
[16] = "Disp:AI",
|
||||
[17] = "OCIN:AI"
|
||||
}
|
||||
|
||||
PLUGIN.visorStatus = {
|
||||
blue = {"SOCIO-STABILITÉ INTACTE", "blue"},
|
||||
yellow = {"SOCIO-STABILITÉ MARGINALE", "yellow"},
|
||||
orange = {"SOCIO-STABILITÉ CRITIQUE", "orange"},
|
||||
unrest = {"SOCIO-STABILITÉ CRITIQUE. CODE SINISTRE EN VIGUEUR", "orange"},
|
||||
red = {"SOCIO-STABILITÉ CRITIQUE FRACTURÉE.", "red"},
|
||||
jw = {"SOCIO-STABILITÉ CRITIQUE FRACTURÉE. ABANDON DU JUGEMENT EN VIGUEUR", "red"},
|
||||
black = {"SOCIO-STABILITÉ PERDUE. CODE SACRIFIÉ EN VIGUEUR. REPRENEZ LE CONTRÔLE IMMÉDIATEMENT", "white"},
|
||||
ajw = {"SOCIO-STABILITÉ PERDUE. ABANDON DU JUGEMENT AUTONOME EN VIGUEUR", "white"},
|
||||
totalr = {"RESTITUTION TOTALE. EVACUER.", "white"},
|
||||
offline = {"ÉCHEC DE L'ÉTABLISSEMENT D'UNE CONNEXION SÉCURISÉE OCIN", "red"}
|
||||
}
|
||||
|
||||
ix.option.Add("CPGUIAlpha", ix.type.number, 60, {
|
||||
category = "Protection Civile",
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
min = 0,
|
||||
max = 100
|
||||
})
|
||||
|
||||
ix.option.Add("OTAESP", ix.type.bool, true, {
|
||||
bNetworked = true,
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
category = "Protection Civile"
|
||||
})
|
||||
|
||||
ix.option.Add("CombineHud", ix.type.bool, true, {
|
||||
bNetworked = true,
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
category = "Protection Civile"
|
||||
})
|
||||
|
||||
ix.option.Add("ChatterEnabled", ix.type.bool, true, {
|
||||
bNetworked = true,
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
category = "Protection Civile"
|
||||
})
|
||||
ix.option.Add("ChatterInterval", ix.type.number, 120, {
|
||||
bNetworked = true,
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
category = "Protection Civile",
|
||||
min = 120,
|
||||
max = 600
|
||||
})
|
||||
ix.option.Add("VoiceToggle", ix.type.bool, true, {
|
||||
bNetworked = true,
|
||||
hidden = function()
|
||||
return !ix.faction.Get(LocalPlayer():Team()).isCombineFaction and !LocalPlayer():HasActiveCombineSuit()
|
||||
end,
|
||||
category = "civilprot"
|
||||
})
|
||||
|
||||
ix.char.RegisterVar("combineSuit", {
|
||||
default = 0,
|
||||
bNoDisplay = true,
|
||||
})
|
||||
|
||||
ix.command.Add("VisorStatus", {
|
||||
description = "Notify all combine factions\nPreset: <string Code (blue, yellow, orange, unrest, red, jw, black, totalr)>\nCustom: <string Color (blue, yellow, orange, red, black)> <string CustomText>.",
|
||||
arguments = {
|
||||
ix.type.string,
|
||||
bit.bor(ix.type.text, ix.type.optional)
|
||||
},
|
||||
OnCheckAccess = function(self, client)
|
||||
if (ix.config.Get("suitsNoConnection")) then return false end
|
||||
|
||||
return (client:HasActiveCombineSuit() and client:IsCombineRankAbove("i1") and client:GetActiveCombineSuit().isCP) or client:IsDispatch()
|
||||
end,
|
||||
OnRun = function(self, client, color, text)
|
||||
color = string.utf8lower(color)
|
||||
|
||||
if (text and text != "") then
|
||||
if (!Schema.colors[color]) then
|
||||
client:NotifyLocalized("visorInvalidColor", color)
|
||||
return
|
||||
end
|
||||
|
||||
ix.combineNotify:AddImportantNotification("WRN:// Socio-Statut mis à jour sur " .. string.utf8upper(text) .. " par " .. client:GetCombineTag(), Schema.colors[color])
|
||||
|
||||
SetNetVar("visorStatus", color)
|
||||
SetNetVar("visorColor", color)
|
||||
SetNetVar("visorText", string.utf8upper(text))
|
||||
else
|
||||
if (!PLUGIN.visorStatus[color]) then
|
||||
client:NotifyLocalized("visorInvalidCode", color)
|
||||
return
|
||||
end
|
||||
|
||||
ix.combineNotify:AddImportantNotification("WRN:// Socio-Statut mis à jour sur " .. string.utf8upper(color) .. " par " .. client:GetCombineTag(), Schema.colors[PLUGIN.visorStatus[color][2]])
|
||||
|
||||
SetNetVar("visorColor", PLUGIN.visorStatus[color][2])
|
||||
SetNetVar("visorText", PLUGIN.visorStatus[color][1])
|
||||
if color == "totalr" then
|
||||
color = "total rendition"
|
||||
elseif color == "jw" then
|
||||
color = "judgement waiver"
|
||||
end
|
||||
SetNetVar("visorStatus", color)
|
||||
end
|
||||
|
||||
if (color == "blue") then
|
||||
net.Start("ixVisorNotify")
|
||||
net.Broadcast()
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("SuitDeactivate", {
|
||||
description = "Remotely deactivates someone's Combine Suit.",
|
||||
arguments = {
|
||||
ix.type.character,
|
||||
},
|
||||
OnCheckAccess = function(self, client)
|
||||
return (client:HasActiveCombineSuit() and client:IsCombineRankAbove("RL") and client:GetActiveCombineSuit().isCP) or client:IsDispatch()
|
||||
end,
|
||||
OnRun = function(self, client, character)
|
||||
local items = character:GetInventory():GetItems()
|
||||
local found = false
|
||||
|
||||
for _, v in pairs(items) do
|
||||
if ((v.isCP or v.isOTA) and v:GetData("suitActive") and v:GetData("ownerID") == character:GetID()) then
|
||||
v:SetData("suitActive", false)
|
||||
found = v
|
||||
end
|
||||
end
|
||||
|
||||
if (found) then
|
||||
client:NotifyLocalized("suitDeactivated", found:GetData("ownerName"))
|
||||
ix.combineNotify:AddImportantNotification("WRN:// Tenue désactivée pour " .. found:GetData("ownerName", "INCONNU"), nil, found:GetData("trackingActive") and client, found:GetData("trackingActive") and client:GetPos(), nil)
|
||||
else
|
||||
client:NotifyLocalized("suitNoValidFound")
|
||||
end
|
||||
end
|
||||
})
|
||||
Reference in New Issue
Block a user