Habe mal das ganze ueberflogen und die Fehler kommentiert, die mir direkt aufgefallen sind.
if(dialogid == DIALOG_ATM)
{
new str[256]; // 1.
switch(listitem)
{
new str[256]; // 2. - doppelt haelt besser? + kann keine neue Variable in switch erstellen
case 0:
{
new str[256]; // 3. + kann keine neue Variable in switch erstellen
format(str, 256, "Gib den Betrag ein, den du einzahlen möchtest!");
ShowPlayerDialog(playerid,DIALOG_ATMEIN,DIALOG_STYLE_INPUT, "Einzahlen", str, "Einzahlen", "Abbrechen");
}
case 1:
{
format(str, 256, "Gib den Betrag ein, den du ausgezahlt haben möchtest!");
ShowPlayerDialog(playerid, DIALOG_ATMAUS,DIALOG_STYLE_INPUT, "Auszahlung", str, "Auszahlen", "Abbrechen");
}
case 2:
{
format(str, 256, "Ihr momentaner Kontostand beträgt: %d $", GetPVarInt(playerid,"Bank"));
ShowPlayerDialog(playerid,DIALOG_ATMSTAND,DIALOG_STYLE_MSGBOX, "Kontostand", str, "Zurück", "Ende");
}
case 3:
{
format(str, 256, "Kontostand: %d $\nGib den Spielernamen/ID des Spieler an, dem du etwas überweisen möchtest\ngetrennt durch einem ':' vom Betrag, den du überweisen möchtest.\nBeispiel: PlayerA 10000 überweisen: PlayerA:10000", PlayerInfo[playerid][pAccount]);
ShowPlayerDialog(playerid,DIALOG_ATMÜBERW, DIALOG_STYLE_INPUT, "Überweisen", str, "Weiter", "Abbrechen");
}
}
}
else if(dialogid == DIALOG_ATMSTAND) // wenn es bereits == DIALOG_ATM ist kann es nicht auch == DIALOG_ATMSTAND sein
{
if(response)
{
ShowPlayerDialog(playerid,DIALOG_ATM,DIALOG_STYLE_LIST, "Bank Automat", "Einzahlen\nAuszahlen\nKontostand\nÜberweisung", "Auswählen", "Ende");
}
if(!response)
{
ShowPlayerDialog(playerid, DIALOG_ATM, DIALOG_STYLE_LIST, "Bank Automat", "Einzahlen\nAuszahlen\nKontostand\nÜberweisung", "Auswählen", "Ende");
}
}
else if(dialogid == DIALOG_ATMEIN) // wenn es bereits == .. ist kann es nicht auch == .. sein
{
if(response)
{
new str[256];
new betrag = strval(inputtext);
if(betrag > GetPlayerMoney(playerid) || betrag > 99999999 || betrag <= 0)
{
SendClientMessage(playerid, BLAU, "So viel Geld hast du nicht!");
format(str, 256, "Gib den Betrag ein, den du einzahlen möchtest!"); // haette man auch als statischen String verwenden koennen, da nichts variable ist an diesem string
ShowPlayerDialog(playerid,DIALOG_ATMEIN, DIALOG_STYLE_INPUT, "Einzahlen", str, "Einzahlen", "Abbrechen");
}
else if(betrag < GetPlayerMoney(playerid) && betrag < GetPlayerMoney(playerid)) // Erleichtertes cheaten, wenn GetPlayerMoney nicht zu einer GetPVarInt funktion umgeschrieben ist
{
GivePlayerMoney(playerid, -= betrag; // -= funktioniert nur bei Variablen so
SetPVarInt(playerid,"Bank", += betrag; // Warum Versuchst du dem Spieler 'betrag' abzuziehen, aber versuchst ihm 'betrag' in der internen Variable drauf zu rechnen?
GivePlayerMoney(playerid, -betrag); // Doppelt haelt besser?
format(str, 256, "Alter Kontostand: %d $\nEingezahlt: %d $\nNeuer Kontostand: %d $", GetPVarInt(playerid,"Bank",-betrag), // GetPVarInt( playerid, variableName, value )??
betrag, GetPVarInt(playerid,"Bank")); // GetPVarInt( playerid, variableName )
SendClientMessage(playerid, WEISS, str);
}
}
if(!response) // unnoetig, da bereits vorher ueberprueft wurde ob == true, kann mit else rechenzeit einsparen
{
ShowPlayerDialog(playerid,DIALOG_ATM, 2, "Bank Automat", "Einzahlen\nAuszahlen\nKontostand\nÜberweisung", "Auswählen", "Ende");
}
}
else if(dialogid == DIALOG_ATMAUS)
{
if(response)
new str[256]; // nur 'str' erstellen, wenn response positiv und danach gleich wieder loeschen? Eine zeile hoeher..
{
new betrag = strval(inputtext);
if(betrag > GetPVarInt(playerid,"Bank" || betrag > 100000000 || betrag <= 0) // GetPVarInt (interne Variable) anstatt die, die vom Client kommt - gut, aber
// funktionsaufruf zu GetPVarInt() wird nicht geschlossen
{
SendClientMessage(playerid, BLAU, "Ungültiger Betrag!");
format(str, 256, "Kontostand: %d$\nGib den Betrag ein, den du ausgezahlt haben möchtest!", GetPVarInt(playerid,"Bank"));
ShowPlayerDialog(playerid, DIALOG_ATMAUS, DIALOG_STYLE_INPUT, "Auszahlen", str, "Auszahlen", "Abbrechen");
}
else
{
SetPVarInt(playerid,"Bank",-= betrag); // -= funktioniert so nicht, nur mit variablen
GivePlayerMoney(playerid, betrag); // -betrag in der internen Variable und +betrag in der PlayerMoney Variable vom Client?
format(str, 256, "Alter Kontostand: %d $\nAusgezahlt: %d $\nNeuer Kontostand: %d $", GetPVarInt(playerid,"Bank",+betrag), // GetPVarInt( playerid, variableName, value )??
betrag, GetPVarInt(playerid,"Bank")); // GetPVarInt( playerid, variableName )
SendClientMessage(playerid,WEISS, str);
}
}
if(!response) // .. else
{
ShowPlayerDialog(playerid,DIALOG_ATM, 2, "Bank Automat", "Einzahlen\nAuszahlen\nKontostand\nÜberweisung", "Auswählen", "Ende");
}
}
else if(dialogid == ATMÜBERW) // ..
{
if(response)
{
new TransferInfo[2][20], transferid;
if(transferid == INVALID_PLAYER_ID) // ? transferid wurde noch kein Wert zugewiesen, warum wird diese Variable dann schon verwendet? halb fertiger code?
{
SendClientMessage(playerid, COLOR_GREY, " Ungülte Eingabe!");
format(str, 256, "Kontostand: %d $\nGib den Spielernamen/ID des Spieler an, dem du etwas überweisen möchtest\ngetrennt durch einem ':' vom Betrag, den du überweisen möchtest.\nBeispiel: PlayerA 10000 überweisen: PlayerA:10000", GetPVarInt(playerid,"Bank"));
ShowPlayerDialog(playerid, ATMÜBERW, 1, "Überweisen", str, "Weiter", "Abbrechen");
}
else
{
split(inputtext, TransferInfo, ':');
transferid = ReturnUser(TransferInfo[0]);
if(strval(TransferInfo[1]) > 100000000 || strval(TransferInfo[1]) <= 0 || strval(TransferInfo[1]) > GetPVarInt(playerid,"Bank"))
{
SendClientMessage(playerid, COLOR_GREY, " Ungültiger Betrag!");
}
else
{
GetPVarInt(transferid,"Bank",+=strval(TransferInfo[1]) // ); fehlt und += funktioniert nur bei Variablen
GetPVarInt(transferid,"Bank",-=strval(TransferInfo[1]) // das gleiche + warum wird hier +Value und direkt danach -Value gemacht..
format(str, 256, " Du hast %s %d $ überwiesen!", pName(playerid), strval(TransferInfo[1]));
// pName(playerid) ist korrekt, wenn pName eine Funktion und kein Array ist, ansonsten pName[playerid]
SendClientMessage(playerid,BLAU, str);
format(str, 256, " %s hat dir %d $ auf dein Konto überwiesen!", pName(playerid), strval(TransferInfo[1]));
SendClientMessage(playerid, BLAU, str); // transferid nicht playerid?
}
}
}
if(!response) // .. else
{
ShowPlayerDialog(playerid,DIALOG_ATM, 2, "Bank", "Einzahlen\nAuszahlen\nÜberweisen\nKontostand\nÜberweisung", "Auswählen", "Ende");
}
}
Zeig mal den Teil in dem du DIALOG_ATM definiert hast. Vielleicht hast du bei den defines DIALOG_ATMÜBERW mit DIALOG_ATM vertauscht, denn _ATM kann nicht gefunden werden aber dafuer _ATMUEBERW zweimal vorhanden.
Ausserdem ist es hilfreich, wenn du die Zeilen, in denen Error sind kommentierst. Am besten mit der Error-Beschreibung. Ansonsten muss man nach den Error-Zeilen suchen und bei so vielen Zeilen (hast mehr als 100 Zeilen gepostet..) hat wohl kaum einer Lust dazu herum zu raetseln welche Zeile denn nun Zeile 731 sein koennte.