[ERROR] Banksystem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • So hab mir grade mal fix ein Banksystem gescriptet (nich wundern InRangeOfPoint hab ich noch net drinne) ja auf jeden fall hab ich ein problem beim saven und laden des bankgeldes hier ist der Script:
    enum spieler_daten
    {
    wanted,
    skin,
    Float:lastx,Float:lasty,Float:lastz,
    eingeloggt,
    bankgeld
    }

    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[MAX_PLAYERS],accFormat[128], Float:saveX, Float:saveY, Float:saveZ;
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);


    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    new
    namee[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(playerid,namee,sizeof(namee));
    format(string,sizeof(string),"%s hat den Server verlassen.",namee);
    SendClientMessageToAll(0xFFFFFFAA,string);
    dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
    dini_IntSet(accFormat,"skin",GetPlayerSkin(playerid));
    GetPlayerPos(playerid,saveX, saveY, saveZ);
    dini_FloatSet(accFormat,"lastx",saveX);
    dini_FloatSet(accFormat,"lasty",saveY);
    dini_FloatSet(accFormat,"lastz",saveZ);
    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"bankgeld",bankgeld(playerid,bankgeld));
    }
    Spieler[playerid][eingeloggt] = 0;
    Spieler[playerid][wanted] = 0;
    Spieler[playerid][skin] = 0;
    return 1;
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(response)
    {
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte log dich mit deinem Passwort ein.","Einloggen","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    bankgeld(playerid, bankgeld,dini_Int(accFormat,"bankgeld"));
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte log dich mit deinem Passwort ein.","Einloggen","Abbrechen");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Registrieren","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
    }
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    Spieler[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
    }
    }
    }
    else
    {
    switch(dialogid)
    {
    case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Weiter","Abbrechen");
    case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Weiter","Abbrechen");
    }
    }
    return 1;
    }

    Errors:
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : error 012: invalid function call, not a valid address
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : warning 215: expression has no effect
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : warning 215: expression has no effect
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : error 001: expected token: ";", but found ")"
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : error 029: invalid expression, assumed zero
    C:\PROGRA~1\GTASAN~1\GTASAN~1\SAMP03~1\GAMEMO~1\Sample.pwn(191) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    in dieser Zeile:
    dini_IntSet(accFormat,"bankgeld",bankgeld(playerid,bankgeld));


    Das Problem liegt beim Speichern und (denk mal) auch beim Laden .. weiß nicht wie ich auf das bankgeld zugreifen kann um es zu speichern "GetPlayerbankgeld" gibts ja nicht desswegen Help ... ;(


    MfG bad_company

  • ich schau mal ..



    //EDIT: Musste zwar jedes "bankgeld" in den befehlen ersetzen aber läuft super danke ^^


    //EDIT2: Hab mal noch ne Frage ich habe den Befehl erstellt /gebegeld um nem anderen Player Geld zu geben ..
    wie kann ich einstellen das das nur geht wen der andere spieler in der nähe ist also in einem bestimmten umkreis ist ??

  • was mus da bei x,y,z rein ?? zB 1.0,1.0,1.0 also das das geht wen der 1 coord nah an dem dran ist ?


    //EDIT: und bei einem Chat wie mache ich es da das alle leute in einem bestimmten umkreis das lesen können ??

  • 1.
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    /* Jetzt eine for schleife und dan die ifAbfrage mt IsPlayerInRangeOfPoint(variable,radius,x,y,z).
    Hier die variable eintragen der schleife anstatt playerid eintragen.
    Den radius auf 1.0 oder wie du willst stellen bei den coords einfach x,y,z eintragen.
    und dan halt scripten was passieren soll wen er in der nähe ist.*/


    Ich gebe dir nicht den ganzen code weil du bissl rätseln sollst ^^.
    Wen du hilfe benötigst schreib hier rein.


    2.
    Genau das gleiche wie bei 1.

  • finde ich gut dan lern ichs gleich ^^ oki ich probiers


    //EDIT:
    Hier:
    dcmd_gebegeld(playerid,params[])
    {


    new moneyid,
    moneyamount;



    if(IsPlayerInRangeOfPoint(moneyid,radius,1.0,1.0,1.0))

    if(sscanf(params,"dd",moneyid,moneyamount))
    {

    SendClientMessage(playerid,0xFF0000FF," /gebegeld [ID] [Geld] ");
    }


    else if(!IsPlayerConnected(moneyid))
    {

    SendClientMessage(playerid,0xFF0000FF," Spieler nicht online!");
    }


    else if(moneyamount < 1 || moneyamount > 50000)
    {

    SendClientMessage(playerid,0xFF0000FF," Summe ungültig!");
    }

    else
    {
    new
    name[MAX_PLAYER_NAME],

    mname[MAX_PLAYER_NAME],
    string[128];

    GetPlayerName(moneyid,name,sizeof(name));

    GetPlayerName(playerid,mname,sizeof(mname));



    format(string,sizeof(string),"Du hast $%d von %s
    bekommen!",moneyamount,mname);

    SendClientMessage(moneyid,0xFFFF00AA,string);

    GivePlayerMoney(moneyid,moneyamount);



    format(string,sizeof(string),"Du hast $%d an %s
    geschickt!",moneyamount,name);

    SendClientMessage(playerid,0xAA3333AA,string);

    GivePlayerMoney(playerid,-moneyamount);
    }
    return 1;
    }
    alles
    in ordnung und die floats sind wegen meinem register system schon oben
    definiert aber das problem ist :

    if(IsPlayerInRangeOfPoint(moneyid,radius,1.0,1.0,1.0))
    es kennt
    das radius nicht was muss ich da machen ?

  • Du kannst nicht einfach radius hinschreiben.
    Musste selbst bestimmen.
    1.0 ist gut.


    dcmd_gebegeld(playerid,params[])
    {
    new moneyid,
    moneyamount;


    if(sscanf(params, "ud",moneyid,moneyamount)) { return SendClientMessage(playerid,FARBCODE,"/gebegeld [playerid] [money]"); } /* Ohne das return würde er weiter im script machen.*/


    if(moneyamount < 1 || moneyamount > 50000) { return SendClientMessage(playerid,FARBCODE,"Ungültige Summe!"); }


    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);


    if(IsPlayerInRangeOfPoint(moneyid,1.0,x,y,z))
    {
    new givename[MAX_PLAYER_NAME],becomename[MAX_PLAYER_NAME],string[2][128];
    GetPlayerName....
    GetPlayerName.....
    format(string[0],sizeof(string[0]),".......
    format(string[1],sizeof(string[1]),".......
    }
    else { return SendClientMessage(playerid,FARBCODE,"Der Spieler ist nicht in deiner nähe"); }
    return 1;
    }


    So muss es in der art aussehen.
    Kann fehler beinhalten.
    Ungetestet!

  • dcmd_gebegeld(playerid,params[])
    {


    new moneyid, moneyamount, Float:x, Float:y, Float:z;


    if(IsPlayerInRangeOfPoint(moneyid,1.0,x,y,z))
    if(sscanf(params,"dd",moneyid,moneyamount))
    {
    SendClientMessage(playerid,0xFF0000FF," /gebegeld [ID] [Geld] ");
    }
    else if(!IsPlayerInRangeOfPoint(moneyid,1.0,x,y,z))
    {
    SendClientMessage(playerid,0xFF0000FF," Spieler nicht in der Nähe!");
    }
    else if(!IsPlayerConnected(moneyid))
    {
    SendClientMessage(playerid,0xFF0000FF," Spieler nicht online!");
    }
    else if(moneyamount < 1 || moneyamount > 50000)
    {
    SendClientMessage(playerid,0xFF0000FF," Summe ungültig!");
    }
    else
    {
    new
    name[MAX_PLAYER_NAME],
    mname[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(moneyid,name,sizeof(name));
    GetPlayerName(playerid,mname,sizeof(mname));


    format(string,sizeof(string),"Du hast $%d von %s bekommen!",moneyamount,mname);
    SendClientMessage(moneyid,0xFFFF00AA,string);
    GivePlayerMoney(moneyid,moneyamount);


    format(string,sizeof(string),"Du hast $%d an %s geschickt!",moneyamount,name);
    SendClientMessage(playerid,0xAA3333AA,string);
    GivePlayerMoney(playerid,-moneyamount);
    }
    return 1;
    }
    Werde es mal mit mein Kumpel testen ^^ mal schauen.