Refactor, Beatify and EndRound hook fix

master
David Vogel 6 years ago
parent 0877e8a03d
commit 777ffcacbd

@ -1,4 +1,4 @@
if (SERVER) then if SERVER then
include("d3stats/init.lua") include("d3stats/init.lua")
else else
include("d3stats/cl_init.lua") include("d3stats/cl_init.lua")

@ -1,27 +1,27 @@
-- Delete HUD and redo if already existent. This will reset the displayed values until the next update from the server -- Delete HUD and redo if already existent. This will reset the displayed values until the next update from the server
if d3stats.D3StatsOverlay then if D3stats.D3statsOverlay then
d3stats.D3StatsOverlay:Remove() D3stats.D3statsOverlay:Remove()
d3stats.Overlay_Init() D3stats.Overlay_Init()
end end
-- HUD on the left top of the screen -- HUD on the left top of the screen
function d3stats.Overlay_Init() function D3stats.Overlay_Init()
d3stats.D3StatsOverlay = vgui.Create( "D3StatsOverlay" ) D3stats.D3statsOverlay = vgui.Create("D3statsOverlay")
d3stats.D3StatsOverlay:SetPos( d3stats.Overlay_X, d3stats.Overlay_Y ) D3stats.D3statsOverlay:SetPos(D3stats.Overlay_X, D3stats.Overlay_Y)
d3stats.D3StatsOverlay:SetSize( 350, 100 ) D3stats.D3statsOverlay:SetSize(350, 100)
end end
-- Call this function from cl_targetid.lua in the gamemode. Works for ZS, needs adjustments for other gamemodes. -- Call this function from cl_targetid.lua in the gamemode. Works for ZS, needs adjustments for other gamemodes.
local colTemp = Color(255, 255, 255) local colTemp = Color(255, 255, 255)
function d3stats.DrawTargetID( ent, fade, x, y ) function D3stats.DrawTargetID(ent, fade, x, y)
colTemp.a = fade * 255 colTemp.a = fade * 255
--util.ColorCopy(COLOR_FRIENDLY, colTemp) --util.ColorCopy(COLOR_FRIENDLY, colTemp)
local Level = ent:GetNWInt( "D3Stats_Level", 0 ) local Level = ent:GetNWInt("D3stats_Level", 0)
if Level > 0 and d3stats.Levels[Level] then if Level > 0 and D3stats.Levels[Level] then
draw.SimpleTextBlur("Level " .. tostring(Level) .. " \"" .. d3stats.Levels[Level].Name .. "\"", d3stats.Font_TargetID, x, y, colTemp, TEXT_ALIGN_CENTER) draw.SimpleTextBlur("Level " .. tostring(Level) .. " \"" .. D3stats.Levels[Level].Name .. "\"", D3stats.Font_TargetID, x, y, colTemp, TEXT_ALIGN_CENTER)
y = y + draw.GetFontHeight(d3stats.Font_TargetID) + 4 y = y + draw.GetFontHeight(D3stats.Font_TargetID) + 4
end end
return x, y return x, y

@ -1,4 +1,4 @@
d3stats = d3stats or {} D3stats = D3stats or {}
-- Includes -- Includes
include("sh_settings.lua") include("sh_settings.lua")
@ -10,7 +10,7 @@ include( "cl_hud.lua" )
include("vgui/overlay.lua") include("vgui/overlay.lua")
-- Initialisation -- Initialization
hook.Add( "Initialize", "D3Stats_Init", function () hook.Add("Initialize", "D3stats_Init", function ()
d3stats.Overlay_Init() D3stats.Overlay_Init()
end) end)

@ -1,9 +1,9 @@
net.Receive( "D3Stats_UpdateXP", function() net.Receive("D3stats_UpdateXP", function()
local XP = net.ReadUInt(32) local XP = net.ReadUInt(32)
--print("XP update: " .. tostring(XP)) --print("XP update: " .. tostring(XP))
if d3stats and d3stats.D3StatsOverlay then if D3stats and D3stats.D3statsOverlay then
d3stats.D3StatsOverlay:StatsUpdate( XP, d3stats.CalculateLevel( XP ) ) D3stats.D3statsOverlay:StatsUpdate(XP, D3stats.CalculateLevel(XP))
end end
end) end)

