Guten Tag SA:MP'Ler,
hiermit möchte ich euch das 8D. Cashsystem vorstellen.
Dieses Cashsystem ersetzt das normale Geldsystem aus SA:MP.
Dies hat mehrere Vorteile, unter anderem:
- Automaten werden automatisch deaktivert, wenn kein "normales Geld" vorhanden ist.
- Leicht erkennbares Cheating, sofern Casino & Stuntbonus deaktiviert sind.
- Dollar & Cent System.
Wie gesagt, arbeitet dieses System mit richtigem Geldformat, also Dollar und Cents.
Nun zu den Funktionen:
GivePlayerCash(playerid,dollars,cents)
Mit dieser Funktion, gebt ihr dem Spieler(playerid) Geld in Form von Dollar & Cents. (dollars,cents);
EnoughCash(playerid,dollars,cents)
Hiermit fragt ihr ab, ob der Spieler(playerid) genügend Geld in Form von Dollar (dollars) & Cents (cents) hat.
Wenn ja, wird 1 zurückgegeben, wenn nicht 0.
ResetPlayerCash(playerid)
Hiermit setzt ihr das Geld des Spielers auf 0. Beides - Dollar und Cents.
GetPlayerDollars(playerid)
Gibt den Dollar-Wert des Spielers(playerid) zurück.
GetPlayerCents(playerid)
Gibt den Cent-Wert des Spielers(playerid) zurück.
SetPlayerCash(playerid,dollars,cents)
Setzt das Geld des Spielers(playerid), in Form von Dollar(dollars) & Cents(cents).
Das ganze sieht dann im Spiel so aus.
Nun fragen sich bestimmt Leute, wie man denn dann /pay Befehl benutzt.
Bestimmt denkt ihr an /pay [playerid] [dollar] [cents]. Geht dann zwar auch, aber warum die Lücke zwischen Dollar und Cents.
Anhand von dcmd & sscanf, geht das ganze auch so.
dcmd_zahlen(playerid,params[])
{
new giveplayerid,dollars,cents;
if(sscanf(params, "up.dd",giveplayerid,dollars,cents)) {
SendClientMessage(playerid,COLOR_RED,"Verwendung: /zahlen [playerid] [Dollars.Cents]");
SendClientMessage(playerid,COLOR_RED,"Beispiel: /zahlen 0 4.50 (Es ist wichtig, dass ihr den Cent-Betrag genau ausschreibt. Bsp: 4.50 (50Cent) und nicht 4.5 (5 Cent).");
return 1;
}
if(!IsPlayerConnected(giveplayerid)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
if(giveplayerid == playerid) {
return SendClientMessage(playerid,COLOR_RED,"Du kannst dir nicht selber Geld zahlen.");
}
if(!EnoughCash(playerid,dollars,cents))
{
return SendClientMessage(playerid,COLOR_RED,"Du hast nicht genügend Geld.");
}
GivePlayerCash(giveplayerid,dollars,cents);
GivePlayerCash(playerid,-dollars,-cents);
return 1;
}
Wie im Command zu sehen ist es wichtig, dass ihr den vollen Cent-Betrag ausschreibt. Also nicht /zahlen [playerid] 4.5 für 4.50$, sondern /zahlen [playerid] 4.50
Damit könnt ihr dann ganz einfach den Dollar-Wert von dem Cent-Wert durch einen "." im Command und nicht durch die Leertaste trennen.
Geht aber auch beides.
Des weiteren möchte ich noch erwähnen, dass das / der TXD nicht per Timer (Ressourcenlast) up to date gehalten wird, sondern durch den GivePlayerCash befehl. (Ressourcenschonend).
Wie ihr die include benutzt:
Oben im Script:
#include <8d-geldsystem>
Bei OnPlayerConnect:
GS_Connect(playerid);
Bei OnPlayerDisconnect:
GS_Disconnect(playerid)
Copyrightsmerkmale:
- In der Include per Kommentar (KEIN ENTFERNEN ERLAUBT)
- Bei OnPlayerConnect per SendClientMessage (ENTFERNEN ERLAUBT, aber würde mich freuen, wenn es drinnen bleibt).
Download:
- pastebin - http://pastebin.com/Qf8uTWZF
- solidfiles - http://solidfiles.com/d/518d/
P.S. Fehler & Vorschläge und Bugs können gerne geäußert werden.