zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/cl_net.lua

469 lines
15 KiB
Lua
Raw Normal View History

local surface_PlaySound = surface.PlaySound
local DamageFloaters = CreateClientConVar("zs_damagefloaters", "1", true, false):GetBool()
cvars.AddChangeCallback("zs_damagefloaters", function(cvar, oldvalue, newvalue)
DamageFloaters = newvalue ~= "0"
end)
local M_Player = FindMetaTable("Player")
local P_Team = M_Player.Team
local function AltSelItemUpd()
local activeweapon = MySelf:GetActiveWeapon()
if not activeweapon or not activeweapon:IsValid() then return end
local actwclass = activeweapon:GetClass()
GAMEMODE.HumanMenuPanel.SelectedItemLabel:SetText(weapons.Get(actwclass).PrintName)
end
net.Receive("zs_legdamage", function(length)
MySelf.LegDamage = net.ReadFloat()
end)
net.Receive("zs_armdamage", function(length)
MySelf.ArmDamage = net.ReadFloat()
end)
net.Receive("zs_nextboss", function(length)
GAMEMODE.NextBossZombie = net.ReadEntity()
GAMEMODE.NextBossZombieClass = GAMEMODE.ZombieClasses[net.ReadUInt(8)].Name
end)
net.Receive("zs_zvols", function(length)
local volunteers = {}
local count = net.ReadUInt(8)
for i=1, count do
volunteers[i] = net.ReadEntity()
end
GAMEMODE.ZombieVolunteers = volunteers
end)
net.Receive("zs_dmg", function(length)
local damage = net.ReadUInt(16)
local pos = net.ReadVector()
if DamageFloaters then
local effectdata = EffectData()
effectdata:SetOrigin(pos)
effectdata:SetMagnitude(damage)
effectdata:SetScale(0)
util.Effect("damagenumber", effectdata)
end
end)
net.Receive("zs_dmg_prop", function(length)
local damage = net.ReadUInt(16)
local pos = net.ReadVector()
if DamageFloaters then
local effectdata = EffectData()
effectdata:SetOrigin(pos)
effectdata:SetMagnitude(damage)
effectdata:SetScale(1)
util.Effect("damagenumber", effectdata)
end
end)
net.Receive("zs_lifestats", function(length)
local barricadedamage = net.ReadUInt(16)
local humandamage = net.ReadUInt(16)
local brainseaten = net.ReadUInt(8)
GAMEMODE.LifeStatsEndTime = CurTime() + GAMEMODE.LifeStatsLifeTime
GAMEMODE.LifeStatsBarricadeDamage = barricadedamage
GAMEMODE.LifeStatsHumanDamage = humandamage
GAMEMODE.LifeStatsBrainsEaten = brainseaten
end)
net.Receive("zs_lifestatsbd", function(length)
local barricadedamage = net.ReadUInt(16)
GAMEMODE.LifeStatsEndTime = CurTime() + GAMEMODE.LifeStatsLifeTime
GAMEMODE.LifeStatsBarricadeDamage = barricadedamage
end)
net.Receive("zs_lifestatshd", function(length)
local humandamage = net.ReadUInt(16)
GAMEMODE.LifeStatsEndTime = CurTime() + GAMEMODE.LifeStatsLifeTime
GAMEMODE.LifeStatsHumanDamage = humandamage
end)
net.Receive("zs_lifestatsbe", function(length)
local brainseaten = net.ReadUInt(8)
GAMEMODE.LifeStatsEndTime = CurTime() + GAMEMODE.LifeStatsLifeTime
GAMEMODE.LifeStatsBrainsEaten = brainseaten
end)
net.Receive("zs_honmention", function(length)
local pl = net.ReadEntity()
local mentionid = net.ReadUInt(8)
local etc = net.ReadInt(32)
if pl:IsValid() then
gamemode.Call("AddHonorableMention", pl, mentionid, etc)
end
end)
net.Receive("zs_wavestart", function(length)
local wave = net.ReadInt(16)
local time = net.ReadFloat()
gamemode.Call("SetWave", wave)
gamemode.Call("SetWaveEnd", time)
if GAMEMODE.ZombieEscape then
GAMEMODE:CenterNotify(COLOR_RED, {font = "ZSHUDFont"}, translate.Get("escape_from_the_zombies"))
elseif wave == GAMEMODE:GetNumberOfWaves() then
GAMEMODE:CenterNotify({killicon = "default"}, {font = "ZSHUDFont"}, " ", COLOR_RED, translate.Get("final_wave"), {killicon = "default"})
GAMEMODE:CenterNotify(translate.Get("final_wave_sub"))
else
GAMEMODE:CenterNotify({killicon = "default"}, {font = "ZSHUDFont"}, " ", COLOR_RED, translate.Format("wave_x_has_begun", wave), {killicon = "default"})
if wave == 1 and GAMEMODE:GetUseSigils() then
GAMEMODE:CenterNotify(translate.Format("x_sigils_appeared", GAMEMODE.MaxSigils))
end
end
surface_PlaySound("ambient/creatures/town_zombie_call1.wav")
end)
net.Receive("zs_classunlock", function(length)
GAMEMODE:CenterNotify(COLOR_GREEN, translate.Format("x_unlocked", net.ReadString()))
end)
net.Receive("zs_waveend", function(length)
local wave = net.ReadInt(16)
local time = net.ReadFloat()
gamemode.Call("SetWaveStart", time)
if wave < GAMEMODE:GetNumberOfWaves() and wave > 0 then
GAMEMODE:CenterNotify(COLOR_RED, {font = "ZSHUDFont"}, translate.Format("wave_x_is_over", wave))
GAMEMODE:CenterNotify(translate.Get("wave_x_is_over_sub"))
if MySelf:IsValid() and P_Team(MySelf) == TEAM_HUMAN then
if MySelf:GetZSSPRemaining() > 0 then
GAMEMODE:CenterNotify(translate.Format("unspent_skill_points_press_x", input.LookupBinding("gm_showspare1") or "F3"))
end
if GAMEMODE.EndWavePointsBonus > 0 then
local pointsbonus = GAMEMODE.EndWavePointsBonus + (GAMEMODE:GetWave() - 1) * GAMEMODE.EndWavePointsBonusPerWave + (MySelf.EndWavePointsExtra or 0)
if not MySelf.Scourer then
GAMEMODE:CenterNotify(COLOR_CYAN, translate.Format("points_for_surviving", pointsbonus))
else
GAMEMODE:CenterNotify(COLOR_ORANGE, translate.Format("scrap_for_surviving", pointsbonus))
end
end
end
surface_PlaySound("ambient/atmosphere/cave_hit"..math.random(6)..".wav")
end
end)
net.Receive("zs_gamestate", function(length)
local wave = net.ReadInt(16)
local wavestart = net.ReadFloat()
local waveend = net.ReadFloat()
gamemode.Call("SetWave", wave)
gamemode.Call("SetWaveStart", wavestart)
gamemode.Call("SetWaveEnd", waveend)
end)
net.Receive("zs_boss_spawned", function(length)
local ent = net.ReadEntity()
local classindex = net.ReadUInt(8)
local classtbl = GAMEMODE.ZombieClasses[classindex]
local ki = {killicon = classtbl.SWEP}
local kid = {killicon = "default"}
if ent == MySelf and ent:IsValid() then
GAMEMODE:CenterNotify(ki, " ", COLOR_RED, translate.Format("you_are_x", translate.Get(classtbl.TranslationName)), ki)
elseif ent:IsValid() and P_Team(MySelf) == TEAM_UNDEAD then
GAMEMODE:CenterNotify(ki, " ", COLOR_RED, translate.Format("x_has_risen_as_y", ent:Name(), translate.Get(classtbl.TranslationName)), ki)
else
GAMEMODE:CenterNotify(kid, " ", COLOR_RED, translate.Get("x_has_risen"), kid)
end
if MySelf:IsValid() then
MySelf:EmitSound(string.format("npc/zombie_poison/pz_alert%d.wav", math.random(1, 2)), 0, math.random(95, 105))
end
end)
net.Receive("zs_boss_slain", function(length)
local ent = net.ReadEntity()
local classindex = net.ReadUInt(8)
local classtbl = GAMEMODE.ZombieClasses[classindex]
local ki = {killicon = classtbl.SWEP}
if ent:IsValid() then
GAMEMODE:CenterNotify(ki, " ", COLOR_YELLOW, translate.Format("x_has_been_slain_as_y", ent:Name(), translate.Get(classtbl.TranslationName)), ki)
end
if MySelf:IsValid() then
MySelf:EmitSound("ambient/atmosphere/cave_hit4.wav", 0, 150)
end
end)
net.Receive("zs_classunlockstate", function(length)
local clstr = net.ReadInt(8)
local class = GAMEMODE.ZombieClasses[clstr]
local unlocked = net.ReadBool()
class.Locked = not unlocked
class.Unlocked = unlocked
end)
net.Receive("zs_centernotify", function(length)
local tab = net.ReadTable()
GAMEMODE:CenterNotify(unpack(tab))
end)
net.Receive("zs_topnotify", function(length)
local tab = net.ReadTable()
GAMEMODE:TopNotify(unpack(tab))
end)
net.Receive("zs_survivor", function(length)
local ent = net.ReadEntity()
if ent:IsValidPlayer() then
GAMEMODE:TopNotify(ent, " ", translate.Get("has_survived"))
if ent == MySelf then
util.WhiteOut(3)
end
end
end)
net.Receive("zs_lasthuman", function(length)
local pl = net.ReadEntity()
gamemode.Call("LastHuman", pl)
end)
net.Receive("zs_gamemodecall", function(length)
gamemode.Call(net.ReadString())
end)
net.Receive("zs_lasthumanpos", function(length)
GAMEMODE.LastHumanPosition = net.ReadVector()
end)
net.Receive("zs_endround", function(length)
local winner = net.ReadUInt(8)
local nextmap = net.ReadString()
gamemode.Call("EndRound", winner, nextmap)
end)
net.Receive("zs_healother", function(length)
if net.ReadBool() then
gamemode.Call("HealedOtherPlayer", net.ReadEntity(), net.ReadFloat())
else
GAMEMODE:CenterNotify({killicon = "weapon_zs_medicalkit"}, " ", COLOR_GREEN, translate.Format("healed_x_for_y", net.ReadEntity():Name(), net.ReadFloat()))
end
end)
net.Receive("zs_repairobject", function(length)
gamemode.Call("RepairedObject", net.ReadEntity(), net.ReadFloat())
end)
net.Receive("zs_commission", function(length)
gamemode.Call("ReceivedCommission", net.ReadEntity(), net.ReadEntity(), net.ReadFloat())
end)
net.Receive("zs_sigilcorrupted", function(length)
local corrupted = net.ReadUInt(8)
LastSigilCorrupted = CurTime()
if MySelf:IsValid() then
local maxsigils = GAMEMODE:NumSigils()
local winddown = CreateSound(MySelf, "ambient/levels/labs/teleport_winddown1.wav")
winddown:PlayEx(1, 120)
timer.Simple(1.25, function()
MySelf:EmitSound("ambient/levels/labs/machine_stop1.wav", 75, 80)
MySelf:EmitSound("ambient/atmosphere/hole_hit5.wav", 75, 70)
end)
timer.Simple(1.5, function()
winddown:Stop()
MySelf:EmitSound("zombiesurvival/eyeflash.ogg", 75, 100)
end)
if corrupted == maxsigils then
GAMEMODE:CenterNotify({killicon = "default"}, {font = "ZSHUDFontSmall"}, COLOR_RED, translate.Get("sigil_corrupted_last"), {killicon = "default"})
else
GAMEMODE:CenterNotify(COLOR_RED, {font = "ZSHUDFontSmall"}, translate.Get("sigil_corrupted"))
--GAMEMODE:CenterNotify(COLOR_RED, translate.Format("sigil_corrupted_x_remain", maxsigils - corrupted))
end
end
end)
net.Receive("zs_sigiluncorrupted", function(length)
--local corrupted = net.ReadUInt(8)
LastSigilUncorrupted = CurTime()
if MySelf:IsValid() then
MySelf:EmitSound("ambient/levels/labs/teleport_preblast_suckin1.wav", 75, 180)
timer.Simple(1.25, function()
MySelf:EmitSound("ambient/machines/teleport1.wav", 75, 60, 0.3)
end)
GAMEMODE:CenterNotify(COLOR_GREEN, {font = "ZSHUDFontSmall"}, translate.Get("sigil_uncorrupted"))
end
end)
net.Receive("zs_ammopickup", function(length)
local amount = net.ReadUInt(16)
local ammotype = net.ReadString()
local ico = GAMEMODE.AmmoIcons[ammotype] or "weapon_zs_resupplybox"
ammotype = GAMEMODE.AmmoNames[ammotype] or ammotype
GAMEMODE:CenterNotify({killicon = ico}, " ", COLOR_GREEN, translate.Format("obtained_x_y_ammo", amount, ammotype))
end)
net.Receive("zs_ammogive", function(length)
local amount = net.ReadUInt(16)
local ammotype = net.ReadString()
local ent = net.ReadEntity()
if not ent:IsValidPlayer() then return end
local ico = GAMEMODE.AmmoIcons[ammotype] or "weapon_zs_resupplybox"
ammotype = GAMEMODE.AmmoNames[ammotype] or ammotype
GAMEMODE:CenterNotify({killicon = ico}, " ", COLOR_GREEN, translate.Format("gave_x_y_ammo_to_z", amount, ammotype, ent:Name()))
end)
net.Receive("zs_ammogiven", function(length)
local amount = net.ReadUInt(16)
local ammotype = net.ReadString()
local ent = net.ReadEntity()
if not ent:IsValidPlayer() then return end
local ico = GAMEMODE.AmmoIcons[ammotype] or "weapon_zs_resupplybox"
ammotype = GAMEMODE.AmmoNames[ammotype] or ammotype
GAMEMODE:CenterNotify({killicon = ico}, " ", COLOR_GREEN, translate.Format("obtained_x_y_ammo_from_z", amount, ammotype, ent:Name()))
end)
net.Receive("zs_deployablelost", function(length)
local deploy = net.ReadString()
local class = net.ReadString()
GAMEMODE:CenterNotify({killicon = class}, " ", COLOR_RED, translate.Format("deployable_lost", deploy))
end)
net.Receive("zs_deployableclaim", function(length)
local deploy = net.ReadString()
local class = net.ReadString()
GAMEMODE:CenterNotify({killicon = class}, " ", COLOR_LBLUE, translate.Format("deployable_claimed", deploy))
end)
net.Receive("zs_deployableout", function(length)
local deploy = net.ReadString()
local class = net.ReadString()
GAMEMODE:CenterNotify({killicon = class}, " ", COLOR_RED, translate.Format("ran_out_of_ammo", deploy))
end)
net.Receive("zs_trinketrecharged", function(length)
local trinket = net.ReadString()
MySelf:EmitSound("buttons/button3.wav", 75, 50)
GAMEMODE:CenterNotify({killicon = "weapon_zs_trinket"}, " ", COLOR_RORANGE, translate.Format("trinket_recharged", trinket))
end)
net.Receive("zs_trinketconsumed", function(length)
local trinket = net.ReadString()
MySelf:EmitSound("buttons/button3.wav", 75, 50)
GAMEMODE:CenterNotify({killicon = "weapon_zs_trinket"}, " ", COLOR_RORANGE, translate.Format("trinket_consumed", trinket))
end)
net.Receive("zs_invitem", function(length)
local invitemt = net.ReadString()
local inviname = GAMEMODE.ZSInventoryItemData[invitemt].PrintName
local category = GAMEMODE:GetInventoryItemType(invitemt)
surface.PlaySound("items/ammo_pickup.wav")
GAMEMODE:CenterNotify({killicon = category == INVCAT_TRINKETS and "weapon_zs_trinket" or "weapon_zs_craftables"}, " ", COLOR_RORANGE, translate.Format("obtained_a_inv", inviname))
end)
net.Receive("zs_invgiven", function(length)
local invitemt = net.ReadString()
local inviname = GAMEMODE.ZSInventoryItemData[invitemt].PrintName
local category = GAMEMODE:GetInventoryItemType(invitemt)
local ent = net.ReadEntity()
if not ent:IsValidPlayer() then return end
GAMEMODE:CenterNotify({killicon = category == INVCAT_TRINKETS and "weapon_zs_trinket" or "weapon_zs_craftables"}, " ", COLOR_RORANGE, translate.Format("obtained_inv_item_from_z", inviname, ent:Name()))
end)
net.Receive("zs_healby", function(length)
local amount = net.ReadFloat()
local ent = net.ReadEntity()
if not ent:IsValidPlayer() then return end
GAMEMODE:CenterNotify({killicon = "weapon_zs_medicalkit"}, " ", COLOR_GREEN, translate.Format("healed_x_by_y", ent:Name(), amount))
end)
net.Receive("zs_buffby", function(length)
local ent = net.ReadEntity()
local buff = net.ReadString()
if not ent:IsValidPlayer() then return end
GAMEMODE:CenterNotify({killicon = "weapon_zs_medicgun"}, " ", COLOR_GREEN, translate.Format("buffed_x_with_y", ent:Name(), buff))
end)
net.Receive("zs_buffwith", function(length)
local ent = net.ReadEntity()
local buff = net.ReadString()
if not ent:IsValidPlayer() then return end
GAMEMODE:CenterNotify({killicon = "weapon_zs_medicgun"}, " ", COLOR_GREEN, translate.Format("buffed_x_with_a_y", ent:Name(), buff))
end)
net.Receive("zs_nailremoved", function(length)
local ent = net.ReadEntity()
if not ent:IsValidPlayer() then return end
GAMEMODE:CenterNotify({killicon = "weapon_zs_hammer"}, " ", COLOR_RED, translate.Format("removed_your_nail", ent:Name()))
end)
net.Receive("zs_currentround", function(length)
GAMEMODE.CurrentRound = net.ReadUInt(6)
end)
net.Receive("zs_updatealtselwep", function(length)
if MySelf:Alive() and P_Team(MySelf) == TEAM_HUMAN and GAMEMODE.HumanMenuPanel and GAMEMODE.HumanMenuPanel:IsValid() and not GAMEMODE.InventoryMenu.SelInv then
timer.Simple(0.25, AltSelItemUpd)
end
end)
net.Receive("zs_nestbuilt", function(length)
if GAMEMODE.ZSpawnMenu and GAMEMODE.ZSpawnMenu:IsValid() then
GAMEMODE.ZSpawnMenu:RefreshContents()
end
end)