@ -5,50 +5,58 @@ Any "zombie survival" gamemode specific code goes in here
]] ]]
-- XP rewards for players getting points -- XP rewards for players getting points
hook.Add( "PlayerPointsAdded", "D3Stats_ZS_PlayerPointsAdded", function ( ply, points ) hook.Add("PlayerPointsAdded", "D3stats_ZS_PlayerPointsAdded", function (ply, points)
if points <= d3stats.PlayerPointsAdded_Limit then if points <= D3stats.PlayerPointsAdded_Limit then
ply:D3Stats_AddXP( points ) ply:D3stats_AddXP(points)
end end
end) end)
-- XP rewards for zombies killing humans -- XP rewards for zombies killing humans
hook.Add( "PostZombieKilledHuman", "D3Stats_ZS_PostZombieKilledHuman", function ( ply, attacker, dmginfo, headshot, wassuicide ) hook.Add("PostZombieKilledHuman", "D3stats_ZS_PostZombieKilledHuman", function (ply, attacker, dmginfo, headshot, wassuicide)
local reward = d3stats.ZombieKilledHuman_Static + d3stats.ZombieKilledHuman_Fraction * ply:Frags() local reward = D3stats.ZombieKilledHuman_Static + D3stats.ZombieKilledHuman_Fraction * ply:Frags()
reward = math.Clamp( reward, d3stats.ZombieKilledHuman_Min, d3stats.ZombieKilledHuman_Max ) reward = math.Clamp(reward, D3stats.ZombieKilledHuman_Min, D3stats.ZombieKilledHuman_Max)
attacker:D3Stats_AddXP( reward ) attacker:D3stats_AddXP(reward)
end) end)
-- Message on levelchange -- Message on levelchange
hook.Add( "D3Stats_LevelChanged", "D3Stats_ZS_LevelChanged", function ( ply, oldLevel, Level ) hook.Add("D3stats_LevelChanged", "D3stats_ZS_LevelChanged", function (ply, oldLevel, Level)
if Level > oldLevel then if Level > oldLevel then
ply:CenterNotify( Color( 0, 255, 255 ), string.format( d3stats.Message.Level_Ascended, Level, d3stats.Levels[Level].Name ) ) ply:CenterNotify(Color(0, 255, 255), string.format(D3stats.Message.Level_Ascended, Level, D3stats.Levels[Level].Name))
else else
ply:CenterNotify( Color( 0, 255, 255 ), string.format( d3stats.Message.Level_Changed, Level, d3stats.Levels[Level].Name ) ) ply:CenterNotify(Color(0, 255, 255), string.format(D3stats.Message.Level_Changed, Level, D3stats.Levels[Level].Name))
end end
end) end)
-- Handle "Use_Hammer" permission. TODO: Only prevent that the person can nail things -- Handle "Use_Hammer" permission. TODO: Only prevent that the person can nail things
hook.Add( "PlayerSwitchWeapon", "D3Stats_ZS_EquipHammer", function( ply, oldWeapon, newWeapon ) hook.Add("PlayerSwitchWeapon", "D3stats_ZS_EquipHammer", function(ply, oldWeapon, newWeapon)
local Class = newWeapon:GetClass() local Class = newWeapon:GetClass()
if Class == "weapon_zs_hammer" or Class == "weapon_zs_electrohammer" then if Class == "weapon_zs_hammer" or Class == "weapon_zs_electrohammer" then
if not ply:D3Stats_HasPermission( "Use_Hammer" ) then if not ply:D3stats_HasPermission("Use_Hammer") then
ply:CenterNotify( Color( 255, 0, 0 ), string.format( d3stats.Message.Disallow_Hold_Hammer, d3stats.GetPermissionLevel( "Use_Hammer" ) ) ) ply:CenterNotify(Color(255, 0, 0), string.format(D3stats.Message.Disallow_Hold_Hammer, D3stats.GetPermissionLevel("Use_Hammer")))
return true return true
end end
end end
end) end)
-- Handle EndRound events for statistics -- Handle EndRound events for statistics
hook.Add( "EndRound", "D3Stats_ZS_EndRound", function( team ) hook.Add("EndRound", "D3stats_ZS_EndRound", function(team)
if D3stats.RoundEnded then return end
D3stats.RoundEnded = true
local won = (TEAM_SURVIVORS == team) and true or false local won = (TEAM_SURVIVORS == team) and true or false
d3stats.Map_End( won ) D3stats.Map_End(won)
end)
-- Reset stuff on a new game
hook.Add("DoRestartGame", "D3stats_ZS_DoRestartGame", function()
D3stats.RoundEnded = nil
end) end)
-- Display map statistic message when the player joined -- Display map statistics message when a player joins
hook.Add( "PlayerReady", "D3Stats_Map_PlayerReady", function ( ply ) hook.Add("PlayerReady", "D3stats_Map_PlayerReady", function (ply)
d3stats.Map_Message( false, ply ) D3stats.Map_Message(false, ply)
end) end)

