Залив
This commit is contained in:
13
gamemodes/cod_custom/gamemode/cl_init.lua
Normal file
13
gamemodes/cod_custom/gamemode/cl_init.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
include("shared.lua")
|
||||
include('client/cl_hud.lua')
|
||||
include("client/cl_outline.lua")
|
||||
include("client/cl_menu.lua")
|
||||
include("client/cl_takedown.lua")
|
||||
include("client/cl_scoreboard.lua")
|
||||
include("client/cl_abilities.lua")
|
||||
include("client/cl_killfeed.lua")
|
||||
include("client/cl_radar.lua")
|
||||
include("client/cl_cutscenes.lua")
|
||||
include("client/cl_killcam.lua")
|
||||
include("client/cl_error.lua")
|
||||
include("post_shared.lua")
|
||||
109
gamemodes/cod_custom/gamemode/client/cl_abilities.lua
Normal file
109
gamemodes/cod_custom/gamemode/client/cl_abilities.lua
Normal file
@@ -0,0 +1,109 @@
|
||||
local meta = FindMetaTable("Player")
|
||||
|
||||
function meta:IsDowned()
|
||||
return self:GetNWBool('Downed')
|
||||
end
|
||||
|
||||
function meta:MovingDirection(threshold) --This function was made by OpenAI ChatGPT
|
||||
threshold = threshold or 0.1
|
||||
local vel = self:GetVelocity()
|
||||
local forward = self:GetForward()
|
||||
local right = self:GetRight()
|
||||
local forwardDot = vel:Dot(forward)
|
||||
local rightDot = vel:Dot(right)
|
||||
|
||||
if forwardDot > threshold then
|
||||
return "forward"
|
||||
elseif forwardDot < -threshold then
|
||||
return "backward"
|
||||
end
|
||||
|
||||
if rightDot > threshold then
|
||||
return "right"
|
||||
elseif rightDot < -threshold then
|
||||
return "left"
|
||||
end
|
||||
|
||||
return "stand"
|
||||
end
|
||||
|
||||
hook.Add("CalcMainActivity", "TDMAnimsRevive", function(ply, vel)
|
||||
if ply:IsDowned() and ply:GetNWString('SVAnim') == "" then
|
||||
local anim1 = ply:LookupSequence("laststand_idle")
|
||||
local anim2 = ply:LookupSequence("laststand_crawl_forward")
|
||||
local anim3 = ply:LookupSequence("laststand_crawl_backward")
|
||||
local anim4 = ply:LookupSequence("laststand_crawl_left")
|
||||
local anim5 = ply:LookupSequence("laststand_crawl_right")
|
||||
local dir = ply:MovingDirection(4)
|
||||
local vel = ply:GetVelocity():Length2D() > 10
|
||||
if dir == "forward" and vel then
|
||||
return -1, anim2
|
||||
elseif dir == "backward" and vel then
|
||||
return -1, anim3
|
||||
elseif dir == "left" and vel then
|
||||
return -1, anim4
|
||||
elseif dir == "right" and vel then
|
||||
return -1, anim5
|
||||
else
|
||||
return -1, anim1
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMRevive", function()
|
||||
local ply = LocalPlayer()
|
||||
if ply:IsDowned() and ply:Alive() and !ply:ShouldDrawLocalPlayer() then
|
||||
if not model then
|
||||
model = ClientsideModel(ply:GetModel())
|
||||
end
|
||||
model:SetNoDraw(false)
|
||||
model:SetAngles(Angle(0,ply:GetAngles().y+10,0))
|
||||
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_R_Forearm'), Angle(0,270,0))
|
||||
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_L_Forearm'), Angle(0,270,0))
|
||||
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_R_UpperArm'), Angle(0,270,0))
|
||||
model:SetCycle(ply:GetCycle())
|
||||
model:SetModel(ply:GetModel())
|
||||
|
||||
local vel = ply:GetVelocity()
|
||||
local anim1 = ply:LookupSequence("laststand_idle")
|
||||
local anim2 = ply:LookupSequence("laststand_crawl_forward")
|
||||
local anim3 = ply:LookupSequence("laststand_crawl_backward")
|
||||
local anim4 = ply:LookupSequence("laststand_crawl_left")
|
||||
local anim5 = ply:LookupSequence("laststand_crawl_right")
|
||||
local speed = vel:Length2D() > 5
|
||||
local dir = ply:MovingDirection(8)
|
||||
|
||||
if ply:EyeAngles().x > 25 then
|
||||
ply:SetEyeAngles(Angle(25, ply:EyeAngles().y, 0))
|
||||
end
|
||||
if ply:EyeAngles().x < -25 then
|
||||
ply:SetEyeAngles(Angle(-25, ply:EyeAngles().y, 0))
|
||||
end
|
||||
if dir == "forward" and speed then
|
||||
model:ResetSequence(anim2)
|
||||
elseif dir == "backward" and speed then
|
||||
model:ResetSequence(anim3)
|
||||
elseif dir == "left" and speed then
|
||||
model:ResetSequence(anim4)
|
||||
elseif dir == "right" and speed then
|
||||
model:ResetSequence(anim5)
|
||||
else
|
||||
model:ResetSequence(anim1)
|
||||
end
|
||||
model:SetPos(ply:GetPos()+Vector(0,0,4)+ply:GetForward()*8+ply:GetRight()*8)
|
||||
else
|
||||
if model then
|
||||
model:SetNoDraw(true)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local delay = CurTime()+5
|
||||
hook.Add("Think", "TDMApplyCommands", function()
|
||||
if delay < CurTime() then
|
||||
delay = CurTime()+5
|
||||
for k, v in pairs(COD.ApplyCommands["Client"]) do
|
||||
RunConsoleCommand(k, v)
|
||||
end
|
||||
end
|
||||
end)
|
||||
58
gamemodes/cod_custom/gamemode/client/cl_cutscenes.lua
Normal file
58
gamemodes/cod_custom/gamemode/client/cl_cutscenes.lua
Normal file
@@ -0,0 +1,58 @@
|
||||
local cutscene_table = {
|
||||
[1] = {},
|
||||
[2] = {},
|
||||
[3] = {},
|
||||
[4] = {},
|
||||
}
|
||||
|
||||
function COD:PrecacheCutscene(path, frames, dest)
|
||||
for i=1,frames do
|
||||
local num = i
|
||||
if num < 10 then
|
||||
num = "000"..num
|
||||
elseif num < 100 then
|
||||
num = "00"..num
|
||||
elseif num < 1000 then
|
||||
num = "0"..num
|
||||
end
|
||||
local mat = Material(path..num..".jpg")
|
||||
table.insert(dest, mat)
|
||||
end
|
||||
end
|
||||
|
||||
function COD:PlayCutscene(tab, sound, fps, screenfade)
|
||||
local time = 0
|
||||
local tab = cutscene_table[tab]
|
||||
surface.PlaySound(sound)
|
||||
hook.Add("HUDPaint", "!!!CODCutscene", function()
|
||||
time = time + FrameTime()
|
||||
local frame = math.ceil(time/(1/fps))
|
||||
|
||||
if frame > #tab then
|
||||
hook.Remove("HUDPaint", "!!!CODCutscene")
|
||||
COD.HideHUD = false
|
||||
if screenfade then
|
||||
LocalPlayer():ScreenFade(SCREENFADE.IN, color_black, 1, 1)
|
||||
end
|
||||
else
|
||||
surface.SetMaterial(tab[frame])
|
||||
surface.SetDrawColor(255,255,255)
|
||||
surface.DrawTexturedRect(0, 0, ScrW(), ScrH())
|
||||
COD.HideHUD = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
COD:PrecacheCutscene("tdmg/heli/spawn_cutscene/", 111, cutscene_table[1])
|
||||
COD:PrecacheCutscene("tdmg/heli/shotdown_bullet_cutscene/", 117, cutscene_table[2])
|
||||
COD:PrecacheCutscene("tdmg/heli/shotdown_rocket_cutscene/", 100, cutscene_table[3])
|
||||
COD:PrecacheCutscene("tdmg/nuke/explode_cutscene/", 296, cutscene_table[4])
|
||||
|
||||
net.Receive("COD.Cutscene", function()
|
||||
local tab = net.ReadTable()
|
||||
local num = tab.num_of_cutscene
|
||||
local snd = tab.path_of_sound
|
||||
local fps = tab.fps
|
||||
local scr = tab.screenfade
|
||||
COD:PlayCutscene(num, snd, fps, scr)
|
||||
end)
|
||||
46
gamemodes/cod_custom/gamemode/client/cl_error.lua
Normal file
46
gamemodes/cod_custom/gamemode/client/cl_error.lua
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
local noafk = false
|
||||
hook.Add("Think", "ButtonCheckErrors", function()
|
||||
local ply = LocalPlayer()
|
||||
if ply:KeyDown(IN_FORWARD) then
|
||||
noafk = true
|
||||
end
|
||||
if noafk then
|
||||
hook.Remove("Think", "ButtonCheckErrors")
|
||||
|
||||
local mod = ClientsideModel("models/player/breen.mdl")
|
||||
timer.Simple(1, function()
|
||||
local seq = mod:LookupSequence("laststand_idle")
|
||||
mod:Remove()
|
||||
|
||||
if seq == -1 then
|
||||
local frame = vgui.Create("DFrame")
|
||||
frame:SetSize( 300, 150 )
|
||||
frame:Center()
|
||||
frame:SetTitle("CUSTOM ANIMS DONT WORK!")
|
||||
frame:MakePopup()
|
||||
|
||||
local Labels = vgui.Create("DLabel", frame)
|
||||
Labels:SetText("Animations don't work! You can try to fix them using this button. If you still see T-Pose animations or game crashing, then try restarting the game and removing the animation mods.")
|
||||
Labels:SetWrap(true)
|
||||
Labels:SetPos( 25, 25 )
|
||||
Labels:SetSize( 250, 75 )
|
||||
|
||||
local DermaButton = vgui.Create("DButton", frame)
|
||||
DermaButton:SetText("Try Fix")
|
||||
DermaButton:SetPos( 25, 100 )
|
||||
DermaButton:SetSize( 250, 30 )
|
||||
DermaButton.DoClick = function()
|
||||
RunConsoleCommand("wos_dynabase_fixconflicts")
|
||||
RunConsoleCommand("wos_dynabase_reloadmodels")
|
||||
frame:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
if jit.version_num != 20100 then
|
||||
surface.PlaySound("npc/turret_floor/ping.wav")
|
||||
chat.AddText(Color(255,0,0), "[WARNING] ", Color(255,255,255), "I advise you to install the x64 version to avoid errors and improve performance.")
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
1368
gamemodes/cod_custom/gamemode/client/cl_hud.lua
Normal file
1368
gamemodes/cod_custom/gamemode/client/cl_hud.lua
Normal file
File diff suppressed because it is too large
Load Diff
225
gamemodes/cod_custom/gamemode/client/cl_killcam.lua
Normal file
225
gamemodes/cod_custom/gamemode/client/cl_killcam.lua
Normal file
@@ -0,0 +1,225 @@
|
||||
local TickTable = {}
|
||||
local KillCamStore = {}
|
||||
local hm_mat = Material('tdmg/hud/hitmark.png')
|
||||
|
||||
local function TransferBones(base, ragdoll)
|
||||
if !IsValid(base) or !IsValid(ragdoll) then return end
|
||||
for i = 0, ragdoll:GetPhysicsObjectCount() - 1 do
|
||||
local bone = ragdoll:GetPhysicsObjectNum( i )
|
||||
if ( IsValid( bone ) ) then
|
||||
local pos, ang = base:GetBonePosition( ragdoll:TranslatePhysBoneToBone( i ) )
|
||||
if ( pos ) then bone:SetPos( pos ) end
|
||||
if ( ang ) then bone:SetAngles( ang ) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function GiveHitMarker(kill)
|
||||
local alpha = 255
|
||||
if not kill then
|
||||
surface.PlaySound("tdmg/impacts/hit.wav")
|
||||
hook.Add("HUDPaint", "TDMGHitsMark", function()
|
||||
surface.SetDrawColor(255,255,255,alpha)
|
||||
surface.SetMaterial(hm_mat)
|
||||
surface.DrawTexturedRect(ScrW()/2-32, ScrH()/2-32, 64, 64)
|
||||
alpha = alpha - FrameTime()*500
|
||||
if alpha <= 0 then
|
||||
hook.Remove("HUDPaint", "TDMGHitsMark")
|
||||
end
|
||||
end)
|
||||
else
|
||||
surface.PlaySound("tdmg/impacts/kill.wav")
|
||||
hook.Add("HUDPaint", "TDMGHitsMark", function()
|
||||
surface.SetDrawColor(220,40,40,alpha)
|
||||
surface.SetMaterial(hm_mat)
|
||||
surface.DrawTexturedRect(ScrW()/2-32, ScrH()/2-32, 64, 64)
|
||||
alpha = alpha - FrameTime()*500
|
||||
if alpha <= 0 then
|
||||
hook.Remove("HUDPaint", "TDMGHitsMark")
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function COD:StopKillcam()
|
||||
local ply = LocalPlayer()
|
||||
hook.Remove("HUDPaint", "!!!KillCamTDM")
|
||||
hook.Remove("Tick", "!!!KillCamTDM")
|
||||
hook.Remove("CalcView", "!!!KillCamTDM")
|
||||
ply.InKillCam = false
|
||||
COD.HideHUD = false
|
||||
ply:ConCommand("-jump")
|
||||
ply:ConCommand("+jump")
|
||||
timer.Simple(0.1, function()
|
||||
ply:ConCommand("-jump")
|
||||
end)
|
||||
ply:ScreenFade(SCREENFADE.IN, color_black, 0.5, 0)
|
||||
for _, ent in ipairs(ents.GetAll()) do
|
||||
if not ent.IsKillcamEnt and (ent:IsPlayer() or ent:IsNPC() or ent:IsWeapon() or ent:GetClass() == "prop_ragdoll" or string.match(ent:GetClass(), "tdm_")) then
|
||||
ent:SetNoDraw(false)
|
||||
end
|
||||
end
|
||||
for _, ent in pairs(KillCamStore) do
|
||||
ent:SetNoDraw(true)
|
||||
ent:Remove()
|
||||
end
|
||||
KillCamStore = {}
|
||||
end
|
||||
|
||||
function COD:GetMeFromTable(tab)
|
||||
local tab2 = tab.other
|
||||
for k=1,#tab2.ent do
|
||||
local v = tab2.ent[k]
|
||||
if v == LocalPlayer():EntIndex() then
|
||||
return tab.other.alive[k], tab.other.pos[k], tab.other.ang[k]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function COD:PlayKillcam(tabl, islast)
|
||||
if !GetConVar("cod_killcam_enable"):GetBool() and not islast then return end
|
||||
|
||||
local frame = 0
|
||||
local tab = tabl[frame]
|
||||
|
||||
LocalPlayer():ScreenFade(SCREENFADE.IN, color_black, 0.5, 0)
|
||||
|
||||
hook.Add("HUDPaint", "!!!KillCamTDM", function()
|
||||
if istable(tab) then
|
||||
local alive, opos = COD:GetMeFromTable(tab)
|
||||
|
||||
if alive then
|
||||
local pos = (opos+Vector(0,0,72)):ToScreen()
|
||||
draw.SimpleText("YOU", "TDMG_SmallFont1", pos.x, pos.y-16, Color(200,150,0), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
draw.SimpleText("▼", "TDMG_SmallFont1", pos.x, pos.y, Color(200,150,0), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
end
|
||||
end
|
||||
|
||||
surface.SetDrawColor(0,0,0,200)
|
||||
surface.DrawRect(0, 0, ScrW(), 100)
|
||||
|
||||
surface.SetDrawColor(0,0,0,200)
|
||||
surface.DrawRect(0, ScrH()-100, ScrW(), 100)
|
||||
|
||||
if islast then
|
||||
draw.SimpleText(COD.Language["killcam_2"], "TDMG_LargeFont1", ScrW()/2, 50, color_white, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
else
|
||||
draw.SimpleText(COD.Language["killcam_1"], "TDMG_LargeFont1", ScrW()/2, 50, color_white, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
draw.SimpleText(COD.Language["killcam_3"], "TDMG_MediumFont1", ScrW()/2, ScrH()-50, color_white, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Tick", "!!!KillCamTDM", function(ply, origin, angles, fov)
|
||||
local ply = LocalPlayer()
|
||||
local drawframes = true
|
||||
ply.InKillCam = true
|
||||
frame = frame + 1
|
||||
tab = tabl[math.ceil(frame)]
|
||||
COD.HideHUD = true
|
||||
|
||||
if frame >= #tabl or ply:KeyDown(IN_JUMP) or COD.HUD_DisableSomeThink then
|
||||
COD:StopKillcam()
|
||||
drawframes = false
|
||||
end
|
||||
|
||||
if drawframes then
|
||||
if istable(tab) then
|
||||
local s1 = tab.ply.snd
|
||||
|
||||
if istable(s1) then
|
||||
for _, ss in ipairs(s1) do
|
||||
ply:EmitSound(ss)
|
||||
end
|
||||
tab.ply.snd = ""
|
||||
end
|
||||
|
||||
local b1 = tab.ply.blt
|
||||
if b1 != {} then
|
||||
b1.Callback = nil
|
||||
b1.Tracer = 0
|
||||
ply:FireBullets(b1)
|
||||
tab.ply.blt = {}
|
||||
end
|
||||
|
||||
local hit = tab.ply.hit
|
||||
if hit == 1 then
|
||||
GiveHitMarker()
|
||||
elseif hit == 2 then
|
||||
GiveHitMarker(true)
|
||||
end
|
||||
|
||||
local tab2 = tab.other
|
||||
|
||||
for v, ent in pairs(tab2.ent) do
|
||||
local ent = Entity(ent)
|
||||
if !IsValid(ent.KCModel) and tab2.model[v] != "" then
|
||||
ent.KCModel = ClientsideModel(tab2.model[v])
|
||||
table.insert(KillCamStore, ent.KCModel)
|
||||
else
|
||||
ent.KCModel.IsKillcamEnt = true
|
||||
ent.KCModel:SetPos(tab2.pos[v])
|
||||
ent.KCModel:SetAngles(tab2.ang[v])
|
||||
ent.KCModel:SetModel(tab2.model[v])
|
||||
ent.KCModel:SetSequence(tab2.seq[v])
|
||||
ent.KCModel:SetPoseParameter("move_x", 1)
|
||||
ent.KCModel:SetCycle(tab2.cycle[v])
|
||||
ent.KCModel:SetNoDraw(!tab2.alive[v])
|
||||
if tab2.alive[v] then
|
||||
ent.SpawnRagdoll = false
|
||||
end
|
||||
if !tab2.alive[v] and !ent.SpawnRagdoll then
|
||||
ent.SpawnRagdoll = true
|
||||
local rag = ClientsideRagdoll(tab2.model[v])
|
||||
rag:SetPos(tab2.pos[v])
|
||||
rag.IsKillcamEnt = true
|
||||
rag:SetNoDraw(false)
|
||||
table.insert(KillCamStore, rag)
|
||||
TransferBones(ent.KCModel, rag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _, ent in ipairs(ents.GetAll()) do
|
||||
if not ent.IsKillcamEnt and (ent:IsPlayer() or ent:IsNPC() or ent:IsWeapon() or ent:GetClass() == "prop_ragdoll" or string.match(ent:GetClass(), "tdm_")) then
|
||||
ent:SetNoDraw(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local lastang =
|
||||
hook.Add("CalcView", "!!!KillCamTDM", function(ply, origin, angles, fov)
|
||||
if istable(tab) then
|
||||
lastang = tab.ply.ang
|
||||
if tab.ply.lock then
|
||||
local alive, pos = COD:GetMeFromTable(tab)
|
||||
if alive and isvector(pos) then
|
||||
pos = pos+Vector(0,0,32)
|
||||
lastang = (pos-tab.ply.pos):GetNormalized():Angle()
|
||||
end
|
||||
end
|
||||
|
||||
local view = {
|
||||
origin = tab.ply.pos,
|
||||
angles = lastang,
|
||||
fov = fov,
|
||||
drawviewer = false,
|
||||
znear = 0.1,
|
||||
zfar = 10000,
|
||||
}
|
||||
|
||||
return view
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
net.Receive("COD.KillcamSend", function()
|
||||
local flt = net.ReadUInt(32)
|
||||
local tab = net.ReadData(flt)
|
||||
local bool = net.ReadBool()
|
||||
tab = util.Decompress(tab)
|
||||
local tab2 = util.JSONToTable(tab)
|
||||
|
||||
COD:PlayKillcam(tab2, bool)
|
||||
end)
|
||||
84
gamemodes/cod_custom/gamemode/client/cl_killfeed.lua
Normal file
84
gamemodes/cod_custom/gamemode/client/cl_killfeed.lua
Normal file
@@ -0,0 +1,84 @@
|
||||
local killfeed = vgui.Create("DPanel")
|
||||
killfeed:SetSize(500, 290)
|
||||
killfeed:SetPos(10, 400)
|
||||
killfeed.Paint = function(self, w, h) end
|
||||
|
||||
local nametab = {
|
||||
["prop_dynamic"] = "Killstreak",
|
||||
["env_explosion"] = "Explosion",
|
||||
["tdm_package"] = "Care Package",
|
||||
["vj_tdm_k9"] = "Dog",
|
||||
["vj_tdm_npc"] = "AI Soldier",
|
||||
}
|
||||
|
||||
killicon.Add("default", "tdmg/hud/skull", Color(255,255,255))
|
||||
killicon.Add("takedown", "tdmg/hud/takedown", Color(255,255,255))
|
||||
killicon.Add("knife", "tdmg/hud/knife", Color(255,255,255))
|
||||
killicon.Add("explosion", "tdmg/hud/explosion", Color(255,255,255))
|
||||
|
||||
local function AddKillfeedEntry(attacker, inflictor, killed)
|
||||
if !IsValid(killed) then return end
|
||||
|
||||
local entry = vgui.Create("DPanel", killfeed)
|
||||
entry:SetSize(200, 30)
|
||||
entry:Dock(TOP)
|
||||
entry:DockMargin(5, 5, 5, 0)
|
||||
entry.Paint = function(self, w, h) end
|
||||
|
||||
local color1 = Color(255, 255, 255)
|
||||
local name = ""
|
||||
|
||||
if IsValid(attacker) and attacker != killed then
|
||||
if attacker:IsPlayer() then
|
||||
name = attacker:Nick()
|
||||
color1 = team.GetColor(attacker:Team())
|
||||
elseif attacker:GetNWFloat('Team') then
|
||||
name = nametab[attacker:GetClass()] or attacker.PrintName or attacker:GetClass()
|
||||
color1 = team.GetColor(attacker:GetNWFloat('Team'))
|
||||
else
|
||||
name = nametab[attacker:GetClass()] or attacker.PrintName or attacker:GetClass()
|
||||
color1 = Color(200,200,200)
|
||||
end
|
||||
local attackerLabel = vgui.Create("DLabel", entry)
|
||||
attackerLabel:SetText(name.." ")
|
||||
attackerLabel:SetFont("TDMG_SmallFont1")
|
||||
attackerLabel:SetColor(color1)
|
||||
attackerLabel:SizeToContents()
|
||||
attackerLabel:Dock(LEFT)
|
||||
end
|
||||
|
||||
local inflictorLabel = vgui.Create("DKillIcon", entry)
|
||||
inflictorLabel:SetPos(entry:GetPos())
|
||||
inflictorLabel:SetName(inflictor)
|
||||
inflictorLabel:SizeToContents()
|
||||
inflictorLabel:Dock(LEFT)
|
||||
|
||||
if killed:IsPlayer() then
|
||||
name = killed:Nick()
|
||||
color1 = team.GetColor(killed:Team())
|
||||
else
|
||||
name = killed:GetPrintName()
|
||||
color1 = Color(200,200,200)
|
||||
end
|
||||
local killedLabel = vgui.Create("DLabel", entry)
|
||||
killedLabel:SetText(" "..name)
|
||||
killedLabel:SetFont("TDMG_SmallFont1")
|
||||
killedLabel:SetColor(color1)
|
||||
killedLabel:SizeToContents()
|
||||
killedLabel:Dock(LEFT)
|
||||
|
||||
timer.Simple(10, function()
|
||||
if !IsValid(entry) then return end
|
||||
entry:AlphaTo(0, 1, 0, function(ad, pnl)
|
||||
pnl:Remove()
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
net.Receive("COD.Killfeed", function()
|
||||
local tab = net.ReadTable()
|
||||
local att = tab.attacker
|
||||
local inf = tab.inflictor
|
||||
local tar = tab.target
|
||||
AddKillfeedEntry(att, inf, tar)
|
||||
end)
|
||||
1233
gamemodes/cod_custom/gamemode/client/cl_menu.lua
Normal file
1233
gamemodes/cod_custom/gamemode/client/cl_menu.lua
Normal file
File diff suppressed because it is too large
Load Diff
164
gamemodes/cod_custom/gamemode/client/cl_outline.lua
Normal file
164
gamemodes/cod_custom/gamemode/client/cl_outline.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
OUTLINE_MODE_BOTH = 0
|
||||
OUTLINE_MODE_NOTVISIBLE = 1
|
||||
OUTLINE_MODE_VISIBLE = 2
|
||||
|
||||
local istable = istable
|
||||
local render = render
|
||||
local LocalPlayer = LocalPlayer
|
||||
local Material = Material
|
||||
local CreateMaterial = CreateMaterial
|
||||
local hook = hook
|
||||
local cam = cam
|
||||
local ScrW = ScrW
|
||||
local ScrH = ScrH
|
||||
local IsValid = IsValid
|
||||
local surface = surface
|
||||
|
||||
module( "outline", package.seeall )
|
||||
|
||||
local List, ListSize = {}, 0
|
||||
local RenderEnt = NULL
|
||||
|
||||
local OutlineMatSettings = {
|
||||
[ "$ignorez" ] = 1,
|
||||
[ "$alphatest" ] = 1
|
||||
}
|
||||
|
||||
local CopyMat = Material( "pp/copy" )
|
||||
local OutlineMat = CreateMaterial( "OutlineMat", "UnlitGeneric", OutlineMatSettings )
|
||||
local StoreTexture = render.GetScreenEffectTexture( 0 )
|
||||
local DrawTexture = render.GetScreenEffectTexture( 1 )
|
||||
|
||||
local ENTS = 1
|
||||
local COLOR = 2
|
||||
local MODE = 3
|
||||
|
||||
function Add( ents, color, mode )
|
||||
|
||||
if ( ListSize >= 255 ) then return end --Maximum 255 reference values
|
||||
if ( !istable( ents ) ) then ents = { ents } end --Support for passing Entity as first argument
|
||||
if ( ents[ 1 ] == nil ) then return end --Do not pass empty tables
|
||||
|
||||
local t = {
|
||||
[ ENTS ] = ents,
|
||||
[ COLOR ] = color,
|
||||
[ MODE ] = mode or OUTLINE_MODE_BOTH
|
||||
}
|
||||
|
||||
ListSize = ListSize + 1
|
||||
List[ ListSize ] = t
|
||||
end
|
||||
|
||||
function RenderedEntity()
|
||||
|
||||
return RenderEnt
|
||||
|
||||
end
|
||||
|
||||
local function Render()
|
||||
local ply = LocalPlayer()
|
||||
local IsLineOfSightClear = ply.IsLineOfSightClear
|
||||
|
||||
local scene = render.GetRenderTarget()
|
||||
render.CopyRenderTargetToTexture( StoreTexture )
|
||||
|
||||
local w = ScrW()
|
||||
local h = ScrH()
|
||||
|
||||
render.Clear( 0, 0, 0, 0, true, true )
|
||||
|
||||
render.SetStencilEnable( true )
|
||||
cam.IgnoreZ( true )
|
||||
render.SuppressEngineLighting( true )
|
||||
|
||||
render.SetStencilWriteMask( 0xFF )
|
||||
render.SetStencilTestMask( 0xFF )
|
||||
|
||||
render.SetStencilCompareFunction( STENCIL_ALWAYS )
|
||||
render.SetStencilFailOperation( STENCIL_KEEP )
|
||||
render.SetStencilZFailOperation( STENCIL_REPLACE )
|
||||
render.SetStencilPassOperation( STENCIL_REPLACE )
|
||||
|
||||
cam.Start3D()
|
||||
|
||||
for i = 1, ListSize do
|
||||
local v = List[ i ]
|
||||
local mode = v[ MODE ]
|
||||
local ents = v[ ENTS ]
|
||||
|
||||
render.SetStencilReferenceValue( i )
|
||||
|
||||
for j = 1, #ents do
|
||||
local ent = ents[ j ]
|
||||
|
||||
if ( !IsValid( ent ) ) then continue end
|
||||
|
||||
if ( ( mode == OUTLINE_MODE_NOTVISIBLE && IsLineOfSightClear( ply, ent ) ) || ( mode == OUTLINE_MODE_VISIBLE && !IsLineOfSightClear( ply, ent ) ) ) then
|
||||
continue
|
||||
end
|
||||
|
||||
RenderEnt = ent
|
||||
|
||||
ent:DrawModel()
|
||||
end
|
||||
end
|
||||
|
||||
RenderEnt = NULL
|
||||
|
||||
cam.End3D()
|
||||
|
||||
render.SetStencilCompareFunction( STENCIL_EQUAL )
|
||||
|
||||
cam.Start2D()
|
||||
|
||||
for i = 1, ListSize do
|
||||
render.SetStencilReferenceValue( i )
|
||||
|
||||
surface.SetDrawColor( List[ i ][ COLOR ] )
|
||||
surface.DrawRect( 0, 0, w, h )
|
||||
end
|
||||
|
||||
cam.End2D()
|
||||
|
||||
render.SuppressEngineLighting( false )
|
||||
cam.IgnoreZ( false )
|
||||
render.SetStencilEnable( false )
|
||||
|
||||
render.CopyRenderTargetToTexture( DrawTexture )
|
||||
|
||||
render.SetRenderTarget( scene )
|
||||
CopyMat:SetTexture( "$basetexture", StoreTexture )
|
||||
render.SetMaterial( CopyMat )
|
||||
render.DrawScreenQuad()
|
||||
|
||||
render.SetStencilEnable( true )
|
||||
render.SetStencilReferenceValue( 0 )
|
||||
render.SetStencilCompareFunction( STENCIL_EQUAL )
|
||||
|
||||
OutlineMat:SetTexture( "$basetexture", DrawTexture )
|
||||
render.SetMaterial( OutlineMat )
|
||||
|
||||
render.DrawScreenQuadEx( -1, -1, w ,h )
|
||||
render.DrawScreenQuadEx( -1, 0, w, h )
|
||||
render.DrawScreenQuadEx( -1, 1, w, h )
|
||||
render.DrawScreenQuadEx( 0, -1, w, h )
|
||||
render.DrawScreenQuadEx( 0, 1, w, h )
|
||||
render.DrawScreenQuadEx( 1, 1, w, h )
|
||||
render.DrawScreenQuadEx( 1, 0, w, h )
|
||||
render.DrawScreenQuadEx( 1, 1, w, h )
|
||||
|
||||
render.SetStencilEnable( false )
|
||||
|
||||
end
|
||||
|
||||
hook.Add( "PostDrawEffects", "RenderOutlines", function()
|
||||
|
||||
hook.Run( "PreDrawOutlines" )
|
||||
|
||||
if ( ListSize == 0 ) then return end
|
||||
|
||||
Render()
|
||||
|
||||
List, ListSize = {}, 0
|
||||
|
||||
end )
|
||||
213
gamemodes/cod_custom/gamemode/client/cl_radar.lua
Normal file
213
gamemodes/cod_custom/gamemode/client/cl_radar.lua
Normal file
@@ -0,0 +1,213 @@
|
||||
local cachedEntities = {}
|
||||
local max_radar_distance = 800
|
||||
local max_radar_distance_sqr = max_radar_distance ^ 2
|
||||
local radar_scale = 2
|
||||
local uav_update_rate = 5
|
||||
local radarMat = Material("tdmg/hud/radar.png", "noclamp")
|
||||
local glitchMat = Material("tdmg/hud/glitch.png", "noclamp")
|
||||
local playerMat = Material("tdmg/hud/radar/player.png", "noclamp")
|
||||
local enemyColor = Color(200, 50, 0)
|
||||
local playerColor = Color(0, 150, 250)
|
||||
local yourColor = Color(255, 255, 0)
|
||||
local enemyMat = Material("tdmg/hud/radar/enemy.png", "noclamp")
|
||||
local UAVEnemies = {}
|
||||
|
||||
local function GetFriends()
|
||||
cachedEntities = {}
|
||||
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
|
||||
if !v:IsPlayer() or v == LocalPlayer() or !v:Alive() or v:Team() != LocalPlayer():Team() then continue end
|
||||
table.insert(cachedEntities, v)
|
||||
end
|
||||
return cachedEntities
|
||||
end
|
||||
|
||||
local function GetEnemies(ismuav)
|
||||
cachedEntities = {}
|
||||
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
|
||||
if !v:IsPlayer() or v == LocalPlayer() or !v:Alive() or v:Team() == LocalPlayer():Team() then continue end
|
||||
if not ismuav then
|
||||
table.insert(cachedEntities, {pos = v:GetPos(), alpha = 255})
|
||||
UAVEnemies = cachedEntities
|
||||
else
|
||||
table.insert(cachedEntities, v)
|
||||
end
|
||||
end
|
||||
return cachedEntities
|
||||
end
|
||||
|
||||
local function GetEntities()
|
||||
cachedEntities = {}
|
||||
for k, v in pairs(ents.FindInSphere(LocalPlayer():GetPos(), max_radar_distance * radar_scale)) do
|
||||
if v:IsPlayer() or v:Health() <= 0 then continue end
|
||||
if v:GetNWFloat('Team') > 0 then
|
||||
table.insert(cachedEntities, v)
|
||||
end
|
||||
end
|
||||
return cachedEntities
|
||||
end
|
||||
|
||||
local IconsEntityTab = {
|
||||
["tdm_harrier"] = {mat = Material("tdmg/hud/radar/jet.png"), rotate = true, size = 32, without_uav = true, bone = "tag_body"},
|
||||
["tdm_infil"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "tag_body"},
|
||||
["tdm_mi24"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "Body"},
|
||||
["tdm_ah64"] = {mat = Material("tdmg/hud/radar/heli.png"), rotate = true, size = 32, without_uav = true, bone = "root"},
|
||||
["tdm_drone"] = {mat = Material("tdmg/hud/radar/drone.png"), rotate = true, size = 16, without_uav = false},
|
||||
["tdm_sentry"] = {mat = Material("tdmg/hud/radar/turret.png"), rotate = false, size = 24, without_uav = false},
|
||||
["vj_tdm_k9"] = {mat = Material("tdmg/hud/radar/dog.png"), rotate = false, size = 20, without_uav = false},
|
||||
["vj_tdm_npc"] = {mat = Material("tdmg/hud/radar/soldier.png"), rotate = false, size = 20, without_uav = false},
|
||||
["vj_tdm_invasion_soldier1"] = {mat = Material("tdmg/hud/radar/enemy.png"), rotate = false, size = 16, without_uav = false},
|
||||
["vj_tdm_invasion_soldier2"] = {mat = Material("tdmg/hud/radar/enemy.png"), rotate = false, size = 16, without_uav = false},
|
||||
}
|
||||
|
||||
local function Draw()
|
||||
if COD.HideHUD or !LocalPlayer():Alive() then return end
|
||||
local w, h = ScrW(), ScrH()
|
||||
local x, y, size = 10, 10, 250
|
||||
local cx, cy = x + size / 2, y + size / 2
|
||||
local playerSize = 24
|
||||
local enemySize = 16
|
||||
local IsMUAV = false
|
||||
local ply = LocalPlayer()
|
||||
draw.RoundedBox(0, x, y, size, size, Color(0, 0, 0, 200))
|
||||
|
||||
local localPos = ply:GetPos()
|
||||
local localAng = ply:GetAngles()
|
||||
|
||||
if not COD.Counter_UAV_Active then
|
||||
local entities = GetFriends()
|
||||
for k, ent in pairs(entities) do
|
||||
if !IsValid(ent) then continue end
|
||||
|
||||
local enemyPos = ply:GetPos() - ent:GetPos()
|
||||
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
|
||||
|
||||
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
|
||||
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
|
||||
|
||||
local posx = cx - ex - (enemySize / 2)
|
||||
local posy = cy - ey - (enemySize / 2)
|
||||
|
||||
local mat = enemyMat
|
||||
posx = math.Clamp(posx, x, x + size - playerSize / 2)
|
||||
posy = math.Clamp(posy, y, y + size - playerSize / 2)
|
||||
local size = playerSize
|
||||
surface.SetDrawColor(playerColor)
|
||||
surface.SetMaterial(playerMat)
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, (ent:IsPlayer() and ent:EyeAngles() or ent:GetAngles()).y + ply:EyeAngles().y * -1)
|
||||
end
|
||||
|
||||
local entnpc = GetEntities()
|
||||
for k, ent in pairs(entnpc) do
|
||||
if !IsValid(ent) then continue end
|
||||
|
||||
local data = IconsEntityTab[ent:GetClass()]
|
||||
local enemyPos = ply:GetPos() - ent:GetPos()
|
||||
local enemyAng = ent:GetAngles().y
|
||||
if data and data.bone then
|
||||
local bonepos, boneang = ent:GetBonePosition(ent:LookupBone(data.bone))
|
||||
enemyPos = ply:GetPos() - bonepos
|
||||
enemyAng = boneang.y
|
||||
end
|
||||
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
|
||||
|
||||
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
|
||||
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
|
||||
|
||||
local posx = cx - ex - (enemySize / 2)
|
||||
local posy = cy - ey - (enemySize / 2)
|
||||
|
||||
posx = math.Clamp(posx, x, x + size - playerSize / 2)
|
||||
posy = math.Clamp(posy, y, y + size - playerSize / 2)
|
||||
local size = playerSize
|
||||
if ent:GetNWFloat('Team') == LocalPlayer():Team() then
|
||||
surface.SetDrawColor(playerColor)
|
||||
else
|
||||
surface.SetDrawColor(enemyColor)
|
||||
end
|
||||
|
||||
if data then
|
||||
if not data.without_uav and ent:GetNWFloat('Team') != LocalPlayer():Team() and (not COD.UAV_Active and not COD.Adv_UAV_Active) then continue end
|
||||
surface.SetMaterial(data.mat)
|
||||
size = data.size
|
||||
if data.rotate then
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, enemyAng + ply:EyeAngles().y * -1)
|
||||
else
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
|
||||
end
|
||||
else
|
||||
surface.SetMaterial(enemyMat)
|
||||
size = 12
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if not COD.Adv_UAV_Active and COD.UAV_Active then
|
||||
|
||||
if uav_update_rate < CurTime() then
|
||||
uav_update_rate = CurTime() + 4
|
||||
GetEnemies()
|
||||
end
|
||||
|
||||
local entities = UAVEnemies
|
||||
for k, ent in pairs(entities) do
|
||||
ent.alpha = math.max(ent.alpha - FrameTime()*75, 0)
|
||||
|
||||
local enemyPos = ply:GetPos() - ent.pos
|
||||
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
|
||||
|
||||
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
|
||||
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
|
||||
|
||||
local posx = cx - ex - (enemySize / 2)
|
||||
local posy = cy - ey - (enemySize / 2)
|
||||
|
||||
local mat = enemyMat
|
||||
posx = math.Clamp(posx, x, x + size - playerSize / 2)
|
||||
posy = math.Clamp(posy, y, y + size - playerSize / 2)
|
||||
local size = enemySize
|
||||
surface.SetDrawColor(Color(enemyColor.r, enemyColor.g, enemyColor.b, ent.alpha))
|
||||
surface.SetMaterial(enemyMat)
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, 0)
|
||||
end
|
||||
end
|
||||
|
||||
if COD.Adv_UAV_Active then
|
||||
local entities = GetEnemies(true)
|
||||
for k, ent in pairs(entities) do
|
||||
if !IsValid(ent) then continue end
|
||||
|
||||
local enemyPos = ply:GetPos() - ent:GetPos()
|
||||
enemyPos:Rotate(Angle(180, (ply:EyeAngles().y) * -1, -180))
|
||||
|
||||
local ex = size / 2 * (enemyPos.y / max_radar_distance / radar_scale)
|
||||
local ey = size / 2 * (enemyPos.x / max_radar_distance / radar_scale)
|
||||
|
||||
local posx = cx - ex - (enemySize / 2)
|
||||
local posy = cy - ey - (enemySize / 2)
|
||||
|
||||
local mat = enemyMat
|
||||
posx = math.Clamp(posx, x, x + size - playerSize / 2)
|
||||
posy = math.Clamp(posy, y, y + size - playerSize / 2)
|
||||
local size = playerSize
|
||||
surface.SetDrawColor(enemyColor)
|
||||
surface.SetMaterial(playerMat)
|
||||
surface.DrawTexturedRectRotated(posx + size / 4, posy + size / 4, size, size, (ent:IsPlayer() and ent:EyeAngles() or ent:GetAngles()).y + ply:EyeAngles().y * -1)
|
||||
end
|
||||
end
|
||||
|
||||
surface.SetMaterial(playerMat)
|
||||
surface.SetDrawColor(yourColor)
|
||||
surface.DrawTexturedRect(cx - playerSize / 2, cy - playerSize / 2, playerSize, playerSize)
|
||||
else
|
||||
surface.SetDrawColor(Color(255, 255, 255, 255))
|
||||
surface.SetMaterial(glitchMat)
|
||||
surface.DrawTexturedRect(x, y, size, size)
|
||||
end
|
||||
|
||||
surface.SetDrawColor(Color(255, 255, 255, 255))
|
||||
surface.SetMaterial(radarMat)
|
||||
surface.DrawTexturedRect(x, y, size, size)
|
||||
end
|
||||
|
||||
hook.Add("HUDPaint", "MWRadar", Draw)
|
||||
238
gamemodes/cod_custom/gamemode/client/cl_scoreboard.lua
Normal file
238
gamemodes/cod_custom/gamemode/client/cl_scoreboard.lua
Normal file
@@ -0,0 +1,238 @@
|
||||
surface.CreateFont( "mw2score_servername", {
|
||||
font = "ChatFont",
|
||||
extended = false,
|
||||
size = 20,
|
||||
weight = 500,
|
||||
blursize = 0,
|
||||
scanlines = 0,
|
||||
antialias = true,
|
||||
underline = false,
|
||||
italic = false,
|
||||
strikeout = false,
|
||||
symbol = false,
|
||||
rotary = false,
|
||||
shadow = false,
|
||||
additive = false,
|
||||
outline = false,
|
||||
} )
|
||||
|
||||
surface.CreateFont( "mw2score_gamemodename", {
|
||||
font = "ChatFont",
|
||||
extended = false,
|
||||
size = 40,
|
||||
weight = 500,
|
||||
blursize = 0,
|
||||
scanlines = 0,
|
||||
antialias = true,
|
||||
underline = false,
|
||||
italic = false,
|
||||
strikeout = false,
|
||||
symbol = false,
|
||||
rotary = false,
|
||||
shadow = false,
|
||||
additive = false,
|
||||
outline = false,
|
||||
} )
|
||||
|
||||
surface.CreateFont( "mw2score_playername", {
|
||||
font = "ChatFont",
|
||||
extended = false,
|
||||
size = 20,
|
||||
weight = 500,
|
||||
blursize = 0,
|
||||
scanlines = 0,
|
||||
antialias = true,
|
||||
underline = false,
|
||||
italic = false,
|
||||
strikeout = false,
|
||||
symbol = false,
|
||||
rotary = false,
|
||||
shadow = false,
|
||||
additive = false,
|
||||
outline = false,
|
||||
} )
|
||||
|
||||
local Scoredefault_black = Color(0,0,0,200)
|
||||
local plycolor = Color(255,255,255)
|
||||
local servername = GetHostName()
|
||||
local gamemodename = COD.Language["gamemode_"..COD.DataTable["Gamemode"]]
|
||||
local servernamedata = {
|
||||
text = servername,
|
||||
xalign = TEXT_ALIGN_CENTER,
|
||||
font = "mw2score_servername"
|
||||
}
|
||||
|
||||
local gamemodenamedata = {
|
||||
text = gamemodename,
|
||||
xalign = TEXT_ALIGN_CENTER,
|
||||
font = "mw2score_gamemodename"
|
||||
}
|
||||
|
||||
local playertextdata= {
|
||||
xalign = TEXT_ALIGN_LEFT,
|
||||
font = "mw2score_playername"
|
||||
}
|
||||
|
||||
local detaildata = {
|
||||
xalign = TEXT_ALIGN_LEFT,
|
||||
font = "ChatFont"
|
||||
}
|
||||
|
||||
local avtab = {}
|
||||
local function CreatePlayerAvatar(ply,x,y)
|
||||
if !ply.mw2avatar then
|
||||
local avatar = vgui.Create("AvatarImage")
|
||||
avatar:SetPos(x,y)
|
||||
avatar:SetSize(27,27)
|
||||
avatar:SetPlayer(ply)
|
||||
ply.mw2avatar = avatar
|
||||
table.insert(avtab, avatar)
|
||||
end
|
||||
end
|
||||
|
||||
local function RemoveAvatars()
|
||||
local players = player.GetAll()
|
||||
for k, ply in ipairs(players) do
|
||||
if ply.mw2avatar then
|
||||
ply.mw2avatar:Remove()
|
||||
ply.mw2avatar = nil
|
||||
table.RemoveByValue(avtab, ply.mw2avatar)
|
||||
end
|
||||
end
|
||||
for k, v in ipairs(avtab) do
|
||||
v:Remove()
|
||||
table.remove(avtab, k)
|
||||
end
|
||||
end
|
||||
|
||||
local team1_mat = Material('tdmg/hud/teams/specgru.png')
|
||||
local team2_mat = Material('tdmg/hud/teams/kortac.png')
|
||||
|
||||
local function MW2SCORE_RenderScoreboard()
|
||||
gamemodename = COD.Language["gamemode_"..COD.DataTable["Gamemode"]]
|
||||
gamemodenamedata = {
|
||||
text = gamemodename,
|
||||
xalign = TEXT_ALIGN_CENTER,
|
||||
font = "mw2score_gamemodename"
|
||||
}
|
||||
hook.Add("HUDPaint","MW2SCORE_RENDER",function()
|
||||
local w,h = ScrW(),ScrH()
|
||||
local xoffset = 50
|
||||
local players = team.GetPlayers(1)
|
||||
local players2 = team.GetPlayers(2)
|
||||
table.sort(players, function(a,b)
|
||||
return a:GetNWFloat('Score') > b:GetNWFloat('Score')
|
||||
end)
|
||||
table.sort(players2, function(a,b)
|
||||
return a:GetNWFloat('Score') > b:GetNWFloat('Score')
|
||||
end)
|
||||
|
||||
-- Server Name
|
||||
surface.SetDrawColor(Scoredefault_black)
|
||||
surface.DrawRect(0, h/15, w, 50)
|
||||
servernamedata.pos = {w/2,h/8.5}
|
||||
draw.TextShadow(servernamedata,2,255)
|
||||
gamemodenamedata.pos = {w/2,h/14}
|
||||
draw.TextShadow(gamemodenamedata,2,255)
|
||||
|
||||
detaildata.xalign = 1
|
||||
detaildata.pos = {w-245,h/5.7}
|
||||
detaildata.text = COD.Language["scoreboard_score"]
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
detaildata.xalign = 1
|
||||
detaildata.pos = {w-145,h/5.7}
|
||||
detaildata.text = COD.Language["scoreboard_kd"]
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
surface.SetDrawColor(color_white)
|
||||
surface.SetMaterial(team2_mat)
|
||||
surface.DrawTexturedRect(w-600, h/5.7-25, 72, 72)
|
||||
draw.SimpleText(COD.Language["team2_name"], "mw2score_gamemodename", w-512, h/5.7+10, color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
|
||||
|
||||
detaildata.xalign = 1
|
||||
detaildata.pos = {400+xoffset,h/5.7}
|
||||
detaildata.text = COD.Language["scoreboard_score"]
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
detaildata.xalign = 1
|
||||
detaildata.pos = {550,h/5.7}
|
||||
detaildata.text = COD.Language["scoreboard_kd"]
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
surface.SetDrawColor(color_white)
|
||||
surface.SetMaterial(team1_mat)
|
||||
surface.DrawTexturedRect(80, h/5.7-40, 80, 96)
|
||||
draw.SimpleText(COD.Language["team1_name"], "mw2score_gamemodename", 170, h/5.7+10, color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
|
||||
|
||||
for index, ply in ipairs(players) do
|
||||
if !IsValid(ply) then continue end
|
||||
if ply:IsPlayer() then
|
||||
local name = ply:GetName()
|
||||
local kills = ply:Frags()
|
||||
local deaths = ply:Deaths()
|
||||
local curteam = ply:Team()
|
||||
local teamcolor = team.GetColor(curteam)
|
||||
local row = (h/5)+(index*40)
|
||||
CreatePlayerAvatar(ply, 100,row)
|
||||
plycolor.r = teamcolor.r
|
||||
plycolor.g = teamcolor.g
|
||||
plycolor.b = teamcolor.b
|
||||
surface.SetDrawColor(Scoredefault_black)
|
||||
surface.DrawRect(95, row-5, 500, 35)
|
||||
playertextdata.text = name
|
||||
playertextdata.pos = {150,row}
|
||||
playertextdata.color = plycolor
|
||||
draw.TextShadow(playertextdata,2,255)
|
||||
detaildata.pos = {450,row}
|
||||
detaildata.text = tostring(ply:GetNWFloat('Score'))
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
detaildata.pos = {550,row}
|
||||
detaildata.text = tostring(kills.."/"..deaths)
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
end
|
||||
end
|
||||
|
||||
for index, ply in ipairs(players2) do
|
||||
if !IsValid(ply) then continue end
|
||||
if ply:IsPlayer() then
|
||||
local name = ply:GetName()
|
||||
local kills = ply:Frags()
|
||||
local deaths = ply:Deaths()
|
||||
local curteam = ply:Team()
|
||||
local teamcolor = team.GetColor(curteam)
|
||||
local row = (h/5)+(index*40)
|
||||
CreatePlayerAvatar(ply, w-590 ,row)
|
||||
plycolor.r = teamcolor.r
|
||||
plycolor.g = teamcolor.g
|
||||
plycolor.b = teamcolor.b
|
||||
surface.SetDrawColor(Scoredefault_black)
|
||||
surface.DrawRect(w-595, row-5, 500, 35)
|
||||
playertextdata.text = name
|
||||
playertextdata.pos = {w-540,row}
|
||||
playertextdata.color = plycolor
|
||||
draw.TextShadow(playertextdata,2,255)
|
||||
detaildata.pos = {w-245,row}
|
||||
detaildata.text = tostring(ply:GetNWFloat('Score'))
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
detaildata.pos = {w-145,row}
|
||||
detaildata.text = tostring(kills.."/"..deaths)
|
||||
draw.TextShadow(detaildata,2,255)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local function MW2SCORE_HideScoreboard()
|
||||
hook.Remove("HUDPaint","MW2SCORE_RENDER")
|
||||
RemoveAvatars()
|
||||
end
|
||||
|
||||
hook.Add("ScoreboardShow","MW2SCORE_NoDefault",function()
|
||||
MW2SCORE_RenderScoreboard()
|
||||
COD.HideHUD = true
|
||||
return true
|
||||
end)
|
||||
|
||||
hook.Add("ScoreboardHide","MW2SCORE_HideScore",function()
|
||||
MW2SCORE_HideScoreboard()
|
||||
COD.HideHUD = false
|
||||
end)
|
||||
|
||||
--original by StarFrost, i edited it for gamemode
|
||||
132
gamemodes/cod_custom/gamemode/client/cl_takedown.lua
Normal file
132
gamemodes/cod_custom/gamemode/client/cl_takedown.lua
Normal file
@@ -0,0 +1,132 @@
|
||||
local sdeltaTime = sdeltaTime or 0
|
||||
local SysTime = SysTime
|
||||
local FrameTime = FrameTime
|
||||
local start_delta_time = 0
|
||||
local is_second_tick = false
|
||||
|
||||
hook.Add('Tick', 'sFixedDeltaTime', function()
|
||||
if is_second_tick then
|
||||
sdeltaTime = SysTime() - start_delta_time
|
||||
else
|
||||
start_delta_time = SysTime()
|
||||
end
|
||||
is_second_tick = not is_second_tick
|
||||
end)
|
||||
|
||||
local function magnitude(vec)
|
||||
local magnitude = vec
|
||||
magnitude = magnitude.x ^ 2 + magnitude.y ^ 2 + magnitude.z ^ 2
|
||||
magnitude = math.sqrt(magnitude)
|
||||
return magnitude
|
||||
end
|
||||
|
||||
local function MoveTowardsVector(current_vector, target_vector, delta_time)
|
||||
local direction_vector = target_vector - current_vector
|
||||
local magnitude = magnitude(direction_vector)
|
||||
if magnitude <= delta_time or magnitude == 0 then
|
||||
return target_vector
|
||||
end
|
||||
return current_vector + direction_vector / magnitude * delta_time
|
||||
end
|
||||
|
||||
local rndhooks = {}
|
||||
net.Receive("COD.TakedownCam", function()
|
||||
local cam1 = net.ReadBool()
|
||||
local float = net.ReadFloat()
|
||||
local toplayer = net.ReadBool()
|
||||
local rnd = math.random(1,999999999)
|
||||
table.insert(rndhooks, "TakedownCam"..rnd)
|
||||
|
||||
if true then
|
||||
local ply = LocalPlayer()
|
||||
|
||||
local delta = sdeltaTime
|
||||
local deltanum = 2
|
||||
local deltamult = 16
|
||||
|
||||
local ang_fix = ply:GetAngles()
|
||||
local forwardplus = ang_fix:Forward()*math.Rand(32,64)
|
||||
local rightplus = ang_fix:Right()*math.Rand(32,64)
|
||||
local upplus = Vector(0,0,math.Rand(16,32))
|
||||
|
||||
if math.random(1,2) == 2 then
|
||||
forwardplus = ply:GetForward()*math.Rand(-64,-32)
|
||||
end
|
||||
if math.random(1,2) == 2 then
|
||||
rightplus = ply:GetRight()*math.Rand(-64,-32)
|
||||
end
|
||||
|
||||
local endpos = ply:GetBonePosition(ply:LookupBone("ValveBiped.Bip01_Head1"))+forwardplus+rightplus+upplus
|
||||
local curpos = ply:GetBonePosition(ply:LookupBone("ValveBiped.Bip01_Head1"))
|
||||
|
||||
local angle1 = Angle(0,0,0)
|
||||
|
||||
local dist = 0
|
||||
local drawv = true
|
||||
local tohead = false
|
||||
|
||||
timer.Simple(float/2, function()
|
||||
deltamult = 0
|
||||
end)
|
||||
|
||||
if toplayer then
|
||||
timer.Simple(float, function()
|
||||
tohead = true
|
||||
deltamult = 128
|
||||
end)
|
||||
end
|
||||
|
||||
if cam1 then
|
||||
hook.Add("CalcView", "TakedownCam"..rnd, function( ply, pos, angles, fov )
|
||||
curpos = MoveTowardsVector(curpos, endpos, delta*deltanum)
|
||||
angle1 = (ply:GetBonePosition(ply:LookupBone("ValveBiped.Bip01_Head1"))-curpos):GetNormalized():Angle()
|
||||
dist = curpos:Distance(ply:GetBonePosition(ply:LookupBone("ValveBiped.Bip01_Head1")))
|
||||
if tohead then
|
||||
endpos = ply:GetBonePosition(ply:LookupBone("ValveBiped.Bip01_Head1"))
|
||||
end
|
||||
if deltamult > 0 then
|
||||
deltanum = deltanum+FrameTime()*deltamult
|
||||
end
|
||||
if dist < 8 and tohead then
|
||||
drawv = false
|
||||
angle1 = ply:EyeAngles()
|
||||
else
|
||||
drawv = true
|
||||
end
|
||||
local view = {
|
||||
angles = angle1,
|
||||
origin = curpos,
|
||||
fov = fov,
|
||||
drawviewer = drawv,
|
||||
nearz = 16,
|
||||
}
|
||||
|
||||
if ply:Alive() then
|
||||
COD.HideHUD = true
|
||||
return view
|
||||
end
|
||||
end)
|
||||
timer.Simple(float+0.7, function()
|
||||
hook.Remove("CalcView", "TakedownCam"..rnd)
|
||||
table.RemoveByValue(rndhooks, "TakedownCam"..rnd)
|
||||
COD.HideHUD = false
|
||||
end)
|
||||
else
|
||||
for _, v in pairs(rndhooks) do
|
||||
hook.Remove("CalcView", v)
|
||||
table.RemoveByValue(rndhooks, v)
|
||||
end
|
||||
COD.HideHUD = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("CalcMainActivity", "!TDMAnims", function(ply, vel)
|
||||
local str = ply:GetNWString('SVAnim')
|
||||
local num = ply:GetNWFloat('SVAnimDelay')
|
||||
local st = ply:GetNWFloat('SVAnimStartTime')
|
||||
if str != "" then
|
||||
ply:SetCycle((CurTime()-st)/num)
|
||||
return -1, ply:LookupSequence(str)
|
||||
end
|
||||
end)
|
||||
33
gamemodes/cod_custom/gamemode/init.lua
Normal file
33
gamemodes/cod_custom/gamemode/init.lua
Normal file
@@ -0,0 +1,33 @@
|
||||
-----------------
|
||||
AddCSLuaFile("shared.lua")
|
||||
AddCSLuaFile("client/cl_hud.lua")
|
||||
AddCSLuaFile("client/cl_outline.lua")
|
||||
AddCSLuaFile("client/cl_menu.lua")
|
||||
AddCSLuaFile("client/cl_takedown.lua")
|
||||
AddCSLuaFile("client/cl_scoreboard.lua")
|
||||
AddCSLuaFile("client/cl_abilities.lua")
|
||||
AddCSLuaFile("client/cl_killfeed.lua")
|
||||
AddCSLuaFile("client/cl_radar.lua")
|
||||
AddCSLuaFile("client/cl_cutscenes.lua")
|
||||
AddCSLuaFile("client/cl_killcam.lua")
|
||||
AddCSLuaFile("client/cl_error.lua")
|
||||
AddCSLuaFile("post_shared.lua")
|
||||
|
||||
local files1 = file.Find("cod_tdm/*", "LUA")
|
||||
for k, v in ipairs(files1) do
|
||||
AddCSLuaFile("cod_tdm/"..v)
|
||||
end
|
||||
|
||||
include("shared.lua")
|
||||
include("server/sv_functions.lua")
|
||||
include("server/sv_killstreaks.lua")
|
||||
include("server/sv_takedown.lua")
|
||||
include("server/sv_abilities.lua")
|
||||
include("server/sv_killcam.lua")
|
||||
include("server/sv_invasion.lua")
|
||||
include("server/sv_knockout.lua")
|
||||
include("server/sv_infected.lua")
|
||||
include("server/sv_domination.lua")
|
||||
|
||||
include("other/sv_mwii_npc.lua")
|
||||
include("post_shared.lua")
|
||||
100
gamemodes/cod_custom/gamemode/lang/brazilian.lua
Normal file
100
gamemodes/cod_custom/gamemode/lang/brazilian.lua
Normal file
@@ -0,0 +1,100 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Pontuação",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Aviso! Sua sequência de mortes será atualizada quando a rodada terminar.",
|
||||
["menu_mainweapon"] = "Sua principal arma é: ",
|
||||
["menu_secweapon"] = "Sua arma secundária é: ",
|
||||
["menu_ks_choose"] = "Seleção de Killstreak - ",
|
||||
["menu_mainperk"] = "Selecione o Vantagem Principal",
|
||||
["menu_highperk"] = "Selecione a Vantagem Alta ",
|
||||
["menu_choosemain"] = "Seleção de Armas Principais",
|
||||
["menu_choosesec"] = "Seleção de Armas Secundárias",
|
||||
["menu_apply"] = "Aplicar",
|
||||
|
||||
["hud_killed"] = "MATOU: ",
|
||||
["hud_killer"] = "Matador: ",
|
||||
["hud_teamdeathmatch"] = "MATA-MATA POR EQUIPES",
|
||||
["hud_win"] = "VICTORY",
|
||||
["hud_lose"] = "DEFEAT",
|
||||
["hud_unlockmainperk"] = " - Vantagem principal desbloqueada!",
|
||||
["hud_unlockhighperk"] = " - Alto Privilégio Desbloqueado!",
|
||||
["hud_unlockkillstreak"] = "Pronto para usar!",
|
||||
["hud_package"] = "Pressione [E] para pegar ",
|
||||
["hud_fullpackage"] = "Pressione [E] para pegar o pacote",
|
||||
["hud_revive"] = "Reanimando",
|
||||
["hud_torevive"] = "Pressione E para reanimar",
|
||||
["hud_reviver"] = "Você está sendo reanimado",
|
||||
["hud_selfrevive"] = "Progresso do Auto-Revive",
|
||||
["hud_toselfrevive"] = "Segure E para se auto-reviver",
|
||||
["hud_kills"] = "matanças: ",
|
||||
["hud_killstreak"] = "Sequência de mortes",
|
||||
["hud_nuke"] = "LANÇAMENTO DE MÍSSEIS BALÍSTICOS DETECTADO",
|
||||
["hud_scoreadd_1"] = "+100 Matar",
|
||||
["hud_scoreadd_2"] = "+110 Tiro na cabeça",
|
||||
["hud_scoreadd_3"] = "+150 Movimento do finalizador",
|
||||
["hud_scoreadd_4"] = "+50 Reforços destruídos",
|
||||
["hud_scoreadd_5"] = "+125 Melee",
|
||||
["hud_scoreadd_6"] = "+100 Reanimar",
|
||||
["hud_scoreadd_7"] = "+250 Pedido de Socorro",
|
||||
|
||||
["contols_main"] = "Controle:",
|
||||
["contols_f1"] = "ESC - Editar Loadout",
|
||||
["contols_e"] = "E - Movimento do Finalizador",
|
||||
["contols_q"] = "Q, G - Jogar granada",
|
||||
["contols_v"] = "V - Use Faca",
|
||||
["contols_0"] = "7,8,9,0 - Use Sequência de morte",
|
||||
["contols_tab"] = "Tab - Painel de pontos",
|
||||
["contols_open"] = "Mantenha pressionada a tecla INSERT para abrir controles.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomb Drone",
|
||||
["killstreak_3"] = "Armor",
|
||||
["killstreak_4"] = "Care Package",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Cluster Mine",
|
||||
["killstreak_7"] = "Precision Airstrike",
|
||||
["killstreak_8"] = "K9 Unit",
|
||||
["killstreak_9"] = "Sentry Gun",
|
||||
["killstreak_10"] = "Air Patrol",
|
||||
["killstreak_11"] = "Mortar Strike",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Overwatch Helo",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Reinforcement",
|
||||
["killstreak_16"] = "Stealth Bomber",
|
||||
["killstreak_17"] = "Chopper Gunner",
|
||||
["killstreak_18"] = "Advanced UAV",
|
||||
["killstreak_19"] = "Emergency Airdrop",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["perk_1_1"] = "Esquadrão Antibombas",
|
||||
["perk_1_2"] = "Observador",
|
||||
["perk_1_3"] = "Linha-dura",
|
||||
["perk_1_4"] = "Reabastecimento",
|
||||
["perk_1_1_desc"] = "Reduz os danos causados pela explosão.",
|
||||
["perk_1_2_desc"] = "Capacidade de ver pacotes inimigos e reforços através das paredes.",
|
||||
["perk_1_3_desc"] = "Reduz as sequências de morte em 1.",
|
||||
["perk_1_4_desc"] = "A cada 30 segundos, você ganha 1 carregador para sua arma atual.",
|
||||
["perk_2_1"] = "Solução rápida",
|
||||
["perk_2_2"] = "Sobrevivente",
|
||||
["perk_2_3"] = "Fantasma",
|
||||
["perk_2_4"] = "Sangue frio",
|
||||
["perk_2_1_desc"] = "Sua saúde se regenera após 3 segundos em vez de 8 segundos.",
|
||||
["perk_2_2_desc"] = "Em vez de morrer, você entra no estado final do traço 1 vez por vida.",
|
||||
["perk_2_3_desc"] = "Invisível para UAVs.",
|
||||
["perk_2_4_desc"] = "Invisível para veículos e reforços inimigos.",
|
||||
|
||||
["gamemode_1"] = "Mata-Mata em equipe",
|
||||
["gamemode_2"] = "Invasão",
|
||||
["gamemode_3"] = "Nocaute",
|
||||
|
||||
["gamemode_1_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_2_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_3_desc"] = "Eliminate the enemy at all costs.",
|
||||
}
|
||||
169
gamemodes/cod_custom/gamemode/lang/english.lua
Normal file
169
gamemodes/cod_custom/gamemode/lang/english.lua
Normal file
@@ -0,0 +1,169 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Score",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Warning! Your kill streak will be refreshed when the round ends.",
|
||||
["menu_mainweapon"] = "Your main weapon is: ",
|
||||
["menu_secweapon"] = "Your secondary weapon is: ",
|
||||
["menu_ks_choose"] = "Killstreak selection - ",
|
||||
["menu_mainperk"] = "Select Main Perk",
|
||||
["menu_highperk"] = "Select High Perk",
|
||||
["menu_choosemain"] = "Main Weapon Selection",
|
||||
["menu_choosesec"] = "Secondary Weapon Selection",
|
||||
["menu_apply"] = "Apply",
|
||||
|
||||
["hud_killer"] = "Killer: ",
|
||||
["hud_killed"] = "KILLED: ",
|
||||
["hud_teamdeathmatch"] = "TEAM DEATHMATCH",
|
||||
["hud_win"] = "VICTORY",
|
||||
["hud_lose"] = "DEFEAT",
|
||||
["hud_unlockmainperk"] = " - Main Perk unlocked!",
|
||||
["hud_unlockhighperk"] = " - High Perk Unlocked!",
|
||||
["hud_unlockkillstreak"] = "Ready to use!",
|
||||
["hud_package"] = "Press [E] to pick up ",
|
||||
["hud_fullpackage"] = "Press [E] to pick up the package",
|
||||
["hud_revive"] = "Revive Progress",
|
||||
["hud_torevive"] = "Press E to revive",
|
||||
["hud_reviver"] = "You are being revived",
|
||||
["hud_selfrevive"] = "Self-Revive Progress",
|
||||
["hud_toselfrevive"] = "Hold E to self-revive",
|
||||
["hud_kills"] = "Kills: ",
|
||||
["hud_killstreak"] = "Killstreak",
|
||||
["hud_nuke"] = "MGB INBOUND",
|
||||
["hud_scoreadd_1"] = "+100 Kill",
|
||||
["hud_scoreadd_2"] = "+110 Headshot",
|
||||
["hud_scoreadd_3"] = "+150 Finisher Move",
|
||||
["hud_scoreadd_4"] = "+50 Reinforcements destroyed",
|
||||
["hud_scoreadd_5"] = "+125 Melee",
|
||||
["hud_scoreadd_6"] = "+100 Revive",
|
||||
["hud_scoreadd_7"] = "+250 Mayday",
|
||||
|
||||
["hud_message_1"] = "First Infected",
|
||||
["hud_message_2"] = "Last Survivor",
|
||||
["hud_message_3"] = "+50 Survivor",
|
||||
|
||||
["hud_domination_1"] = "CAPTURE",
|
||||
["hud_domination_2"] = "SECURE",
|
||||
["hud_domination_3"] = "PROGRESS",
|
||||
["hud_domination_4"] = "+200 Neutral zone captured",
|
||||
["hud_domination_5"] = "+100 Enemy zone captured",
|
||||
|
||||
["hud_invasion_1"] = "SUPPLY BOXES ON THE WAY",
|
||||
["hud_invasion_2"] = "HEAVY REINFORCEMENTS ON THE WAY",
|
||||
|
||||
["contols_main"] = "Control:",
|
||||
["contols_f1"] = "ESC - Edit Loadout",
|
||||
["contols_e"] = "E - Finisher Move",
|
||||
["contols_q"] = "Q, G - Throw Grenade",
|
||||
["contols_v"] = "V - Use Knife",
|
||||
["contols_0"] = "7,8,9,0 - Use Killstreak",
|
||||
["contols_tab"] = "Tab - Scoreboard",
|
||||
["contols_open"] = "Hold INSERT to open controls.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomb Drone",
|
||||
["killstreak_3"] = "Armor",
|
||||
["killstreak_4"] = "Care Package",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Cluster Mine",
|
||||
["killstreak_7"] = "Precision Airstrike",
|
||||
["killstreak_8"] = "K9 Unit",
|
||||
["killstreak_9"] = "Sentry Gun",
|
||||
["killstreak_10"] = "Air Patrol",
|
||||
["killstreak_11"] = "Mortar Strike",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Overwatch Helo",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Reinforcement",
|
||||
["killstreak_16"] = "Stealth Bomber",
|
||||
["killstreak_17"] = "Chopper Gunner",
|
||||
["killstreak_18"] = "Advanced UAV",
|
||||
["killstreak_19"] = "Emergency Airdrop",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["killstreak_desc_1"] = "UAV recon ship that reveals enemy locations on the minimap.",
|
||||
["killstreak_desc_2"] = "A remote-controlled drone with an attached C4 charge.",
|
||||
["killstreak_desc_3"] = "Gives a bag of armor for the whole team.",
|
||||
["killstreak_desc_4"] = "Call in a random killstreak care package to your location.",
|
||||
["killstreak_desc_5"] = "A drone that scrambles all enemy minimaps.",
|
||||
["killstreak_desc_6"] = "Throw a device that launches a cluster of smaller mines within the immediate area.",
|
||||
["killstreak_desc_7"] = "Call in twin jets for a precision strike along the best available path.",
|
||||
["killstreak_desc_8"] = "Call in K9 unit for searching enemies.",
|
||||
["killstreak_desc_9"] = "Automated turret that scans for nearby enemies, and fires incendiary based rounds.",
|
||||
["killstreak_desc_10"] = "Three jets, track down air vehicles and shoot it down, freeing the airspace.",
|
||||
["killstreak_desc_11"] = "Mark a target location to signal several waves of mortars to attack the area.",
|
||||
["killstreak_desc_12"] = "Call in a trio of jets to release aerial explosives onto specified targets.",
|
||||
["killstreak_desc_13"] = "An attack helo that will watch over positions and find enemy before engaging them.",
|
||||
["killstreak_desc_14"] = "Releases a precision bomb before circling back and guarding a marked location.",
|
||||
["killstreak_desc_15"] = "A helicopter that disembarks three soldiers with heavy training.",
|
||||
["killstreak_desc_16"] = "Call in a bomber that releases a large line of explosives along its path.",
|
||||
["killstreak_desc_17"] = "Control an assault chopper armed with a turret and air-to-land missiles.",
|
||||
["killstreak_desc_18"] = "An orbital UAV that reveals the enemy's direction on the minimap in real time.",
|
||||
["killstreak_desc_19"] = "Call in 3 random killstreak care packages to your location.",
|
||||
["killstreak_desc_20"] = "A heavy assault gunship equipped with a missile, along with the 40mm and 25mm cannons.",
|
||||
["killstreak_desc_21"] = "Juggernaut assault gear with minigun delivered by care package.",
|
||||
["killstreak_desc_22"] = "A massive blow to your position. Will end the game in favor of your team.",
|
||||
|
||||
["main_menu_1"] = "Resume Game",
|
||||
["main_menu_2"] = "Change Loadout",
|
||||
["main_menu_3"] = "Settings",
|
||||
["main_menu_4"] = "Main Menu",
|
||||
|
||||
["main_menu_settings_1"] = "Music: ",
|
||||
["main_menu_settings_2"] = "Announcer: ",
|
||||
["main_menu_settings_3"] = "Killсam: ",
|
||||
["main_menu_settings_4"] = "Discord Server",
|
||||
["main_menu_settings_cm"] = "Custom Music: ",
|
||||
|
||||
["main_menu_loadout"] = "Loadout",
|
||||
["main_menu_loadout_wep"] = "Your choose:",
|
||||
["main_menu_loadout_1"] = "Primary Weapon",
|
||||
["main_menu_loadout_2"] = "Secondary Weapon",
|
||||
["main_menu_loadout_3"] = "Killstreaks",
|
||||
["main_menu_loadout_3_1"] = "Killstreaks selected - ",
|
||||
["main_menu_loadout_4"] = "Perks",
|
||||
["main_menu_loadout_5"] = "Finishing Moves",
|
||||
["main_menu_loadout_6"] = "Apply",
|
||||
["main_menu_loadout_7"] = "Exit",
|
||||
|
||||
["perk_1_1"] = "Bomb Squad",
|
||||
["perk_1_2"] = "Spotter",
|
||||
["perk_1_3"] = "Hardline",
|
||||
["perk_1_4"] = "Resupply",
|
||||
["perk_1_1_desc"] = "Reduces explosion damage.",
|
||||
["perk_1_2_desc"] = "Ability to see enemy packages and reinforcements through walls.",
|
||||
["perk_1_3_desc"] = "Reduce killstreaks by 1.",
|
||||
["perk_1_4_desc"] = "Every 30 seconds, you gain 1 magazine for your current weapon.",
|
||||
["perk_2_1"] = "Quick Fix",
|
||||
["perk_2_2"] = "Survivor",
|
||||
["perk_2_3"] = "Ghost",
|
||||
["perk_2_4"] = "Cold Blooded",
|
||||
["perk_2_1_desc"] = "Your health regenerates after 3 seconds instead of 8 seconds.",
|
||||
["perk_2_2_desc"] = "Instead of dying, you enter the final dash state 1 time per life.",
|
||||
["perk_2_3_desc"] = "Invisible to UAVs.",
|
||||
["perk_2_4_desc"] = "Invisible to vehicles and enemy reinforcements.",
|
||||
|
||||
["gamemode_1"] = "TEAM DEATHMATCH",
|
||||
["gamemode_2"] = "INVASION",
|
||||
["gamemode_3"] = "KNOCK OUT",
|
||||
["gamemode_4"] = "INFECTED",
|
||||
["gamemode_5"] = "DOMINATION",
|
||||
|
||||
["gamemode_1_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_2_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_3_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_4_desc"] = "Survive or infect everyone.",
|
||||
["gamemode_5_desc"] = "Control all sectors on the location.",
|
||||
|
||||
["killcam_1"] = "Your Death",
|
||||
["killcam_2"] = "Final Kill",
|
||||
["killcam_3"] = "Press SPACE to skip",
|
||||
|
||||
["admin_menu_title"] = "Admin Menu",
|
||||
["admin_change_gamemode"] = "Change Gamemode",
|
||||
}
|
||||
99
gamemodes/cod_custom/gamemode/lang/german.lua
Normal file
99
gamemodes/cod_custom/gamemode/lang/german.lua
Normal file
@@ -0,0 +1,99 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Score",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Warnung! Ihre Kill-Serie wird aktualisiert, wenn die Runde endet.",
|
||||
["menu_mainweapon"] = "Deine Hauptwaffe ist: ",
|
||||
["menu_secweapon"] = "Deine sekundäre Waffe ist: ",
|
||||
["menu_ks_choose"] = "Killstreak-Auswahl - ",
|
||||
["menu_mainperk"] = "Hauptvergünstigung auswählen",
|
||||
["menu_highperk"] = "High Perk auswählen",
|
||||
["menu_choosemain"] = "Hauptwaffenauswahl",
|
||||
["menu_choosesec"] = "Auswahl der Sekundenwaffe",
|
||||
["menu_apply"] = "Bewerben",
|
||||
|
||||
["hud_killed"] = "KILLED: ",
|
||||
["hud_killer"] = "Killer: ",
|
||||
["hud_teamdeathmatch"] = "TEAM DEATHMATCH",
|
||||
["hud_win"] = "SIEG",
|
||||
["hud_lose"] = "DEFEAT",
|
||||
["hud_unlockmainperk"] = " - Hauptvergünstigung freigeschaltet!",
|
||||
["hud_unlockhighperk"] = " - High Perk Unlocked!",
|
||||
["hud_unlockkillstreak"] = "Bereit zur Verwendung!",
|
||||
["hud_package"] = "Drücken Sie [E], um abzuholen ",
|
||||
["hud_fullpackage"] = "Drücken Sie [E], um das Paket abzuholen",
|
||||
["hud_revive"] = "Fortschritt wiederbeleben",
|
||||
["hud_torevive"] = "Drücken Sie E, um wiederzubeleben",
|
||||
["hud_reviver"] = "Du wirst wiederbelebt",
|
||||
["hud_selfrevive"] = "Selbstbelebungsfortschritt",
|
||||
["hud_toselfrevive"] = "Halten Sie E, um sich selbst zu beleben",
|
||||
["hud_kills"] = "Kills: ",
|
||||
["hud_killstreak"] = "Killstreak",
|
||||
["hud_nuke"] = "BALLISTIC MISSILE LAUNCH DETECTED",
|
||||
["hud_scoreadd_1"] = "+100 Kill",
|
||||
["hud_scoreadd_2"] = "+110 Headshot",
|
||||
["hud_scoreadd_3"] = "+150 Finisher Move",
|
||||
["hud_scoreadd_4"] = "+50 Verstärkungen zerstört",
|
||||
["hud_scoreadd_5"] = "+125 Nahkampf",
|
||||
["hud_scoreadd_6"] = "+100 Revive",
|
||||
["hud_scoreadd_7"] = "+250 Notruf",
|
||||
["contols_main"] = "Kontrolle:",
|
||||
["contols_f1"] = "ESC - Loadout bearbeiten",
|
||||
["contols_e"] = "E - Finisher Move",
|
||||
["contols_q"] = "Q, G - Granate werfen",
|
||||
["contols_v"] = "V - Messer Verwenden",
|
||||
["contols_0"] = "7,8,9,0 - Verwenden Sie Killstreak",
|
||||
["contols_tab"] = "Tab - Anzeigetafel",
|
||||
["contols_open"] = "Halten Sie INSERT, um die Steuerelemente zu öffnen",
|
||||
|
||||
["Killstreak_1"] = "UAV",
|
||||
["Killstreak_2"] = "Bombendrohne",
|
||||
["Killstreak_3"] = "Rüstung",
|
||||
["Killstreak_4"] = "Pflegepaket",
|
||||
["Killstreak_5"] = "Counter-UAV",
|
||||
["Killstreak_6"] = "Cluster Mine",
|
||||
["Killstreak_7"] = "Präzisionsluftangriff",
|
||||
["Killstreak_8"] = "K9 Einheit",
|
||||
["Killstreak_9"] = "Sentry Gun",
|
||||
["Killstreak_10"] = "Luftpatrouille",
|
||||
["Killstreak_11"] = "Mörtelstreik",
|
||||
["Killstreak_12"] = "SAE",
|
||||
["Killstreak_13"] = "Overwatch Helo",
|
||||
["Killstreak_14"] = "VTOL",
|
||||
["Killstreak_15"] = "Verstärkung",
|
||||
["Killstreak_16"] = "Stealth Bomber",
|
||||
["Killstreak_17"] = "Chopper Gunner",
|
||||
["Killstreak_18"] = "Fortgeschrittene UAV",
|
||||
["Killstreak_19"] = "Notfall-Airdrop",
|
||||
["Killstreak_20"] = "AC-130",
|
||||
["Killstreak_21"] = "Juggernaut",
|
||||
["Killstreak_22"] = "Taktische Nuke",
|
||||
|
||||
["perk_1_1"] = "Bomb Squad",
|
||||
["perk_1_2"] = "Spotter",
|
||||
["perk_1_3"] = "Hardline",
|
||||
["perk_1_4"] = "Nachschub",
|
||||
["perk_1_1_desc"] = "Reduziert Explosionsschaden",
|
||||
["perk_1_2_desc"] = "Fähigkeit, feindliche Pakete und Verstärkungen durch Wände zu sehen",
|
||||
["perk_1_3_desc"] = "Killstreaks um 1 reduzieren",
|
||||
["perk_1_4_desc"] = "Alle 30 Sekunden erhalten Sie 1 Magazin für Ihre aktuelle Waffe",
|
||||
["perk_2_1"] = "Quick Fix",
|
||||
["perk_2_2"] = "Überlebender",
|
||||
["perk_2_3"] = "Geist",
|
||||
["perk_2_4"] = "Kaltblut",
|
||||
["perk_2_1_desc"] = "Ihre Gesundheit regeneriert sich nach 3 Sekunden statt nach 8 Sekunden",
|
||||
["perk_2_2_desc"] = "Anstatt zu sterben, trittst du 1 Mal pro Leben in den endgültigen Strichzustand ein",
|
||||
["perk_2_3_desc"] = "Unsichtbar für UAVs",
|
||||
["perk_2_4_desc"] = "Unsichtbar für Fahrzeuge und feindliche Verstärkungen",
|
||||
|
||||
["gamemode_1"] = "Team Deathmatch",
|
||||
["gamemode_2"] = "Invasion",
|
||||
["gamemode_3"] = "Knockdown",
|
||||
|
||||
["gamemode_1_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_2_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_3_desc"] = "Eliminate the enemy at all costs.",
|
||||
}
|
||||
100
gamemodes/cod_custom/gamemode/lang/hungarian.lua
Normal file
100
gamemodes/cod_custom/gamemode/lang/hungarian.lua
Normal file
@@ -0,0 +1,100 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Pontszámok",
|
||||
["scoreboard_kd"] = "Ö/H",
|
||||
|
||||
["menu_warning_ks"] = "Figyelem! A killstrek-ed frissülni fog a kör befejeztekor.",
|
||||
["menu_mainweapon"] = "Az elsõdleges fegyvered: ",
|
||||
["menu_secweapon"] = "A másodlagos fegyvered: ",
|
||||
["menu_ks_choose"] = "Killstreak szelekció - ",
|
||||
["menu_mainperk"] = "Kiválasztani való fõ perk",
|
||||
["menu_highperk"] = "Kiválasztani való magas rangú perk",
|
||||
["menu_choosemain"] = "Elsõdleges fegyver szelekció",
|
||||
["menu_choosesec"] = "Másodlagos fegyver szelekció",
|
||||
["menu_apply"] = "Hozzáad",
|
||||
|
||||
["hud_killed"] = "LIKVIDÁLVA: ",
|
||||
["hud_killer"] = "Gyilkos: ",
|
||||
["hud_teamdeathmatch"] = "TEAM DEATHMATCH",
|
||||
["hud_win"] = "GYÕZELEM",
|
||||
["hud_lose"] = "VERESÉG",
|
||||
["hud_unlockmainperk"] = " - Fõ Perk feloldva!",
|
||||
["hud_unlockhighperk"] = " - Magas rangú perk feloldva!",
|
||||
["hud_unlockkillstreak"] = "Bevetésre kész!",
|
||||
["hud_package"] = "Nyomd meg a [E] hogy fellved ",
|
||||
["hud_fullpackage"] = "Nyomd meg a [E] hogy fellved a csomagot",
|
||||
["hud_revive"] = "Felélesztés",
|
||||
["hud_torevive"] = "Nyomd meg a E a felélesztés megkezdéséhez",
|
||||
["hud_reviver"] = "Felélesztés alatt állsz",
|
||||
["hud_selfrevive"] = "Önélesztés",
|
||||
["hud_toselfrevive"] = "Tarsd nyomva az E hogy önélesztést hajts végre",
|
||||
["hud_kills"] = "Ölések: ",
|
||||
["hud_killstreak"] = "Killstreak",
|
||||
["hud_nuke"] = "BALLISZTIKUS RAKÉTA KILÖVÕ EGYSÉG BEMÉRVE",
|
||||
["hud_scoreadd_1"] = "+100 Ölés",
|
||||
["hud_scoreadd_2"] = "+110 Fejlövés",
|
||||
["hud_scoreadd_3"] = "+150 Kivégzés",
|
||||
["hud_scoreadd_4"] = "+50 Erõsítés Megsemmisítve",
|
||||
["hud_scoreadd_5"] = "+125 Közelharc",
|
||||
["hud_scoreadd_6"] = "+100 Felélesztés",
|
||||
["hud_scoreadd_7"] = "+250 Vészhívás",
|
||||
|
||||
["contols_main"] = "Vezérlõ:",
|
||||
["contols_f1"] = "ESC - Loadout szerkesztése",
|
||||
["contols_e"] = "E - Kivégzés",
|
||||
["contols_q"] = "Q, G - Gránát",
|
||||
["contols_v"] = "V - Kés",
|
||||
["contols_0"] = "7,8,9,0 - Killstreak használata",
|
||||
["contols_tab"] = "Tab - Eredmény lista",
|
||||
["contols_open"] = "Nyomd meg az INSERT a vezérlõk megnyitásához.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomb Drone",
|
||||
["killstreak_3"] = "Armor",
|
||||
["killstreak_4"] = "Care Package",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Cluster Mine",
|
||||
["killstreak_7"] = "Precision Airstrike",
|
||||
["killstreak_8"] = "K9 Unit",
|
||||
["killstreak_9"] = "Sentry Gun",
|
||||
["killstreak_10"] = "Air Patrol",
|
||||
["killstreak_11"] = "Mortar Strike",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Overwatch Helo",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Reinforcement",
|
||||
["killstreak_16"] = "Stealth Bomber",
|
||||
["killstreak_17"] = "Chopper Gunner",
|
||||
["killstreak_18"] = "Advanced UAV",
|
||||
["killstreak_19"] = "Emergency Airdrop",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["perk_1_1"] = "Bombaelhárító Osztag",
|
||||
["perk_1_2"] = "Felderítõ",
|
||||
["perk_1_3"] = "Tükkös Ív",
|
||||
["perk_1_4"] = "Utánpótlás",
|
||||
["perk_1_1_desc"] = "Csökkenti a robbanó hatásoktól elszenvedett sérülést.",
|
||||
["perk_1_2_desc"] = "Olyan képesség ami hatására az utánpótlások és erõsítések a falon kereszül is láthatóvá válnak.",
|
||||
["perk_1_3_desc"] = " 1-el csökkenti a killstrek-et.",
|
||||
["perk_1_4_desc"] = "Minden 30 másodpercben kapsz egy tárrat az éppen használt fegyveredhez.",
|
||||
["perk_2_1"] = "Gyors Ellátás",
|
||||
["perk_2_2"] = "Túlélõ",
|
||||
["perk_2_3"] = "Kisértet",
|
||||
["perk_2_4"] = "Hideg vérû",
|
||||
["perk_2_1_desc"] = "8 másodperc helyett az életerõd már 3 másodperc után regenerálódni kezd.",
|
||||
["perk_2_2_desc"] = "Ahelyett hogy azonnal meghalnál belépsz egy haldoklási státuszba.",
|
||||
["perk_2_3_desc"] = "Az UAV-nek láthatatlan leszel.",
|
||||
["perk_2_4_desc"] = "Jármûveknek és ellenséges erõsítéseknek láthatatlan maradsz.",
|
||||
|
||||
["gamemode_1"] = "Team Deathmatch",
|
||||
["gamemode_2"] = "Invasion",
|
||||
["gamemode_3"] = "Knockdown",
|
||||
|
||||
["gamemode_1_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_2_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_3_desc"] = "Eliminate the enemy at all costs.",
|
||||
}
|
||||
100
gamemodes/cod_custom/gamemode/lang/lithuanian.lua
Normal file
100
gamemodes/cod_custom/gamemode/lang/lithuanian.lua
Normal file
@@ -0,0 +1,100 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Pontszámok",
|
||||
["scoreboard_kd"] = "Ö/H",
|
||||
|
||||
["menu_warning_ks"] = "Figyelem! A killstrek-ed frissülni fog a kör befejeztekor.",
|
||||
["menu_mainweapon"] = "Az elsõdleges fegyvered: ",
|
||||
["menu_secweapon"] = "A másodlagos fegyvered: ",
|
||||
["menu_ks_choose"] = "Killstreak szelekció - ",
|
||||
["menu_mainperk"] = "Kiválasztani való fõ perk",
|
||||
["menu_highperk"] = "Kiválasztani való magas rangú perk",
|
||||
["menu_choosemain"] = "Elsõdleges fegyver szelekció",
|
||||
["menu_choosesec"] = "Másodlagos fegyver szelekció",
|
||||
["menu_apply"] = "Alkalmazás",
|
||||
|
||||
["hud_killed"] = "LIKVIDÁLVA: ",
|
||||
["hud_killer"] = "Gyilkos: ",
|
||||
["hud_teamdeathmatch"] = "TEAM DEATHMATCH",
|
||||
["hud_win"] = "GYÕZELEM",
|
||||
["hud_lose"] = "VERESÉG",
|
||||
["hud_unlockmainperk"] = " - Fõ Perk feloldva!",
|
||||
["hud_unlockhighperk"] = " - Magas rangú perk feloldva!",
|
||||
["hud_unlockkillstreak"] = "Bevetésre kész!",
|
||||
["hud_package"] = "Nyomd meg a [E] hogy fellved",
|
||||
["hud_fullpackage"] = "Nyomd meg a [E] a csomag felvételéhez",
|
||||
["hud_revive"] = "Felélesztés",
|
||||
["hud_torevive"] = "Nyomd meg az E a felélesztés megkezdéséhez",
|
||||
["hud_reviver"] = "Felélesztés folyamatban",
|
||||
["hud_selfrevive"] = "Önélesztés",
|
||||
["hud_toselfrevive"] = "Tarsd nyomva az E hogy önélesztést hajts végre",
|
||||
["hud_kills"] = "Ölések: ",
|
||||
["hud_killstreak"] = "Killstreak",
|
||||
["hud_nuke"] = "BALLISZTIKUS RAKÉTA KILÖVÕ EGYSÉG BEMÉRVE",
|
||||
["hud_scoreadd_1"] = "+100 Ölés",
|
||||
["hud_scoreadd_2"] = "+110 Fejlövés",
|
||||
["hud_scoreadd_3"] = "+150 Kivégzés",
|
||||
["hud_scoreadd_4"] = "+50 Erõsítés Megsemmisítve",
|
||||
["hud_scoreadd_5"] = "+125 Közelharc",
|
||||
["hud_scoreadd_6"] = "+100 Felélesztés",
|
||||
["hud_scoreadd_7"] = "+250 Vészhívás",
|
||||
|
||||
["contols_main"] = "Beállítások:",
|
||||
["contols_f1"] = "ESC - Felszerelés szerkesztése",
|
||||
["contols_e"] = "E - Kivégzés használata",
|
||||
["contols_q"] = "Q, G - Gránát használata",
|
||||
["contols_v"] = "V - Kés használata",
|
||||
["contols_0"] = "7,8,9,0 - Killstreak használata",
|
||||
["contols_tab"] = "Tab - Eredményjelzõ tábla",
|
||||
["contols_open"] = "Nyomd meg az INSERT a beállítások megnyitásához.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomb Drone",
|
||||
["killstreak_3"] = "Armor",
|
||||
["killstreak_4"] = "Care Package",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Cluster Mine",
|
||||
["killstreak_7"] = "Precision Airstrike",
|
||||
["killstreak_8"] = "K9 Unit",
|
||||
["killstreak_9"] = "Sentry Gun",
|
||||
["killstreak_10"] = "Air Patrol",
|
||||
["killstreak_11"] = "Mortar Strike",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Overwatch Helo",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Reinforcement",
|
||||
["killstreak_16"] = "Stealth Bomber",
|
||||
["killstreak_17"] = "Chopper Gunner",
|
||||
["killstreak_18"] = "Advanced UAV",
|
||||
["killstreak_19"] = "Emergency Airdrop",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["perk_1_1"] = "Bombaelhárító Osztag",
|
||||
["perk_1_2"] = "Felderítõ",
|
||||
["perk_1_3"] = "Keményvonalas",
|
||||
["perk_1_4"] = "Utánpótlás",
|
||||
["perk_1_1_desc"] = "Csökkenti a robbanó hatásoktól elszenvedett sérülést.",
|
||||
["perk_1_2_desc"] = "Olyan képesség ami hatására az ellenséges utánpótlások és erõsítések a falon kereszül is láthatóvá válnak.",
|
||||
["perk_1_3_desc"] = " 1-el csökkenti a killstrek-et.",
|
||||
["perk_1_4_desc"] = "Minden 30 másodpercben kapsz 1 tárrat a jelenlegi fegyveredhez.",
|
||||
["perk_2_1"] = "Gyors Ellátás",
|
||||
["perk_2_2"] = "Túlélõ",
|
||||
["perk_2_3"] = "Kisértet",
|
||||
["perk_2_4"] = "Hideg vérû",
|
||||
["perk_2_1_desc"] = "8 másodperc helyett az életerõd már 3 másodperc után regenerálódni kezd.",
|
||||
["perk_2_2_desc"] = "Haldoklás helyett belépsz a final dash state-be 1-szer életenként.",
|
||||
["perk_2_3_desc"] = "Az UAV-nek láthatatlan leszel.",
|
||||
["perk_2_4_desc"] = "Ellenséges jármûveknek és erõsítéseknek láthatatlan maradsz.",
|
||||
|
||||
["gamemode_1"] = "Csapat Deathmatch",
|
||||
["gamemode_2"] = "Invázió",
|
||||
["gamemode_3"] = "Kiütés",
|
||||
|
||||
["gamemode_1_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_2_desc"] = "Eliminate the enemy at all costs.",
|
||||
["gamemode_3_desc"] = "Eliminate the enemy at all costs.",
|
||||
}
|
||||
166
gamemodes/cod_custom/gamemode/lang/polish.lua
Normal file
166
gamemodes/cod_custom/gamemode/lang/polish.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Wynik",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Uwaga! Twój kill streak zostanie odnowiony w następnej rundzie.",
|
||||
["menu_mainweapon"] = "Twoja główna broń to: ",
|
||||
["menu_secweapon"] = "Twoja dodatkowa broń to: ",
|
||||
["menu_ks_choose"] = "Wybór killstreak'a - ",
|
||||
["menu_mainperk"] = "Wybierz Głównego Perka",
|
||||
["menu_highperk"] = "Wybierz Wysokiego Perka",
|
||||
["menu_choosemain"] = "Wybór głównej broni",
|
||||
["menu_choosesec"] = "Wybór dodatkowej broni",
|
||||
["menu_apply"] = "Zatwierdź",
|
||||
|
||||
["hud_killed"] = "Zabito: ",
|
||||
["hud_killer"] = "Zabójca: ",
|
||||
["hud_teamdeathmatch"] = "DRUŻYNOWY DEATHMATCH",
|
||||
["hud_win"] = "ZWYCIĘSTWO",
|
||||
["hud_lose"] = "PORAŻKA",
|
||||
["hud_unlockmainperk"] = " - Główny Perk odblokowany!",
|
||||
["hud_unlockhighperk"] = " - Wysoki Perk odblokowany!",
|
||||
["hud_unlockkillstreak"] = "Gotowy do użycia!",
|
||||
["hud_package"] = "Wciśnij [E] by podnieść ",
|
||||
["hud_fullpackage"] = "Wciśnij [E] by podnieść paczkę",
|
||||
["hud_revive"] = "Postęp podnoszenia",
|
||||
["hud_torevive"] = "Wciśnij [E] by podnieść sojusznika",
|
||||
["hud_reviver"] = "Jesteś podnoszony",
|
||||
["hud_selfrevive"] = "Postęp samopodnoszenia",
|
||||
["hud_toselfrevive"] = "Przytrzymaj [E] by się podnieść",
|
||||
["hud_kills"] = "Zabójstwa: ",
|
||||
["hud_killstreak"] = "Seria zabójstw",
|
||||
["hud_nuke"] = "WYSTRZAŁ RAKIETY BALISTYCZNEJ WYKRYTY",
|
||||
["hud_scoreadd_1"] = "+100 Zabójstwo",
|
||||
["hud_scoreadd_2"] = "+110 Headshot",
|
||||
["hud_scoreadd_3"] = "+150 Egzekucja",
|
||||
["hud_scoreadd_4"] = "+50 Wsparcie zniszczone",
|
||||
["hud_scoreadd_5"] = "+125 Wręcz",
|
||||
["hud_scoreadd_6"] = "+100 Podniesienie",
|
||||
["hud_scoreadd_7"] = "+250 Ostatni ratunek",
|
||||
|
||||
["hud_message_1"] = "Pierwszy zarażony",
|
||||
["hud_message_2"] = "Ostatni ocalały",
|
||||
["hud_message_3"] = "+50 Ocalały",
|
||||
|
||||
["hud_domination_1"] = "ZDOBYWANIE",
|
||||
["hud_domination_2"] = "OBRONA",
|
||||
["hud_domination_3"] = "POSTĘP",
|
||||
["hud_domination_4"] = "+200 Zdobycie strefy neutralnej",
|
||||
["hud_domination_5"] = "+100 Zdobycie strefy wroga",
|
||||
|
||||
["hud_invasion_1"] = "SKRZYNIE ZAPASOWE W DRODZE",
|
||||
["hud_invasion_2"] = "SILNE WZMOCNIENIA W DRODZE",
|
||||
|
||||
["contols_main"] = "Klawisze:",
|
||||
["contols_f1"] = "ESC - Edytuj wyposażenie",
|
||||
["contols_e"] = "E - Egzekucja",
|
||||
["contols_q"] = "Q, G - Rzuć granat",
|
||||
["contols_v"] = "V - Użyj noża",
|
||||
["contols_0"] = "7,8,9,0 - Użyj Killstreak",
|
||||
["contols_tab"] = "Tab - Scoreboard",
|
||||
["contols_open"] = "Przytrzymaj [INSERT] by otworzyć klawisze.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Dron z bombą",
|
||||
["killstreak_3"] = "Pancerz",
|
||||
["killstreak_4"] = "Pakiet Zaopatrzenia",
|
||||
["killstreak_5"] = "Kontr-UAV",
|
||||
["killstreak_6"] = "Mina",
|
||||
["killstreak_7"] = "Precyzyjny Nalot",
|
||||
["killstreak_8"] = "Jednostka K9",
|
||||
["killstreak_9"] = "Wieżyczka",
|
||||
["killstreak_10"] = "Patrol powietrzny",
|
||||
["killstreak_11"] = "Ostrzał moździerzem",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Helikopter Obserwacyjny",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Wsparcie",
|
||||
["killstreak_16"] = "Zamaskowany bombowiec",
|
||||
["killstreak_17"] = "Strzelec Helikoptera",
|
||||
["killstreak_18"] = "Zaawansowany UAV",
|
||||
["killstreak_19"] = "Awaryjny Zrzut",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "Taktyczny Nuke",
|
||||
|
||||
["killstreak_desc_1"] = "UAV - statek rozpoznawczy, który ujawnia położenie wrogów na minimapie.",
|
||||
["killstreak_desc_2"] = "Sterowany zdalnie dron z zamocowaną ładunkiem C4.",
|
||||
["killstreak_desc_3"] = "Daje torbę z pancerzem dla całej drużyny.",
|
||||
["killstreak_desc_4"] = "Wywołuje losowy pakiet wsparcia na twoją pozycję.",
|
||||
["killstreak_desc_5"] = "Dron, który zakłóca minimapy wrogów.",
|
||||
["killstreak_desc_6"] = "Rzuć urządzenie, które wypuszcza gromadę mniejszych min w okolicy.",
|
||||
["killstreak_desc_7"] = "Wezwij podwójne samoloty do precyzyjnego uderzenia po najlepszej dostępnej ścieżce.",
|
||||
["killstreak_desc_8"] = "Wezwij jednostkę K9 do szukania wrogów.",
|
||||
["killstreak_desc_9"] = "Automatyczna wieżyczka skanująca otoczenie w poszukiwaniu wrogów i strzelająca pociskami zapalającymi.",
|
||||
["killstreak_desc_10"] = "Trzy samoloty, śledzące pojazdy powietrzne i strzelające do nich, zwalniając przestrzeń powietrzną.",
|
||||
["killstreak_desc_11"] = "Zaznacz cel, by wywołać fale moździerzy na wybrane miejsce.",
|
||||
["killstreak_desc_12"] = "Wezwij trójkę samolotów, by zrzuciły bomby na wskazane cele.",
|
||||
["killstreak_desc_13"] = "Atakujący helikopter, który patroluje okolice i znajduje wrogów przed ich atakiem.",
|
||||
["killstreak_desc_14"] = "Zrzuca precyzyjną bombę, po czym krąży wokół i pilnuje zaznaczonej pozycji.",
|
||||
["killstreak_desc_15"] = "Helikopter, z którego wysiada trzech żołnierzy z ciężkim uzbrojeniem.",
|
||||
["killstreak_desc_16"] = "Wezwij bombowiec, który zrzuci duży ładunek wybuchowy wzdłuż swojej trasy.",
|
||||
["killstreak_desc_17"] = "Steruj atakującym helikopterem uzbrojonym w wieżyczkę i pociski powietrze-ziemia.",
|
||||
["killstreak_desc_18"] = "Orbitalny UAV, który w czasie rzeczywistym ujawnia kierunek przeciwników na minimapie.",
|
||||
["killstreak_desc_19"] = "Wezwij 3 losowe pakiety wsparcia na twoją pozycję.",
|
||||
["killstreak_desc_20"] = "Ciężko uzbrojony helikopter szturmowy wyposażony w pociski rakietowe, wraz z działami 40mm i 25mm.",
|
||||
["killstreak_desc_21"] = "Zestaw szturmowy Juggernaut z minigunem dostarczany przez pakiet opieki.",
|
||||
["killstreak_desc_22"] = "Masywny cios dla twojej pozycji. Zakończy grę na korzyść twojego zespołu.",
|
||||
|
||||
["main_menu_1"] = "Wznów grę",
|
||||
["main_menu_2"] = "Zmień ekwipunek",
|
||||
["main_menu_3"] = "Ustawienia",
|
||||
["main_menu_4"] = "Menu główne",
|
||||
|
||||
["main_menu_settings_1"] = "Muzyka: ",
|
||||
["main_menu_settings_2"] = "Komentator: ",
|
||||
["main_menu_settings_3"] = "Killcam: ",
|
||||
["main_menu_settings_4"] = "Serwer Discord",
|
||||
["main_menu_settings_cm"] = "Custom Muzyka: ",
|
||||
|
||||
["main_menu_loadout"] = "Ekwipunek",
|
||||
["main_menu_loadout_wep"] = "Twój wybór:",
|
||||
["main_menu_loadout_1"] = "Broń podstawowa",
|
||||
["main_menu_loadout_2"] = "Broń dodatkowa",
|
||||
["main_menu_loadout_3"] = "Seria zabójstw",
|
||||
["main_menu_loadout_3_1"] = "Wybrane serie zabójstw - ",
|
||||
["main_menu_loadout_4"] = "Zdolności specjalne",
|
||||
["main_menu_loadout_5"] = "Zabójstwa specjalne",
|
||||
["main_menu_loadout_6"] = "Zastosuj",
|
||||
["main_menu_loadout_7"] = "Wyjście",
|
||||
|
||||
["perk_1_1"] = "Saper",
|
||||
["perk_1_2"] = "Wywiadowca",
|
||||
["perk_1_3"] = "Twardogłowy",
|
||||
["perk_1_4"] = "Powtórne zaopatrzenie",
|
||||
["perk_1_1_desc"] = "Redukuje obrażenia od eksplozji.",
|
||||
["perk_1_2_desc"] = "Możliwość widzenia przez ściany pakietów i wsparcia przeciwnika.",
|
||||
["perk_1_3_desc"] = "Redukuje wymóg killstreak o 1 punkt.",
|
||||
["perk_1_4_desc"] = "Co 30 sekund, zyskujesz 1 magazynek do swojej obecnej broni.",
|
||||
["perk_2_1"] = "Szybkie Leczenie",
|
||||
["perk_2_2"] = "Ocalały",
|
||||
["perk_2_3"] = "Duch",
|
||||
["perk_2_4"] = "Zimnokrwisty",
|
||||
["perk_2_1_desc"] = "Twoje zdrowie regeneruje się w 3 sekundy zamiast 8 sekund.",
|
||||
["perk_2_2_desc"] = "Zamiast umrzeć, wchodzisz w stan ostatnich działań raz na życie.",
|
||||
["perk_2_3_desc"] = "Niewidoczny dla każdego UAV.",
|
||||
["perk_2_4_desc"] = "Niewidoczny dla pojazdów i wrogiego wsparcia.",
|
||||
|
||||
["gamemode_1"] = "Druzynowy Deathmatch",
|
||||
["gamemode_2"] = "Inwazja",
|
||||
["gamemode_3"] = "Knock Out",
|
||||
["gamemode_4"] = "ZARAŻENI",
|
||||
["gamemode_5"] = "DOMINACJA",
|
||||
|
||||
["gamemode_1_desc"] = "Wyeliminuj wrogów za wszelką cenę.",
|
||||
["gamemode_2_desc"] = "Wyeliminuj wrogów za wszelką cenę.",
|
||||
["gamemode_3_desc"] = "Wyeliminuj wrogów za wszelką cenę.",
|
||||
["gamemode_4_desc"] = "Przetrwaj lub zainfekuj wszystkich.",
|
||||
["gamemode_5_desc"] = "Zdobądź kontrolę nad wszystkimi sektorami na lokacji.",
|
||||
|
||||
["killcam_1"] = "Twoja śmierć",
|
||||
["killcam_2"] = "Ostateczne zabójstwo",
|
||||
["killcam_3"] = "Naciśnij SPACJĘ, aby pominąć",
|
||||
}
|
||||
169
gamemodes/cod_custom/gamemode/lang/russian.lua
Normal file
169
gamemodes/cod_custom/gamemode/lang/russian.lua
Normal file
@@ -0,0 +1,169 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "СпецГру",
|
||||
["team2_name"] = "КорТак",
|
||||
|
||||
["scoreboard_score"] = "Счёт",
|
||||
["scoreboard_kd"] = "У/С",
|
||||
|
||||
["menu_warning_ks"] = "Внимание! Ваши серии убийств будут обновлены, после окончания раунда.",
|
||||
["menu_mainweapon"] = "Ваше основное оружие: ",
|
||||
["menu_secweapon"] = "Ваше дополнительное оружие: ",
|
||||
["menu_ks_choose"] = "Выбор серии убийств - ",
|
||||
["menu_mainperk"] = "Выбор основного перка",
|
||||
["menu_highperk"] = "Выбор высшего перка",
|
||||
["menu_choosemain"] = "Выбор основного оружия",
|
||||
["menu_choosesec"] = "Выбор дополнительного оружия",
|
||||
["menu_apply"] = "Применить",
|
||||
|
||||
["hud_killer"] = "Убийца: ",
|
||||
["hud_killed"] = "ЖЕРТВА: ",
|
||||
["hud_teamdeathmatch"] = "КОМАНДНЫЙ БОЙ",
|
||||
["hud_win"] = "ПОБЕДА",
|
||||
["hud_lose"] = "ПОРАЖЕНИЕ",
|
||||
["hud_unlockmainperk"] = " - Разблокирован основной перк!",
|
||||
["hud_unlockhighperk"] = " - Разблокирован высший перк!",
|
||||
["hud_unlockkillstreak"] = "Готов к использованию!",
|
||||
["hud_package"] = "Зажмите [E], чтобы подобрать ",
|
||||
["hud_fullpackage"] = "Зажмите [E], чтобы подобрать посылку",
|
||||
["hud_revive"] = "Прогресс реанимации",
|
||||
["hud_torevive"] = "Зажмите E для реанимации",
|
||||
["hud_reviver"] = "Вас реанимируют",
|
||||
["hud_selfrevive"] = "Прогресс самореанимации",
|
||||
["hud_toselfrevive"] = "Зажмите E для самореанимации",
|
||||
["hud_kills"] = "Убийств: ",
|
||||
["hud_killstreak"] = "Серия убийств",
|
||||
["hud_nuke"] = "ОБНАРУЖЕН МАССИРОВАННЫЙ УДАР",
|
||||
["hud_scoreadd_1"] = "+100 Ликвидация",
|
||||
["hud_scoreadd_2"] = "+110 Выстрел в голову",
|
||||
["hud_scoreadd_3"] = "+150 Добивающий удар",
|
||||
["hud_scoreadd_4"] = "+50 Уничтожение подкрепления",
|
||||
["hud_scoreadd_5"] = "+125 Рукопашный бой",
|
||||
["hud_scoreadd_6"] = "+100 Реанимация",
|
||||
["hud_scoreadd_7"] = "+250 Сигнал бедствия",
|
||||
|
||||
["hud_message_1"] = "Первый заражённый",
|
||||
["hud_message_2"] = "Последний выживший",
|
||||
["hud_message_3"] = "+50 Выживший",
|
||||
|
||||
["hud_domination_1"] = "ЗАХВАТИТЬ",
|
||||
["hud_domination_2"] = "ЗАЩИЩАТЬ",
|
||||
["hud_domination_3"] = "ПРОГРЕСС",
|
||||
["hud_domination_4"] = "+200 Нейтральная зона захвачена",
|
||||
["hud_domination_5"] = "+100 Вражеская зона захвачена",
|
||||
|
||||
["hud_invasion_1"] = "ЯЩИКИ СНАБЖЕНИЯ В ПУТИ",
|
||||
["hud_invasion_2"] = "ТЯЖЕЛОЕ ПОДКРЕПЛЕНИЕ В ПУТИ",
|
||||
|
||||
["contols_main"] = "Управление:",
|
||||
["contols_f1"] = "ESC - Изменить комплект",
|
||||
["contols_e"] = "E - Добивающий удар",
|
||||
["contols_q"] = "Q, G - Бросить гранату",
|
||||
["contols_v"] = "V - Использовать нож",
|
||||
["contols_0"] = "7,8,9,0 - Использование серии убийств",
|
||||
["contols_tab"] = "Tab - Счёт",
|
||||
["contols_open"] = "Зажмите INSERT, чтобы открыть управление.",
|
||||
|
||||
["killstreak_1"] = "БПЛА",
|
||||
["killstreak_2"] = "Дрон-камикадзе",
|
||||
["killstreak_3"] = "Броня",
|
||||
["killstreak_4"] = "Посылка",
|
||||
["killstreak_5"] = "Контр-БПЛА",
|
||||
["killstreak_6"] = "Кассетная мина",
|
||||
["killstreak_7"] = "Точечный авиаудар",
|
||||
["killstreak_8"] = "Сторожевая собака",
|
||||
["killstreak_9"] = "Турель",
|
||||
["killstreak_10"] = "Воздушный патруль",
|
||||
["killstreak_11"] = "Миномётный удар",
|
||||
["killstreak_12"] = "Стратегический удар",
|
||||
["killstreak_13"] = "Вертолёт поддержки",
|
||||
["killstreak_14"] = "СВВП",
|
||||
["killstreak_15"] = "Подкрепление",
|
||||
["killstreak_16"] = "Стелс-бомбардировщик",
|
||||
["killstreak_17"] = "Вертолёт со стрелком",
|
||||
["killstreak_18"] = "МБПЛА",
|
||||
["killstreak_19"] = "Экстренный груз",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Джаггернаут",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["killstreak_desc_1"] = "БПЛА, который показывает местоположение противника на мини-карте.",
|
||||
["killstreak_desc_2"] = "Управляемый дрон с прикрепленным зарядом C4.",
|
||||
["killstreak_desc_3"] = "Дает мешок брони для всей команды.",
|
||||
["killstreak_desc_4"] = "Вызовите случайную посылку с серией убийств к себе.",
|
||||
["killstreak_desc_5"] = "Дрон, который блокирует все вражеские миникарты.",
|
||||
["killstreak_desc_6"] = "Взрывное устройство, которое запускает группу небольших мин в непосредственной близости.",
|
||||
["killstreak_desc_7"] = "Вызов двойных реактивных самолетов для точного удара по наилучшему доступному пути.",
|
||||
["killstreak_desc_8"] = "Вызов сторожевой собаки для поиска врагов.",
|
||||
["killstreak_desc_9"] = "Автоматическая турель, которая сканирует ближайших врагов и стреляет зажигательными снарядами.",
|
||||
["killstreak_desc_10"] = "Три самолета, выслеживающий воздушные транспортные средства, сбивает их, освобождая воздушное пространство.",
|
||||
["killstreak_desc_11"] = "Отметьте целевое местоположение, чтобы дать сигнал нескольким волнам минометов атаковать область.",
|
||||
["killstreak_desc_12"] = "Вызовите три реактивных самолета, чтобы сбросить взрывчатку с воздуха на указанные цели.",
|
||||
["killstreak_desc_13"] = "Атакующий вертолет, который будет следить за позициями и находить врагов, прежде чем атаковать их.",
|
||||
["killstreak_desc_14"] = "Выпускает прицельную бомбу, прежде чем вернуться и охранять отмеченное место.",
|
||||
["killstreak_desc_15"] = "Вертолет, который высаживает трех солдат с тяжелой подготовкой.",
|
||||
["killstreak_desc_16"] = "Вызов бомбардировщика, который выпускает на своем пути большую линию взрывчатки.",
|
||||
["killstreak_desc_17"] = "Управляйте штурмовым вертолетом, вооруженным турелью и ракетами класса воздух-земля.",
|
||||
["killstreak_desc_18"] = "Орбитальный БПЛА, который показывает направление противника на мини-карте в режиме реального времени.",
|
||||
["killstreak_desc_19"] = "Вызовите к себе 3 случайные посылки с серией убийств.",
|
||||
["killstreak_desc_20"] = "Тяжелый штурмовой боевой корабль, оснащенный ракетой, а также 40-мм и 25-мм пушками.",
|
||||
["killstreak_desc_21"] = "Штурмовое снаряжение Джаггернаута с миниганом доставлено посылкой.",
|
||||
["killstreak_desc_22"] = "Массированный удар по вашей позиции. Закончит игру в пользу вашей команды.",
|
||||
|
||||
["main_menu_1"] = "Продолжить игру",
|
||||
["main_menu_2"] = "Изменить комплект",
|
||||
["main_menu_3"] = "Настройки",
|
||||
["main_menu_4"] = "Главное меню",
|
||||
|
||||
["main_menu_settings_1"] = "Музыка: ",
|
||||
["main_menu_settings_2"] = "Диктор: ",
|
||||
["main_menu_settings_3"] = "Момент смерти: ",
|
||||
["main_menu_settings_4"] = "Дискорд сервер",
|
||||
["main_menu_settings_cm"] = "Своя музыка: ",
|
||||
|
||||
["main_menu_loadout"] = "Комплект",
|
||||
["main_menu_loadout_wep"] = "Ваш выбор:",
|
||||
["main_menu_loadout_1"] = "Основное оружие",
|
||||
["main_menu_loadout_2"] = "Доп. оружие",
|
||||
["main_menu_loadout_3"] = "Серии убийств",
|
||||
["main_menu_loadout_3_1"] = "Выбрано серий убийств - ",
|
||||
["main_menu_loadout_4"] = "Перки",
|
||||
["main_menu_loadout_5"] = "Добивающие удары",
|
||||
["main_menu_loadout_6"] = "Применить",
|
||||
["main_menu_loadout_7"] = "Выйти",
|
||||
|
||||
["perk_1_1"] = "Взрывотехник",
|
||||
["perk_1_2"] = "Наблюдатель",
|
||||
["perk_1_3"] = "Упрямство",
|
||||
["perk_1_4"] = "Пополнение запасов",
|
||||
["perk_1_1_desc"] = "Уменьшает урон от взрывов.",
|
||||
["perk_1_2_desc"] = "Способность видеть через стены вражеские посылки и подкрепление.",
|
||||
["perk_1_3_desc"] = "Уменьшение серий убийств на 1.",
|
||||
["perk_1_4_desc"] = "Каждые 30 секунд, вам дается 1 магазин к текущему оружию.",
|
||||
["perk_2_1"] = "Быстрое лечение",
|
||||
["perk_2_2"] = "Выживание",
|
||||
["perk_2_3"] = "Призрак",
|
||||
["perk_2_4"] = "Хладнокровие",
|
||||
["perk_2_1_desc"] = "Ваше здоровье востанавливается через 3 секунды, вместо 8 секунд.",
|
||||
["perk_2_2_desc"] = "Вместо того чтобы умереть вы переходите в состояние последнего рывка 1 раз за жизнь.",
|
||||
["perk_2_3_desc"] = "Невидимость для БПЛА.",
|
||||
["perk_2_4_desc"] = "Невидимость для техники и вражеских подкреплений.",
|
||||
|
||||
["gamemode_1"] = "КОМАНДНЫЙ БОЙ",
|
||||
["gamemode_2"] = "ВТОРЖЕНИЕ",
|
||||
["gamemode_3"] = "НОКАУТ",
|
||||
["gamemode_4"] = "ЗАРАЖЕНИЕ",
|
||||
["gamemode_5"] = "ПРЕВОСХОДСТВО",
|
||||
|
||||
["gamemode_1_desc"] = "Ликвидируйте силы противника.",
|
||||
["gamemode_2_desc"] = "Имея подкрепление, ликвидируйте силы противника.",
|
||||
["gamemode_3_desc"] = "Ликвидируйте силы противника.",
|
||||
["gamemode_4_desc"] = "Выживите или заразите всех.",
|
||||
["gamemode_5_desc"] = "Контролируйте все сектора на локации.",
|
||||
|
||||
["killcam_1"] = "Ваша смерть",
|
||||
["killcam_2"] = "Финальное убийство",
|
||||
["killcam_3"] = "Нажмите SPACE чтобы пропустить",
|
||||
|
||||
["admin_menu_title"] = "Админ Меню",
|
||||
["admin_change_gamemode"] = "Сменить режим",
|
||||
}
|
||||
166
gamemodes/cod_custom/gamemode/lang/spanish.lua
Normal file
166
gamemodes/cod_custom/gamemode/lang/spanish.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Puntuación",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Advertencia! Tu racha de bajas sera reiniciada cuando la ronda termine.",
|
||||
["menu_mainweapon"] = "Tu arma principal es: ",
|
||||
["menu_secweapon"] = "Tu arma secundaria es: ",
|
||||
["menu_ks_choose"] = "Seleccion de rachas de bajas - ",
|
||||
["menu_mainperk"] = "Seleccion de ventaja",
|
||||
["menu_highperk"] = "Seleccion de ventaja definitiva",
|
||||
["menu_choosemain"] = "Seleccion de arma principal",
|
||||
["menu_choosesec"] = "Seleccion de arma secundaria",
|
||||
["menu_apply"] = "Aplicar",
|
||||
|
||||
["hud_killed"] = "MUERTO: ",
|
||||
["hud_killer"] = "Asesinado por: ",
|
||||
["hud_teamdeathmatch"] = "DUELO POR EQUIPOS",
|
||||
["hud_win"] = "VICTORIA",
|
||||
["hud_lose"] = "DERROTA",
|
||||
["hud_unlockmainperk"] = " - Ventaja principal Desbloqueada!",
|
||||
["hud_unlockhighperk"] = " - Ventaja definitiva Desbloqueada!",
|
||||
["hud_unlockkillstreak"] = "Listo para usar!",
|
||||
["hud_package"] = "Presiona [E] para hagarrar ",
|
||||
["hud_fullpackage"] = "Presiona [E] para tomar el paquete",
|
||||
["hud_revive"] = "Reanimacion en progreso",
|
||||
["hud_torevive"] = "Presiona E para Reanimar",
|
||||
["hud_reviver"] = "Estas siendo reanimado",
|
||||
["hud_selfrevive"] = "Auto-reanimacion en progreso",
|
||||
["hud_toselfrevive"] = "Presiona E para Auto-reanimarte",
|
||||
["hud_kills"] = "Bajas: ",
|
||||
["hud_killstreak"] = "Racha de Bajas",
|
||||
["hud_nuke"] = "MISIL BALISTICO DETECTADO",
|
||||
["hud_scoreadd_1"] = "+100 Baja",
|
||||
["hud_scoreadd_2"] = "+110 Disparo ala cabeza",
|
||||
["hud_scoreadd_3"] = "+150 Remate",
|
||||
["hud_scoreadd_4"] = "+50 Refuerzos Destruidos",
|
||||
["hud_scoreadd_5"] = "+125 Cuerpo a cuerpo",
|
||||
["hud_scoreadd_6"] = "+100 Reanimacion",
|
||||
["hud_scoreadd_7"] = "+250 Llamado de alerta",
|
||||
|
||||
["hud_message_1"] = "Primer infectado",
|
||||
["hud_message_2"] = "Ultimo sobreviviente",
|
||||
["hud_message_3"] = "+50 Sobrevivientes",
|
||||
|
||||
["hud_domination_1"] = "CAPTURA",
|
||||
["hud_domination_2"] = "DEFENDER",
|
||||
["hud_domination_3"] = "PROGRESO",
|
||||
["hud_domination_4"] = "+200 Zona neutral capturada",
|
||||
["hud_domination_5"] = "+100 Zona enemiga capturada",
|
||||
|
||||
["hud_invasion_1"] = "CAJA DE SUMINISTROS EN CAMINO",
|
||||
["hud_invasion_2"] = "REFUERZOS EN CAMINO",
|
||||
|
||||
["contols_main"] = "Controles:",
|
||||
["contols_f1"] = "ESC - Editar Equipamiento",
|
||||
["contols_e"] = "E - Remate",
|
||||
["contols_q"] = "Q, G - Lanzar Granada",
|
||||
["contols_v"] = "V - Cuchillo",
|
||||
["contols_0"] = "7,8,9,0 - Racha de bajas",
|
||||
["contols_tab"] = "Tab - Puntuacion",
|
||||
["contols_open"] = "Manten INSERT para abrir los controles.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomb Drone",
|
||||
["killstreak_3"] = "Armor",
|
||||
["killstreak_4"] = "Care Package",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Cluster Mine",
|
||||
["killstreak_7"] = "Precision Airstrike",
|
||||
["killstreak_8"] = "K9 Unit",
|
||||
["killstreak_9"] = "Sentry Gun",
|
||||
["killstreak_10"] = "Air Patrol",
|
||||
["killstreak_11"] = "Mortar Strike",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Overwatch Helo",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Reinforcement",
|
||||
["killstreak_16"] = "Stealth Bomber",
|
||||
["killstreak_17"] = "Chopper Gunner",
|
||||
["killstreak_18"] = "Advanced UAV",
|
||||
["killstreak_19"] = "Emergency Airdrop",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "MGB",
|
||||
|
||||
["killstreak_desc_1"] = "nave de reconocimiento UAV que muestra la ubicacion del enemigo en el mapa.",
|
||||
["killstreak_desc_2"] = "Dron a control remoto que lleva una carga de C4.",
|
||||
["killstreak_desc_3"] = "bolsa de armadura que otorga armadura a todo el equipo.",
|
||||
["killstreak_desc_4"] = "Solicita un paquete de ayuda a tu ubicacion con una racha de bajas aleatoria.",
|
||||
["killstreak_desc_5"] = "Dron que inhibe todos los minimapas de los enemigos.",
|
||||
["killstreak_desc_6"] = "Arroja un dispositivo que lanza un racimo de minas pequeñas en el area mas cercana.",
|
||||
["killstreak_desc_7"] = "jets que arrojaran un ataque aereo en el area.",
|
||||
["killstreak_desc_8"] = "Solicita un perro de apoyo para buscar enemigos en el area.",
|
||||
["killstreak_desc_9"] = "Torreta automatizada que identifica enemigos cercanos.",
|
||||
["killstreak_desc_10"] = "Tres jets que eliminan alos vehiculos aereos enemigos en el area.",
|
||||
["killstreak_desc_11"] = "Señala varias oleadas de morteros para atacar un lugar.",
|
||||
["killstreak_desc_12"] = "Solicita un trio de aviones de combate que ataquen objetivos especificos.",
|
||||
["killstreak_desc_13"] = "Helicoptero de escolta,vigilara tu posicion y marcara enemigos antes de atacar.",
|
||||
["killstreak_desc_14"] = "Lanza un par de bombas de precision antes de regresar a proteger una zona marcada.",
|
||||
["killstreak_desc_15"] = "Helicoptero de apoyo que desplegara soldados bien entrenados.",
|
||||
["killstreak_desc_16"] = "Bombardero que lanzara una oleada de bombas mientras sigue su ruta.",
|
||||
["killstreak_desc_17"] = "controla un helicoptero de asalto armado con torreta y misiles aire-tierra.",
|
||||
["killstreak_desc_18"] = "UAV orbital sin objetivo,muestra al enemigo en tiempo real.",
|
||||
["killstreak_desc_19"] = "Solicita tres paquetes de ayuda de rachas de bajas aleatorias a tu ubicacion.",
|
||||
["killstreak_desc_20"] = "Solicita un avion artillado de asalto pesado equipado con un misil laser rastreador y cañones de 40MM y 25MM.",
|
||||
["killstreak_desc_21"] = "Armadura juggernaut entregada por un paquete de ayuda.",
|
||||
["killstreak_desc_22"] = "Una explosion gigante que terminara la partida a favor de tu equipo.",
|
||||
|
||||
["main_menu_1"] = "Continuar",
|
||||
["main_menu_2"] = "Cambiar Equipamiento",
|
||||
["main_menu_3"] = "Opciones",
|
||||
["main_menu_4"] = "Menu principal",
|
||||
|
||||
["main_menu_settings_1"] = "Musica: ",
|
||||
["main_menu_settings_2"] = "Anunciador: ",
|
||||
["main_menu_settings_3"] = "Camara de muerte: ",
|
||||
["main_menu_settings_4"] = "Servidor de discord",
|
||||
["main_menu_settings_cm"] = "Custom Musica: ",
|
||||
|
||||
["main_menu_loadout"] = "Equipamiento",
|
||||
["main_menu_loadout_wep"] = "Tu seleccion:",
|
||||
["main_menu_loadout_1"] = "Arma Primaria",
|
||||
["main_menu_loadout_2"] = "Arma secundaria",
|
||||
["main_menu_loadout_3"] = "Racha de Bajas",
|
||||
["main_menu_loadout_3_1"] = "Racha de Bajas seleccionada - ",
|
||||
["main_menu_loadout_4"] = "Ventajas",
|
||||
["main_menu_loadout_5"] = "Remates",
|
||||
["main_menu_loadout_6"] = "Aplicar",
|
||||
["main_menu_loadout_7"] = "Salir",
|
||||
|
||||
["perk_1_1"] = "Pelotón de explosivos",
|
||||
["perk_1_2"] = "Rastreador",
|
||||
["perk_1_3"] = "Línea dura",
|
||||
["perk_1_4"] = "Reabastecimiento",
|
||||
["perk_1_1_desc"] = "Reduce el daño por explosivos.",
|
||||
["perk_1_2_desc"] = "Puedes ver paquetes y refuerzos enemigos atravez de las paredes.",
|
||||
["perk_1_3_desc"] = "Reduce el coste de las bajas de rachas por 1.",
|
||||
["perk_1_4_desc"] = "Cada 30 segundos ganas un cargador para tu arma.",
|
||||
["perk_2_1"] = "Parche rápido",
|
||||
["perk_2_2"] = "Superviviente",
|
||||
["perk_2_3"] = "Fantasma",
|
||||
["perk_2_4"] = "Sangre fría",
|
||||
["perk_2_1_desc"] = "Tu salud se regenera despues de 3 segundos en vez de 8 segundos.",
|
||||
["perk_2_2_desc"] = "Al morir, pasas a Última batalla con la posibilidad de autorreanimarte una vez por vida.",
|
||||
["perk_2_3_desc"] = "Indetectable para UAVS.",
|
||||
["perk_2_4_desc"] = "indetectable para vehiculos y refuerzos enemigos.",
|
||||
|
||||
["gamemode_1"] = "DUELO POR EQUIPOS",
|
||||
["gamemode_2"] = "INVASION",
|
||||
["gamemode_3"] = "KNOCK OUT",
|
||||
["gamemode_4"] = "INFECTADO",
|
||||
["gamemode_5"] = "DOMINIO",
|
||||
|
||||
["gamemode_1_desc"] = "Elimina al enemigo a toda costa.",
|
||||
["gamemode_2_desc"] = "Elimina al enemigo a toda costa.",
|
||||
["gamemode_3_desc"] = "Elimina al enemigo a toda costa.",
|
||||
["gamemode_4_desc"] = "Sobrevive o infecta alos demas.",
|
||||
["gamemode_5_desc"] = "Controla todos los sectores en el mapa.",
|
||||
|
||||
["killcam_1"] = "Tu muerte",
|
||||
["killcam_2"] = "Muerte final",
|
||||
["killcam_3"] = "ESPACIO para saltar",
|
||||
}
|
||||
166
gamemodes/cod_custom/gamemode/lang/turkish.lua
Normal file
166
gamemodes/cod_custom/gamemode/lang/turkish.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "SpecGru",
|
||||
["team2_name"] = "KorTac",
|
||||
|
||||
["scoreboard_score"] = "Puan",
|
||||
["scoreboard_kd"] = "K/D",
|
||||
|
||||
["menu_warning_ks"] = "Dikkat! Öldürme serisi tur bittikten sonra yenilenecek.",
|
||||
["menu_mainweapon"] = "Ana silahın: ",
|
||||
["menu_secweapon"] = "İkincil silahın: ",
|
||||
["menu_ks_choose"] = "Öldürme serisi sırası seç - ",
|
||||
["menu_mainperk"] = "Ana yetenek seçin",
|
||||
["menu_highperk"] = "Gelişmiş yetenek seçin",
|
||||
["menu_choosemain"] = "Ana silah seçimi",
|
||||
["menu_choosesec"] = "İkincil silah seçimi",
|
||||
["menu_apply"] = "Uygula",
|
||||
|
||||
["hud_killer"] = "Öldüren: ",
|
||||
["hud_killed"] = "Ölen: ",
|
||||
["hud_teamdeathmatch"] = "Takım Ölüm Savaşı",
|
||||
["hud_win"] = "Zafer",
|
||||
["hud_lose"] = "Yenilgi",
|
||||
["hud_unlockmainperk"] = " - Ana yetenek açıldı!",
|
||||
["hud_unlockhighperk"] = " - Gelişmiş yetenek açıldı!",
|
||||
["hud_unlockkillstreak"] = "Kullanmaya hazır!",
|
||||
["hud_package"] = "Almak için [E] bas ",
|
||||
["hud_fullpackage"] = "Paketi almak için [E] bas",
|
||||
["hud_revive"] = "Canlandırma süresi",
|
||||
["hud_torevive"] = "Canlandırmak için E bas",
|
||||
["hud_reviver"] = "Canlandırılıyorsun",
|
||||
["hud_selfrevive"] = "Kendini canlandırma süresi",
|
||||
["hud_toselfrevive"] = "Kendini canlandırmak için E bas",
|
||||
["hud_kills"] = "Öldürmeler: ",
|
||||
["hud_killstreak"] = "Öldürme serileri",
|
||||
["hud_nuke"] = "Balistik füze atışı saptandı",
|
||||
["hud_scoreadd_1"] = "+100 Öldürme",
|
||||
["hud_scoreadd_2"] = "+110 Kafadan Vuruş",
|
||||
["hud_scoreadd_3"] = "+150 Bitirici hareket",
|
||||
["hud_scoreadd_4"] = "+50 Takviyeler yok edildi",
|
||||
["hud_scoreadd_5"] = "+125 Yakın Dövüş",
|
||||
["hud_scoreadd_6"] = "+100 Canlandırma",
|
||||
["hud_scoreadd_7"] = "+250 Mayday",
|
||||
|
||||
["hud_message_1"] = "İlk Enfekte",
|
||||
["hud_message_2"] = "Son Yaşayan",
|
||||
["hud_message_3"] = "+50 Yaşayan",
|
||||
|
||||
["hud_invasion_1"] = "Malzeme kutuları yolda",
|
||||
["hud_invasion_2"] = "Zırhlı Takviye birlikleri yolda",
|
||||
|
||||
["hud_domination_1"] = "Ele Geçir",
|
||||
["hud_domination_2"] = "Savun",
|
||||
["hud_domination_3"] = "Süreç",
|
||||
["hud_domination_4"] = "+200 Boş bölge ele geçirildi",
|
||||
["hud_domination_5"] = "+100 Düşman bölgesi ele geçirildi",
|
||||
|
||||
["contols_main"] = "Control:",
|
||||
["contols_f1"] = "ESC - Teçhizatı düzenle",
|
||||
["contols_e"] = "E - Bitirici hareket",
|
||||
["contols_q"] = "Q, G - Bomba fırlat",
|
||||
["contols_v"] = "V - Yakın dövüş",
|
||||
["contols_0"] = "7,8,9,0 - Skor serisi kullan",
|
||||
["contols_tab"] = "Tab - Skor tablosu",
|
||||
["contols_open"] = "INSERT tuşuna basılı tutarak ayarları aç.",
|
||||
|
||||
["killstreak_1"] = "UAV",
|
||||
["killstreak_2"] = "Bomba dronu",
|
||||
["killstreak_3"] = "Zırh",
|
||||
["killstreak_4"] = "Yardım paketi",
|
||||
["killstreak_5"] = "Counter-UAV",
|
||||
["killstreak_6"] = "Mayın",
|
||||
["killstreak_7"] = "İkili hava saldırısı",
|
||||
["killstreak_8"] = "K9 Köpekleri",
|
||||
["killstreak_9"] = "Nöbetçi silahı",
|
||||
["killstreak_10"] = "Hava devriyesi",
|
||||
["killstreak_11"] = "Havan saldırısı",
|
||||
["killstreak_12"] = "SAE",
|
||||
["killstreak_13"] = "Gözcü Helikopter",
|
||||
["killstreak_14"] = "VTOL",
|
||||
["killstreak_15"] = "Takviye",
|
||||
["killstreak_16"] = "Bomba Yağdırıcı",
|
||||
["killstreak_17"] = "Savaş Helikopteri",
|
||||
["killstreak_18"] = "Gelişmiş UAV",
|
||||
["killstreak_19"] = "Çoklu yardım paketi",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Juggernaut",
|
||||
["killstreak_22"] = "Nükleer Bomba",
|
||||
|
||||
["killstreak_desc_1"] = "Mini haritada düşman konumlarını ortaya çıkaran UAV keşif uçağı.",
|
||||
["killstreak_desc_2"] = "C4 takılı uzaktan kumandalı bir drone.",
|
||||
["killstreak_desc_3"] = "Tüm ekip için bir çanta dolusu zırh verir.",
|
||||
["killstreak_desc_4"] = "Bulunduğunuz yere rastgele bir öldürmeserisi bakım paketi gönderin.",
|
||||
["killstreak_desc_5"] = "Tüm düşman mini haritalarını karıştıran bir drone.",
|
||||
["killstreak_desc_6"] = "Yakın çevrede bir dizi daha küçük mayın fırlatan bir cihaz atın.",
|
||||
["killstreak_desc_7"] = "Mevcut en iyi yol boyunca kritik bir saldırı için ikiz jetleri arayın.",
|
||||
["killstreak_desc_8"] = "Rakibi aramak için K9 köpeklerini çağır.",
|
||||
["killstreak_desc_9"] = "Yakındaki düşmanları tarayan ve yanıcı mermiler ateşleyen otomatik taret.",
|
||||
["killstreak_desc_10"] = "Üç jet, hava araçlarını takip edin ve vurarak hava sahasını boşaltın.",
|
||||
["killstreak_desc_11"] = "Bölgeye saldırmak için birkaç havan topu dalgası sinyali vermek için bir hedef konumu işaretleyin.",
|
||||
["killstreak_desc_12"] = "Belirli hedeflere hava patlayıcıları atmak için üç jet çağırın.",
|
||||
["killstreak_desc_13"] = "Pozisyonları gözetleyecek ve onlarla çarpışmadan önce düşmanı bulan bir saldırı helikopteri.",
|
||||
["killstreak_desc_14"] = "Geri dönüp işaretli bir yeri korumadan önce hassas bir bomba atar.",
|
||||
["killstreak_desc_15"] = "Sıkı eğitimli üç askeri indiren bir helikopter.",
|
||||
["killstreak_desc_16"] = "Yolu boyunca geniş bir patlayıcı hattı bırakan bir bombardıman uçağını çağırın.",
|
||||
["killstreak_desc_17"] = "Taret ve havadan karaya füzelerle donanmış bir saldırı helikopterini kontrol edin.",
|
||||
["killstreak_desc_18"] = "Mini haritada düşmanın yönünü gerçek zamanlı olarak gösteren yörüngesel bir UAV.",
|
||||
["killstreak_desc_19"] = "Bulunduğunuz yere 3 rastgele öldürmeserisi bakım paketi gönderin.",
|
||||
["killstreak_desc_20"] = "40 mm ve 25 mm toplarla birlikte bir füze ile donatılmış ağır taarruz savaş uçağı.",
|
||||
["killstreak_desc_21"] = "Bakım paketi ile teslim edilen minigunlu devasa saldırı teçhizatı.",
|
||||
["killstreak_desc_22"] = "Pozisyonunuza büyük bir darbe. Oyunu takımınızın lehine bitirecek.",
|
||||
|
||||
["main_menu_1"] = "Oyuna Devam",
|
||||
["main_menu_2"] = "Ekipmanı Değiştir",
|
||||
["main_menu_3"] = "Ayarlar",
|
||||
["main_menu_4"] = "Ana Menü",
|
||||
|
||||
["main_menu_settings_1"] = "Müzik: ",
|
||||
["main_menu_settings_2"] = "Spiker: ",
|
||||
["main_menu_settings_3"] = "Ölüm Kamerası: ",
|
||||
["main_menu_settings_4"] = "Discord Server",
|
||||
["main_menu_settings_cm"] = "Custom Müzik: ",
|
||||
|
||||
["main_menu_loadout"] = "Ekipman",
|
||||
["main_menu_loadout_wep"] = "Senin Seçimin:",
|
||||
["main_menu_loadout_1"] = "Ana Silah",
|
||||
["main_menu_loadout_2"] = "İkincil Silah",
|
||||
["main_menu_loadout_3"] = "Öldürme Serisi",
|
||||
["main_menu_loadout_3_1"] = "Öldürme Serisi Seçildi - ",
|
||||
["main_menu_loadout_4"] = "Özellikler",
|
||||
["main_menu_loadout_5"] = "İnfazlar",
|
||||
["main_menu_loadout_6"] = "Kaydet",
|
||||
["main_menu_loadout_7"] = "Çık",
|
||||
|
||||
["perk_1_1"] = "Bomba Timi",
|
||||
["perk_1_2"] = "Gözcü",
|
||||
["perk_1_3"] = "Kararlı",
|
||||
["perk_1_4"] = "İkmal",
|
||||
["perk_1_1_desc"] = "Patlama hasarını azaltır.",
|
||||
["perk_1_2_desc"] = "Düşman paketlerini ve takviyelerini duvar arkasından gösteren yetenek.",
|
||||
["perk_1_3_desc"] = "Skor serilerini 1 puan azaltır.",
|
||||
["perk_1_4_desc"] = "Her 30 saniyede, mevcut silahına 1 şarjör kazanırsın.",
|
||||
["perk_2_1"] = "Hızlı Yenilenme",
|
||||
["perk_2_2"] = "Hayatta kalan",
|
||||
["perk_2_3"] = "Gizli",
|
||||
["perk_2_4"] = "Soğuk Kanlı",
|
||||
["perk_2_1_desc"] = "Can yenileme hızın 8 saniyeden 3 saniyeye düşer.",
|
||||
["perk_2_2_desc"] = "Öldüğün zaman, 1 kereliğe mahsus yere düşersin.",
|
||||
["perk_2_3_desc"] = "UAV'lere karşı görünmez olursun.",
|
||||
["perk_2_4_desc"] = "Araçlara ve düşman takviyelerine karşı görünmez olursun.",
|
||||
|
||||
["gamemode_1"] = "Takım Ölümsavaşı",
|
||||
["gamemode_2"] = "Baskın",
|
||||
["gamemode_3"] = "Nakavt",
|
||||
["gamemode_4"] = "Enfeksiyon",
|
||||
["gamemode_5"] = "Hakimiyet",
|
||||
|
||||
["gamemode_1_desc"] = "Ne pahasına olursa olsun düşmanı ortadan kaldırın.",
|
||||
["gamemode_2_desc"] = "Ne pahasına olursa olsun düşmanı ortadan kaldırın.",
|
||||
["gamemode_3_desc"] = "Ne pahasına olursa olsun düşmanı ortadan kaldırın.",
|
||||
["gamemode_4_desc"] = "Hayatta kal yada enfekte et.",
|
||||
["gamemode_5_desc"] = "Konumdaki tüm sektörleri ele geçirin.",
|
||||
|
||||
["killcam_1"] = "Ölümün",
|
||||
["killcam_2"] = "Son öldürme",
|
||||
["killcam_3"] = "Atlamak için SPACE bas",
|
||||
}
|
||||
166
gamemodes/cod_custom/gamemode/lang/ukrainian.lua
Normal file
166
gamemodes/cod_custom/gamemode/lang/ukrainian.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
COD.Language = {
|
||||
["team1_name"] = "СпецГру",
|
||||
["team2_name"] = "КорТак",
|
||||
|
||||
["scoreboard_score"] = "Рахунок",
|
||||
["scoreboard_kd"] = "У/С",
|
||||
|
||||
["menu_warning_ks"] = "Увага! Ваші серії вбивств будуть оновлені після закінчення раунду.",
|
||||
["menu_mainweapon"] = "Ваша основна зброя: ",
|
||||
["menu_secweapon"] = "Ваша додаткова зброя: ",
|
||||
["menu_ks_choose"] = "Вибір серії вбивств - ",
|
||||
["menu_mainperk"] = "Вибір основного перку",
|
||||
["menu_highperk"] = "Вибір вищого перку",
|
||||
["menu_choosemain"] = "Вибір основної зброї",
|
||||
["menu_choosesec"] = "Вибір додаткової зброї",
|
||||
["menu_apply"] = "Застосувати",
|
||||
|
||||
["hud_killer"] = "Вбивця: ",
|
||||
["hud_killed"] = "УБИТИЙ: ",
|
||||
["hud_teamdeathmatch"] = "КОМАНДНИЙ БІЙ",
|
||||
["hud_win"] = "ПЕРЕМОГА",
|
||||
["hud_lose"] = "УРАЖЕННЯ",
|
||||
["hud_unlockmainperk"] = " - Розблоковано основний перк!",
|
||||
["hud_unlockhighperk"] = " - Розблоковано вищий перк!",
|
||||
["hud_unlockkillstreak"] = "Готовий до використання!",
|
||||
["hud_package"] = "Затисніть [E], щоб підібрати ",
|
||||
["hud_fullpackage"] = "Затисніть [E], щоб підібрати посилку",
|
||||
["hud_revive"] = "Прогрес реанімації",
|
||||
["hud_torevive"] = "Затисніть E для реанімації",
|
||||
["hud_reviver"] = "Вас реанімують",
|
||||
["hud_selfrevive"] = "Прогрес самореанімації",
|
||||
["hud_toselfrevive"] = "Затисніть E для самореанімації",
|
||||
["hud_kills"] = "Вбивств: ",
|
||||
["hud_killstreak"] = "Серія вбивств",
|
||||
["hud_nuke"] = "ЗНАЧЕНО ЗАПУСК МАССIРОВАННОГО УДАРА",
|
||||
["hud_scoreadd_1"] = "+100 Ліквідація",
|
||||
["hud_scoreadd_2"] = "+110 Постріл у голову",
|
||||
["hud_scoreadd_3"] = "+150 удар, що добиває",
|
||||
["hud_scoreadd_4"] = "+50 Знищення підкріплення",
|
||||
["hud_scoreadd_5"] = "+125 Рукопашний бій",
|
||||
["hud_scoreadd_6"] = "+100 Реанімація",
|
||||
["hud_scoreadd_7"] = "+250 Сигнал лиха",
|
||||
|
||||
["hud_message_1"] = "Первый заражённый",
|
||||
["hud_message_2"] = "Последний выживший",
|
||||
["hud_message_3"] = "+50 Выживший",
|
||||
|
||||
["hud_domination_1"] = "ЗАХВАТИТЬ",
|
||||
["hud_domination_2"] = "ЗАЩИЩАТЬ",
|
||||
["hud_domination_3"] = "ПРОГРЕСС",
|
||||
["hud_domination_4"] = "+200 Нейтральная зона захвачена",
|
||||
["hud_domination_5"] = "+100 Вражеская зона захвачена",
|
||||
|
||||
["hud_invasion_1"] = "ЯЩИКИ СНАБЖЕНИЯ В ПУТИ",
|
||||
["hud_invasion_2"] = "ТЯЖЕЛОЕ ПОДКРЕПЛЕНИЕ В ПУТИ",
|
||||
|
||||
["contols_main"] = "Керування:",
|
||||
["contols_f1"] = "ESC - Змінити комплект",
|
||||
["contols_e"] = "E - удар, що добиває",
|
||||
["contols_q"] = "Q, G - Кинути гранату",
|
||||
["contols_v"] = "V - Використовувати ніж",
|
||||
["contols_0"] = "7,8,9,0 - Використання серії вбивств",
|
||||
["contols_tab"] = "Tab - Рахунок",
|
||||
["contols_open"] = "Затисніть INSERT, щоб відкрити керування.",
|
||||
|
||||
["killstreak_1"] = "БПЛА",
|
||||
["killstreak_2"] = "Дрон-камікадзе",
|
||||
["killstreak_3"] = "Броня",
|
||||
["killstreak_4"] = "Посилання",
|
||||
["killstreak_5"] = "Контр-БПЛА",
|
||||
["killstreak_6"] = "Касетна міна",
|
||||
["killstreak_7"] = "Точковий авіаудар",
|
||||
["killstreak_8"] = "Вартовий собака",
|
||||
["killstreak_9"] = "Турель",
|
||||
["killstreak_10"] = "Повітряний патруль",
|
||||
["killstreak_11"] = "Мінометний удар",
|
||||
["killstreak_12"] = "Стратегічний удар",
|
||||
["killstreak_13"] = "Вертоліт підтримки",
|
||||
["killstreak_14"] = "СВВП",
|
||||
["killstreak_15"] = "Підкріплення",
|
||||
["killstreak_16"] = "Стелс-бомбардувальник",
|
||||
["killstreak_17"] = "Гвинтокрил зі стрільцем",
|
||||
["killstreak_18"] = "МБПЛА",
|
||||
["killstreak_19"] = "Екстренний вантаж",
|
||||
["killstreak_20"] = "AC-130",
|
||||
["killstreak_21"] = "Джаггернаут",
|
||||
["killstreak_22"] = "Балістична ракета",
|
||||
|
||||
["killstreak_desc_1"] = "БПЛА, который показывает местоположение противника на мини-карте.",
|
||||
["killstreak_desc_2"] = "Управляемый дрон с прикрепленным зарядом C4.",
|
||||
["killstreak_desc_3"] = "Дает мешок брони для всей команды.",
|
||||
["killstreak_desc_4"] = "Вызовите случайную посылку с серией убийств к себе.",
|
||||
["killstreak_desc_5"] = "Дрон, который блокирует все вражеские миникарты.",
|
||||
["killstreak_desc_6"] = "Взрывное устройство, которое запускает группу небольших мин в непосредственной близости.",
|
||||
["killstreak_desc_7"] = "Вызов двойных реактивных самолетов для точного удара по наилучшему доступному пути.",
|
||||
["killstreak_desc_8"] = "Вызов сторожевой собаки для поиска врагов.",
|
||||
["killstreak_desc_9"] = "Автоматическая турель, которая сканирует ближайших врагов и стреляет зажигательными снарядами.",
|
||||
["killstreak_desc_10"] = "Три самолета, выслеживающий воздушные транспортные средства, сбивает их, освобождая воздушное пространство.",
|
||||
["killstreak_desc_11"] = "Отметьте целевое местоположение, чтобы дать сигнал нескольким волнам минометов атаковать область.",
|
||||
["killstreak_desc_12"] = "Вызовите три реактивных самолета, чтобы сбросить взрывчатку с воздуха на указанные цели.",
|
||||
["killstreak_desc_13"] = "Атакующий вертолет, который будет следить за позициями и находить врагов, прежде чем атаковать их.",
|
||||
["killstreak_desc_14"] = "Выпускает прицельную бомбу, прежде чем вернуться и охранять отмеченное место.",
|
||||
["killstreak_desc_15"] = "Вертолет, который высаживает трех солдат с тяжелой подготовкой.",
|
||||
["killstreak_desc_16"] = "Вызов бомбардировщика, который выпускает на своем пути большую линию взрывчатки.",
|
||||
["killstreak_desc_17"] = "Управляйте штурмовым вертолетом, вооруженным турелью и ракетами класса воздух-земля.",
|
||||
["killstreak_desc_18"] = "Орбитальный БПЛА, который показывает направление противника на мини-карте в режиме реального времени.",
|
||||
["killstreak_desc_19"] = "Вызовите к себе 3 случайные посылки с серией убийств.",
|
||||
["killstreak_desc_20"] = "Тяжелый штурмовой боевой корабль, оснащенный ракетой, а также 40-мм и 25-мм пушками.",
|
||||
["killstreak_desc_21"] = "Штурмовое снаряжение Джаггернаута с миниганом доставлено посылкой.",
|
||||
["killstreak_desc_22"] = "Массированный удар по вашей позиции. Закончит игру в пользу вашей команды.",
|
||||
|
||||
["main_menu_1"] = "Продолжить игру",
|
||||
["main_menu_2"] = "Изменить комплект",
|
||||
["main_menu_3"] = "Настройки",
|
||||
["main_menu_4"] = "Главное меню",
|
||||
["main_menu_settings_cm"] = "Своя музыка: ",
|
||||
|
||||
["main_menu_settings_1"] = "Музыка: ",
|
||||
["main_menu_settings_2"] = "Диктор: ",
|
||||
["main_menu_settings_3"] = "Момент смерти: ",
|
||||
["main_menu_settings_4"] = "Дискорд сервер",
|
||||
|
||||
["main_menu_loadout"] = "Комплект",
|
||||
["main_menu_loadout_wep"] = "Ваш выбор:",
|
||||
["main_menu_loadout_1"] = "Основное оружие",
|
||||
["main_menu_loadout_2"] = "Доп. оружие",
|
||||
["main_menu_loadout_3"] = "Серии убийств",
|
||||
["main_menu_loadout_3_1"] = "Выбрано серий убийств - ",
|
||||
["main_menu_loadout_4"] = "Перки",
|
||||
["main_menu_loadout_5"] = "Добивания",
|
||||
["main_menu_loadout_6"] = "Применить",
|
||||
["main_menu_loadout_7"] = "Выйти",
|
||||
|
||||
["perk_1_1"] = "Вибухотехнік",
|
||||
["perk_1_2"] = "Спостерігач",
|
||||
["perk_1_3"] = "Упертість",
|
||||
["perk_1_4"] = "Поповнення запасів",
|
||||
["perk_1_1_desc"] = "Зменшує збитки від вибухів.",
|
||||
["perk_1_2_desc"] = "Здатність бачити через стіни ворожі посилки та підкріплення.",
|
||||
["perk_1_3_desc"] = "Зменшення серій вбивств на 1.",
|
||||
["perk_1_4_desc"] = "Кожні 30 секунд, вам дається 1 магазин до поточної зброї.",
|
||||
["perk_2_1"] = "Швидке лікування",
|
||||
["perk_2_2"] = "Виживання",
|
||||
["perk_2_3"] = "Привид",
|
||||
["perk_2_4"] = "Прохолодність",
|
||||
["perk_2_1_desc"] = "Ваше здоров'я відновлюється через 3 секунди, замість 8 секунд.",
|
||||
["perk_2_2_desc"] = "Замість того, щоб померти ви переходите в стан останнього ривка 1 раз за життя.",
|
||||
["perk_2_3_desc"] = "Невидимість для БПЛА.",
|
||||
["perk_2_4_desc"] = "Невидимість для техніки та ворожих підкріплень.",
|
||||
|
||||
["gamemode_1"] = "КОМАНДНЫЙ БОЙ",
|
||||
["gamemode_2"] = "ВТОРЖЕНИЕ",
|
||||
["gamemode_3"] = "НОКАУТ",
|
||||
["gamemode_4"] = "ЗАРАЖЕНИЕ",
|
||||
["gamemode_5"] = "ПРЕВОСХОДСТВО",
|
||||
|
||||
["gamemode_1_desc"] = "Ликвидируйте силы противника.",
|
||||
["gamemode_2_desc"] = "Ликвидируйте силы противника.",
|
||||
["gamemode_3_desc"] = "Ликвидируйте силы противника.",
|
||||
["gamemode_4_desc"] = "Выживите или заразите всех.",
|
||||
["gamemode_5_desc"] = "Контролируйте все сектора на локации.",
|
||||
|
||||
["killcam_1"] = "Ваша смерть",
|
||||
["killcam_2"] = "Финальное убийство",
|
||||
["killcam_3"] = "Нажмите SPACE чтобы пропустить",
|
||||
}
|
||||
34
gamemodes/cod_custom/gamemode/languages.lua
Normal file
34
gamemodes/cod_custom/gamemode/languages.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
local lang = GetConVar("gmod_language"):GetString()
|
||||
|
||||
AddCSLuaFile('lang/russian.lua')
|
||||
AddCSLuaFile('lang/ukrainian.lua')
|
||||
AddCSLuaFile('lang/spanish.lua')
|
||||
AddCSLuaFile('lang/turkish.lua')
|
||||
AddCSLuaFile('lang/german.lua')
|
||||
AddCSLuaFile('lang/lithuanian.lua')
|
||||
AddCSLuaFile('lang/hungarian.lua')
|
||||
AddCSLuaFile('lang/polish.lua')
|
||||
AddCSLuaFile('lang/brazilian.lua')
|
||||
AddCSLuaFile('lang/english.lua')
|
||||
|
||||
if lang == "ru" then
|
||||
include('lang/russian.lua')
|
||||
elseif lang == "uk" then
|
||||
include('lang/ukrainian.lua')
|
||||
elseif lang == "es-ES" then
|
||||
include('lang/spanish.lua')
|
||||
elseif lang == "tr" then
|
||||
include('lang/turkish.lua')
|
||||
elseif lang == "de" then
|
||||
include('lang/german.lua')
|
||||
elseif lang == "lt" then
|
||||
include('lang/lithuanian.lua')
|
||||
elseif lang == "hu" then
|
||||
include('lang/hungarian.lua')
|
||||
elseif lang == "pl" then
|
||||
include('lang/polish.lua')
|
||||
elseif lang == "pt-BR" then
|
||||
include('lang/brazilian.lua')
|
||||
else
|
||||
include('lang/english.lua')
|
||||
end
|
||||
144
gamemodes/cod_custom/gamemode/other/sh_fixes.lua
Normal file
144
gamemodes/cod_custom/gamemode/other/sh_fixes.lua
Normal file
@@ -0,0 +1,144 @@
|
||||
if game.SinglePlayer() then return end
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
if SERVER then
|
||||
|
||||
util.AddNetworkString("MultiplayerSoundFix_PlaySound")
|
||||
|
||||
local ENT = FindMetaTable("Entity")
|
||||
|
||||
if !MPSNDFIX_SOUND_PLAY then MPSNDFIX_SOUND_PLAY = sound.Play end
|
||||
if !MPSNDFIX_EMITSOUND then MPSNDFIX_EMITSOUND = ENT.EmitSound end
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
timer.Create("MPSOUNDFIX_RESET_PLY_NET_MSG_COUNT", 1, 0, function()
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
ply.MPSNDFIX_NETMSGS = 0
|
||||
end
|
||||
end)
|
||||
-----------------------------------------------------------------------=#
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
local function posObscured( pos1, pos2 )
|
||||
return util.TraceLine({
|
||||
start = pos1,
|
||||
endpos = pos2,
|
||||
mask = MASK_NPCWORLDSTATIC,
|
||||
}).Hit
|
||||
end
|
||||
-----------------------------------------------------------------------=#
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
local function sound_Net( name, pos, lvl, pitch, vol )
|
||||
if lvl < 100 then return end
|
||||
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
|
||||
if ply.MPSNDFIX_NETMSGS and ply.MPSNDFIX_NETMSGS >= 10 then continue end
|
||||
|
||||
local dist = ply:GetPos():DistToSqr(pos)
|
||||
|
||||
if dist < 1970^2 then continue end
|
||||
if dist > 8000^2 && posObscured( ply:WorldSpaceCenter(), pos ) then continue end
|
||||
|
||||
net.Start("MultiplayerSoundFix_PlaySound")
|
||||
net.WriteString(name)
|
||||
net.WriteVector(pos)
|
||||
net.WriteUInt(lvl, 10)
|
||||
net.WriteUInt(pitch, 9)
|
||||
net.WriteFloat(vol)
|
||||
net.Send(ply)
|
||||
ply.MPSNDFIX_NETMSGS = ply.MPSNDFIX_NETMSGS + 1
|
||||
|
||||
end
|
||||
end
|
||||
-----------------------------------------------------------------------=#
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
function sound:Play( pos, lvl, pitch, vol )
|
||||
sound_Net( self, pos or Vector(), lvl or 100, pitch or 100, vol or 1 )
|
||||
MPSNDFIX_SOUND_PLAY( self, pos, lvl, pitch, vol )
|
||||
end
|
||||
-----------------------------------------------------------------------=#
|
||||
|
||||
-----------------------------------------------------------------------=#
|
||||
function ENT:EmitSound( name, lvl, pitch, vol, ... )
|
||||
|
||||
if !self.GetClass or self:GetClass() == "gmod_tool" then return end -- Weird entities that we just skip
|
||||
|
||||
sound_Net( name, self:WorldSpaceCenter(), lvl or 100, pitch or 100, vol or 1 )
|
||||
MPSNDFIX_EMITSOUND( self, name, lvl, pitch, vol, ... )
|
||||
|
||||
end
|
||||
-----------------------------------------------------------------------=#
|
||||
|
||||
end
|
||||
-----------------------------------------------------------------------=#
|
||||
if CLIENT then
|
||||
|
||||
net.Receive("MultiplayerSoundFix_PlaySound", function()
|
||||
|
||||
local name = net.ReadString()
|
||||
local pos = net.ReadVector()
|
||||
local lvl = net.ReadUInt(10)
|
||||
local pitch = net.ReadUInt(9)
|
||||
local vol = net.ReadFloat()
|
||||
|
||||
sound.Play(name, pos, lvl, pitch, vol)
|
||||
|
||||
end)
|
||||
|
||||
end
|
||||
--PENETRATION-----------------------------------------------------------=#
|
||||
local matEasyPen = {
|
||||
[MAT_GLASS] = 0,
|
||||
[MAT_WOOD] = 1,
|
||||
[MAT_PLASTIC] = 1,
|
||||
}
|
||||
|
||||
local function Penetration(ent, data)
|
||||
if IsValid(ent) then
|
||||
if ent.CurrentPenetrationPower >= 0 then
|
||||
data.Damage = data.Damage/1.5
|
||||
data.Callback = function(ent, tr, dmg)
|
||||
data.Src = tr.HitPos+data.Dir*4
|
||||
if matEasyPen[tr.MatType] then
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - matEasyPen[tr.MatType]
|
||||
else
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - 2
|
||||
end
|
||||
if tr.Entity and (tr.Entity:IsPlayer() or tr.Entity:IsNPC()) then
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - 1
|
||||
data.IgnoreEntity = tr.Entity
|
||||
end
|
||||
if ent.CurrentPenetrationPower >= 0 and not tr.HitSky then
|
||||
Penetration(ent, data)
|
||||
end
|
||||
end
|
||||
ent:FireBullets(data)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("EntityFireBullets", "TDM_Penetration", function(ent, data)
|
||||
if ent.PenetrationPower and ent.PenetrationPower > 0 then
|
||||
if ent.CurrentPenetrationPower == ent.PenetrationPower then
|
||||
data.Callback = function(ent, tr, dmg)
|
||||
if tr.Entity and (tr.Entity:IsPlayer() or tr.Entity:IsNPC()) then
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - 1
|
||||
data.IgnoreEntity = tr.Entity
|
||||
end
|
||||
if matEasyPen[tr.MatType] then
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - matEasyPen[tr.MatType]
|
||||
else
|
||||
ent.CurrentPenetrationPower = ent.CurrentPenetrationPower - 2
|
||||
end
|
||||
if ent.CurrentPenetrationPower >= 0 and not tr.HitSky then
|
||||
data.Src = tr.HitPos+data.Dir*4
|
||||
Penetration(ent, data)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
end)
|
||||
486
gamemodes/cod_custom/gamemode/other/sv_mwii_npc.lua
Normal file
486
gamemodes/cod_custom/gamemode/other/sv_mwii_npc.lua
Normal file
@@ -0,0 +1,486 @@
|
||||
local meta = FindMetaTable("Player")
|
||||
local enb = FindMetaTable("Entity")
|
||||
|
||||
function enb:IsMWIINPC()
|
||||
return self:IsNPC() or self:IsNextBot()
|
||||
end
|
||||
|
||||
local function GetLongOfSequence(model, sequence)
|
||||
local t = ents.Create("base_anim")
|
||||
t:SetModel(model)
|
||||
t:SetRenderMode(10)
|
||||
t:Spawn()
|
||||
local id, long = t:LookupSequence(sequence)
|
||||
t:Remove()
|
||||
return long, id
|
||||
end
|
||||
|
||||
function enb:Freeze(bool)
|
||||
if self:IsMWIINPC() then
|
||||
if bool then
|
||||
self:AddEFlags(EFL_NO_THINK_FUNCTION)
|
||||
else
|
||||
self:RemoveEFlags(EFL_NO_THINK_FUNCTION)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function enb:MWII_BE(bonename)
|
||||
local bone = self:LookupBone(bonename)
|
||||
if bone then
|
||||
local ef = EffectData()
|
||||
ef:SetOrigin(self:GetBonePosition(bone))
|
||||
ef:SetColor(0)
|
||||
util.Effect("BloodImpact", ef)
|
||||
end
|
||||
end
|
||||
|
||||
function enb:HeadBlow()
|
||||
for i=1,4 do
|
||||
local pos = self:GetBonePosition(self:LookupBone("ValveBiped.Bip01_Head1"))
|
||||
local m = ents.Create("prop_physics")
|
||||
m:SetModel("models/Gibs/HGIBS_scapula.mdl")
|
||||
m:SetPos(pos)
|
||||
m:SetAngles(AngleRand())
|
||||
m:Spawn()
|
||||
m:SetMaterial("models/flesh")
|
||||
m:SetCollisionGroup(1)
|
||||
m:GetPhysicsObject():SetVelocity(VectorRand(-64,64))
|
||||
|
||||
local ef = EffectData()
|
||||
ef:SetOrigin(pos)
|
||||
util.Effect("BloodImpact", ef)
|
||||
|
||||
timer.Simple(15, function()
|
||||
if !IsValid(m) then return end
|
||||
m:Remove()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function MWIITransferBones( base, ragdoll )
|
||||
if !IsValid( base ) or !IsValid( ragdoll ) then return end
|
||||
for i = 0, ragdoll:GetPhysicsObjectCount() - 1 do
|
||||
local bone = ragdoll:GetPhysicsObjectNum( i )
|
||||
if ( IsValid( bone ) ) then
|
||||
local pos, ang = base:GetBonePosition( ragdoll:TranslatePhysBoneToBone( i ) )
|
||||
if ( pos ) then bone:SetPos( pos ) end
|
||||
if ( ang ) then bone:SetAngles( ang ) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
downNPCsClassList = {
|
||||
["vj_tdm_invasion_soldier1"] = true,
|
||||
["vj_tdm_invasion_soldier2"] = true,
|
||||
}
|
||||
reviveNPCsClassList = {
|
||||
["vj_tdm_invasion_soldier1"] = true,
|
||||
["vj_tdm_invasion_soldier2"] = true,
|
||||
}
|
||||
takedownedNPCsClassList = {
|
||||
["vj_tdm_invasion_soldier1"] = true,
|
||||
["vj_tdm_invasion_soldier2"] = true,
|
||||
}
|
||||
takedownNPCsClassList = {
|
||||
["vj_tdm_invasion_soldier1"] = true,
|
||||
["vj_tdm_invasion_soldier2"] = true,
|
||||
}
|
||||
|
||||
function enb:IsDowned()
|
||||
if self:IsPlayer() then
|
||||
return self:GetNWBool('Downed')
|
||||
else
|
||||
return self.Downed
|
||||
end
|
||||
end
|
||||
|
||||
function enb:MWIIsFriend(tar, neutral_too)
|
||||
local dis = self:Disposition(tar)
|
||||
if neutral_too then
|
||||
return dis == 3 or dis == 4
|
||||
else
|
||||
return dis == 3
|
||||
end
|
||||
end
|
||||
|
||||
function enb:IsInFOVEnt(ent2)
|
||||
local ent1Pos = self:GetPos()
|
||||
local ent2Pos = ent2:GetPos()
|
||||
local ent1Ang = self:GetAngles():Forward()
|
||||
|
||||
local direction = (ent1Pos - ent2Pos):GetNormalized()
|
||||
local dot = direction:Dot(ent1Ang)
|
||||
|
||||
local fov = math.cos(math.rad(90))
|
||||
|
||||
if dot < fov then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local optimize_delay = 0
|
||||
hook.Add("Think", "STDMFindNPCs", function()
|
||||
if optimize_delay < CurTime() then
|
||||
optimize_delay = CurTime()+1
|
||||
local enttab = ents.FindByClass("*tdm_*")
|
||||
for i=1,#enttab do
|
||||
local ent = enttab[i]
|
||||
if ent:IsNPC() and reviveNPCsClassList[ent:GetClass()] and !ent.Downed and !ent.Takedowning then
|
||||
local tar = ent.ReviveThisTarget
|
||||
if !IsValid(tar) then
|
||||
local targets = ents.FindInSphere( ent:GetPos(), 512 )
|
||||
for _, fri in ipairs(targets) do
|
||||
if (fri:IsPlayer() or fri.IsMWIINPC and fri:IsMWIINPC()) and ent:MWIIsFriend(fri, true) then
|
||||
if (fri:IsDowned() or fri.Downed) and !IsValid(fri.TargetReviver) then
|
||||
fri.TargetReviver = ent
|
||||
ent.ReviveThisTarget = fri
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local pos = tar:GetPos()
|
||||
local dist = pos:DistToSqr(ent:GetPos())
|
||||
if not timer.Exists("HelpNPCToMWII"..ent:EntIndex()) then
|
||||
timer.Create("HelpNPCToMWII"..ent:EntIndex(), 2, 1, function()
|
||||
if !IsValid(ent) then return end
|
||||
ent:SetLastPosition( pos )
|
||||
ent:SetSchedule( SCHED_FORCED_GO_RUN )
|
||||
if ent.IsVJBaseSNPC then
|
||||
ent:VJ_TASK_GOTO_LASTPOS()
|
||||
end
|
||||
end)
|
||||
end
|
||||
if dist < 2500 and not ent.InSeqMWII then
|
||||
local tk = ents.Create("mwii_sequence_npc")
|
||||
tk.NPC = ent
|
||||
tk.Target = tar
|
||||
tk.Sequence = "revive"
|
||||
tk:SetPos(ent:GetPos())
|
||||
local ang1 = (pos - ent:GetPos()):Angle()
|
||||
ang1.x, ang1.z = 0, 0
|
||||
tk:SetAngles(ang1)
|
||||
tk:Spawn()
|
||||
ent.ReviveThisTarget = nil
|
||||
end
|
||||
if !tar:IsDowned() then
|
||||
ent.ReviveThisTarget = nil
|
||||
tar.TargetReviver = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
if ent:IsNPC() and takedownNPCsClassList[ent:GetClass()] and !ent.Downed and !ent.Takedowning and !ent.CantUseTakedown and math.random(1,4) >= 2 then
|
||||
local targets = ents.FindInSphere( ent:GetPos(), 200 )
|
||||
for _, en in ipairs(targets) do
|
||||
if (en:IsMWIINPC() and en:Health() > 0) and ent:IsInFOVEnt(en) and !ent:MWIIsFriend(en, true) and !en.CantUseTakedown then
|
||||
if ent:EyePos():DistToSqr(en:EyePos()) < 5000 then
|
||||
ent:NPC_Takedown(en)
|
||||
break
|
||||
else
|
||||
if not timer.Exists("TakedownNPCToMWII"..ent:EntIndex()) then
|
||||
timer.Create("TakedownNPCToMWII"..ent:EntIndex(), 2, 1, function()
|
||||
if !IsValid(ent) or !IsValid(en) or en.Takedowning then return end
|
||||
ent:SetLastPosition( en:GetPos() )
|
||||
ent:SetSchedule( SCHED_FORCED_GO_RUN )
|
||||
if ent.IsVJBaseSNPC then
|
||||
ent:VJ_TASK_GOTO_LASTPOS()
|
||||
end
|
||||
end)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("OnNPCKilled", "STDMHook", function(ent)
|
||||
if ent.Downed or ent.InSeqMWII then
|
||||
ent:SetRenderMode(RENDERMODE_NORMAL)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("EntityTakeDamage", "!!!!!NPC_STDMHook", function(ply, dmg)
|
||||
local att = dmg:GetAttacker()
|
||||
local allowthis = ply:IsMWIINPC()
|
||||
|
||||
if allowthis and dmg:GetDamage() < ply:Health() and math.random(1,100) == 1 and not dmg:IsExplosionDamage() and not ply.AlreadyWasDowned and not ply.Takedowning and not ply:IsDowned() then
|
||||
if ply:IsMWIINPC() and downNPCsClassList[ply:GetClass()] then
|
||||
dmg:ScaleDamage(0)
|
||||
ply.Downed = true
|
||||
ply:SetHealth(50)
|
||||
|
||||
local tk = ents.Create("mwii_down_npc")
|
||||
tk.NPC = ply
|
||||
tk:SetPos(ply:GetPos())
|
||||
tk:SetAngles(ply:GetAngles())
|
||||
tk:Spawn()
|
||||
ply.DownedEnt = tk
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
if ply.CantDamageMWII then
|
||||
dmg:ScaleDamage(0)
|
||||
return true
|
||||
end
|
||||
end)
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
function meta:IsAtBack(enemy) --This function was made by OpenAI ChatGPT
|
||||
if !IsValid(enemy) then return end
|
||||
local enemyForward = enemy:GetForward()
|
||||
local enemyToPlayer = self:GetPos() - enemy:GetPos()
|
||||
local angle = enemyForward:Angle():Forward():Dot(enemyToPlayer:GetNormalized())
|
||||
local degrees = math.deg(math.acos(angle))
|
||||
return degrees > 100
|
||||
end
|
||||
|
||||
function meta:Takedown()
|
||||
local tr = self:GetEyeTrace()
|
||||
local ent = tr.Entity
|
||||
local dist = tr.StartPos:Distance(tr.HitPos) < 96
|
||||
local isnpc = ent:IsMWIINPC()
|
||||
if (!ent:IsPlayer() and !isnpc) or (!isnpc and ent:Team() == self:Team()) or (isnpc and ent:MWIIsFriend(self)) or self:IsDowned() or ent.Takedowning or self.Takedowning or !ent:OnGround() or !self:OnGround() or !self:IsAtBack(ent) or not dist then
|
||||
return
|
||||
end
|
||||
if isnpc and !ent:LookupBone("ValveBiped.Bip01_Spine") then
|
||||
return
|
||||
end
|
||||
|
||||
local downed = ent:IsDowned()
|
||||
local _, rnd = table.Random(COD.Takedowns)
|
||||
local float = rnd
|
||||
|
||||
if self:IsPlayer() and not self:IsBot() and self:GetNWString('TakedownAnim') != "00" then
|
||||
float = self:GetNWString('TakedownAnim')
|
||||
end
|
||||
if not COD.Takedowns[float] then return end
|
||||
if !isnumber(float) then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_stand", "execution_"..float.."_victim_stand"
|
||||
if downed then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_laststand", "execution_"..float.."_victim_laststand"
|
||||
end
|
||||
end
|
||||
print(float, anim1, anim2)
|
||||
local zpos = self:GetPos()
|
||||
local delay1 = select(2, self:LookupSequence(anim1))
|
||||
local delay2 = COD.Takedowns[float].deathtime
|
||||
if downed then
|
||||
delay2 = COD.Takedowns[float].deathtime_laststand
|
||||
end
|
||||
local ang1 = ent:EyeAngles()
|
||||
self:Freeze(true)
|
||||
self:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
self:SetPos(ent:GetPos())
|
||||
self:SetSVAnimation(anim1)
|
||||
local wep = self:GetActiveWeapon()
|
||||
if IsValid(wep) then
|
||||
self.TakedowningGun = wep:GetClass()
|
||||
else
|
||||
self.TakedowningGun = ""
|
||||
end
|
||||
local wep = ent:GetActiveWeapon()
|
||||
if IsValid(wep) then
|
||||
ent.TakedowningGun = wep:GetClass()
|
||||
else
|
||||
ent.TakedowningGun = ""
|
||||
end
|
||||
self.TakedowningTarget = ent
|
||||
self.Takedowning = true
|
||||
self.TakedownIsFinished = false
|
||||
self:SetActiveWeapon(nil)
|
||||
local tk
|
||||
if isnpc then
|
||||
ent.Takedowning = true
|
||||
tk = ents.Create("mwii_takedown_npc")
|
||||
tk.NPC = ent
|
||||
tk.Finisher = self
|
||||
tk.Delay = delay2
|
||||
tk.Sequence = anim2
|
||||
tk:SetPos(ent:GetPos())
|
||||
tk:SetAngles(ent:GetAngles())
|
||||
tk:Spawn()
|
||||
else
|
||||
ent:SetActiveWeapon(nil)
|
||||
ent.TakedowningTarget = self
|
||||
ent.Takedowning = true
|
||||
ent.TakedownIsFinished = false
|
||||
ent:SetSVAnimation(anim2)
|
||||
ent:Freeze(true)
|
||||
ent:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(true)
|
||||
net.WriteFloat(delay2)
|
||||
net.WriteBool(false)
|
||||
net.Send(ent)
|
||||
|
||||
timer.Simple(delay2, function()
|
||||
if IsValid(ent) and IsValid(self) and self.Takedowning then
|
||||
self.TakedownIsFinished = true
|
||||
ent:Freeze(false)
|
||||
ent:TakeDamage(ent:Health()+ent:Armor(), self)
|
||||
ent.Takedowning = false
|
||||
ent.TakedowningTarget = nil
|
||||
ent:SetSVAnimation("")
|
||||
end
|
||||
end)
|
||||
end
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(true)
|
||||
net.WriteFloat(delay1)
|
||||
net.WriteBool(true)
|
||||
net.Send(self)
|
||||
|
||||
local bm = ent
|
||||
if ent:IsMWIINPC() then
|
||||
bm = tk
|
||||
end
|
||||
|
||||
if downed then
|
||||
COD.Takedowns[float].effect_laststand(self, ent, bm)
|
||||
else
|
||||
COD.Takedowns[float].effect(self, ent, bm)
|
||||
end
|
||||
timer.Simple(delay1, function()
|
||||
if IsValid(self) and self.Takedowning then
|
||||
self:Freeze(false)
|
||||
self.Takedowning = false
|
||||
self:SetSVAnimation("")
|
||||
self:SelectWeapon(self.TakedowningGun)
|
||||
if IsValid(ent) and ent:Health() > 0 then
|
||||
self:SetPos(zpos)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function enb:NPC_Takedown(ent)
|
||||
local isnpc = ent:IsMWIINPC()
|
||||
|
||||
if (isnpc and !takedownedNPCsClassList[ent:GetClass()]) or self:IsDowned() or ent.Takedowning or self.Takedowning or !ent:OnGround() or !self:OnGround() then
|
||||
return
|
||||
end
|
||||
|
||||
if isnpc and !ent:LookupBone("ValveBiped.Bip01_Spine") then
|
||||
return
|
||||
end
|
||||
|
||||
local downed = ent:IsDowned()
|
||||
local float = "00"
|
||||
local rnd = math.random(1,33)
|
||||
if rnd >= 10 then
|
||||
float = ""..rnd
|
||||
else
|
||||
float = "0"..rnd
|
||||
end
|
||||
|
||||
if not COD.Takedowns[float] then return end
|
||||
if !isnumber(float) then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_stand", "execution_"..float.."_victim_stand"
|
||||
if downed then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_laststand", "execution_"..float.."_victim_laststand"
|
||||
end
|
||||
end
|
||||
|
||||
local zpos = self:GetPos()
|
||||
local delay1 = GetLongOfSequence("models/player/breen.mdl", anim1)
|
||||
local delay2 = COD.Takedowns[float].deathtime
|
||||
if downed then
|
||||
delay2 = COD.Takedowns[float].deathtime_laststand
|
||||
end
|
||||
|
||||
local ang1 = self:EyeAngles()
|
||||
self:Freeze(true)
|
||||
ent:SetAngles(Angle(0,ang1.y,0))
|
||||
self:SetPos(ent:GetPos())
|
||||
local wep = self:GetActiveWeapon()
|
||||
if IsValid(wep) then
|
||||
wep:SetClip1(0)
|
||||
end
|
||||
self.TakedowningTarget = ent
|
||||
self.Takedowning = true
|
||||
self.TakedownIsFinished = false
|
||||
local tk = ents.Create("mwii_takedown_npc")
|
||||
tk.NPC = self
|
||||
tk.AttackerTime = delay2
|
||||
tk.KillingEntityMode = true
|
||||
tk.ToKill = ent
|
||||
tk.Finisher = self
|
||||
tk.Delay = delay1
|
||||
tk.Sequence = anim1
|
||||
tk:SetPos(ent:GetPos())
|
||||
tk:SetAngles(ent:GetAngles())
|
||||
tk:Spawn()
|
||||
|
||||
local tk2
|
||||
if ent:IsPlayer() then
|
||||
ent:SetActiveWeapon(nil)
|
||||
ent.TakedowningTarget = self
|
||||
ent.Takedowning = true
|
||||
ent.TakedownIsFinished = false
|
||||
ent:SetSVAnimation(anim2)
|
||||
ent:Freeze(true)
|
||||
ent:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(true)
|
||||
net.WriteFloat(delay2)
|
||||
net.WriteBool(false)
|
||||
net.Send(ent)
|
||||
else
|
||||
ent.Takedowning = true
|
||||
ent:SetAngles(Angle(0,ang1.y,0))
|
||||
tk2 = ents.Create("mwii_takedown_npc")
|
||||
tk2.NPC = ent
|
||||
tk2.Finisher = self
|
||||
tk2.Delay = delay2
|
||||
tk2.Sequence = anim2
|
||||
tk2:SetPos(ent:GetPos())
|
||||
tk2:SetAngles(ent:GetAngles())
|
||||
tk2:Spawn()
|
||||
end
|
||||
|
||||
if !ent:IsPlayer() then
|
||||
ent = tk2
|
||||
end
|
||||
local bm = ent
|
||||
if ent:IsMWIINPC() then
|
||||
bm = tk2
|
||||
end
|
||||
if downed then
|
||||
COD.Takedowns[float].effect_laststand(tk, ent, bm)
|
||||
else
|
||||
COD.Takedowns[float].effect(tk, ent, bm)
|
||||
end
|
||||
|
||||
timer.Simple(delay1, function()
|
||||
if IsValid(self) and self.Takedowning then
|
||||
self.Takedowning = false
|
||||
if IsValid(ent) and ent:Health() > 0 then
|
||||
self:SetPos(zpos)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
hook.Add("CreateEntityRagdoll", "MWIITDCreateRagdoll", function(owner, ragdoll)
|
||||
local rag = owner:GetNWEntity('MWIIRag')
|
||||
if IsValid(rag) then
|
||||
MWIITransferBones( rag, ragdoll )
|
||||
ragdoll:SetNoDraw(false)
|
||||
if owner.HeadBlow then
|
||||
ragdoll:ManipulateBoneScale(ragdoll:LookupBone("ValveBiped.Bip01_Head1"), Vector(0,0,0))
|
||||
end
|
||||
end
|
||||
if owner:IsPlayer() and owner.HeadBlow then
|
||||
ragdoll:ManipulateBoneScale(ragdoll:LookupBone("ValveBiped.Bip01_Head1"), Vector(0,0,0))
|
||||
end
|
||||
end)
|
||||
2
gamemodes/cod_custom/gamemode/post_shared.lua
Normal file
2
gamemodes/cod_custom/gamemode/post_shared.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
AddCSLuaFile("other/sh_fixes.lua")
|
||||
include("other/sh_fixes.lua")
|
||||
279
gamemodes/cod_custom/gamemode/server/sv_abilities.lua
Normal file
279
gamemodes/cod_custom/gamemode/server/sv_abilities.lua
Normal file
@@ -0,0 +1,279 @@
|
||||
local meta = FindMetaTable("Player")
|
||||
|
||||
function COD:IsAllowedSelfRevive()
|
||||
return COD.DataTable["Gamemode"] != 3
|
||||
end
|
||||
|
||||
function meta:StopSlide()
|
||||
return self.Takedowning or self:GetNWBool('Downed') or self:GetNWString('SVAnim') != "" or self:WaterLevel() > 1 or !self:Alive() or !self:OnGround()
|
||||
end
|
||||
|
||||
function meta:Sliding(bool)
|
||||
if bool then
|
||||
if isvector(self.SlidingVelocity) then return end
|
||||
|
||||
local ang = self:GetAngles()
|
||||
ang.x = 0
|
||||
ang.z = 0
|
||||
local vec = ang:Forward()*32
|
||||
self.SlidingDuration = CurTime()+1
|
||||
self.SlidingVelocity = vec
|
||||
self:SetNWBool('Sliding', true)
|
||||
self:EmitSound("tdmg/ply/slide"..math.random(1,3)..".wav")
|
||||
self:ViewPunch(Angle(-5,0,0))
|
||||
else
|
||||
self.SlidingVelocity = nil
|
||||
self:SetNWBool('Sliding', false)
|
||||
end
|
||||
end
|
||||
|
||||
function meta:IsDowned()
|
||||
return self:GetNWBool('Downed')
|
||||
end
|
||||
|
||||
function meta:MovingDirection(threshold) --This function was made by OpenAI ChatGPT
|
||||
threshold = threshold or 0.1
|
||||
local vel = self:GetVelocity()
|
||||
local forward = self:GetForward()
|
||||
local right = self:GetRight()
|
||||
local forwardDot = vel:Dot(forward)
|
||||
local rightDot = vel:Dot(right)
|
||||
|
||||
if forwardDot > threshold then
|
||||
return "forward"
|
||||
elseif forwardDot < -threshold then
|
||||
return "backward"
|
||||
end
|
||||
|
||||
if rightDot > threshold then
|
||||
return "right"
|
||||
elseif rightDot < -threshold then
|
||||
return "left"
|
||||
end
|
||||
|
||||
return "stand"
|
||||
end
|
||||
|
||||
function meta:Down()
|
||||
if COD:IsAllowedSelfRevive() then
|
||||
self:SetNWFloat('DownedTime', CurTime()+15)
|
||||
else
|
||||
self:SetNWFloat('DownedTime', CurTime()+30)
|
||||
end
|
||||
self:SetNWBool('Downed', true)
|
||||
self:SetViewOffset( Vector(0,0,24) )
|
||||
self:SetViewOffsetDucked( Vector(0,0,24) )
|
||||
self:SetHealth(50)
|
||||
self:SetJumpPower(0)
|
||||
self.AlreadyWasDowned = true
|
||||
self.ReviveNumber = 0
|
||||
self:SetSVAnimation("laststand_down", true)
|
||||
self:GodEnable()
|
||||
self:SetActiveWeapon(nil)
|
||||
timer.Simple(0.5, function()
|
||||
if !IsValid(self) then return end
|
||||
self:GodDisable()
|
||||
end)
|
||||
end
|
||||
|
||||
function meta:Revive(died)
|
||||
self:SetViewOffset( Vector(0,0,64) )
|
||||
self:SetViewOffsetDucked( Vector(0,0,32) )
|
||||
self:SetJumpPower(128)
|
||||
self:SetHealth(25)
|
||||
if died then
|
||||
self:Kill()
|
||||
else
|
||||
self:SetSVAnimation("laststand_standup", true)
|
||||
end
|
||||
self:SetNWBool('Downed', false)
|
||||
self.RevivingSelf = false
|
||||
end
|
||||
|
||||
hook.Add("SetupMove", "TDMSetupMove1", function(ply, mv, cmd)
|
||||
if ply:IsDowned() then
|
||||
if ply:KeyDown(IN_USE) or IsValid(ply:GetNWEntity('Reviver')) then
|
||||
mv:SetForwardSpeed(1)
|
||||
mv:SetSideSpeed(1)
|
||||
else
|
||||
mv:SetMaxSpeed(25)
|
||||
mv:SetMaxClientSpeed(25)
|
||||
end
|
||||
end
|
||||
if isvector(ply.SlidingVelocity) then
|
||||
mv:SetMaxSpeed(1)
|
||||
mv:SetMaxClientSpeed(1)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMSliding", function()
|
||||
for _, ent in ipairs(player.GetAll()) do
|
||||
if isvector(ent.SlidingVelocity) then
|
||||
ent:SetVelocity(ent.SlidingVelocity)
|
||||
end
|
||||
if ent:KeyDown(IN_SPEED) and ent:KeyDown(IN_DUCK) and not ent:Crouching() and !ent:StopSlide() then
|
||||
ent:Sliding(true)
|
||||
end
|
||||
if !ent:KeyDown(IN_DUCK) and isvector(ent.SlidingVelocity) or ent.SlidingDuration and ent.SlidingDuration < CurTime() or ent:StopSlide() then
|
||||
ent:Sliding(false)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerDeath", "TDMRevive", function(ply)
|
||||
if ply:IsDowned() then
|
||||
ply:Revive()
|
||||
end
|
||||
ply.AlreadyWasDowned = false
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMAnimsRevive", function()
|
||||
local plys2 = player.GetAll()
|
||||
for i=1,#plys2 do
|
||||
local ply = plys2[i]
|
||||
if ply:IsDowned() and ply:GetNWFloat('DownedTime') < CurTime() and (not ply:KeyDown(IN_USE) or !COD:IsAllowedSelfRevive()) and !IsValid(ply:GetNWEntity('Reviver')) and not ply.Takedowning then
|
||||
ply:Revive(true)
|
||||
end
|
||||
if ply:Alive() and not ply:IsDowned() and ply:KeyDown(IN_USE) then
|
||||
local tr = ply:GetEyeTrace()
|
||||
local ent = tr.Entity
|
||||
local dist = ply:EyePos():DistToSqr(tr.HitPos) < 5000
|
||||
if ent:IsPlayer() and dist and ent:IsDowned() and ply:Team() == ent:Team() then
|
||||
ent:SetNWEntity('Reviver', ply)
|
||||
ply.RevivingThatEntity = ent
|
||||
end
|
||||
if !IsValid(ply.RevivingThatEntity) or !ply.RevivingThatEntity:Alive() or not ply.RevivingThatEntity:IsDowned() then
|
||||
ply.RevivingThatEntity = nil
|
||||
if ply:GetNWString('SVAnim') == "laststand_startrevive" and not ply.Takedowning then
|
||||
ply:SetSVAnimation("")
|
||||
end
|
||||
end
|
||||
end
|
||||
if ply:IsDowned() then
|
||||
local rev = ply:GetNWEntity('Reviver')
|
||||
ply:SetActiveWeapon(nil)
|
||||
if !IsValid(rev) and ply:KeyDown(IN_USE) and not ply.Takedowning and COD:IsAllowedSelfRevive() then
|
||||
ply.ReviveNumber = ply.ReviveNumber + FrameTime()/5.5
|
||||
if not ply.RevivingSelf then
|
||||
ply:SetSVAnimation("laststand_selfrevive", true)
|
||||
ply.RevivingSelf = true
|
||||
end
|
||||
elseif !IsValid(rev) and not ply:KeyDown(IN_USE) and not ply.Takedowning then
|
||||
ply.ReviveNumber = 0
|
||||
if ply.RevivingSelf then
|
||||
ply:SetSVAnimation("")
|
||||
ply.RevivingSelf = false
|
||||
end
|
||||
end
|
||||
if IsValid(rev) then
|
||||
if rev:KeyDown(IN_USE) and rev:GetEyeTrace().Entity == ply and not ply.Takedowning then
|
||||
ply.ReviveNumber = ply.ReviveNumber + FrameTime()/3
|
||||
rev:SetActiveWeapon(nil)
|
||||
if not rev.RevivingTarget then
|
||||
rev:SetSVAnimation("laststand_startrevive")
|
||||
rev.RevivingTarget = true
|
||||
end
|
||||
else
|
||||
if rev.RevivingTarget then
|
||||
rev:SetSVAnimation("")
|
||||
rev:SelectWeapon(rev:GetNWString('MainWep'))
|
||||
rev.RevivingTarget = false
|
||||
end
|
||||
ply:SetNWEntity('Reviver', NULL)
|
||||
end
|
||||
end
|
||||
if ply.ReviveNumber >= 1 then
|
||||
ply.ReviveNumber = 0
|
||||
ply:SetSVAnimation("")
|
||||
if IsValid(rev) then
|
||||
rev:ChangeScore(100)
|
||||
rev:SetSVAnimation("")
|
||||
rev:SelectWeapon(rev:GetNWString('MainWep'))
|
||||
rev.RevivingTarget = false
|
||||
COD:GiveMessageCenter({rev}, 5)
|
||||
end
|
||||
ply:Revive()
|
||||
ply:SelectWeapon(ply:GetNWString('MainWep'))
|
||||
end
|
||||
else
|
||||
ply:SetNWEntity('Reviver', NULL)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("CalcMainActivity", "TDMAnimsRevive", function(ply, vel)
|
||||
if ply:IsDowned() and ply:GetNWString('SVAnim') == "" then
|
||||
local anim1 = ply:LookupSequence("laststand_idle")
|
||||
local anim2 = ply:LookupSequence("laststand_crawl_forward")
|
||||
local anim3 = ply:LookupSequence("laststand_crawl_backward")
|
||||
local anim4 = ply:LookupSequence("laststand_crawl_left")
|
||||
local anim5 = ply:LookupSequence("laststand_crawl_right")
|
||||
local dir = ply:MovingDirection(8)
|
||||
local vel = ply:GetVelocity():Length2D() > 10
|
||||
if dir == "forward" and vel then
|
||||
return -1, anim2
|
||||
elseif dir == "backward" and vel then
|
||||
return -1, anim3
|
||||
elseif dir == "left" and vel then
|
||||
return -1, anim4
|
||||
elseif dir == "right" and vel then
|
||||
return -1, anim5
|
||||
else
|
||||
return -1, anim1
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local delay = CurTime()+5
|
||||
hook.Add("Think", "TDMApplyCommands", function()
|
||||
if delay < CurTime() then
|
||||
delay = CurTime()+5
|
||||
for k, v in pairs(COD.ApplyCommands["Server"]) do
|
||||
RunConsoleCommand(k, v)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
concommand.Add("cod_jointeam", function(ply, cmd, args)
|
||||
local float = tonumber(args[1])
|
||||
if ply:IsSuperAdmin() then
|
||||
ply:SetTeam(float)
|
||||
ply:Spawn()
|
||||
end
|
||||
end)
|
||||
|
||||
---------------------------------------------------------------------
|
||||
|
||||
function COD:InfilStart()
|
||||
if COD.DataTable["Gamemode"] == 4 then return end
|
||||
|
||||
local t1s, t2s = COD.DataTable["Team1_InfilSettings"], COD.DataTable["Team2_InfilSettings"]
|
||||
|
||||
for k1, v1 in pairs(t1s.positions) do
|
||||
timer.Simple(0.1*k1, function()
|
||||
local infil = ents.Create("tdm_player_infil")
|
||||
infil:SetPos(v1)
|
||||
infil:SetAngles(t1s.angles[k1])
|
||||
infil.Infil = t1s.type
|
||||
infil.TeamChoose = 1
|
||||
infil:Spawn()
|
||||
end)
|
||||
end
|
||||
|
||||
for k2, v2 in pairs(t2s.positions) do
|
||||
timer.Simple(0.1*k2, function()
|
||||
local infil = ents.Create("tdm_player_infil")
|
||||
infil:SetPos(v2)
|
||||
infil:SetAngles(t2s.angles[k2])
|
||||
infil.Infil = t2s.type
|
||||
infil.TeamChoose = 2
|
||||
infil:Spawn()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("COD.ChangeState", "TDM_Infil", function(start)
|
||||
if COD.DataTable["Enable_InfilAnimations"] and start then
|
||||
COD:InfilStart()
|
||||
end
|
||||
end)
|
||||
40
gamemodes/cod_custom/gamemode/server/sv_domination.lua
Normal file
40
gamemodes/cod_custom/gamemode/server/sv_domination.lua
Normal file
@@ -0,0 +1,40 @@
|
||||
function COD:SpawnDominationFlags()
|
||||
local tab = COD.DataTable["flag_Spawns"]
|
||||
for i=1,3 do
|
||||
local flag = ents.Create("tdm_domination_flag")
|
||||
flag:SetPos(tab[i])
|
||||
flag:Spawn()
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------
|
||||
|
||||
hook.Add("PlayerDeath", "TDMPlayer_Domination", function(ply)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 5 then
|
||||
if ply:Team() == 1 then
|
||||
COD:AddFragsToData(2, -1)
|
||||
elseif ply:Team() == 2 then
|
||||
COD:AddFragsToData(1, -1)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("COD.ChangeState", "TDMPlayer_Domination", function(start)
|
||||
if start and COD.DataTable["Gamemode"] == 5 then
|
||||
COD:SpawnDominationFlags()
|
||||
end
|
||||
end)
|
||||
|
||||
local thinkdelay = 0
|
||||
hook.Add("Think", "TDMPlayer_Domination", function()
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 5 and thinkdelay < CurTime() then
|
||||
thinkdelay = CurTime()+3
|
||||
|
||||
for k, v in ipairs(ents.FindByClass("tdm_domination_flag")) do
|
||||
local team = v:GetNWFloat('Team')
|
||||
if team > 0 then
|
||||
COD:AddFragsToData(team, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
1220
gamemodes/cod_custom/gamemode/server/sv_functions.lua
Normal file
1220
gamemodes/cod_custom/gamemode/server/sv_functions.lua
Normal file
File diff suppressed because it is too large
Load Diff
172
gamemodes/cod_custom/gamemode/server/sv_infected.lua
Normal file
172
gamemodes/cod_custom/gamemode/server/sv_infected.lua
Normal file
@@ -0,0 +1,172 @@
|
||||
COD.DelayGamemodeNumber = 999999999
|
||||
|
||||
function COD:JoinAllToTeam()
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
ply:SetTeam(1)
|
||||
ply:KillSilent()
|
||||
ply:Spawn()
|
||||
end
|
||||
end
|
||||
|
||||
function COD:ShowTimer(num)
|
||||
net.Start("COD.TimerShow")
|
||||
net.WriteFloat(num)
|
||||
net.Broadcast()
|
||||
end
|
||||
|
||||
function COD:RandomInfection()
|
||||
local tabp = player.GetAll()
|
||||
local ply = table.Random(tabp)
|
||||
for _, plys in ipairs(tabp) do
|
||||
if plys != ply then
|
||||
COD:GiveMessageCenter(plys, 9)
|
||||
plys:ChangeScore(50)
|
||||
end
|
||||
end
|
||||
if IsValid(ply) then
|
||||
local pos = ply:GetPos()
|
||||
local ang = ply:EyeAngles()
|
||||
ply:SetTeam(2)
|
||||
ply:KillSilent()
|
||||
ply:Spawn()
|
||||
COD:GiveMessageCenter(ply, 7)
|
||||
timer.Simple(0.02, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply:SetPos(pos)
|
||||
ply:SetEyeAngles(ang)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("PlayerDeath", "TDMPlayer_Infection", function(ply, inf, att)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
if ply:Team() == 1 then
|
||||
COD.TimeBeforeEnd = COD.TimeBeforeEnd+30
|
||||
BroadcastLua([[
|
||||
COD.TimeMatch = ]]..COD.TimeBeforeEnd..[[
|
||||
]])
|
||||
for _, plys in ipairs(team.GetPlayers(1)) do
|
||||
COD:GiveMessageCenter(plys, 9)
|
||||
plys:ChangeScore(50)
|
||||
end
|
||||
end
|
||||
timer.Simple(0.1, function()
|
||||
if !IsValid(ply) or ply:Team() == 2 then return end
|
||||
|
||||
ply:SetTeam(2)
|
||||
if #team.GetPlayers(1) == 1 then
|
||||
COD:GiveMessageCenter(player.GetAll(), 8)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerSpawn", "TDMPlayer_Infection", function(ply)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
timer.Simple(0.01, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply:SetNWFloat('Perk1', 4)
|
||||
ply:SetNWFloat('Perk2', 0)
|
||||
ply:SetNWFloat('Perk1_Choose', 0)
|
||||
ply:SetNWFloat('Perk2_Choose', 0)
|
||||
ply:SetNWFloat('KillStreak1', 0)
|
||||
ply:SetNWFloat('KillStreak2', 0)
|
||||
ply:SetNWFloat('KillStreak3', 0)
|
||||
ply:SetPos(table.Random(COD.DataTable["simple_Spawns"]))
|
||||
if ply:Team() == 2 then
|
||||
ply:SetModel("models/humangrunt/cod4/captain_macmillan_pm.mdl")
|
||||
ply:SetupHands()
|
||||
ply:StripWeapons()
|
||||
ply:Give('tdm_infection_knife')
|
||||
ply:SetNWFloat('FragGrenades', 0)
|
||||
ply:SetNWFloat('FlashGrenades', 0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("COD.ChangeState", "TDMPlayer_Infection", function(start)
|
||||
if start and COD.DataTable["Gamemode"] == 4 then
|
||||
COD.TimeBefore1PerkUnlock = math.huge
|
||||
COD.TimeBefore2PerkUnlock = math.huge
|
||||
COD.DisableSpawn = false
|
||||
COD.DelayGamemodeNumber = CurTime()+COD.DataTable["Delay_Before_Start"]+21
|
||||
COD.DisableEndGameByNoTeam = true
|
||||
COD:JoinAllToTeam()
|
||||
timer.Simple(COD.DataTable["Delay_Before_Start"]+10, function()
|
||||
if COD.DataTable["Gamemode"] == 4 and COD.GameStarted then
|
||||
COD:ShowTimer(10)
|
||||
end
|
||||
end)
|
||||
timer.Simple(COD.DataTable["Delay_Before_Start"]+20, function()
|
||||
if COD.DataTable["Gamemode"] == 4 and COD.GameStarted then
|
||||
COD:RandomInfection()
|
||||
end
|
||||
end)
|
||||
else
|
||||
COD.DisableSpawn = false
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMPlayer_Infection", function()
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
local team1, team1alive = team.GetPlayers(1), false
|
||||
local team2alive = false
|
||||
local loseteam = 0
|
||||
|
||||
for k, p in ipairs(team1) do
|
||||
if p:Alive() then
|
||||
team1alive = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if #team.GetPlayers(2) != 0 then
|
||||
team2alive = true
|
||||
end
|
||||
|
||||
if team1alive and team2alive then
|
||||
COD.DelayGamemodeNumber = CurTime()+2
|
||||
loseteam = 0
|
||||
elseif team1alive and not team2alive then
|
||||
loseteam = 1
|
||||
elseif team2alive and not team1alive then
|
||||
loseteam = 2
|
||||
COD.TimeBeforeEnd = 0
|
||||
elseif not team1alive and not team2alive then
|
||||
loseteam = 3
|
||||
end
|
||||
|
||||
if COD.TimeBeforeStart < CurTime()+1 and team1alive then
|
||||
loseteam = 1
|
||||
COD.DelayGamemodeNumber = 0
|
||||
end
|
||||
|
||||
if loseteam == 1 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = 1
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 2 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team2_Kills"] = 1
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 3 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
end
|
||||
end
|
||||
end)
|
||||
335
gamemodes/cod_custom/gamemode/server/sv_invasion.lua
Normal file
335
gamemodes/cod_custom/gamemode/server/sv_invasion.lua
Normal file
@@ -0,0 +1,335 @@
|
||||
COD_Invasion = COD_Invasion or {}
|
||||
COD_Invasion.current_ai_spawned_team1 = 0
|
||||
COD_Invasion.current_ai_spawned_team2 = 0
|
||||
COD_Invasion.current_ai_max_team = COD.DataTable["MaxAIInTeam"]
|
||||
COD_Invasion.HeavyUnitsDelay = 0
|
||||
COD_Invasion.HeavyUnits = false
|
||||
COD_Invasion.SupportPackagesDelay = 0
|
||||
COD_Invasion.SupportPackages = false
|
||||
|
||||
local delay_in_action = 0
|
||||
local spawn_team1_delay = 0
|
||||
local spawn_team2_delay = 0
|
||||
local heli_team1_delay = 0
|
||||
local heli_team2_delay = 0
|
||||
------------------------------------------------------------------------
|
||||
|
||||
hook.Add("OnNPCKilled", "TDM_Invasion", function(ent, att)
|
||||
if COD.DataTable["Gamemode"] == 2 then
|
||||
local class1 = "vj_tdm_invasion_soldier1"
|
||||
local class2 = "vj_tdm_invasion_soldier2"
|
||||
|
||||
if class1 == ent:GetClass() then
|
||||
COD:AddFragsToData(2, 1)
|
||||
COD_Invasion.current_ai_spawned_team1 = COD_Invasion.current_ai_spawned_team1 - 1
|
||||
elseif class2 == ent:GetClass() then
|
||||
COD:AddFragsToData(1, 1)
|
||||
COD_Invasion.current_ai_spawned_team2 = COD_Invasion.current_ai_spawned_team2 - 1
|
||||
end
|
||||
end
|
||||
if att:IsPlayer() then
|
||||
att:AddFrags(1)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerDeath", "TDM_Invasion", function(ply)
|
||||
if COD.DataTable["Gamemode"] == 2 then
|
||||
if ply:Team() == 1 then
|
||||
COD:AddFragsToData(2, 4)
|
||||
elseif ply:Team() == 2 then
|
||||
COD:AddFragsToData(1, 4)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("COD.ChangeState", "TDM_Invasion", function(start)
|
||||
if COD.DataTable["Gamemode"] == 2 then
|
||||
COD_Invasion:RemoveAllAI()
|
||||
if start then
|
||||
spawn_team1_delay = CurTime()+15
|
||||
spawn_team2_delay = CurTime()+15
|
||||
heli_team1_delay = CurTime()+30
|
||||
heli_team2_delay = CurTime()+30
|
||||
COD_Invasion:CreateStartAI()
|
||||
COD_Invasion.HeavyUnits = false
|
||||
COD_Invasion.SupportPackages = false
|
||||
COD_Invasion.HeavyUnitsDelay = CurTime()+COD.GamemodeSettings[2]["Time_Before_HeavyUnits"]
|
||||
COD_Invasion.SupportPackagesDelay = CurTime()+COD.GamemodeSettings[2]["Time_Before_SupportPackages"]
|
||||
else
|
||||
COD_Invasion.HeavyUnitsDelay = math.huge
|
||||
COD_Invasion.SupportPackagesDelay = math.huge
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("OnEntityCreated", "TDM_Invasion", function(ent)
|
||||
local class1 = "vj_tdm_invasion_soldier1"
|
||||
local class2 = "vj_tdm_invasion_soldier2"
|
||||
|
||||
if class1 == ent:GetClass() then
|
||||
COD_Invasion.current_ai_spawned_team1 = COD_Invasion.current_ai_spawned_team1 + 1
|
||||
elseif class2 == ent:GetClass() then
|
||||
COD_Invasion.current_ai_spawned_team2 = COD_Invasion.current_ai_spawned_team2 + 1
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDM_Invasion", function(start)
|
||||
if COD.TimeBeforeEnd < CurTime() and COD.GameStarted then
|
||||
COD_Invasion:RemoveAllAI()
|
||||
end
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 2 then
|
||||
if COD_Invasion.HeavyUnitsDelay < CurTime() and not COD_Invasion.HeavyUnits then
|
||||
COD_Invasion.HeavyUnits = true
|
||||
COD:ShowAnnouncment(2)
|
||||
end
|
||||
if COD_Invasion.SupportPackagesDelay < CurTime() and not COD_Invasion.SupportPackages then
|
||||
COD_Invasion.SupportPackages = true
|
||||
COD_Invasion:SupplyPackages()
|
||||
COD:ShowAnnouncment(1)
|
||||
end
|
||||
if delay_in_action < CurTime() then
|
||||
|
||||
delay_in_action = CurTime() + 1
|
||||
|
||||
local team1 = COD_Invasion:GetAICount(1)
|
||||
local team2 = COD_Invasion:GetAICount(2)
|
||||
local max = COD_Invasion.current_ai_max_team
|
||||
|
||||
if team1 < max and spawn_team1_delay < CurTime() then
|
||||
spawn_team1_delay = CurTime() + 2
|
||||
COD_Invasion:CreateSoldier(1)
|
||||
|
||||
if heli_team1_delay < CurTime() then
|
||||
heli_team1_delay = CurTime()+math.random(60,120)
|
||||
COD_Invasion:CreateHeli(1)
|
||||
end
|
||||
end
|
||||
|
||||
if team2 < max and spawn_team2_delay < CurTime() then
|
||||
spawn_team2_delay = CurTime() + 2
|
||||
COD_Invasion:CreateSoldier(2)
|
||||
|
||||
if heli_team2_delay < CurTime() then
|
||||
heli_team2_delay = CurTime()+math.random(60,120)
|
||||
COD_Invasion:CreateHeli(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
function COD_Invasion:SupplyPackages()
|
||||
heli_team1_delay = CurTime()+30
|
||||
heli_team2_delay = CurTime()+30
|
||||
|
||||
for i, pos in ipairs(COD.DataTable["backup_Spawns"]) do
|
||||
local tr2 = util.TraceLine( {
|
||||
start = pos,
|
||||
endpos = pos+Vector(0,0,99999),
|
||||
filter = function( ent ) return ( ent:GetClass() == "prop_static" ) end,
|
||||
} )
|
||||
|
||||
local height = math.Clamp(tr2.HitPos:Distance(pos), 100, 600)
|
||||
|
||||
local heli = ents.Create("prop_dynamic")
|
||||
heli:SetModel("models/tdmg/heli.mdl")
|
||||
heli:SetPos(pos+Vector(0,0,4))
|
||||
heli:SetAngles(Angle(0,math.random(0,360),0))
|
||||
heli:Spawn()
|
||||
heli:ResetSequence("spawn")
|
||||
heli:SetBodygroup(3, 1)
|
||||
|
||||
timer.Simple(1, function()
|
||||
for i=1,10 do
|
||||
local sproxy = ents.Create("tdm_infil_soundproxy")
|
||||
sproxy:SetOwner(heli:GetOwner())
|
||||
sproxy:SetPos(heli:GetPos())
|
||||
sproxy:SetAngles(heli:GetAngles())
|
||||
sproxy:SetParent(heli)
|
||||
sproxy.Sound = "tdmg/sas1_veh1_int_quad_front_stat.wav"
|
||||
sproxy.Bone = "tag_main_rotor_static"
|
||||
sproxy.Vol = 100
|
||||
sproxy:Spawn()
|
||||
end
|
||||
end)
|
||||
|
||||
timer.Simple(12, function()
|
||||
if !IsValid(heli) then return end
|
||||
local care = ents.Create("tdm_package")
|
||||
care:SetPos(pos+Vector(0,0,height-64))
|
||||
care:Spawn()
|
||||
care:SetAngles(heli:GetAngles())
|
||||
end)
|
||||
|
||||
timer.Simple(30, function()
|
||||
if IsValid(heli) then
|
||||
heli:Remove()
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function COD_Invasion:CreateSoldier(team, custompos, freezetime)
|
||||
local sol = ents.Create("vj_tdm_invasion_soldier"..team)
|
||||
if custompos then
|
||||
sol:SetPos(custompos)
|
||||
else
|
||||
sol:SetPos(COD_Invasion:GetAIPosition(team))
|
||||
end
|
||||
sol.Team = team
|
||||
sol:Spawn()
|
||||
if freezetime then
|
||||
sol:AddEFlags(EFL_NO_THINK_FUNCTION)
|
||||
sol:SetSequence("idle_passive")
|
||||
timer.Simple(freezetime, function()
|
||||
if !IsValid(sol) then return end
|
||||
sol:RemoveEFlags(EFL_NO_THINK_FUNCTION)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function COD_Invasion:CreateHeli(team, custompos)
|
||||
local h = ents.Create("tdm_infil")
|
||||
if custompos then
|
||||
h:SetPos(custompos)
|
||||
else
|
||||
h:SetPos(COD_Invasion:GetHeliPosition(team))
|
||||
end
|
||||
h.Team2Team = team == 2
|
||||
h.Invasion = true
|
||||
h.KillstreakModel = true
|
||||
h.Team = team
|
||||
h:Spawn()
|
||||
h:SetNWFloat('Team', h.Team)
|
||||
end
|
||||
|
||||
function COD_Invasion:CreateStartAI()
|
||||
local spos_team1 = COD.DataTable["Team1_AISpawns"]
|
||||
local spos_team2 = COD.DataTable["Team2_AISpawns"]
|
||||
local hpos_team1 = COD.DataTable["Team1_HeliSpawns"]
|
||||
local hpos_team2 = COD.DataTable["Team2_HeliSpawns"]
|
||||
|
||||
for k, v in pairs(spos_team1) do
|
||||
COD_Invasion:CreateSoldier(1, v, COD.DataTable["Delay_Before_Start"]-2)
|
||||
end
|
||||
for k, v in pairs(spos_team2) do
|
||||
COD_Invasion:CreateSoldier(2, v, COD.DataTable["Delay_Before_Start"]-2)
|
||||
end
|
||||
|
||||
local delay = 0
|
||||
if COD.DataTable["Enable_InfilAnimations"] then
|
||||
delay = 20
|
||||
end
|
||||
|
||||
timer.Simple(delay, function()
|
||||
for k, v in pairs(hpos_team1) do
|
||||
COD_Invasion:CreateHeli(1, v, COD.DataTable["Delay_Before_Start"]-2)
|
||||
end
|
||||
for k, v in pairs(hpos_team2) do
|
||||
COD_Invasion:CreateHeli(2, v, COD.DataTable["Delay_Before_Start"]-2)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function COD_Invasion:RemoveAllAI()
|
||||
local soldiers = ents.FindByClass("vj_tdm_invasion_*")
|
||||
|
||||
COD_Invasion.current_ai_spawned_team1 = 0
|
||||
COD_Invasion.current_ai_spawned_team2 = 0
|
||||
for k, v in pairs(soldiers) do
|
||||
v:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
function COD_Invasion:GetAICount(team)
|
||||
local soldiers = ents.FindByClass("vj_tdm_invasion_*")
|
||||
local count = 0
|
||||
|
||||
for k, v in pairs(soldiers) do
|
||||
if v.Team == team then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
|
||||
return count
|
||||
end
|
||||
|
||||
function COD_Invasion:GetAIPosition(team)
|
||||
local enemy_players = player.GetAll()
|
||||
|
||||
local positions = {}
|
||||
for _, pos in ipairs(COD.DataTable["simple_Spawns"]) do
|
||||
local can = true
|
||||
local gdist = 0
|
||||
for _, en in ipairs(enemy_players) do
|
||||
if en:Alive() and en:Team() != team then
|
||||
local dist = en:GetPos():DistToSqr(pos)
|
||||
if en:IsLineOfSightClear(pos) or dist < 50000 then
|
||||
can = false
|
||||
end
|
||||
for v, n in ipairs(ents.FindInSphere(pos, 64)) do
|
||||
if n:IsNPC() or n:IsPlayer() then
|
||||
can = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if dist > gdist then
|
||||
gdist = dist
|
||||
end
|
||||
end
|
||||
end
|
||||
if can then
|
||||
table.insert(positions, {vec = pos, dist = gdist})
|
||||
end
|
||||
end
|
||||
if #positions > 0 then
|
||||
local position, dist = positions[1].vec, 0
|
||||
for _, p in ipairs(positions) do
|
||||
if p.dist > dist then
|
||||
dist = p.dist
|
||||
position = p.vec
|
||||
end
|
||||
end
|
||||
return position
|
||||
else
|
||||
return table.Random(COD.DataTable["simple_Spawns"])
|
||||
end
|
||||
end
|
||||
|
||||
function COD_Invasion:GetHeliPosition(team)
|
||||
local enemy_players = ents.GetAll()
|
||||
|
||||
local positions = {}
|
||||
for _, pos in ipairs(COD.DataTable["backup_Spawns"]) do
|
||||
local can = true
|
||||
local gdist = 0
|
||||
for _, en in ipairs(enemy_players) do
|
||||
if en:IsNPC() and en.Team != team or en:IsPlayer() and en:Team() != team then
|
||||
local dist = en:GetPos():DistToSqr(pos)
|
||||
if dist < 50000 then
|
||||
can = false
|
||||
end
|
||||
if dist > gdist then
|
||||
gdist = dist
|
||||
end
|
||||
end
|
||||
end
|
||||
if can then
|
||||
table.insert(positions, {vec = pos, dist = gdist})
|
||||
end
|
||||
end
|
||||
if #positions > 0 then
|
||||
local position, dist = positions[1].vec, 0
|
||||
for _, p in ipairs(positions) do
|
||||
if p.dist > dist then
|
||||
dist = p.dist
|
||||
position = p.vec
|
||||
end
|
||||
end
|
||||
return position
|
||||
else
|
||||
return table.Random(COD.DataTable["backup_Spawns"])
|
||||
end
|
||||
end
|
||||
168
gamemodes/cod_custom/gamemode/server/sv_killcam.lua
Normal file
168
gamemodes/cod_custom/gamemode/server/sv_killcam.lua
Normal file
@@ -0,0 +1,168 @@
|
||||
util.AddNetworkString("COD.KillcamSend")
|
||||
|
||||
COD.LastKillData = {
|
||||
length = 0,
|
||||
data = ""
|
||||
}
|
||||
|
||||
function COD:ShowLastKillCam(delay)
|
||||
if not COD.DataTable["Enable_KillCam"] then return end
|
||||
local len = COD.LastKillData.length
|
||||
local tab = COD.LastKillData.data
|
||||
timer.Simple(delay, function()
|
||||
net.Start("COD.KillcamSend")
|
||||
net.WriteUInt(len, 32)
|
||||
net.WriteData(tab, len)
|
||||
net.WriteBool(true)
|
||||
net.Broadcast()
|
||||
end)
|
||||
end
|
||||
|
||||
function COD:ShowKillCam(ply, att, delay)
|
||||
if not COD.DataTable["Enable_KillCam"] then return end
|
||||
|
||||
if !istable(ply) then
|
||||
ply = {ply}
|
||||
end
|
||||
if not delay then
|
||||
delay = 0
|
||||
end
|
||||
|
||||
if att.KillCamTable then
|
||||
local tab = att.KillCamTable
|
||||
local num2 = #att.KillCamTable-300
|
||||
|
||||
for i=1,num2 do
|
||||
table.remove(tab, 1)
|
||||
end
|
||||
|
||||
local tab3 = util.TableToJSON(tab)
|
||||
tab3 = util.Compress(tab3)
|
||||
local flt = #tab3
|
||||
|
||||
if flt < 4294967295 then
|
||||
for _, en in pairs(ply) do
|
||||
if IsValid(en) then
|
||||
net.Start("COD.KillcamSend")
|
||||
net.WriteUInt(flt, 32)
|
||||
net.WriteData(tab3, flt)
|
||||
net.WriteBool(false)
|
||||
net.Send(en)
|
||||
end
|
||||
end
|
||||
|
||||
COD.LastKillData = {
|
||||
length = flt,
|
||||
data = tab3
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("Tick", "RecordCamBot", function()
|
||||
if COD.DataTable["Enable_KillCam"] then
|
||||
local plyall = player.GetAll()
|
||||
for k=1,#plyall do
|
||||
local ply = plyall[k]
|
||||
|
||||
if !COD.DataTable["Enable_KillCam_WithBots"] and !ply:IsPlayer() then continue end
|
||||
|
||||
if not ply.KillCamTable then
|
||||
ply.KillCamTable = {}
|
||||
end
|
||||
|
||||
if #ply.KillCamTable > 500 then
|
||||
table.remove(ply.KillCamTable, 1)
|
||||
end
|
||||
|
||||
local plytab = {
|
||||
model = ply:GetModel(),
|
||||
ang = (ply:GetAimVector()):GetNormalized():Angle(),
|
||||
pos = ply:EyePos()-ply:GetAimVector()*32+ply:GetUp()*16,
|
||||
snd = "",
|
||||
blt = {},
|
||||
hit = 0
|
||||
}
|
||||
|
||||
if ply:GetNWString('SVAnim') != "" then
|
||||
plytab.ang = (ply:GetForward()*1-ply:GetRight()*2):GetNormalized():Angle()
|
||||
plytab.pos = ply:GetAttachment(ply:LookupAttachment('eyes')).Pos+ply:GetRight()*64-ply:GetForward()*16
|
||||
end
|
||||
|
||||
if ply.VMSND and istable(ply.VMSND) then
|
||||
plytab.snd = ply.VMSND
|
||||
ply.VMSND = nil
|
||||
end
|
||||
|
||||
if ply.VMBLT then
|
||||
plytab.blt = ply.VMBLT
|
||||
ply.VMBLT = nil
|
||||
end
|
||||
|
||||
if ply.VMHIT then
|
||||
plytab.hit = ply.VMHIT
|
||||
ply.VMHIT = nil
|
||||
end
|
||||
|
||||
local otab = {
|
||||
ent = {},
|
||||
model = {},
|
||||
pos = {},
|
||||
ang = {},
|
||||
cycle = {},
|
||||
seq = {},
|
||||
alive = {}
|
||||
}
|
||||
|
||||
for i=1,#plyall do
|
||||
local pl = plyall[i]
|
||||
if pl:IsLineOfSightClear(ply) then
|
||||
table.insert(otab.ent, pl:EntIndex())
|
||||
table.insert(otab.model, pl:GetModel())
|
||||
table.insert(otab.pos, pl:GetPos())
|
||||
table.insert(otab.ang, Angle(0,math.Round(pl:EyeAngles().y),0))
|
||||
table.insert(otab.cycle, pl:GetCycle())
|
||||
table.insert(otab.seq, pl:GetSequenceName(pl:GetSequence()))
|
||||
table.insert(otab.alive, pl:Alive())
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(ply.KillCamTable, {
|
||||
ply = plytab,
|
||||
other = otab,
|
||||
})
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("EntityEmitSound", "RecordCamBot", function(data)
|
||||
local ent = data.Entity
|
||||
|
||||
if ent:IsPlayer() or ent.IsBot and ent:IsBot() then
|
||||
if not istable(ent.VMSND) then
|
||||
ent.VMSND = {}
|
||||
end
|
||||
|
||||
table.insert(ent.VMSND, data.SoundName)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("EntityTakeDamage", "RecordCamBot", function(ent, data)
|
||||
local att = data:GetAttacker()
|
||||
if (att:IsPlayer() or att.IsBot and att:IsBot()) and (ent:IsPlayer() or ent.IsBot and ent:IsBot()) then
|
||||
att.VMHIT = 1
|
||||
if data:GetDamage() >= ent:Health()+ent:Armor() then
|
||||
att.VMHIT = 2
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("EntityFireBullets", "RecordCamBot", function(ent, data)
|
||||
if ent:IsPlayer() or ent.IsBot and ent:IsBot() then
|
||||
if not istable(ent.VMSND) then
|
||||
ent.VMSND = {}
|
||||
end
|
||||
|
||||
ent.VMBLT = data
|
||||
end
|
||||
end)
|
||||
1091
gamemodes/cod_custom/gamemode/server/sv_killstreaks.lua
Normal file
1091
gamemodes/cod_custom/gamemode/server/sv_killstreaks.lua
Normal file
File diff suppressed because it is too large
Load Diff
93
gamemodes/cod_custom/gamemode/server/sv_knockout.lua
Normal file
93
gamemodes/cod_custom/gamemode/server/sv_knockout.lua
Normal file
@@ -0,0 +1,93 @@
|
||||
COD.DelayGamemodeNumber = 999999999
|
||||
|
||||
hook.Add("PlayerDeath", "TDMPlayer_Knockout", function(ply)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 3 then
|
||||
timer.Simple(0.1, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply.DeathTime = CurTime()+999999999
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerSpawn", "TDMPlayer_Knockout", function(ply)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 3 then
|
||||
timer.Simple(0.1, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply:SetNWFloat('Perk1', 0)
|
||||
ply:SetNWFloat('Perk2', 2)
|
||||
ply:SetNWFloat('Perk1_Choose', 0)
|
||||
ply:SetNWFloat('Perk2_Choose', 0)
|
||||
ply:SetNWFloat('KillStreak1', 0)
|
||||
ply:SetNWFloat('KillStreak2', 0)
|
||||
ply:SetNWFloat('KillStreak3', 0)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("COD.ChangeState", "TDMGmodStartMatch_Knockout", function(start)
|
||||
if start and COD.DataTable["Gamemode"] == 3 then
|
||||
COD.TimeBefore1PerkUnlock = math.huge
|
||||
COD.TimeBefore2PerkUnlock = math.huge
|
||||
COD.DisableSpawn = true
|
||||
COD.DelayGamemodeNumber = CurTime()+5
|
||||
COD.DisableEndGameByNoTeam = false
|
||||
else
|
||||
COD.DisableSpawn = false
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMGmodStartMatch_Knockout", function()
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 3 then
|
||||
local team1, team1alive = team.GetPlayers(1), false
|
||||
local team2, team2alive = team.GetPlayers(2), false
|
||||
local loseteam = 0
|
||||
|
||||
for k, p in ipairs(team1) do
|
||||
if p:Alive() then
|
||||
team1alive = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
for k, p in ipairs(team2) do
|
||||
if p:Alive() then
|
||||
team2alive = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if team1alive and team2alive then
|
||||
COD.DelayGamemodeNumber = CurTime()+2
|
||||
loseteam = 0
|
||||
elseif team1alive and not team2alive then
|
||||
loseteam = 1
|
||||
elseif team2alive and not team1alive then
|
||||
loseteam = 2
|
||||
elseif not team1alive and not team2alive then
|
||||
loseteam = 3
|
||||
end
|
||||
|
||||
if loseteam == 1 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = COD.DataTable["MaxKills"]
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 2 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team2_Kills"] = COD.DataTable["MaxKills"]
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 3 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
end
|
||||
end
|
||||
end)
|
||||
237
gamemodes/cod_custom/gamemode/server/sv_takedown.lua
Normal file
237
gamemodes/cod_custom/gamemode/server/sv_takedown.lua
Normal file
@@ -0,0 +1,237 @@
|
||||
function COD:ConnectWeapon(ply, model, lang, lpos, scale, attachment, usebonemerge, boneang)
|
||||
local wep = ents.Create('base_anim')
|
||||
local attach = ply:GetAttachment(ply:LookupAttachment(attachment))
|
||||
wep:SetPos(attach.Pos)
|
||||
wep:SetModel(model)
|
||||
wep:SetAngles(attach.Ang)
|
||||
wep:SetParent(ply, ply:LookupAttachment(attachment))
|
||||
if usebonemerge then
|
||||
wep:AddEffects(EF_BONEMERGE)
|
||||
end
|
||||
if boneang and ply:LookupBone(boneang) then
|
||||
wep:SetAngles(select(2, ply:GetBonePosition(ply:LookupBone(boneang))))
|
||||
end
|
||||
wep:Spawn()
|
||||
wep:SetLocalAngles(lang)
|
||||
wep:SetLocalPos(lpos)
|
||||
wep:SetModelScale(scale, 0)
|
||||
function wep:Think()
|
||||
if !IsValid(ply) or not ply.Takedowning then
|
||||
wep:Remove()
|
||||
end
|
||||
end
|
||||
return wep
|
||||
end
|
||||
|
||||
function COD:TakeThisIntoPhys(ent, removetime)
|
||||
local wep = ents.Create("prop_physics")
|
||||
wep:SetModel(ent:GetModel())
|
||||
wep:SetAngles(ent:GetAngles())
|
||||
wep:SetPos(ent:GetPos())
|
||||
wep:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
|
||||
wep:Spawn()
|
||||
wep:GetPhysicsObject():Wake()
|
||||
|
||||
timer.Simple(removetime, function()
|
||||
if !IsValid(wep) then return end
|
||||
wep:Remove()
|
||||
end)
|
||||
|
||||
ent:Remove()
|
||||
return wep, wep:GetPhysicsObject()
|
||||
end
|
||||
|
||||
local knife_model = "models/tdmg/wep/combat_knife.mdl"
|
||||
local pistol_model = "models/tdmg/wep/m18.mdl"
|
||||
local ar_model = "models/viper/mw/weapons/w_galima.mdl"
|
||||
local machete_model = "models/tdmg/wep/w_machete.mdl"
|
||||
local pkm_model = "models/tdmg/wep/w_mw_pkm.mdl"
|
||||
local shotgun_model = "models/tdmg/wep/w_rem870_p.mdl"
|
||||
local sniper_model = "models/tdmg/wep/m82.mdl"
|
||||
local sledgehammer_model = "models/tdmg/wep/w_sledgehammer.mdl"
|
||||
local pickaxe_model = "models/tdmg/wep/wpn_h1_melee_pick_axe_wm.mdl"
|
||||
local katana_model = "models/tdmg/wep/w_katana.mdl"
|
||||
local new_pickaxe_model = "models/tdmg/wep/new/hatchet.mdl"
|
||||
local new_katana_model = "models/tdmg/wep/new/katana.mdl"
|
||||
local new_stick_model = "models/tdmg/wep/new/kalistick.mdl"
|
||||
local modeltab = {knife_model, pistol_model, ar_model, machete_model, pkm_model, shotgun_model, sniper_model, sledgehammer_model, katana_model, new_stick_model, new_pickaxe_model, new_katana_model}
|
||||
for _, v in pairs(modeltab) do
|
||||
util.PrecacheModel(v)
|
||||
end
|
||||
|
||||
local pl = FindMetaTable("Player")
|
||||
util.AddNetworkString("COD.TakedownCam")
|
||||
|
||||
concommand.Add("cod_givetakedown", function(ply, cmd, args)
|
||||
if args[1] then
|
||||
local num = tostring(args[1])
|
||||
ply:SetNWString('TakedownAnim', num)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerButtonDown", "TakeDownTDM", function(ply, but)
|
||||
if ply:Alive() and but == KEY_E then
|
||||
ply:Takedown()
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("CalcMainActivity", "!TDMAnims", function(ply, vel)
|
||||
local str = ply:GetNWString('SVAnim')
|
||||
local num = ply:GetNWFloat('SVAnimDelay')
|
||||
local st = ply:GetNWFloat('SVAnimStartTime')
|
||||
if str != "" then
|
||||
ply:SetCycle((CurTime()-st)/num)
|
||||
return -1, ply:LookupSequence(str)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMGmodTakedown", function()
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
if ply.Takedowning and (not ply:Alive() or !ply.TakedownIsFinished and (!IsValid(ply.TakedowningTarget) or ply.TakedowningTarget:Health() <= 0)) then
|
||||
ply.Takedowning = false
|
||||
ply:SetSVAnimation("")
|
||||
ply:Freeze(false)
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(false)
|
||||
net.Send(ply)
|
||||
if ply.TakedowningGun then
|
||||
ply:SelectWeapon(ply.TakedowningGun)
|
||||
end
|
||||
elseif ply:IsBot() and ply.Takedowning and IsValid(ply.TakedowningTarget) then
|
||||
ply:SetPos(ply.TakedowningTarget:GetPos())
|
||||
ply:SetEyeAngles(ply.TakedowningTarget:EyeAngles())
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function pl:SetSVAnimation(anim, autostop)
|
||||
self:SetNWString('SVAnim', anim)
|
||||
self:SetNWFloat('SVAnimDelay', select(2, self:LookupSequence(anim)))
|
||||
self:SetNWFloat('SVAnimStartTime', CurTime())
|
||||
self:SetCycle(0)
|
||||
if autostop then
|
||||
local delay = select(2, self:LookupSequence(anim))
|
||||
timer.Simple(delay, function()
|
||||
if !IsValid(self) then return end
|
||||
|
||||
local anim2 = self:GetNWString('SVAnim')
|
||||
|
||||
if anim == anim2 then
|
||||
self:SetSVAnimation("")
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function pl:IsAtBack(enemy) --This function was made by OpenAI ChatGPT
|
||||
if !IsValid(enemy) then return end
|
||||
local enemyForward = enemy:GetForward()
|
||||
local enemyToPlayer = self:GetPos() - enemy:GetPos()
|
||||
local angle = enemyForward:Angle():Forward():Dot(enemyToPlayer:GetNormalized())
|
||||
local degrees = math.deg(math.acos(angle))
|
||||
return degrees > 100
|
||||
end
|
||||
|
||||
function pl:Takedown(forceentity)
|
||||
local tr = self:GetEyeTrace()
|
||||
local ent = tr.Entity
|
||||
local dist = tr.StartPos:Distance(tr.HitPos) < 96
|
||||
if forceentity then
|
||||
dist = true
|
||||
ent = forceentity
|
||||
end
|
||||
|
||||
if !ent:IsPlayer() or ent:Team() == self:Team() or self:IsDowned() or ent.Takedowning or self.Takedowning or !ent:OnGround() or !self:OnGround() or !self:IsAtBack(ent) or not dist then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local float = self:GetNWString('TakedownAnim')
|
||||
if float == "00" then
|
||||
local _, rnd = table.Random(COD.Takedowns)
|
||||
float = rnd
|
||||
end
|
||||
if not COD.Takedowns[float] or float == "00" then return end
|
||||
|
||||
if not COD.Takedowns[float] then return end
|
||||
if !isnumber(float) then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_stand", "execution_"..float.."_victim_stand"
|
||||
if ent:IsDowned() then
|
||||
anim1, anim2 = "execution_"..float.."_attacker_laststand", "execution_"..float.."_victim_laststand"
|
||||
end
|
||||
end
|
||||
|
||||
local delay1 = select(2, self:LookupSequence(anim1))
|
||||
local delay2 = COD.Takedowns[float].deathtime
|
||||
if ent:IsDowned() then
|
||||
delay2 = COD.Takedowns[float].deathtime_laststand
|
||||
end
|
||||
|
||||
local ang1 = ent:EyeAngles()
|
||||
self:Freeze(true)
|
||||
self:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
self:SetPos(ent:GetPos())
|
||||
self:SetSVAnimation(anim1)
|
||||
local wep = self:GetActiveWeapon()
|
||||
if IsValid(wep) then
|
||||
self.TakedowningGun = wep:GetClass()
|
||||
else
|
||||
self.TakedowningGun = ""
|
||||
end
|
||||
local wep = ent:GetActiveWeapon()
|
||||
if IsValid(wep) then
|
||||
ent.TakedowningGun = wep:GetClass()
|
||||
else
|
||||
ent.TakedowningGun = ""
|
||||
end
|
||||
self.TakedowningTarget = ent
|
||||
self.Takedowning = true
|
||||
self.TakedownIsFinished = false
|
||||
self:SetActiveWeapon(nil)
|
||||
ent:SetActiveWeapon(nil)
|
||||
ent.TakedowningTarget = self
|
||||
ent.Takedowning = true
|
||||
ent.TakedownIsFinished = false
|
||||
ent:SetSVAnimation(anim2)
|
||||
ent:Freeze(true)
|
||||
ent:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(true)
|
||||
net.WriteFloat(delay1)
|
||||
net.WriteBool(true)
|
||||
net.Send(self)
|
||||
|
||||
net.Start("COD.TakedownCam")
|
||||
net.WriteBool(true)
|
||||
net.WriteFloat(delay2)
|
||||
net.WriteBool(false)
|
||||
net.Send(ent)
|
||||
|
||||
if ent:IsDowned() then
|
||||
COD.Takedowns[float].effect_laststand(self, ent)
|
||||
else
|
||||
COD.Takedowns[float].effect(self, ent)
|
||||
end
|
||||
|
||||
timer.Simple(delay2, function()
|
||||
if IsValid(ent) and IsValid(self) and self.Takedowning then
|
||||
self.TakedownIsFinished = true
|
||||
ent:Freeze(false)
|
||||
ent:TakeDamage(ent:Health()+ent:Armor(), self)
|
||||
ent.Takedowning = false
|
||||
ent.TakedowningTarget = nil
|
||||
ent:SetSVAnimation("")
|
||||
end
|
||||
end)
|
||||
|
||||
timer.Simple(delay1, function()
|
||||
if IsValid(self) and self.Takedowning then
|
||||
self:Freeze(false)
|
||||
self:SetEyeAngles(Angle(ang1.x,ang1.y,0))
|
||||
self.Takedowning = false
|
||||
self:SetSVAnimation("")
|
||||
self:SelectWeapon(self.TakedowningGun)
|
||||
end
|
||||
end)
|
||||
end
|
||||
609
gamemodes/cod_custom/gamemode/shared.lua
Normal file
609
gamemodes/cod_custom/gamemode/shared.lua
Normal file
@@ -0,0 +1,609 @@
|
||||
GM.Author = 'HarionPlayZ'
|
||||
GM.Name = "Call Of Duty TDM"
|
||||
|
||||
--[[
|
||||
Say thanks to this guys:
|
||||
HarionPlayZ - Main Developer, ported CoD Animations to GMod.
|
||||
TameCoot - Retargeted CoD Season 1 Animations
|
||||
Kirloper - Gave MWII Animations
|
||||
Shark_Vil - SLib Library
|
||||
RefoselDev - Gave Hosting for server and many more
|
||||
HPZ Development Team - Viewmodels, animations, languages and more.
|
||||
|
||||
----------------------------------------------------------------
|
||||
help with Languages:
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
COD = COD or {}
|
||||
|
||||
AddCSLuaFile('languages.lua')
|
||||
include('languages.lua')
|
||||
AddCSLuaFile('takedowns.lua')
|
||||
include('takedowns.lua')
|
||||
|
||||
COD.ApplyCommands = {
|
||||
["Server"] = {
|
||||
["sv_crazyphysics_warning"] = 0,
|
||||
},
|
||||
["Client"] = {},
|
||||
}
|
||||
|
||||
COD.DataTable = {
|
||||
["MaxKills"] = 75,
|
||||
["MaxTime"] = 600,
|
||||
}
|
||||
|
||||
local str = file.Read("cod_tdm/"..game.GetMap()..".lua", "LUA")
|
||||
if str then
|
||||
RunString(str)
|
||||
end
|
||||
|
||||
COD.DataTable["Delay_Before_Start"] = 18
|
||||
COD.DataTable["Enable_KillCam"] = true
|
||||
COD.DataTable["Enable_KillCam_WithBots"] = true
|
||||
|
||||
COD.DataTable["Enable_RandomGamemode"] = true
|
||||
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
|
||||
COD.DataTable["MaxKills"] = 100
|
||||
COD.DataTable["MaxTime"] = 600
|
||||
COD.DataTable["MaxAIInTeam"] = 10
|
||||
|
||||
if not COD.DataTable["Gamemode"] then
|
||||
COD.DataTable["Gamemode"] = 1
|
||||
end
|
||||
|
||||
COD.GamemodeSettings = {
|
||||
[1] = {
|
||||
["MaxKills"] = 100,
|
||||
["MaxTime"] = 600,
|
||||
},
|
||||
[2] = {
|
||||
["MaxKills"] = 500,
|
||||
["MaxTime"] = 900,
|
||||
["Time_Before_HeavyUnits"] = 300,
|
||||
["Time_Before_SupportPackages"] = 480,
|
||||
},
|
||||
[3] = {
|
||||
["MaxKills"] = 100,
|
||||
["MaxTime"] = 120,
|
||||
},
|
||||
[4] = {
|
||||
["MaxKills"] = 100,
|
||||
["MaxTime"] = 120,
|
||||
},
|
||||
[5] = {
|
||||
["MaxKills"] = 200,
|
||||
["MaxTime"] = 600,
|
||||
},
|
||||
}
|
||||
|
||||
team.SetUp(1, "SpecGru", Color(85,165,95))
|
||||
team.SetUp(2, "KorTac", Color(195,165,85))
|
||||
|
||||
COD.Killstreaks = {
|
||||
[1] = {
|
||||
name = COD.Language["killstreak_1"],
|
||||
desc = COD.Language["killstreak_desc_1"],
|
||||
icon = Material('tdmg/hud/killstreaks/puav.png'),
|
||||
kills = 4,
|
||||
sound = "tdmg/killstreaks/uav_ready.wav",
|
||||
func = function(ply)
|
||||
COD:UAVCall(ply:Team(), false)
|
||||
COD:GiveKSAnn(1, ply)
|
||||
end,
|
||||
},
|
||||
[2] = {
|
||||
name = COD.Language["killstreak_2"],
|
||||
desc = COD.Language["killstreak_desc_2"],
|
||||
icon = Material('tdmg/hud/killstreaks/drone.png'),
|
||||
kills = 4,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
COD:DroneSpawn(ply)
|
||||
end,
|
||||
},
|
||||
[3] = {
|
||||
name = COD.Language["killstreak_3"],
|
||||
desc = COD.Language["killstreak_desc_3"],
|
||||
icon = Material('tdmg/hud/killstreaks/armor.png'),
|
||||
kills = 4,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
ply:SetMaxArmor(250)
|
||||
ply:SetArmor(250)
|
||||
COD:GiveKSAnn(3, ply)
|
||||
end,
|
||||
},
|
||||
[4] = {
|
||||
name = COD.Language["killstreak_4"],
|
||||
desc = COD.Language["killstreak_desc_4"],
|
||||
icon = Material('tdmg/hud/killstreaks/carepackage.png'),
|
||||
kills = 5,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("package")
|
||||
end,
|
||||
},
|
||||
[5] = {
|
||||
name = COD.Language["killstreak_5"],
|
||||
desc = COD.Language["killstreak_desc_5"],
|
||||
icon = Material('tdmg/hud/killstreaks/counteruav.png'),
|
||||
kills = 5,
|
||||
sound = "tdmg/killstreaks/counter_uav_ready.wav",
|
||||
func = function(ply)
|
||||
COD:CounterUAVCall(ply)
|
||||
end,
|
||||
},
|
||||
[6] = {
|
||||
name = COD.Language["killstreak_6"],
|
||||
desc = COD.Language["killstreak_desc_6"],
|
||||
icon = Material('tdmg/hud/killstreaks/mine.png'),
|
||||
kills = 5,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
COD:SpawnCMine(ply)
|
||||
end,
|
||||
},
|
||||
[7] = {
|
||||
name = COD.Language["killstreak_7"],
|
||||
desc = COD.Language["killstreak_desc_7"],
|
||||
icon = Material('tdmg/hud/killstreaks/airstrike.png'),
|
||||
kills = 6,
|
||||
sound = "tdmg/killstreaks/airstrike_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("airstrike")
|
||||
end,
|
||||
},
|
||||
[8] = {
|
||||
name = COD.Language["killstreak_8"],
|
||||
desc = COD.Language["killstreak_desc_8"],
|
||||
icon = Material('tdmg/hud/killstreaks/k9.png'),
|
||||
kills = 6,
|
||||
sound = "tdmg/dog/bark (7).wav",
|
||||
func = function(ply)
|
||||
COD:CallK9(ply)
|
||||
COD:GiveKSAnn(8, ply)
|
||||
end,
|
||||
},
|
||||
[9] = {
|
||||
name = COD.Language["killstreak_9"],
|
||||
desc = COD.Language["killstreak_desc_9"],
|
||||
icon = Material('tdmg/hud/killstreaks/sentry.png'),
|
||||
kills = 7,
|
||||
sound = "tdmg/killstreaks/turret_ready.wav",
|
||||
func = function(ply)
|
||||
COD:SpawnSentry(ply)
|
||||
end,
|
||||
},
|
||||
[10] = {
|
||||
name = COD.Language["killstreak_10"],
|
||||
desc = COD.Language["killstreak_desc_10"],
|
||||
icon = Material('tdmg/hud/killstreaks/patrol.png'),
|
||||
kills = 7,
|
||||
sound = "tdmg/killstreaks/airstrike_ready.wav",
|
||||
func = function(ply)
|
||||
COD:AirPatrol(ply)
|
||||
COD:GiveKSAnn(10, ply)
|
||||
end,
|
||||
},
|
||||
[11] = {
|
||||
name = COD.Language["killstreak_11"],
|
||||
desc = COD.Language["killstreak_desc_11"],
|
||||
icon = Material('tdmg/hud/killstreaks/mortar.png'),
|
||||
kills = 7,
|
||||
sound = "tdmg/killstreaks/airstrike_ready2.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("mortar")
|
||||
end,
|
||||
},
|
||||
[12] = {
|
||||
name = COD.Language["killstreak_12"],
|
||||
desc = COD.Language["killstreak_desc_12"],
|
||||
icon = Material('tdmg/hud/killstreaks/strat.png'),
|
||||
kills = 8,
|
||||
sound = "tdmg/killstreaks/airstrike_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("strating_run")
|
||||
end,
|
||||
},
|
||||
[13] = {
|
||||
name = COD.Language["killstreak_13"],
|
||||
desc = COD.Language["killstreak_desc_13"],
|
||||
icon = Material('tdmg/hud/killstreaks/helicopter.png'),
|
||||
kills = 9,
|
||||
sound = "tdmg/killstreaks/heli_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("helicopter")
|
||||
end,
|
||||
},
|
||||
[14] = {
|
||||
name = COD.Language["killstreak_14"],
|
||||
desc = COD.Language["killstreak_desc_14"],
|
||||
icon = Material('tdmg/hud/killstreaks/harrier.png'),
|
||||
kills = 9,
|
||||
sound = "tdmg/killstreaks/harrier_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("harrier")
|
||||
end,
|
||||
},
|
||||
[15] = {
|
||||
name = COD.Language["killstreak_15"],
|
||||
desc = COD.Language["killstreak_desc_15"],
|
||||
icon = Material('tdmg/hud/killstreaks/backup.png'),
|
||||
kills = 9,
|
||||
sound = "tdmg/killstreaks/cover_ready.wav",
|
||||
func = function(ply)
|
||||
COD:CallReinforcment(ply)
|
||||
COD:GiveKSAnn(15, ply)
|
||||
end,
|
||||
},
|
||||
[16] = {
|
||||
name = COD.Language["killstreak_16"],
|
||||
desc = COD.Language["killstreak_desc_16"],
|
||||
icon = Material('tdmg/hud/killstreaks/stealth.png'),
|
||||
kills = 10,
|
||||
sound = "tdmg/killstreaks/airstrike_ready2.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("airstrike_line")
|
||||
end,
|
||||
},
|
||||
[17] = {
|
||||
name = COD.Language["killstreak_17"],
|
||||
desc = COD.Language["killstreak_desc_17"],
|
||||
icon = Material('tdmg/hud/killstreaks/heli.png'),
|
||||
kills = 10,
|
||||
sound = "tdmg/killstreaks/heli_ready.wav",
|
||||
func = function(ply)
|
||||
if not COD.DataTable["Enable_ManualControl_ChopperGunner"] then
|
||||
ply:GiveRadioWep("helicopterrun")
|
||||
else
|
||||
COD:HelicopterRun(ply, Vector())
|
||||
end
|
||||
end,
|
||||
},
|
||||
[18] = {
|
||||
name = COD.Language["killstreak_18"],
|
||||
desc = COD.Language["killstreak_desc_18"],
|
||||
icon = Material('tdmg/hud/killstreaks/muav.png'),
|
||||
kills = 12,
|
||||
sound = "tdmg/killstreaks/uav_ready.wav",
|
||||
func = function(ply)
|
||||
COD:UAVCall(ply:Team(), true)
|
||||
COD:GiveKSAnn(18, ply)
|
||||
end,
|
||||
},
|
||||
[19] = {
|
||||
name = COD.Language["killstreak_19"],
|
||||
desc = COD.Language["killstreak_desc_19"],
|
||||
icon = Material('tdmg/hud/killstreaks/airdrop.png'),
|
||||
kills = 12,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
ply:GiveRadioWep("emergencypackage")
|
||||
end,
|
||||
},
|
||||
[20] = {
|
||||
name = COD.Language["killstreak_20"],
|
||||
desc = COD.Language["killstreak_desc_20"],
|
||||
icon = Material('tdmg/hud/killstreaks/ac130.png'),
|
||||
kills = 15,
|
||||
sound = "tdmg/killstreaks/ac130_ready.wav",
|
||||
func = function(ply)
|
||||
COD:CallAC130(ply)
|
||||
COD:GiveKSAnn(20, ply)
|
||||
end,
|
||||
},
|
||||
[21] = {
|
||||
name = COD.Language["killstreak_21"],
|
||||
desc = COD.Language["killstreak_desc_21"],
|
||||
icon = Material('tdmg/hud/killstreaks/jugger.png'),
|
||||
kills = 15,
|
||||
sound = "tdmg/killstreaks/care_ready.wav",
|
||||
func = function(ply)
|
||||
COD:GiveJuggernaut(ply)
|
||||
COD:GiveKSAnn(21, ply)
|
||||
end,
|
||||
},
|
||||
[22] = {
|
||||
name = COD.Language["killstreak_22"],
|
||||
desc = COD.Language["killstreak_desc_22"],
|
||||
icon = Material('tdmg/hud/killstreaks/nuke.png'),
|
||||
kills = 25,
|
||||
sound = "tdmg/killstreaks/nuke_ready.wav",
|
||||
func = function(ply)
|
||||
COD:Nuke(ply:Team())
|
||||
COD:GiveKSAnn(22, ply)
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
COD.Perks = {
|
||||
["Type1"] = {
|
||||
[1] = {
|
||||
name = COD.Language["perk_1_1"],
|
||||
desc = COD.Language["perk_1_1_desc"],
|
||||
icon = Material("tdmg/hud/perks/explodedef.png"),
|
||||
},
|
||||
[2] = {
|
||||
name = COD.Language["perk_1_2"],
|
||||
desc = COD.Language["perk_1_2_desc"],
|
||||
icon = Material("tdmg/hud/perks/spectator.png"),
|
||||
},
|
||||
[3] = {
|
||||
name = COD.Language["perk_1_3"],
|
||||
desc = COD.Language["perk_1_3_desc"],
|
||||
icon = Material("tdmg/hud/perks/star.png"),
|
||||
},
|
||||
[4] = {
|
||||
name = COD.Language["perk_1_4"],
|
||||
desc = COD.Language["perk_1_4_desc"],
|
||||
icon = Material("tdmg/hud/perks/fastequip.png"),
|
||||
},
|
||||
},
|
||||
["Type2"] = {
|
||||
[1] = {
|
||||
name = COD.Language["perk_2_1"],
|
||||
desc = COD.Language["perk_2_1_desc"],
|
||||
icon = Material("tdmg/hud/perks/fasthealth.png"),
|
||||
},
|
||||
[2] = {
|
||||
name = COD.Language["perk_2_2"],
|
||||
desc = COD.Language["perk_2_2_desc"],
|
||||
icon = Material("tdmg/hud/perks/survival.png"),
|
||||
},
|
||||
[3] = {
|
||||
name = COD.Language["perk_2_3"],
|
||||
desc = COD.Language["perk_2_3_desc"],
|
||||
icon = Material("tdmg/hud/perks/ghost.png"),
|
||||
},
|
||||
[4] = {
|
||||
name = COD.Language["perk_2_4"],
|
||||
desc = COD.Language["perk_2_4_desc"],
|
||||
icon = Material("tdmg/hud/perks/invisiblity.png"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
COD.Loadout = {
|
||||
["Pistols"] = {
|
||||
[".357"] = {
|
||||
class = "mg_357",
|
||||
icon = Material("vgui/entities/mg_357"),
|
||||
},
|
||||
[".50 GS"] = {
|
||||
class = "mg_deagle",
|
||||
icon = Material("vgui/entities/mg_deagle"),
|
||||
},
|
||||
["M19"] = {
|
||||
class = "mg_p320",
|
||||
icon = Material("vgui/entities/mg_p320"),
|
||||
},
|
||||
["M1911"] = {
|
||||
class = "mg_m1911",
|
||||
icon = Material("vgui/entities/mg_m1911"),
|
||||
},
|
||||
["Renetti"] = {
|
||||
class = "mg_m9",
|
||||
icon = Material("vgui/entities/mg_m9"),
|
||||
},
|
||||
["Sykov"] = {
|
||||
class = "mg_makarov",
|
||||
icon = Material("vgui/entities/mg_makarov"),
|
||||
},
|
||||
["X16"] = {
|
||||
class = "mg_glock",
|
||||
icon = Material("vgui/entities/mg_glock"),
|
||||
},
|
||||
},
|
||||
["SMGs"] = {
|
||||
["AUG"] = {
|
||||
class = "mg_augolf",
|
||||
icon = Material("vgui/entities/mg_augolf"),
|
||||
},
|
||||
["CX-9"] = {
|
||||
class = "mg_secho",
|
||||
icon = Material("vgui/entities/mg_secho"),
|
||||
},
|
||||
["Fennec"] = {
|
||||
class = "mg_victor",
|
||||
icon = Material("vgui/entities/mg_victor"),
|
||||
},
|
||||
["ISO"] = {
|
||||
class = "mg_charlie9",
|
||||
icon = Material("vgui/entities/mg_charlie9"),
|
||||
},
|
||||
["MP5"] = {
|
||||
class = "mg_mpapa5",
|
||||
icon = Material("vgui/entities/mg_mpapa5"),
|
||||
},
|
||||
["MP7"] = {
|
||||
class = "mg_mpapa7",
|
||||
icon = Material("vgui/entities/mg_mpapa7"),
|
||||
},
|
||||
["P90"] = {
|
||||
class = "mg_papa90",
|
||||
icon = Material("vgui/entities/mg_papa90"),
|
||||
},
|
||||
["PP19 Bizon"] = {
|
||||
class = "mg_beta",
|
||||
icon = Material("vgui/entities/mg_beta"),
|
||||
},
|
||||
["Striker 45"] = {
|
||||
class = "mg_smgolf45",
|
||||
icon = Material("vgui/entities/mg_smgolf45"),
|
||||
},
|
||||
["UZI"] = {
|
||||
class = "mg_uzulu",
|
||||
icon = Material("vgui/entities/mg_uzulu"),
|
||||
},
|
||||
},
|
||||
["Assault Rifles"] = {
|
||||
["AK-47"] = {
|
||||
class = "mg_akilo47",
|
||||
icon = Material("vgui/entities/mg_akilo47"),
|
||||
},
|
||||
["AN-94"] = {
|
||||
class = "mg_anovember94",
|
||||
icon = Material("vgui/entities/mg_anovember94"),
|
||||
},
|
||||
["AS-VAL"] = {
|
||||
class = "mg_valpha",
|
||||
icon = Material("vgui/entities/mg_valpha"),
|
||||
},
|
||||
["CR-56 AMAX"] = {
|
||||
class = "mg_galima",
|
||||
icon = Material("vgui/entities/mg_galima"),
|
||||
},
|
||||
["FAL"] = {
|
||||
class = "mg_falima",
|
||||
icon = Material("vgui/entities/mg_falima"),
|
||||
},
|
||||
["FN SCAR 17"] = {
|
||||
class = "mg_scharlie",
|
||||
icon = Material("vgui/entities/mg_scharlie"),
|
||||
},
|
||||
["FR 5.56"] = {
|
||||
class = "mg_falpha",
|
||||
icon = Material("vgui/entities/mg_falpha"),
|
||||
},
|
||||
["Grau 5.56"] = {
|
||||
class = "mg_sierra552",
|
||||
icon = Material("vgui/entities/mg_sierra552"),
|
||||
},
|
||||
["Kilo 141"] = {
|
||||
class = "mg_kilo433",
|
||||
icon = Material("vgui/entities/mg_kilo433"),
|
||||
},
|
||||
["M13"] = {
|
||||
class = "mg_mcharlie",
|
||||
icon = Material("vgui/entities/mg_mcharlie"),
|
||||
},
|
||||
["M4A1"] = {
|
||||
class = "mg_mike4",
|
||||
icon = Material("vgui/entities/mg_mike4"),
|
||||
},
|
||||
["Oden"] = {
|
||||
class = "mg_asierra12",
|
||||
icon = Material("vgui/entities/mg_asierra12"),
|
||||
},
|
||||
["RAM-7"] = {
|
||||
class = "mg_tango21",
|
||||
icon = Material("vgui/entities/mg_tango21"),
|
||||
},
|
||||
},
|
||||
["LMGs"] = {
|
||||
["Bruen MK9"] = {
|
||||
class = "mg_mkilo3",
|
||||
icon = Material("vgui/entities/mg_mkilo3"),
|
||||
},
|
||||
["FiNN LMG"] = {
|
||||
class = "mg_sierrax",
|
||||
icon = Material("vgui/entities/mg_sierrax"),
|
||||
},
|
||||
["Holger-26"] = {
|
||||
class = "mg_mgolf36",
|
||||
icon = Material("vgui/entities/mg_mgolf36"),
|
||||
},
|
||||
["M91"] = {
|
||||
class = "mg_kilo121",
|
||||
icon = Material("vgui/entities/mg_kilo121"),
|
||||
},
|
||||
["MG34"] = {
|
||||
class = "mg_mgolf34",
|
||||
icon = Material("vgui/entities/mg_mgolf34"),
|
||||
},
|
||||
["PKM"] = {
|
||||
class = "mg_pkilo",
|
||||
icon = Material("vgui/entities/mg_pkilo"),
|
||||
},
|
||||
["RAAL MG"] = {
|
||||
class = "mg_slima",
|
||||
icon = Material("vgui/entities/mg_slima"),
|
||||
},
|
||||
["SA87"] = {
|
||||
class = "mg_lima86",
|
||||
icon = Material("vgui/entities/mg_lima86"),
|
||||
},
|
||||
},
|
||||
["Sniper Rifles"] = {
|
||||
["AX-50"] = {
|
||||
class = "mg_alpha50",
|
||||
icon = Material("vgui/entities/mg_alpha50"),
|
||||
},
|
||||
["Dragunov"] = {
|
||||
class = "mg_delta",
|
||||
icon = Material("vgui/entities/mg_delta"),
|
||||
},
|
||||
["HDR"] = {
|
||||
class = "mg_hdromeo",
|
||||
icon = Material("vgui/entities/mg_hdromeo"),
|
||||
},
|
||||
["Rytec AMR"] = {
|
||||
class = "mg_xmike109",
|
||||
icon = Material("vgui/entities/mg_xmike109"),
|
||||
},
|
||||
},
|
||||
["Marksman Rifles"] = {
|
||||
["Crossbow"] = {
|
||||
class = "mg_crossbow",
|
||||
icon = Material("vgui/entities/mg_crossbow"),
|
||||
},
|
||||
["EBR-14"] = {
|
||||
class = "mg_mike14",
|
||||
icon = Material("vgui/entities/mg_mike14"),
|
||||
},
|
||||
["Kar98k"] = {
|
||||
class = "mg_kilo98",
|
||||
icon = Material("vgui/entities/mg_kilo98"),
|
||||
},
|
||||
["MK2 Carabine"] = {
|
||||
class = "mg_sbeta",
|
||||
icon = Material("vgui/entities/mg_sbeta"),
|
||||
},
|
||||
["SKS"] = {
|
||||
class = "mg_sksierra",
|
||||
icon = Material("vgui/entities/mg_sksierra"),
|
||||
},
|
||||
["SPR"] = {
|
||||
class = "mg_romeo700",
|
||||
icon = Material("vgui/entities/mg_romeo700"),
|
||||
},
|
||||
},
|
||||
["Shotguns"] = {
|
||||
["725"] = {
|
||||
class = "mg_charlie725",
|
||||
icon = Material("vgui/entities/mg_charlie725"),
|
||||
},
|
||||
["Jak-12"] = {
|
||||
class = "mg_aalpha12",
|
||||
icon = Material("vgui/entities/mg_aalpha12"),
|
||||
},
|
||||
["Model 680"] = {
|
||||
class = "mg_romeo870",
|
||||
icon = Material("vgui/entities/mg_romeo870"),
|
||||
},
|
||||
["Origin-12"] = {
|
||||
class = "mg_oscar12",
|
||||
icon = Material("vgui/entities/mg_oscar12"),
|
||||
},
|
||||
["R9-0"] = {
|
||||
class = "mg_dpapa12",
|
||||
icon = Material("vgui/entities/mg_dpapa12"),
|
||||
},
|
||||
["VLK Rogue"] = {
|
||||
class = "mg_mike26",
|
||||
icon = Material("vgui/entities/mg_mike26"),
|
||||
},
|
||||
},
|
||||
["Others"] = {
|
||||
["Combat Knife"] = {
|
||||
class = "tdm_infection_knife",
|
||||
icon = Material("vgui/spawnicons/icon_cac_weapon_me_soscar_knife"),
|
||||
},
|
||||
},
|
||||
}
|
||||
3619
gamemodes/cod_custom/gamemode/takedowns.lua
Normal file
3619
gamemodes/cod_custom/gamemode/takedowns.lua
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user