Hallo Community,
wie kann man scripten das wenn man sich Geld cheaten das es sofort wieder weg geht?
Also das man sich mit dem Cleo oder S0beit kein Geld cheaten kann?
Hoffe ihr könnt mir helfen
LG
Hallo Community,
wie kann man scripten das wenn man sich Geld cheaten das es sofort wieder weg geht?
Also das man sich mit dem Cleo oder S0beit kein Geld cheaten kann?
Hoffe ihr könnt mir helfen
LG
Ganz einfach in dem du das Serverseitig machst mit einem array du kannst auch das enum für dein Spielerarray auch erweitern.
Dies solltest du dann via timer oder geldbewegungen überprüfen
ZitatAlso das man sich mit dem Cleo oder S0beit kein Geld cheaten kann?
Wie mein Vorredner bereits sagte, in Playervariablen/enums speichern. Also niemals den beim Player angezeigten Wert nehmen um Überprüfungen nach Geld zu machen oder das Geld zu speichern. Immer wo Geld abgezogen wird zuerst die Variable ändern lassen, dann die Änderung zum Spieler schicke um sie ihm anzuzeigen.
Danke, aber damit komme ich nicht weit...
Nach dem Prinzip(PlayerMoney = das was du als Speicherung nimmst):
if(GetPlayerMoney(playerid) > PlayerMoney[playerid])
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,PlayerMoney[playerid]);
return 1;
}
// So gibst du dann nurnoch geld:
stock SetPlayerMoney(playerid,geld)
{
GivePlayerMoney(playerid,geld);
PlayerMoney[playerid]=geld;
return 1;
}
kA ob es nun ganz richtig ist aber nach so nen Prinzip musst du es machen - alles hier im Post geschrieben daher kann es fehlerhaft sein
Man kann sich durch s0beit kein Geld cheaten, nur als Info, das Geld cheaten funkt bei s0beit nur im Singleplayer.
#include <ocmd>
#define Grün 0xFFFF00AD
if(strcmp(cmd, "/money", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /money [Spieler ID] [Geldbetrag]");
return 1;
}
new playa;
new money;
playa = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
money = strval(tmp);
if (PlayerInfo[playerid][pAdmin] >= 1338) //Dein AdminLevel
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
ResetPlayerMoney(playa);
ConsumingMoney[playa] = 1;
GivePlayerMoney(playa, money);
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "AdmCmd: %s hat %s's Geld auf %d$ gesettet!",sendername,giveplayer,money);
ABroadCast(COLOR_LIGHTRED,string,4);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Das darfst du nicht tun!");
}
}
return 1;
}
LG
smaxzz
Viel spaß damit
Alles anzeigen
#include <ocmd>
#define Grün 0xFFFF00AD
ocmd:Money(playerid,params[])
{
SetPlayerMoney(playerid,100000);
SendClientMessage(playerid,Grün,"Admin %s Hat sich geld geben.);
return 1;
}
Wird so nie funktionieren, für die Nachricht brauchst du ein string
Man kann sich durch s0beit kein Geld cheaten, nur als Info, das Geld cheaten funkt bei s0beit nur im Singleplayer.
Nope kann man ganz normal solange der Server es nicht verhindert.
Alles anzeigen
#include
#define Grün 0xFFFF00AD
ocmd:Money(playerid,params[])
{
SetPlayerMoney(playerid,100000); //Da kannst du das Geld einstellen..
SendClientMessage(playerid,Grün,"Admin %s Hat sich geld geben.);
return 1;
}
LG
smaxzz
Viel spaß damit
Danach hat er nicht gefragt?? Mal lesen und keine komischen Posts machen??
Sowas wollte ich nichtmal....
Ich wollte ein system, wenn ein Spieler sich geld Cheatet das dass Geld wieder abgezogen wird
Achso.. sry
@Roberto_Carlos
Ja, aber man kann damit nichts kaufen, Waffen whatever... ?
brauche noch hilfe
Du musst einfach das Geld serverseitig laufen lassen. (Einfach gedacht: Einen neuen Stock namens GivePlayerGeld) - Ich mache das ganze über MySQL.
Nun brauchste nurnoch einen Timer, der überprüft ob der aktuelle Geldbetrag auch dem Geldbetrag in der Datenbank gleicht.
Wenn nicht -> Geld abziehen.
Das Problem an GetPlayerMoney ist, dass es den Wert zurück gibt, der beim Spieler angezeigt wird. Das von dir genannte Programm verändert lediglich diesen Wert. Als Resultat gibt GetPlayerMoney dir den falschen Betrag wieder. Um das ganze zu verhindern musst du das Geld, wie schon mehrmals erwähnt, über den Server laufen lassen und GivePlayerMoney nur zum Anzeigen verwenden. Das heißt: Du schreibst dir eigene Funktionen zum setzen/returnen des Betrages und updatest die Anzeige per GivePlayerMoney:
new pMoney[MAX_PLAYERS];
GiveMoney(playerid, money)
{
pMoney[playerid] += money;
GivePlayerMoney(playerid, money);
}
GetMoney(playerid)
{
return pMoney[playerid];
}
Nun wird pMoney zum speichern des Geldes verwendet und GivePlayerMoney nur zum Anzeigen.
Wenn ein Spieler also die Anzeige per Programm verändert, liefert dir GetPlayerMoney einen anderen Wert als GetMoney. Damit kannst du herausfinden ob und wieviel Geld sich ein Spieler gecheatet hat.
Dann kannst du mit GivePlayerMoney(playerid, -betrag) das Geld wieder abziehen, sodass die Anzeige mit deiner Variable übereinstimmt.