|
|
|
-- __ _ _______ _ __
|
|
|
|
-- / / /\ | | |__ __| | | \ \
|
|
|
|
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
|
|
|
|
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
|
|
|
|
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
|
|
|
|
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
|
|
|
|
|
|
|
|
Quantum.Server.Char = {}
|
|
|
|
Quantum.Server.Char.Players = {}
|
|
|
|
|
|
|
|
local function CreateCharTable( args )
|
|
|
|
return {
|
|
|
|
name = args.name || "UNKNOWN",
|
|
|
|
maxhealth = Quantum.Server.Settings.MaxHealth,
|
|
|
|
health = math.Clamp( args.health, 0, Quantum.Server.Settings.MaxHealth ) || Quantum.Server.Settings.MaxHealth,
|
|
|
|
model = args.model || "models/player.mdl",
|
|
|
|
money = args.money || Quantum.Server.Settings.StarterMoney,
|
|
|
|
inventory = args.inventory || {}, -- create new inventory later
|
|
|
|
jobs = args.jobs || {
|
|
|
|
[1] = { title = "Hobo", 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.Inventory.Create( Quantum.Server.Char.Players[ id ] ) -- give the character a inventory
|
|
|
|
|
|
|
|
Quantum.Debug( "Created character (" .. 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: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 ]
|
|
|
|
setupCharacter( pl, pl.character )
|
|
|
|
return pl.character
|
|
|
|
else
|
|
|
|
Quantum.Error( "Unable to set " .. tostring(pl) .. " character. Character not found!" )
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
end
|