@ -5,7 +5,7 @@ by David Vogel (Dadido3)
]] ]]
d3stats = d3stats or {} D3stats = D3stats or {}
AddCSLuaFile("sh_settings.lua") AddCSLuaFile("sh_settings.lua")
AddCSLuaFile("sh_level.lua") AddCSLuaFile("sh_level.lua")
@ -25,18 +25,18 @@ include( "sv_storage.lua" )
include("sv_map.lua") include("sv_map.lua")
include("sv_network.lua") include("sv_network.lua")
hook.Add( "PlayerInitialSpawn", "D3Stats_PlayerSpawn", function ( ply ) hook.Add("PlayerInitialSpawn", "D3stats_PlayerSpawn", function (ply)
-- Send its own XP -- Send its own XP
ply:D3Stats_Net_UpdateXP() ply:D3stats_Net_UpdateXP()
-- Store level as network and local player variable -- Store level as network and local player variable
ply.D3Stats_Level = d3stats.CalculateLevel( ply:D3Stats_GetXP() ) ply.D3stats_Level = D3stats.CalculateLevel(ply:D3stats_GetXP())
ply:SetNWInt( "D3Stats_Level", ply.D3Stats_Level ) ply:SetNWInt("D3stats_Level", ply.D3stats_Level)
end) end)
-- Initialisation -- Initialisation
hook.Add( "Initialize", "D3Stats_Init", function () hook.Add("Initialize", "D3stats_Init", function ()
d3stats.Storage.Initialize() D3stats.Storage.Initialize()
resource.AddFile("resource/fonts/ghoulfriaoe.ttf") resource.AddFile("resource/fonts/ghoulfriaoe.ttf")
resource.AddFile("resource/fonts/hauntaoe.ttf") resource.AddFile("resource/fonts/hauntaoe.ttf")
@ -46,8 +46,8 @@ end )
local meta = FindMetaTable("Player") local meta = FindMetaTable("Player")
if not meta then return end if not meta then return end
function meta:D3Stats_GetXP() function meta:D3stats_GetXP()
local XP = tonumber( self:GetPData( "D3Stats_XP", "0" ) ) local XP = tonumber(self:GetPData("D3stats_XP", "0"))
if not XP then if not XP then
XP = 0 XP = 0
@ -56,43 +56,43 @@ function meta:D3Stats_GetXP()
return XP return XP
end end
function meta:D3Stats_SetXP( XP ) function meta:D3stats_SetXP(XP)
if not XP then if not XP then
XP = 0 XP = 0
end end
self:SetPData( "D3Stats_XP", tostring( XP ) ) self:SetPData("D3stats_XP", tostring(XP))
self:D3Stats_Net_UpdateXP() self:D3stats_Net_UpdateXP()
-- Update network variable and send message on level change -- Update network variable and send message on level change
local Level = d3stats.CalculateLevel( XP ) local Level = D3stats.CalculateLevel(XP)
if self.D3Stats_Level and self.D3Stats_Level ~= Level then if self.D3stats_Level and self.D3stats_Level ~= Level then
self:SetNWInt( "D3Stats_Level", Level ) self:SetNWInt("D3stats_Level", Level)
hook.Call( "D3Stats_LevelChanged" , nil, self, self.D3Stats_Level, Level ) hook.Call("D3stats_LevelChanged" , nil, self, self.D3stats_Level, Level)
end end
self.D3Stats_Level = Level self.D3stats_Level = Level
end end
function meta:D3Stats_AddXP( XP ) function meta:D3stats_AddXP(XP)
if not XP then if not XP then
XP = 0 XP = 0
end end
self:D3Stats_SetXP( self:D3Stats_GetXP() + XP ) self:D3stats_SetXP(self:D3stats_GetXP() + XP)
end end
function meta:D3Stats_GetLevel() function meta:D3stats_GetLevel()
return self.D3Stats_Level return self.D3stats_Level
end end
-- Check if the players level has the permission -- Check if the players level has the permission
function meta:D3Stats_HasPermission( Permission ) function meta:D3stats_HasPermission(Permission)
-- If there are too few players with this permission, allow it -- If there are too few players with this permission, allow it anyway
if d3stats.Permissions[Permission] and d3stats.Permissions[Permission].AllowIfLessThan and d3stats.Permissions[Permission].AllowIfLessThan > d3stats.CountPermissionPlayers( Permission, d3stats.Permissions[Permission].Team ) then if D3stats.Permissions[Permission] and D3stats.Permissions[Permission].AllowIfLessThan and D3stats.Permissions[Permission].AllowIfLessThan > D3stats.CountPermissionPlayers(Permission, D3stats.Permissions[Permission].Team) then
return true return true
end end
return d3stats.LevelCheckPermission( self:D3Stats_GetLevel(), Permission ) return D3stats.LevelCheckPermission(self:D3stats_GetLevel(), Permission)
end end

@ -1,7 +1,7 @@
if SERVER then if SERVER then
concommand.Add( "d3stats_clearall", function( ply, cmd, args ) concommand.Add("D3stats_clearall", function(ply, cmd, args, argsString)
print( "What the hell are you doing?" ) print("What the hell are you doing? Not implemented yet!")
end) end)
end end

@ -1,8 +1,8 @@
-- Calculate the level from the given XP -- Calculate the level from the given XP
function d3stats.CalculateLevel( XP ) function D3stats.CalculateLevel(XP)
local Level = 1 local Level = 1
for key, value in pairs( d3stats.Levels ) do for key, value in pairs(D3stats.Levels) do
if value.XP_needed <= XP then if value.XP_needed <= XP then
Level = key Level = key
else else
@ -14,15 +14,15 @@ function d3stats.CalculateLevel( XP )
end end
-- Check if the level has the given permission -- Check if the level has the given permission
function d3stats.LevelCheckPermission( Level, Permission ) function D3stats.LevelCheckPermission(Level, Permission)
local Granted = false local Granted = false
-- If the permission is not on the list, allow it -- If the permission is not on the list, allow it
if not d3stats.Permissions[Permission] then if not D3stats.Permissions[Permission] then
return true return true
end end
for key, value in pairs( d3stats.Levels ) do for key, value in pairs(D3stats.Levels) do
if key <= Level then if key <= Level then
if value.Permissions and value.Permissions[Permission] then if value.Permissions and value.Permissions[Permission] then
Granted = value.Permissions[Permission] Granted = value.Permissions[Permission]
@ -36,14 +36,14 @@ function d3stats.LevelCheckPermission( Level, Permission )
end end
-- Returns what level is needed for the given permission -- Returns what level is needed for the given permission
function d3stats.GetPermissionLevel( Permission ) function D3stats.GetPermissionLevel(Permission)
local Level local Level
if not d3stats.Permissions[Permission] then if not D3stats.Permissions[Permission] then
return 1 return 1
end end
for key, value in pairs( d3stats.Levels ) do for key, value in pairs(D3stats.Levels) do
if value.Permissions and value.Permissions[Permission] then if value.Permissions and value.Permissions[Permission] then
return key return key
end end
@ -54,13 +54,13 @@ end
-- Count the amount of online players who have the permission -- Count the amount of online players who have the permission
if SERVER then if SERVER then
function d3stats.CountPermissionPlayers( Permission, Team ) function D3stats.CountPermissionPlayers(Permission, Team)
local Counter = 0 local Counter = 0
local players = player.GetAll() local players = player.GetAll()
for key, ply in pairs(players) do for key, ply in pairs(players) do
if Team == nil or ply:Team() == Team then if Team == nil or ply:Team() == Team then
if d3stats.LevelCheckPermission( ply:D3Stats_GetLevel(), Permission ) == true then if D3stats.LevelCheckPermission(ply:D3stats_GetLevel(), Permission) == true then
Counter = Counter + 1 Counter = Counter + 1
end end
end end

@ -7,14 +7,14 @@ Settings and level definitions are stored in here
-- Permissions -- Permissions
-- - Everything not in this list will be allowed by default -- - Everything not in this list will be allowed by default
-- - AllowIfLessThan: If the amount of players who have the permission is lower than this number, allow it anyway -- - AllowIfLessThan: If the amount of players who have the permission is lower than this number, allow it anyway
-- - Team: Reduces count to the specified team. In ZS: TEAM_SURVIVOR = 4, -- - Team: AllowIfLessThan only counts the specified team. In ZS: TEAM_SURVIVOR = 4,
d3stats.Permissions = { D3stats.Permissions = {
--["Buy_Hammer"] = {AllowIfLessThan = 4, Team = 4}, --["Buy_Hammer"] = {AllowIfLessThan = 4, Team = 4},
--["Use_Hammer"] = {AllowIfLessThan = 4, Team = 4}, --["Use_Hammer"] = {AllowIfLessThan = 4, Team = 4},
} }
-- Levels, please sort by XP -- Levels, please sort by XP
d3stats.Levels = { D3stats.Levels = {
{ XP_needed = 500, Name = "Kleiner" }, { XP_needed = 500, Name = "Kleiner" },
{ XP_needed = 1370, Name = "Survivor" }, { XP_needed = 1370, Name = "Survivor" },
{ XP_needed = 2612, Name = "Helper" }, { XP_needed = 2612, Name = "Helper" },
@ -50,30 +50,30 @@ d3stats.Levels = {
} }
-- Human reward settings -- Human reward settings
d3stats.PlayerPointsAdded_Limit = 200 -- Ignore all "PlayerPointsAdded" callbacks above this XP value D3stats.PlayerPointsAdded_Limit = 200 -- Ignore all "PlayerPointsAdded" callbacks above this XP value
-- Zombie reward is calculated as follows: Reward = math.clamp(Static + Fraction * Human_Points, Min, Max) -- Zombie reward is calculated as follows: Reward = math.clamp(Static + Fraction * Human_Points, Min, Max)
d3stats.ZombieKilledHuman_Fraction = 1.0 -- Amount of XP a zombie gets of the killed humans points D3stats.ZombieKilledHuman_Fraction = 1.0 -- Amount of XP a zombie gets of the killed humans points
d3stats.ZombieKilledHuman_Static = 100 -- Amount of XP a zombie gets for killing a human D3stats.ZombieKilledHuman_Static = 100 -- Amount of XP a zombie gets for killing a human
d3stats.ZombieKilledHuman_Max = 1000 -- Upper XP reward clamp D3stats.ZombieKilledHuman_Max = 1000 -- Upper XP reward clamp
d3stats.ZombieKilledHuman_Min = 0 -- Lower XP reward clamp D3stats.ZombieKilledHuman_Min = 0 -- Lower XP reward clamp
-- Messages TODO: Multilanguage -- Messages TODO: Multilanguage
d3stats.Message = {} D3stats.Message = {}
d3stats.Message.Level_Ascended = "You ascended to level %i \"%s\"" D3stats.Message.Level_Ascended = "You ascended to level %i \"%s\""
d3stats.Message.Level_Changed = "Your level changed to level %i \"%s\"" D3stats.Message.Level_Changed = "Your level changed to level %i \"%s\""
d3stats.Message.Disallow_Hold_Hammer = "You can't use the hammer until you have reached level %i" D3stats.Message.Disallow_Hold_Hammer = "You can't use the hammer until you have reached level %i"
d3stats.Message.MapStats_Zero = "We are playing %s." -- Message to players who just joined D3stats.Message.MapStats_Zero = "We are playing %s." -- Message to players who just joined
d3stats.Message.MapStats = "We are playing %s. Humans won %i of %i times (%.1f%%)" -- Message to players who just joined (With statistics) D3stats.Message.MapStats = "We are playing %s. Humans won %i of %i times (%.1f%%)" -- Message to players who just joined (With statistics)
d3stats.Message.MapStats_End = "%s has been won %i of %i times (%.1f%%)" -- Message to all players at the end of the round (With statistics) D3stats.Message.MapStats_End = "%s has been won %i of %i times (%.1f%%)" -- Message to all players at the end of the round (With statistics)
if CLIENT then if CLIENT then
-- Overlay positions -- Overlay positions
d3stats.Overlay_X = 0 D3stats.Overlay_X = 0
d3stats.Overlay_Y = 80 * math.Clamp(ScrH() / 1080, 0.6, 1) -- This needs to be redone D3stats.Overlay_Y = 80 * math.Clamp(ScrH() / 1080, 0.6, 1) -- This needs to be redone
-- Fonts -- Fonts
surface.CreateFont( "D3Stats_OverlayFont_XP", { surface.CreateFont("D3stats_OverlayFont_XP", {
font = "Ghoulish Fright AOE", font = "Ghoulish Fright AOE",
extended = false, extended = false,
size = 22, size = 22,
@ -90,7 +90,7 @@ if CLIENT then
additive = false, additive = false,
outline = false, outline = false,
}) })
surface.CreateFont( "D3Stats_OverlayFont_Level", { surface.CreateFont("D3stats_OverlayFont_Level", {
font = "Haunt AOE", font = "Haunt AOE",
extended = false, extended = false,
size = 26, size = 26,
@ -108,7 +108,7 @@ if CLIENT then
outline = true, outline = true,
}) })
d3stats.Font_Overlay_XP = "D3Stats_OverlayFont_XP" D3stats.Font_Overlay_XP = "D3stats_OverlayFont_XP"
d3stats.Font_Overlay_Level = "D3Stats_OverlayFont_Level" D3stats.Font_Overlay_Level = "D3stats_OverlayFont_Level"
d3stats.Font_TargetID = "ZSHUDFontTiny" -- Use ZS Font D3stats.Font_TargetID = "ZSHUDFontTiny" -- Use ZS Font
end end

@ -1,16 +1,16 @@
function d3stats.Map_Message( roundend, ply ) function D3stats.Map_Message(roundend, ply)
local map = game.GetMap() local map = game.GetMap()
local count, wins, avg_players = d3stats.Storage.Map_Get( map ) local count, wins, avg_players = D3stats.Storage.Map_Get(map)
local Message local Message
if count > 0 then if count > 0 then
if roundend == true then if roundend == true then
Message = string.format( d3stats.Message.MapStats_End, map, wins, count, wins / count * 100 ) Message = string.format(D3stats.Message.MapStats_End, map, wins, count, wins / count * 100)
else else
Message = string.format( d3stats.Message.MapStats, map, wins, count, wins / count * 100 ) Message = string.format(D3stats.Message.MapStats, map, wins, count, wins / count * 100)
end end
else else
Message = string.format( d3stats.Message.MapStats_Zero, map ) Message = string.format(D3stats.Message.MapStats_Zero, map)
end end
if ply then if ply then
@ -20,16 +20,16 @@ function d3stats.Map_Message( roundend, ply )
end end
end end
function d3stats.Map_End( won ) function D3stats.Map_End(won)
local map = game.GetMap() local map = game.GetMap()
local players = #player.GetAll() local players = #player.GetAll()
if players > 0 then if players > 0 then
d3stats.Storage.Map_AddOutcome( map, won, players ) D3stats.Storage.Map_AddOutcome(map, won, players)
d3stats.Map_Message( true ) D3stats.Map_Message(true)
end end
end end
--d3stats.Map_End( false ) --D3stats.Map_End(false)
--d3stats.Map_Message( false, player.GetByID(1) ) --D3stats.Map_Message(false, player.GetByID(1))

@ -1,11 +1,11 @@
util.AddNetworkString( "D3Stats_UpdateXP" ) util.AddNetworkString("D3stats_UpdateXP")
local meta = FindMetaTable("Player") local meta = FindMetaTable("Player")
if not meta then return end if not meta then return end
-- Send the XP of this (self) player to itself -- Send the XP of this (self) player to itself
function meta:D3Stats_Net_UpdateXP() function meta:D3stats_Net_UpdateXP()
net.Start( "D3Stats_UpdateXP" ) net.Start("D3stats_UpdateXP")
net.WriteUInt( self:D3Stats_GetXP(), 32 ) net.WriteUInt(self:D3stats_GetXP(), 32)
net.Send(self) net.Send(self)
end end

@ -4,22 +4,22 @@ Storage stuff
]] ]]
d3stats.Storage = {} D3stats.Storage = {}
function d3stats.Storage.Initialize() function D3stats.Storage.Initialize()
-- Storage for map data -- Storage for map data
if not sql.TableExists( "d3stats_maps") then if not sql.TableExists("D3stats_maps") then
local result = sql.Query( "CREATE TABLE d3stats_maps ( name varchar(255) PRIMARY KEY, count INT, wins INT, avg_players REAL )" ) local result = sql.Query("CREATE TABLE D3stats_maps (name varchar(255) PRIMARY KEY, count INT, wins INT, avg_players REAL)")
end end
end end
function d3stats.Storage.Map_AddOutcome( name, won, players ) function D3stats.Storage.Map_AddOutcome(name, won, players)
local count = 1 local count = 1
local wins = 0 local wins = 0
local avg_players = players local avg_players = players
if won == true then wins = 1 end if won == true then wins = 1 end
local result = sql.QueryRow( "SELECT count, wins, avg_players FROM d3stats_maps WHERE name = '" .. name .. "'" ) local result = sql.QueryRow("SELECT count, wins, avg_players FROM D3stats_maps WHERE name = '" .. name .. "'")
if result then if result then
if result ~= false then if result ~= false then
count = count + tonumber(result.count) count = count + tonumber(result.count)
@ -30,15 +30,15 @@ function d3stats.Storage.Map_AddOutcome( name, won, players )
end end
end end
local result = sql.Query( "INSERT OR REPLACE INTO d3stats_maps ( name, count, wins, avg_players ) VALUES ( '" .. name .. "', " .. tostring(count) .. ", " .. tostring(wins) .. ", " .. tostring(avg_players) .. " );" ) local result = sql.Query("INSERT OR REPLACE INTO D3stats_maps (name, count, wins, avg_players) VALUES ('" .. name .. "', " .. tostring(count) .. ", " .. tostring(wins) .. ", " .. tostring(avg_players) .. ");")
end end
function d3stats.Storage.Map_Get( name ) function D3stats.Storage.Map_Get(name)
local count = 0 local count = 0
local wins = 0 local wins = 0
local avg_players = 0 local avg_players = 0
local result = sql.QueryRow( "SELECT count, wins, avg_players FROM d3stats_maps WHERE name = '" .. name .. "'" ) local result = sql.QueryRow("SELECT count, wins, avg_players FROM D3stats_maps WHERE name = '" .. name .. "'")
if result then if result then
if result ~= false then if result ~= false then
count = tonumber(result.count) count = tonumber(result.count)

