AW: Geld für jeden getöteten Zombie
AW: Geld für jeden getöteten Zombie
Habe mich umentschieden. Habe gerade Lust drauf, und Code das heute Nachmittag doch mal eben schnell vor.
Wenn du willst, kannst du mich auch mal in Steam adden.
AW: Geld für jeden getöteten Zombie
Danke ;)
klar adde ich dich, danke für das angebot :)
Edit: Wie soll das mit dem Link funktionieren? Hab das noch nie so gemacht.
AW: Geld für jeden getöteten Zombie
Spoiler:
sv_zmoney.lua
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.
Spoiler:
cl_zmoney.lua
Dieser Code muss clientside ausgefürt werden.
PHP-Code:
local money = 0
net.Receive( "zmoney", function( len, ply ) money = net.ReadFloat() end ) //empfängt den Wert vom Server
function GetMoneyCS() return money end //gibt dir clientseitig dein Geld aus
Durch den Spaß bin ich jetzt wieder mal in GMod an etwas am arbeiten. :D
AW: Geld für jeden getöteten Zombie
Vielen vielen Dank für die Mühe :) :up: Vor allem danke das du es so schön auskommentiert hast! Sehr hilfreich! :up:
Zitat:
Zitat von
RP-01
Durch den Spaß bin ich jetzt wieder mal in GMod an etwas am arbeiten. :D
An was wenn ich fragen darf :?
Ich habe gerade auch ein paar gute Ideen die ich in nächster Zeit versuchen werde umzusetzen, z.B. eine runde Platte die einen nach oben katapultiert wenn man sie betritt, weiss nicht ob es das schon gibt, aber der Code sollte eigentlich ziemlich einfach sein nehme ich mal an.