Auf Nachfrage von @Muho55 poste ich hier den Code zum Geld-System mit Cent-Beträgen.
Es ist zwar etwas mehr als nur ein Schnipsel, aber für einen separaten Release ist mir das dann doch zu wenig.
Für ein Tutorial lohnt sich das auch nicht wirklich, da der Code, bis auf die Berechnung, selbsterklärend ist.
Anbei der Code:
new PlayerText:pMoneyText[MAX_PLAYERS];
new pMoney[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
pMoneyText[playerid] = CreatePlayerTextDraw(playerid, 496.0000, 79.0000, "$0,00");
PlayerTextDrawColor(playerid, pMoneyText[playerid], 0x27941EFF);
PlayerTextDrawLetterSize(playerid, pMoneyText[playerid], 0.4000, 2.0000);
PlayerTextDrawUseBox(playerid, pMoneyText[playerid], 1);
PlayerTextDrawBoxColor(playerid, pMoneyText[playerid], 0x000000FF);
PlayerTextDrawAlignment(playerid, pMoneyText[playerid], 1);
PlayerTextDrawTextSize(playerid, pMoneyText[playerid], 610.0000, 10.0000);
PlayerTextDrawSetShadow(playerid, pMoneyText[playerid], 0);
pMoney[playerid] = 0; //Entsprechend beim Laden des Spielers mit Wert befüllen.
return 1;
}
public OnPlayerSpawn(playerid)
{
PlayerTextDrawShow(playerid, pMoneyText[playerid]);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
PlayerTextDrawDestroy(playerid, pMoneyText[playerid]);
return 1;
}
stock GivePlayerMoneyEx(playerid, money)
{
if(!IsPlayerConnected(playerid)) return 0;
pMoney[playerid] += money;
new str[16];
if(pMoney[playerid] >= 0)
{
format(str, sizeof(str), "$%d,%02d", pMoney[playerid]/100, pMoney[playerid]%100);
for(new i = strlen(str)-6; i > 1; i-=3) strins(str, ".", i);
PlayerTextDrawColor(playerid, pMoneyText[playerid], 0x27941EFF);
}
else
{
format(str, sizeof(str), "$%d,%02d", (pMoney[playerid]/100)+1, ((pMoney[playerid]%100)-100)*-1);
for(new i = strlen(str)-6; i > 2; i-=3) strins(str, ".", i);
PlayerTextDrawColor(playerid, pMoneyText[playerid], 0xFF0000FF);
}
PlayerTextDrawSetString(playerid, pMoneyText[playerid], str);
PlayerTextDrawShow(playerid, pMoneyText[playerid]);
return 1;
}
stock ResetPlayerMoneyEx(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
GivePlayerMoneyEx(playerid, -pMoney[playerid]);
return 1;
}
stock SetPlayerMoneyEx(playerid, money)
{
if(!IsPlayerConnected(playerid)) return 0;
ResetPlayerMoneyEx(playerid);
GivePlayerMoneyEx(playerid, money);
return 1;
}
stock GetPlayerMoneyEx(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
return pMoney[playerid];
}
stock GetPlayerMoneyEx_Str(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
new str[16];
if(pMoney[playerid] >= 0)
{
format(str, sizeof(str), "$%d,%02d", pMoney[playerid]/100, pMoney[playerid]%100);
for(new i = strlen(str)-6; i > 1; i-=3) strins(str, ".", i);
}
else
{
format(str, sizeof(str), "$%d,%02d", (pMoney[playerid]/100)+1, ((pMoney[playerid]%100)-100)*-1);
for(new i = strlen(str)-6; i > 2; i-=3) strins(str, ".", i);
}
return str;
}
Außerdem hatte Muho55 gewünscht, die Sprunk-Maschinen (etc) abzufangen.
Hierzu kann diese Include verwendet werden: http://forum.sa-mp.com/showthread.php?t=367838
Eine Einschränkung ergibt sich auf Grund des 32-Bit Limits in SA:MP.
Der maximale Geld-Betrag liegt bei +/-21.474.836,47. (https://de.wikipedia.org/wiki/2147483647)
Solange man nicht mit Millionenbeträgen jongliert, sollte das aber ausreichend sein.
Anbei noch Beispielbilder:
Das TextDraw-Design kann natürlich angepasst werden, ich habe nur beispielhaft ein simples Design genommen.
Für Nachfragen zum Code bitte die Scripting Base nutzen: Scripting Base