diff options
Diffstat (limited to 'gamemode/cl_init.lua')
| -rw-r--r-- | gamemode/cl_init.lua | 842 |
1 files changed, 421 insertions, 421 deletions
diff --git a/gamemode/cl_init.lua b/gamemode/cl_init.lua index e9ba2a8..1933025 100644 --- a/gamemode/cl_init.lua +++ b/gamemode/cl_init.lua @@ -38,7 +38,7 @@ CV_Density = CreateClientConVar( "cl_redead_rain_density", "1.0", true, false ) CV_NoobHelp = CreateClientConVar( "cl_redead_noob_help", "1", true, false ) function GM:Initialize() - + WindVector = Vector( math.random(-10,10), math.random(-10,10), 0 ) StaticPos = Vector(0,0,0) ViewWobble = 0 @@ -52,7 +52,7 @@ function GM:Initialize() DeathScreenScale = 0 HeartBeat = 0 JumpTimer = 0 - + surface.CreateFont ( "DeathFont", { size = 34, weight = 200, antialias = true, additive = true, font = "Graffiare" } ) surface.CreateFont ( "AmmoFont", { size = 28, weight = 200, antialias = true, additive = true, font = "Graffiare" } ) surface.CreateFont ( "CashFont", { size = 22, weight = 200, antialias = true, additive = true, font = "Graffiare" } ) @@ -70,25 +70,25 @@ function GM:Initialize() //matArm = Material( "radbox/radar_arm" ) //matArrow = Material( "radbox/radar_arrow" ) //matNoise = Material( "radbox/nvg_noise" ) - + matHealth = Material( "radbox/img_health" ) matStamina = Material( "radbox/img_stamina" ) matBlood = Material( "radbox/img_blood" ) matRadiation = Material( "radbox/img_radiation" ) matInfection = Material( "radbox/img_infect" ) - + GAMEMODE:WeatherInit() - + end function GM:GetHelpHTML() local str = "" - + for k,v in pairs( GAMEMODE.HelpText ) do - + str = str .. v - + end return str @@ -99,13 +99,13 @@ end function GM:ShowHelp() if IsValid( self.HelpFrame ) then return end - + self.HelpFrame = vgui.Create( "HelpMenu" ) self.HelpFrame:SetSize( 415, 370 ) self.HelpFrame:Center() self.HelpFrame:MakePopup() self.HelpFrame:SetKeyboardInputEnabled( false ) - + end function GM:ShowClasses() @@ -114,7 +114,7 @@ function GM:ShowClasses() classmenu:SetSize( 415, 475 ) classmenu:Center() classmenu:MakePopup()]] - + GAMEMODE:ShowHelp() end @@ -122,7 +122,7 @@ end function GM:ShowZombieClasses() if IsValid( self.Classes ) then return end - + self.Classes = vgui.Create( "ZombieClassPicker" ) self.Classes:SetSize( 415, 475 ) self.Classes:Center() @@ -133,21 +133,21 @@ end function GM:HUDShouldDraw( name ) if GAMEMODE.ScoreboardVisible then return false end - + for k, v in pairs{ "CHudHealth", "CHudBattery", "CHudAmmo", "CHudSecondaryAmmo", "CHudSuitPower", "CHudPoisonDamageIndicator", "CHudCrosshair" } do - - if name == v then return false end - - end - + + if name == v then return false end + + end + if name == "CHudDamageIndicator" and not LocalPlayer():Alive() then - + return false - + end - + return true - + end function GM:Think() @@ -157,178 +157,178 @@ function GM:Think() GAMEMODE:GoreRagdolls() GAMEMODE:HUDTraces() //GAMEMODE:SpawnRagdolls() - + if GetGlobalBool( "GameOver", false ) and not EndScreenShown then - + EndScreenShown = true - + local endscreen = vgui.Create( "EndGame" ) endscreen:SetPos(0,0) - + end if IsValid( LocalPlayer() ) and LocalPlayer():Alive() and not StartMenuShown then - + StartMenuShown = true GAMEMODE:ShowClasses() - + //player_manager.SetPlayerClass( LocalPlayer(), "player_base" ) - + end if not LocalPlayer():Alive() and GAMEMODE:ElementsVisible() then - + GAMEMODE:ClearElements() - + gui.EnableScreenClicker( false ) - + end - + if LocalPlayer():Team() != TEAM_ARMY then return end if LocalPlayer():Alive() and HeartBeat < CurTime() and ( LocalPlayer():GetNWBool( "Bleeding", false ) or LocalPlayer():Health() < 50 ) then - + local scale = LocalPlayer():Health() / 100 HeartBeat = CurTime() + 0.5 + scale * 1.5 - + LocalPlayer():EmitSound( Sound( "nuke/heartbeat.wav" ), 100, 150 - scale * 50 ) - + end - + --[[if Inv_HasItem( "models/gibs/shield_scanner_gib1.mdl" ) then - + MaxDist = 2200 ArmSpeed = 90 - + else - + MaxDist = 1500 ArmSpeed = 70 - + end if ( NextRadarThink or 0 ) < CurTime() then - + NextRadarThink = CurTime() + 1.5 - - RadarEntTable = team.GetPlayers( TEAM_ZOMBIES ) + + RadarEntTable = team.GetPlayers( TEAM_ZOMBIES ) RadarEntTable = table.Add( RadarEntTable, team.GetPlayers( TEAM_ARMY ) ) RadarEntTable = table.Add( RadarEntTable, ents.FindByClass( "npc_*" ) ) RadarEntTable = table.Add( RadarEntTable, ents.FindByClass( "sent_lootbag" ) ) RadarEntTable = table.Add( RadarEntTable, ents.FindByClass( "point_stash" ) ) RadarEntTable = table.Add( RadarEntTable, ents.FindByClass( "sent_supplycrate" ) ) RadarEntTable = table.Add( RadarEntTable, ents.FindByClass( "sent_antidote" ) ) - + end - + local aimvec = LocalPlayer():GetAimVector() - + for k,v in pairs( RadarEntTable ) do - + if not IsValid( v ) then break end - + local dirp = ( LocalPlayer():GetPos() - v:GetPos() ):GetNormal() local aimvec = LocalPlayer():GetAimVector() aimvec.z = dirp.z - + local dir = ( aimvec:Angle() + Angle( 0, ArmAngle + 90, 0 ) ):Forward() local dot = dir:Dot( dirp ) local diff = ( v:GetPos() - LocalPlayer():GetPos() ) - + local close = math.sqrt( diff.x * diff.x + diff.y * diff.y ) < MaxDist * FadeDist if ( !v:IsPlayer() or ( v:Alive() and ( v != LocalPlayer() and ( v:Team() == LocalPlayer():Team() or close ) ) ) ) and !IsOnRadar( v ) and ( dot > 0.99 or close ) then - + local pos = v:GetPos() local color = Color( 0, 255, 0 ) - + if not v:IsPlayer() then - + color = Color( 80, 150, 255 ) - + if v:GetClass() == "sent_antidote" or v:GetClass() == "sent_supplycrate" then - + color = Color( 255, 255, 255 ) - + elseif v:IsNPC() then - + if v:GetClass() == "npc_scientist" then - + color = Color( 200, 200, 0 ) - + else - + color = Color( 255, 80, 80 ) - + end - + end - + elseif v:IsPlayer() and v:Team() != LocalPlayer():Team() then - + color = Color( 255, 80, 80 ) - + end - + local dietime = CurTime() + BlipTime - + if close then - + dietime = -1 - + end - + table.insert( PosTable, { Ent = v, Pos = pos, DieTime = dietime, Color = color } ) - + end - + end]] - + end function GM:FadeRagdolls() for k,v in pairs( ents.FindByClass( "class C_ClientRagdoll" ) ) do - + if v.Time and v.Time < CurTime() then - + //v:SetColor( Color( 255, 255, 255, v.Alpha ) ) //v.Alpha = math.Approach( v.Alpha, 0, -2 ) - + //if v.Alpha <= 0 then //v:Remove() //end - + v:Remove() - + elseif not v.Time then - + v.Time = CurTime() + 12 //v.Alpha = 255 - + end - + end - + end function GM:GetNearestEnt( pos, dist, tbl ) - local closest + local closest local best = 9000 for k,v in pairs( tbl ) do - + local newdist = v:GetPos():Distance( pos ) - + if newdist < dist and newdist < best then - + closest = v - + end - + end - + return closest end @@ -343,205 +343,205 @@ function GM:GoreRagdolls() tbl = table.Add( tbl, ents.FindByClass( "class C_ClientRagdoll" ) ) for k,v in pairs( tbl ) do - + if not v.Gore and table.HasValue( GAMEMODE.Corpses, string.lower( v:GetModel() ) ) then - + v.Gore = true v:SetMaterial( "models/flesh" ) - + local phys = v:GetPhysicsObject() - + if IsValid( phys ) then - + phys:ApplyForceCenter( VectorRand() * 5000 ) - + end - + elseif not LocalPlayer():Alive() and IsValid( LocalPlayer():GetRagdollEntity() ) and LocalPlayer():GetRagdollEntity() == v and not v.Slowed and not table.HasValue( GAMEMODE.Corpses, string.lower( v:GetModel() ) ) then - + v.Slowed = true - + local phys = v:GetPhysicsObject() - + if IsValid( phys ) then - + local count = LocalPlayer():GetRagdollEntity():GetPhysicsObjectCount() - + for i=0, count do - + local limb = v:GetPhysicsObjectNum( i ) - + if IsValid( limb ) then - + limb:SetDamping( 5, 0 ) limb:ApplyForceCenter( VectorRand() * 50 ) - + end - + end - + phys:Wake() - + end - + end - + if not v.Randomized then - + v.Randomized = true - - if math.random(1,2) == 1 then - + + if math.random(1,2) == 1 then + local phys = v:GetPhysicsObject() - + if IsValid( phys ) then - + for i=1, math.random(2,6) do - + local count = v:GetPhysicsObjectCount() local limb = v:GetPhysicsObjectNum( math.random( 0, count ) ) - + if IsValid( limb ) then - + limb:SetDamping( math.Rand( 0, 2 ), math.Rand( 0, 5 ) ) limb:ApplyForceCenter( VectorRand() * 75 ) - + end - + phys:Wake() - + end - + end - + end - + end - + end - + for c,d in pairs( HeadlessTbl ) do - + local ent = GAMEMODE:GetNearestEnt( d.Pos, 50, tbl ) - + if IsValid( ent ) and not ent.IsHeadless then - - ent:ManipulateBoneScale( 6, Vector( 0.01, 0.01, 0.01 ) ) - ent:ManipulateBoneScale( 6, Vector( 0.001, 0.001, 0.001 ) ) - + + ent:ManipulateBoneScale( 6, Vector( 0.01, 0.01, 0.01 ) ) + ent:ManipulateBoneScale( 6, Vector( 0.001, 0.001, 0.001 ) ) + ent.IsHeadless = true - + table.remove( HeadlessTbl, c ) - + break - + elseif d.Time < CurTime() then - + table.remove( HeadlessTbl, c ) - + break - + end - + end - + for c,d in pairs( BurnTbl ) do - + local ent = GAMEMODE:GetNearestEnt( d.Pos, 50, tbl ) - + if IsValid( ent ) and not ent.IsBurnt then - + ent:SetMaterial( table.Random( GAMEMODE.GoreSheets ) ) ent.IsBurnt = true - + table.remove( BurnTbl, c ) - + break - + elseif d.Time < CurTime() then - + table.remove( BurnTbl, c ) - + break - + end - + end - + end function GM:SpawnRagdolls() local tbl = ents.FindByClass( "npc_*" ) - + for c,d in pairs( RagdollTbl ) do - + local ent = GAMEMODE:GetNearestEnt( d.Pos, 30, tbl ) - + if IsValid( ent ) and not ent.Ragdolled then - + ent:BecomeRagdollOnClient() ent.Ragdolled = true - + table.remove( RagdollTbl, c ) - + break - + elseif d.Time < CurTime() then - + table.remove( RagdollTbl, c ) - + break - + end - + end - + end function DrawBar( x, y, w, h, value, maxvalue, icon, colorlight, colordark, hp ) draw.RoundedBox( 4, x - 1, y, h + 1, h, Color( 0, 0, 0, 180 ) ) - - surface.SetDrawColor( colorlight.r, colorlight.g, colorlight.b, 180 ) - surface.SetMaterial( icon ) - surface.DrawTexturedRect( x, y + 1, h - 1, h - 2 ) - + + surface.SetDrawColor( colorlight.r, colorlight.g, colorlight.b, 180 ) + surface.SetMaterial( icon ) + surface.DrawTexturedRect( x, y + 1, h - 1, h - 2 ) + x = x + h + 4 - + local w = 5 + maxvalue * 2 - + draw.RoundedBox( 4, x, y, w, h, Color( 0, 0, 0, 180 ) ) - + for i=1, value do - + local grn = colorlight.g - + if i <= 50 then - + grn = grn + 50 - + end - + draw.RoundedBox( 0, 1 + x + i * 2, y + 3, 1, h - 6, colordark ) draw.RoundedBox( 0, 1 + x + i * 2, y + 3 + ( h * 0.2 ), 1, h - 6 - ( h * 0.4 ), Color( colorlight.r, grn, colorlight.b ) ) - + --[[if hp then - + if i % 6 == 0 or ( i + 1 ) % 6 == 0 or ( i + 2 ) % 6 == 0 then - + draw.RoundedBox( 0, 1 + x + i * 2, y + 3, 1, ( h * ( math.sin( CurTime() * 3 + i ) * 0.2 + 0.5 ) ) - 3, Color( colorlight.r, grn, colorlight.b ) ) - + end - + draw.RoundedBox( 0, 1 + x + i * 2, y + 3, 1, ( h * 0.4 ) - 3, Color( colorlight.r, grn, colorlight.b ) ) - + else - + draw.RoundedBox( 0, 1 + x + i * 2, y + 3, 1, ( h * ( math.sin( ( CurTime() * 0.1 + i * 0.5 ) ) * ( math.sin( CurTime() * 2 ) * 0.15 ) + 0.5 ) ) - 3, Color( colorlight.r, grn, colorlight.b ) ) - + end]] - + end end @@ -549,10 +549,10 @@ end function DrawIcon( x, y, w, h, icon, color ) draw.RoundedBox( 4, x - 1, y, h + 1, h, Color( 0, 0, 0, 180 ) ) - - surface.SetDrawColor( color.r, color.g, color.b, 180 ) - surface.SetMaterial( icon ) - surface.DrawTexturedRect( x, y + 1, h - 1, h - 2 ) + + surface.SetDrawColor( color.r, color.g, color.b, 180 ) + surface.SetMaterial( icon ) + surface.DrawTexturedRect( x, y + 1, h - 1, h - 2 ) end @@ -561,10 +561,10 @@ function DrawAmmo( x, y, w, h, text, label ) if not IsValid( LocalPlayer():GetActiveWeapon() ) then return end draw.RoundedBox( 4, x, y, w, h, Color( 0, 0, 0, 180 ) ) - + draw.SimpleText( text, "AmmoFont", x + 5, y + ( h * 0.5 ) - 5, Color( 255, 255, 255 ), TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT ) draw.SimpleText( label, "AmmoFontSmall", x + 5, y + 5, Color( 255, 255, 150 ), TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT ) - + end function DrawCash( x, y, w, h, text ) @@ -580,39 +580,39 @@ function GM:GetAfflictions() local cols = { Color( 40, 200, 40 ), Color( 80, 150, 40 ), Color( 150, 150, 0 ), Color( 200, 100, 40 ), Color( 255, 40, 40 ) } if LocalPlayer():GetNWBool( "Infected", false ) then - + table.insert( tbl, { Icon = matInfection, Color = Color( 40, 200, 40 ) } ) - + end - + if LocalPlayer():GetNWBool( "Bleeding", false ) then - + table.insert( tbl, { Icon = matBlood, Color = Color( 225, 40, 40 ) } ) - + end - + if LocalPlayer():GetNWInt( "Radiation", 0 ) > 0 then table.insert( tbl, { Icon = matRadiation, Color = cols[ LocalPlayer():GetNWInt( "Radiation", 1 ) ] } ) - + end - + return tbl end function GM:GetHealthColor() - + local hp = math.Clamp( LocalPlayer():Health(), 0, 500 ) - + if hp > 150 then - + return Color( 0, 255, 255 ) - + end - + local scale = hp / 150 - + return Color( ( 1 - scale ) * 255, scale * 255, scale * 255 ) end @@ -623,32 +623,32 @@ function GM:DrawMarkers() tbl = table.Add( tbl, ents.FindByClass( "sent_antidote" ) ) for k,v in pairs( tbl ) do - + local sc = v:GetPos():ToScreen() - + if sc.visible then - + local text = "antidote" local offset = ( v:GetPos() + Vector(0,0,80) ):ToScreen() local dist = v:GetPos():Distance( LocalPlayer():GetPos() ) local maxdist = 1600 - + if v:GetClass() == "sent_heliflare" then - + text = "evac zone" offset = ( v:GetPos() + Vector(0,0,40) ):ToScreen() maxdist = 600 - + end - + local alpha = math.Clamp( dist - maxdist, 0, 200 ) / 200 - + sc.y = sc.y + ( offset.y - sc.y ) - + draw.SimpleText( text, "HudMarker", sc.x, sc.y, Color( 255, 255, 255, alpha * 255 ), TEXT_ALIGN_CENTER ) - + end - + end end @@ -656,299 +656,299 @@ end function GM:HUDPaint() if GetGlobalBool( "GameOver", false ) then return end - + if LocalPlayer():IsFrozen() then return end - + if LocalPlayer():Team() == TEAM_ZOMBIES then - + GAMEMODE:PaintWeather() - + if not LocalPlayer():Alive() then - - DeathScreenScale = math.Approach( DeathScreenScale, 1, FrameTime() * 0.3 ) - + + DeathScreenScale = math.Approach( DeathScreenScale, 1, FrameTime() * 0.3 ) + draw.RoundedBox( 0, 0, 0, ScrW(), ScrH() * ( 0.15 * DeathScreenScale ), Color( 0, 0, 0, 180 ) ) draw.RoundedBox( 0, 0, ScrH() - ( ScrH() * ( 0.15 * DeathScreenScale ) ), ScrW(), ScrH() * ( 0.15 * DeathScreenScale ), Color( 0, 0, 0, 180 ) ) - + if DeathScreenScale == 1 then - + local dtime = math.Round( DeathScreenTime - CurTime() ) - + if dtime > 0 then - + draw.SimpleText( "YOU WILL RESPAWN IN "..dtime.." SECONDS", "DeathFont", ScrW() * 0.5, ScrH() * 0.1, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + else - + draw.SimpleText( "PRESS ANY KEY TO RESPAWN", "DeathFont", ScrW() * 0.5, ScrH() * 0.1, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + end - + draw.SimpleText( DeathScreenText or "POOP", "DeathFont", ScrW() * 0.5, ScrH() * 0.9, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + end - + else - + local hp = math.Clamp( LocalPlayer():Health(), 0, 500 ) local x, y = 40, ScrH() - 60 - + surface.SetFont( "ZombieHud" ) local w, h = surface.GetTextSize( "Health: " .. hp ) - + draw.RoundedBox( 4, 30, ScrH() - 70, w + 20, h + 20, Color( 0, 0, 0, 180 ) ) - + draw.SimpleText( "Health: " .. hp, "ZombieHud", x+1, y+1, Color(40,40,40), TEXT_ALIGN_LEFT ) draw.SimpleText( "Health: " .. hp, "ZombieHud", x+1, y-1, Color(40,40,40), TEXT_ALIGN_LEFT ) draw.SimpleText( "Health: " .. hp, "ZombieHud", x-1, y-1, Color(40,40,40), TEXT_ALIGN_LEFT ) draw.SimpleText( "Health: " .. hp, "ZombieHud", x-1, y+1, Color(40,40,40), TEXT_ALIGN_LEFT ) draw.SimpleText( "Health: " .. hp, "ZombieHud", x, y, GAMEMODE:GetHealthColor(), TEXT_ALIGN_LEFT ) - + if not LocalPlayer():GetNWBool( "Lord", false ) then return end - + local xpos, ypos = x + w + 20, ScrH() - 70 local w = 200 local scale = math.floor( w * math.Clamp( LocalPlayer():GetNWInt( "ZedDamage", 0 ) / GAMEMODE.RedemptionDamage, 0.01, 1.00 ) ) local pos = 0 - + draw.RoundedBox( 4, xpos, ypos, w + 20, h + 20, Color( 0, 0, 0, 180 ) ) - + if scale == 200 then - + draw.RoundedBox( 0, xpos + 10, ScrH() - 60, scale, h, Color( 200, 0, 0, 200 ) ) - + else - + draw.RoundedBox( 0, xpos + 10, ScrH() - 60, scale, h, Color( 100, 0, 0, 200 ) ) - + end - + while pos < scale do - - local width = math.min( math.random( 10, 50 ), math.max( scale - pos, 1 ) ) - - local tbl = {} + + local width = math.min( math.random( 10, 50 ), math.max( scale - pos, 1 ) ) + + local tbl = {} tbl.texture = surface.GetTextureID( "nuke/redead/noise0" .. math.random(1,3) ) tbl.x = xpos + pos + 10 - tbl.y = ScrH() - 60 + tbl.y = ScrH() - 60 tbl.w = width tbl.h = h - + if scale == 200 then - - tbl.color = Color( 250, 125 + math.sin( CurTime() * 5 ) * 125, 125 + math.sin( CurTime() * 5 ) * 125, 250 ) - + + tbl.color = Color( 250, 125 + math.sin( CurTime() * 5 ) * 125, 125 + math.sin( CurTime() * 5 ) * 125, 250 ) + else - - tbl.color = Color( 250, 0, 0, 200 ) - + + tbl.color = Color( 250, 0, 0, 200 ) + end - + draw.TexturedQuad( tbl ) - + pos = pos + width - + end - + end - + return - + end - + GAMEMODE:HUDDrawTargetID() - + if not LocalPlayer():Alive() and LocalPlayer():Team() != TEAM_UNASSIGNED then - - DeathScreenScale = math.Approach( DeathScreenScale, 1, FrameTime() * 0.3 ) - + + DeathScreenScale = math.Approach( DeathScreenScale, 1, FrameTime() * 0.3 ) + draw.RoundedBox( 0, 0, 0, ScrW(), ScrH() * ( 0.15 * DeathScreenScale ), Color( 0, 0, 0, 180 ) ) draw.RoundedBox( 0, 0, ScrH() - ( ScrH() * ( 0.15 * DeathScreenScale ) ), ScrW(), ScrH() * ( 0.15 * DeathScreenScale ), Color( 0, 0, 0, 180 ) ) - + if DeathScreenScale == 1 then - + local dtime = math.Round( DeathScreenTime - CurTime() ) - + if dtime > 0 then - + draw.SimpleText( "YOU WILL RESPAWN IN "..dtime.." SECONDS", "DeathFont", ScrW() * 0.5, ScrH() * 0.1, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + else - + draw.SimpleText( "PRESS ANY KEY TO RESPAWN", "DeathFont", ScrW() * 0.5, ScrH() * 0.1, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + end - + draw.SimpleText( DeathScreenText or "POOP", "DeathFont", ScrW() * 0.5, ScrH() * 0.9, Color( 255, 0, 0 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) - + end - + end - + if not LocalPlayer():Alive() or LocalPlayer():Team() == TEAM_UNASSIGNED then return end //or GAMEMODE:ElementsVisible() then return end - + GAMEMODE:DrawMarkers() - + local xlen = 200 local ylen = 25 local xpos = 5 local ypos = ScrH() - 5 - ylen - + DrawBar( xpos, ypos, xlen, ylen, LocalPlayer():Health(), 150, matHealth, Color( 225, 50, 50, 255 ), Color( 175, 25, 25, 255 ), true ) - + ypos = ScrH() - 10 - ylen * 2 - + local stam = LocalPlayer():GetNWInt( "Stamina", 0 ) - + DrawBar( xpos, ypos, xlen, ylen, stam, 150, matStamina, Color( 50, 100, 225, 255 ), Color( 25, 50, 175, 255 ), false ) - + local tbl = GAMEMODE:GetAfflictions() - + for k,v in pairs( tbl ) do - + ypos = ScrH() - ( 10 + ( k * 5 ) ) - ylen * ( 2 + k ) - + DrawIcon( xpos, ypos, xlen, ylen, v.Icon, v.Color ) - + end - + local ylen = 55 local ypos = 35 - + if IsValid( LocalPlayer():GetActiveWeapon() ) and ( LocalPlayer():GetActiveWeapon().AmmoType or "SMG" ) != "Knife" then - + local total = LocalPlayer():GetNWInt( "Ammo" .. ( LocalPlayer():GetActiveWeapon().AmmoType or "SMG" ), 0 ) local ammo = math.Clamp( LocalPlayer():GetActiveWeapon():Clip1(), 0, total ) - + local xlen = 50 - + DrawAmmo( ScrW() - 5 - xlen, ScrH() - ylen - 5, xlen, ylen, total, "TOTAL" ) DrawAmmo( ScrW() - 10 - xlen * 2, ScrH() - ylen - 5, xlen, ylen, ammo, "AMMO" ) - + ypos = ypos + ylen + 5 - + end - + DrawCash( ScrW() - 110, ScrH() - ypos, 105, 30, string.upper( LocalPlayer():GetNWInt( "Cash", 0 ) .. " " .. GAMEMODE.CurrencyName .. "s" ) ) GAMEMODE:PaintWeather() - --[[local radius = 200 + --[[local radius = 200 local centerx = ScrW() - ( radius / 2 ) - 20 local centery = 20 + ( radius / 2 ) - + ArmAngle = ArmAngle + FrameTime() * ArmSpeed - + if ArmAngle > 360 then ArmAngle = 0 + ( ArmAngle - 360 ) end - - surface.SetDrawColor( 255, 255, 255, 220 ) - surface.SetMaterial( matRadar ) - surface.DrawTexturedRect( ScrW() - radius - 20, 20, radius, radius ) - + + surface.SetDrawColor( 255, 255, 255, 220 ) + surface.SetMaterial( matRadar ) + surface.DrawTexturedRect( ScrW() - radius - 20, 20, radius, radius ) + local aimvec = LocalPlayer():GetAimVector() - + for k,v in pairs( PosTable ) do - + local diff = v.Pos - LocalPlayer():GetPos() - local alpha = 100 - + local alpha = 100 + if IsValid( v.Ent ) and ( v.Ent:IsPlayer() or v.Ent:IsNPC() ) then - + diff = v.Ent:GetPos() - LocalPlayer():GetPos() - + end - + if v.DieTime != -1 then - + alpha = 100 * ( math.Clamp( v.DieTime - CurTime(), 0, BlipTime ) / BlipTime ) - + elseif not IsValid( v.Ent ) then - + PosTable[k].DieTime = CurTime() + 1.5 - + end - + if math.sqrt( diff.x * diff.x + diff.y * diff.y ) > MaxDist * FadeDist and v.DieTime == -1 then - + PosTable[k].DieTime = CurTime() + 1.5 // Remove the dot because they left our inner circle - + end - + if alpha > 0 and math.sqrt( diff.x * diff.x + diff.y * diff.y ) < MaxDist then - + local addx = diff.x / MaxDist local addy = diff.y / MaxDist local addz = math.sqrt( addx * addx + addy * addy ) local phi = math.atan2( addx, addy ) - math.atan2( aimvec.x, aimvec.y ) - ( math.pi / 2 ) - + addx = math.cos( phi ) * addz addy = math.sin( phi ) * addz - + draw.RoundedBox( 4, centerx + addx * ( ( radius - 15 ) / 2 ) - 4, centery + addy * ( ( radius - 15 ) / 2 ) - 4, 5, 5, Color( v.Color.r, v.Color.g, v.Color.b, alpha ) ) - + end - + end - + for k,v in pairs( PosTable ) do - + if v.DieTime != -1 and v.DieTime < CurTime() then - + table.remove( PosTable, k ) - + end - + end - - surface.SetDrawColor( 255, 255, 255, 220 ) + + surface.SetDrawColor( 255, 255, 255, 220 ) surface.SetMaterial( matArm ) - surface.DrawTexturedRectRotated( centerx, centery, radius, radius, ArmAngle ) - + surface.DrawTexturedRectRotated( centerx, centery, radius, radius, ArmAngle ) + local ent = LocalPlayer():GetDTEntity( 0 ) - + if IsValid( ent ) or StaticPos != Vector(0,0,0) then - + local ang = Angle(0,0,0) - + if IsValid( ent ) then - + ang = ( ent:GetPos() - LocalPlayer():GetShootPos()):Angle() - LocalPlayer():GetForward():Angle() - + local diff = ( ent:GetPos() - LocalPlayer():GetPos() ) - - if math.sqrt( diff.x * diff.x + diff.y * diff.y ) < MaxDist * FadeDist then - + + if math.sqrt( diff.x * diff.x + diff.y * diff.y ) < MaxDist * FadeDist then + return - + end - + end - + if StaticPos != Vector(0,0,0) then - + ang = ( StaticPos - LocalPlayer():GetShootPos()):Angle() - LocalPlayer():GetForward():Angle() - + end - - surface.SetDrawColor( 255, 255, 255, 200 ) + + surface.SetDrawColor( 255, 255, 255, 200 ) surface.SetMaterial( matArrow ) surface.DrawTexturedRectRotated( centerx, centery, radius, radius, ang.y ) - + end]] - + end --[[function IsOnRadar( ent ) for k,v in pairs( PosTable ) do - + if v.Ent == ent then - + return v - + end - + end end]] @@ -976,75 +976,75 @@ end function GM:CreateMove( cmd ) if LocalPlayer():Team() == TEAM_ZOMBIES then - + if bit.band( cmd:GetButtons(), IN_DUCK ) > 0 then - + cmd:SetButtons( cmd:GetButtons() - IN_DUCK ) - + end - + local ang = cmd:GetViewAngles() - + if ang.r != 0 then - + ang.r = 0 cmd:SetViewAngles( ang ) - + end - + else - + local scale = LocalPlayer():GetNWInt( "Radiation", 0 ) / 5 local wobble = 0 - + if LocalPlayer():GetNWBool( "Infected", false ) then - + scale = math.max( scale, 0.3 ) - + end - + if scale > 0 and LocalPlayer():Alive() then - + wobble = scale * 0.05 - + end - + local drunkscale = Drunkness / 10 - + if Drunkness > 0 then - + if ( DrunkTimer or 0 ) < CurTime() then - + Drunkness = math.Clamp( Drunkness - 1, 0, 20 ) DrunkTimer = CurTime() + 15 - + end - + wobble = wobble + ( drunkscale * 0.08 ) end - + if LocalPlayer():Health() <= 75 and LocalPlayer():Alive() then - + local hscale = math.Clamp( LocalPlayer():Health() / 50, 0, 1 ) wobble = wobble + ( 0.05 - 0.05 * hscale ) - + end - - ViewWobble = math.Approach( ViewWobble, wobble, FrameTime() * 0.1 ) - + + ViewWobble = math.Approach( ViewWobble, wobble, FrameTime() * 0.1 ) + local ang = cmd:GetViewAngles() - + if ViewWobble > 0 or ang.r != 0 then - + ang.p = ang.p + math.sin( CurTime() ) * ViewWobble ang.y = ang.y + math.cos( CurTime() ) * ViewWobble ang.r = math.Approach( ang.r + math.sin( CurTime() ) * ( ( ViewWobble * 0.5 ) * math.cos( CurTime() * ViewWobble ) ), 0, FrameTime() * 0.5 ) - + cmd:SetViewAngles( ang ) - + end - + end end @@ -1052,14 +1052,14 @@ end function GrenadeHit( msg ) DisorientTime = CurTime() + 8 - + end usermessage.Hook( "GrenadeHit", GrenadeHit ) function ScreamHit( msg ) ScreamTime = CurTime() + 8 - + end usermessage.Hook( "ScreamHit", ScreamHit ) @@ -1070,7 +1070,7 @@ function DeathScreen( msg ) DeathScreenScale = 0 DeathScreenTime = CurTime() + 10 DeathScreenText = table.Random( GAMEMODE.DeathScreenText[ dteam or TEAM_ARMY ] ) - + end usermessage.Hook( "DeathScreen", DeathScreen ) @@ -1079,18 +1079,18 @@ usermessage.Hook( "DeathScreen", DeathScreen ) local pos = msg:ReadVector() local burn = msg:ReadShort() local ent = Entity( msg:ReadShort() ) - + if IsValid( ent ) and not ent.Ragdolled then - + ent:BecomeRagdollOnClient() ent.Ragdolled = true - + end - + if burn == 2 then - + table.insert( BurnTbl, { Pos = pos, Time = CurTime() + 0.5 } ) - + end end @@ -1118,24 +1118,24 @@ end usermessage.Hook( "Headless", Headless ) function SetRadarTarget( msg ) - + StaticPos = msg:ReadVector() - + end usermessage.Hook( "StaticTarget", SetRadarTarget ) function AddDrunkness( msg ) - + Drunkness = math.Clamp( Drunkness + msg:ReadShort(), 0, 20 ) DrunkTimer = CurTime() + 30 - + end usermessage.Hook( "Drunk", AddDrunkness ) function CashSynch( msg ) - + Inv_SetStashCash( msg:ReadShort() ) - + end usermessage.Hook( "CashSynch", CashSynch ) @@ -1143,17 +1143,17 @@ function Radio( msg ) local num = msg:ReadShort() local snd = msg:ReadString() - + if num == 100 then - + surface.PlaySound( snd ) - + else - + if not IsValid( LocalPlayer() ) then return end - + sound.Play( snd, LocalPlayer():GetShootPos(), 180, num, 1 ) - + end end @@ -1163,11 +1163,11 @@ net.Receive( "StatsSynch", function( len ) local count = net.ReadInt( 8 ) PlayerStats = {} - + for i=1, count do - + table.insert( PlayerStats, { Player = net.ReadEntity(), Stats = net.ReadTable() } ) - + end end ) @@ -1175,11 +1175,11 @@ end ) net.Receive( "InventorySynch", function( len ) LocalInventory = net.ReadTable() - + if GAMEMODE.ItemSheet and GAMEMODE.ItemSheet:IsVisible() then - + GAMEMODE.ItemSheet:RefreshItems( LocalInventory ) - + end end ) @@ -1187,11 +1187,11 @@ end ) net.Receive( "StashSynch", function( len ) LocalStash = net.ReadTable() - + if StashScreen and StashScreen:IsVisible() then - + StashScreen:RefreshItems( LocalStash ) - + end end ) |