@ -1,20 +1,19 @@
local PANEL = {} local PANEL = {}
function PANEL:Init() function PANEL:Init()
self.Progress = vgui.Create("DProgress", self) self.Progress = vgui.Create("DProgress", self)
self.Progress:SetPos(10, 10) self.Progress:SetPos(10, 10)
self.Progress:SetSize(200, 20) self.Progress:SetSize(200, 20)
self.Label_XP = vgui.Create("DLabel", self) self.Label_XP = vgui.Create("DLabel", self)
self.Label_XP:SetTextColor(color_black) self.Label_XP:SetTextColor(color_black)
self.Label_XP:SetFont( d3stats.Font_Overlay_XP ) self.Label_XP:SetFont(D3stats.Font_Overlay_XP)
self.Label_XP:SetSize(200, 20) self.Label_XP:SetSize(200, 20)
self.Label_XP:SetPos(10, 10) -- Set the position of the label self.Label_XP:SetPos(10, 10) -- Set the position of the label
self.Label_XP:SetContentAlignment(5) self.Label_XP:SetContentAlignment(5)
self.Label_Level = vgui.Create("DLabel", self) self.Label_Level = vgui.Create("DLabel", self)
self.Label_Level:SetFont( d3stats.Font_Overlay_Level ) self.Label_Level:SetFont(D3stats.Font_Overlay_Level)
self.Label_Level:SetPos(10, 35) -- Set the position of the label self.Label_Level:SetPos(10, 35) -- Set the position of the label
self.Label_Level:SetSize(200, 20) self.Label_Level:SetSize(200, 20)
self.Label_Level:SetContentAlignment(5) self.Label_Level:SetContentAlignment(5)
@ -22,9 +21,7 @@ function PANEL:Init()
self:StatsUpdate(0, 1) self:StatsUpdate(0, 1)
--self.Label:SetDark(1) -- Set the colour of the text inside the label to a darker one --self.Label:SetDark(1) -- Set the colour of the text inside the label to a darker one
--timer.Create( "D3StatsOverlay_Timer", 0.1, 0, function() self.Progress:SetFraction( math.random() ) end ) --timer.Create("D3statsOverlay_Timer", 0.1, 0, function() self.Progress:SetFraction(math.random()) end)
end end
function PANEL:Paint(aWide, aTall) function PANEL:Paint(aWide, aTall)
@ -36,15 +33,15 @@ function PANEL:StatsUpdate( XP, Level )
local Text_Level local Text_Level
local Fraction local Fraction
if d3stats.Levels[Level+1] then if D3stats.Levels[Level+1] then
Text_XP = "XP: " .. tostring( XP ) .. " / " .. d3stats.Levels[Level+1].XP_needed Text_XP = "XP: " .. tostring(XP) .. " / " .. D3stats.Levels[Level+1].XP_needed
Fraction = ( XP - d3stats.Levels[Level].XP_needed ) / ( d3stats.Levels[Level+1].XP_needed - d3stats.Levels[Level].XP_needed ) Fraction = (XP - D3stats.Levels[Level].XP_needed) / (D3stats.Levels[Level+1].XP_needed - D3stats.Levels[Level].XP_needed)
else else
Text_XP = "XP: " .. tostring(XP) Text_XP = "XP: " .. tostring(XP)
Fraction = 1 Fraction = 1
end end
Text_Level = "Level: " .. tostring( Level ) .. " \"" .. d3stats.Levels[Level].Name .. "\"" Text_Level = "Level: " .. tostring(Level) .. " \"" .. D3stats.Levels[Level].Name .. "\""
self.Label_XP:SetText(Text_XP) -- Set the text of the label self.Label_XP:SetText(Text_XP) -- Set the text of the label
--self.Label_XP:SizeToContents() -- Size the label to fit the text in it --self.Label_XP:SizeToContents() -- Size the label to fit the text in it
@ -59,4 +56,4 @@ end
function PANEL:SetText(aText) self.Text = tostring(aText) end function PANEL:SetText(aText) self.Text = tostring(aText) end
function PANEL:GetText() return self.Text or "" end function PANEL:GetText() return self.Text or "" end
vgui.Register( "D3StatsOverlay", PANEL, "DPanel" ) vgui.Register("D3statsOverlay", PANEL, "DPanel")
Loading…
Cancel
Save