-- __ _ _______ _ __ -- / / /\ | | |__ __| | | \ \ -- / / / \ | |_ __ ___ | | ___ ___| |__ \ \ -- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > > -- \ \ / ____ \| | | | | | | | __/ (__| | | | / / -- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/ Quantum.Server.Char = {} Quantum.Server.Char.Players = {} local function CreateCharTable( args ) return { name = args.name || "UNKNOWN", class = Quantum.Classes[args.class] || Quantum.Classes[1], maxhealth = Quantum.Server.Settings.MaxHealth, health = args.health || Quantum.Server.Settings.MaxHealth, model = Quantum.Classes[args.class].Models[args.gender][args.modelIndex] || "models/player.mdl", money = args.money || Quantum.Server.Settings.StarterMoney, inventory = args.inventory || {}, -- create new inventory later jobs = args.jobs || { [1] = { title = "Unemployed", level = -1 }, }, skills = args.skills || { crafting = 0, cooking = 0, combat = 0, science = 0 }, training = args.training || {}, licenses = args.licenses || {}, titles = args.titles || {} } end function Quantum.Server.Char.Load( pl, index, tbl ) local id = pl:SteamID() .. ";" .. index if( Quantum.Server.Char.Players[ id ] == nil ) then Quantum.Server.Char.Players[ id ] = CreateCharTable( tbl ) -- create the character Quantum.Server.Char.Players[ id ].inventory = tbl.inventory || Quantum.Server.Inventory.Create( Quantum.Server.Char.Players[ id ] ) -- give the character an inventory Quantum.Debug( "Created character (" .. id .. ")" ) return Quantum.Server.Char.Players[ id ] else Quantum.Error( "Tried to duplicate character! Index already used. (" .. id .. ")" ) end end function Quantum.Server.Char.Remove( pl, index ) local id = pl:SteamID() .. ":" .. index if( Quantum.Server.Char.Players[ id ] ~= nil ) then Quantum.Server.Char.Players[ id ] = nil Quantum.Debug( "Removed character (" .. id .. ")" ) end end function Quantum.Server.Char.GetCurrentCharacter( pl ) if( pl.character == nil ) then Quantum.Error( tostring( pl ) .. " doesn't have a character! Unable to get current character table." ) end return pl.character end local function setupCharacter( pl, char ) pl.isloaded = true pl:Spawn() pl:SetMaxHealth( char.maxhealth ) pl:SetHealth( char.health ) pl:SetModel( char.model ) end function Quantum.Server.Char.SetCurrentCharacter( pl, index ) local id = pl:SteamID() .. ";" .. index if( Quantum.Server.Char.Players[ id ] ) then pl.character = Quantum.Server.Char.Players[ id ] pl.charindex = index setupCharacter( pl, pl.character ) return pl.character else Quantum.Error( "Unable to set " .. tostring(pl) .. " character (" .. id .. "). Character not found!" ) return nil end end function Quantum.Server.Char.GetPlayerChars( pl ) local chars = {} local strtbl = {} for id, char in pairs( Quantum.Server.Char.Players ) do strtbl = string.Split( id, ";" ) if( strtbl[1] == pl:SteamID() ) then chars[id] = char end end return chars end function Quantum.Server.Char.GetCharCount( pl ) return table.Count( Quantum.Server.Char.GetPlayerChars( pl ) ) || 0 end local function getBasicCharInfo( char ) return { name = char.name, model = char.model, class = char.class.Name, job = char.jobs[1] } end function Quantum.Server.Char.GetPlayerChars_cl( pl ) local chars = {} local count = 0 for id, char in pairs( Quantum.Server.Char.GetPlayerChars( pl ) ) do count = count + 1 chars[count] = getBasicCharInfo( char ) end return chars end