Dieser Code muss serverside ausgefürt werden.
PHP-Code:
local money = {} //Table, in der das Geld für jeden Spieler gespeichert werden soll
util.AddNetworkString( "zmoney" ) //Precache net message name
function AddMoney( ply, amount, addplyifmissing ) //ply = Player, dem das Geld hinzugefügt werden soll (player), amount = der Wert, der dazu addiert werden soll (float/integer/number), addplyifmissing = Soll der spezifisierte Spieler zur Table hinzugefügt werden, falls nicht in der Table? (boolean)
if money[ ply:SteamID() ] != nil then //wenn
money[ ply:SteamID() ] = money[ ply:SteamID() ] +amount
else //Wenn Spieler nicht in der Table
if addplyifmissing then
AddPlayerToPayroll( ply )
AddMoney( ply, amount, false )
else
ErrorNoHalt( "Specified Player '"..ply.."' not in table!" )
end
end
end
function SetMoney( ply, amount, addplyifmissing ) //amount = der Wert, der als Geldbetrag GESETZT werden soll
if money[ ply:SteamID() ] != nil then
money[ ply:SteamID() ] = amount
else
if addplyifmissing then
AddPlayerToPayroll( ply )
SetMoney( ply, amount, false )
else
ErrorNoHalt( "Specified Player '"..ply.."' not in table!" )
end
end
end
function GetMoney( ply ) //ply = Player, dessen "Kontostand" man wissen will
if money[ ply:SteamID() ] != nil then
return money[ ply:SteamID() ]
else
ErrorNoHalt( "Specified Player '"..ply.."' not in table!" )
end
end
function AddPlayerToPayroll( ply )
money[ ply:SteamID() ] = 0 //erstellt in der Table einen Eintrag mit Namen der SteamID des gejointen Players, welcher auf 0 gesetzt wird
end
//Dieser Hook registriert den Spieler in unserer Table beim ersten Spawnen
hook.Add( "PlayerInitialSpawn", "zmoney_register_ply",
function( ply )
AddPlayerToPayroll( ply )
end
)
//Dieser Hook sollte selbsterklärend sein
hook.Add( "OnNPCKilled", "zmoney",
function( victim, killer, weapon )
if victim:GetClass() == "npc_zombie" then
AddMoney( killer, 20, true )
print( killer:Nick().." received 20$ for killing a "..victim:GetClass().." with a "..weapon:GetClass().."!" )
//Zeugs zum Client senden, damit der den selben Stuff hat, wie der Server
net.Start( "zmoney" )
net.WriteFloat( GetMoney( killer ) )
net.Send( killer )
end
end
)
//BIG NOTE: Statt die Variante mit der Table, geht auch noch etwas anderes: Man nimmt einfach nach wie vor den Spieler, und macht hinter das Objekt (ply) einfach noch .Money dahinter; also ply.Money.
//So kann man dem Entity neh eigene Variable setzen. Würde in AddMoney so aussehen:
--[[
function AddMoney( ply, amount ) //ply = Player, dem das Geld hinzugefügt werden soll (player), amount = der Wert, der dazu addiert werden soll (float/integer/number)
if ply.Money then
ply.Money = ply.Money +amount
else
ply.Money = amount
end
end]]
//Ginge auch. Aber wenn der Player nur mal kurz rejoinen will, ist alles gleich wieder weg. Außerdem können die Clients den Wert nicht auslesen, da das Entity SS ist. Heißt also, dass man den Wert trotzdem wieder zum Client rübersenden muss
//Für den Fall wäre diese Variante schlichtweg noch etwas weniger Schreibarbeit. Die andere Variante hingegen kannst du allgemein bzw. überall verwenden. Außerdem läufst du nicht auf Gefahr mit anderen Variablen zu kollidieren, wenn bei dir oder dem Nutzer noch andere AddOns installiert sind.