Quantum is a Garry's Mod RPG framework.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
quantum/gamemode/engine/lib/server/sv_character.lua

138 lines
4.3 KiB

-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
Quantum.Server.Char = {}
Quantum.Server.Char.Players = {}
local function CreateCharTable( args )
local rand = table.Random(Quantum.Classes)
local randMdl = rand.Models[ args.gender ][ math.random(1, #rand.Models[ args.gender ]) ]
local setMdl
if( args.class == nil ) then
setMdl = randMdl
else
setMdl = Quantum.Classes[args.class].Models[args.gender][args.modelIndex]
end
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 = setMdl || "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.deathpos = nil
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
pl:SetNWString( "q_char_name", pl.character.name )
Quantum.Net.Inventory.Update( pl ) -- update the players inventory on char change
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
function Quantum.Server.Char.getBasicCharInfo( char )
return {
name = char.name,
model = char.model,
class = char.class.Name,
job = char.jobs[1],
money = char.money
}
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] = Quantum.Server.Char.getBasicCharInfo( char )
end
return chars
end
function Quantum.Server.Char.GetInventory( char )
return char.inventory
end
function Quantum.Server.Char.GetInventory_cl( char )
local inv = Quantum.Server.Char.GetInventory( char )
local returninv = {}
for i, item in pairs( inv ) do returninv[i] = { id = item.id, amount = item.amount } end
return returninv
end