Gebiete kaufbar

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
  • Ich habe vor das wenn zu ein Gelände gehe das da ein Schild steht das es noch zu kaufen sei.


    Ich habe es so angefangen:


    Enum:
    enum Firmengeleande
    {
    Float:F_X,
    Float:F_Y,
    F_Price
    }


    new Firmengebiete[][Firmengeleande] =
    {
    {786.2288,-1329.5417}
    };


    Befehle:
    ocmd:kaufefirmengelände(playerid,params[])
    {
    return 1;
    }


    Bei mein playerInfo enum muss ich nur noch einfügen Gelände und eine extra Spalte in der Datenbank.


    Nur meine Frage ist halt jetzt wie bekomme ich das nun hin das mein Firmengeleande enum mit den x,y Koordinaten nun zu kaufen sind?



    Folgendes Steht in der Save.txt datei:

    Code
    AddPlayerClass(0,786.2288,-1384.1666,13.7240,13.4658,0,0,0,0,0,0); // xgebiet1
    AddPlayerClass(0,647.8892,-1329.5417,22.5548,347.7722,0,0,0,0,0,0); // ygebiet1



    Wäre sehr dankbar wenn man mir helfen könnte da ich nicht so ganz weiter komme.



    ps: Wenn ihr das playerInfo enum braucht meldet es bitte.

  • Ich würde das Enum so machen:



    enum Firmengeleande
    {
    Float:F_MinX,
    Float:F_MinY,
    Float:F_MaxX,
    Float:F_MaxY,
    Float:F_KaufX,
    Float:F_KaufY,
    Float:F_KaufZ,
    F_Price
    }


    und dann kannst du auch das Gebiet dementsprechend ändern:



    new Firmengebiete[][Firmengeleande] =
    {
    {647.8892,-1384.1666,786.2288,-1329.5417,F_KaufX, F_KaufY,F_KaufZ,5}
    /*
    Habe ich hierraus geholt:
    AddPlayerClass(0,786.2288,-1384.1666,13.7240,13.4658,0,0,0,0,0,0); // xgebiet1
    AddPlayerClass(0,647.8892,-1329.5417,22.5548,347.7722,0,0,0,0,0,0); // ygebiet1
    */
    };



    Befehl würde ich so umändern:



    ocmd:kaufefirmengelände(playerid,params[])
    {
    for(new fg;fg<sizeof(Firmengebiete);fg++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[fg][F_KaufX], Firmengebiete[fg][F_KaufY], Firmengebiete[fg][F_KaufZ]))
    {
    }
    else SendClientMessage(playerid, RED, "Du bist nich am Kaufpunkt des Firmengeländes!");
    }
    return 1;
    }



    Ich würde es nach dem Prinzip Aufbauen :)


    LG
    J0a9

  • Auf Anfrage in PN:


    Wie gesagt, das ganze System kann ich dir nicht schreiben. Versuche bitte, anhand dessen weiterzuarbeiten:
    enum Firmengeleande
    {
    Float:F_MinX,
    Float:F_MinY,
    Float:F_MaxX,
    Float:F_MaxY,
    Float:F_KaufX,
    Float:F_KaufY,
    Float:F_KaufZ,
    F_Price,
    F_Object,
    Text3D:F_Label,
    F_Besitzer[MAX_PLAYER_NAME]
    }


    new Firmengebiete[][Firmengeleande] =
    {
    {647.8892,-1384.1666,786.2288,-1329.5417,F_KaufX, F_KaufY,F_KaufZ,5}
    };Hier muss du noch die drei Koordinaten ausfüllen, mit einer Koordinate innerhalb des Gebietes.


    OnGameModeInit:
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    //CreateObject an Position: Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]
    //3DTextLabel an der Position erstellen
    }


    ocmd:kaufefirmengelände(playerid,params[])
    {
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengeländes!");
    }


    Versuche anhand dessen die Kommentare mit Codes zu füllen.

  • ich habe es jetzt so gemacht:


    ocmd:kaufefirmengelaende(playerid,params[])
    {
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengeländes!");
    }


    aber wie speicher ich denn nun das gebeit in den Account vom Spieler?


    Ich habe es in mein sInfo gepackt:


    enum playerInfo{
    eingeloggt,
    level,
    db_id,
    alevel,
    fraktion,
    rang,
    spawnchange,
    firma
    }


    OnPlayerConnect:
    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    new nachricht[128];
    format(nachricht,sizeof(nachricht),"Du bist mit der ID %i verbunden.",playerid);
    SendClientMessage(playerid,rot,nachricht);
    //Login/Register:
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s' ",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    SendClientMessage(playerid,grün,"Willkommen auf Reallife Version 0.1.4! Wir wünschen euch ein angenehmen Spiel spaß bei uns!");
    //textdraws anzeigen:
    TextDrawShowForPlayer(playerid,Text:uhrzeitLabel);
    TextDrawShowForPlayer(playerid, Jahr);
    SetPlayerColor(playerid,weiß);
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]=1;
    return 1;
    }


    Speichern und Neusetzen des Spielers:
    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i'WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }
    resetPlayer(playerid)
    {
    for(new i=0; i<sizeof(sInfo[]); i++)
    {
    sInfo[playerid][playerInfo:i]=0;
    }
    return 1;
    }


    Discinnect:
    public OnPlayerDisconnect(playerid, reason)
    {
    savePlayer(playerid);
    resetPlayer(playerid);
    loadPlayerCars(playerid);
    return 1;
    }


    public OnPasswordResponse(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort Richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][firma] =cache_get_field_content_int(0,"firma",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    loadPlayerCars(playerid);


    }
    else
    {
    //Passwort Falsch
    SendClientMessage(playerid,grün,"Du hast dein Passwort falsch eingetippt. Versuche es nochmal!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    return 1;
    }


    ich weiß nun nicht ob es gespeichert wird oder nicht da in der Datenbank immer mit 0 angezeigt wird. Ich will auch das es nur 1mal zu kaufen gibt und man es dann als anderen Spieler nicht kaufen kann mehr

  • Du musst eben standardmäßig sInfo[playerid][firma] auf -1 setzen, und wenn der Spieler dann bereits eines hat:
    if(sInfo[playerid][firma] != -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast bereits eine Firma.");


    Und bei OnPlayerConnect eben:
    sInfo[playerid][firma]=1;
    zu:
    sInfo[playerid][firma]=-1;


    Beim Registrieren auch auf -1 setzen.

  • Jeffry ich habe das bei mir so rein gemacht:


    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    new nachricht[128];
    format(nachricht,sizeof(nachricht),"Du bist mit der ID %i verbunden.",playerid);
    SendClientMessage(playerid,rot,nachricht);
    //Login/Register:
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s' ",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    SendClientMessage(playerid,grün,"Willkommen auf Reallife Version 0.1.4! Wir wünschen euch ein angenehmen Spiel spaß bei uns!");
    //textdraws anzeigen:
    TextDrawShowForPlayer(playerid,Text:uhrzeitLabel);
    TextDrawShowForPlayer(playerid, Jahr);
    SetPlayerColor(playerid,weiß);
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]=-1;
    return 1;
    }



    avePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i'WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }
    resetPlayer(playerid)
    {
    for(new i=0; i<sizeof(sInfo[]); i++)
    {
    sInfo[playerid][playerInfo:i]=0;
    }
    return 1;
    }


    Befehl
    ocmd:kaufefirmengelaende(playerid,params[])
    {
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    sInfo[playerid][firma]= i;
    if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengeländes!");
    }



    PasswortResponse:
    public OnPasswordResponse(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort Richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][firma] =cache_get_field_content_int(0,"firma",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    loadPlayerCars(playerid);


    }
    else
    {
    //Passwort Falsch
    SendClientMessage(playerid,grün,"Du hast dein Passwort falsch eingetippt. Versuche es nochmal!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    return 1;
    }


    Login/Register:
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,grün,"Gibt bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>5)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s','%s', '1')",name,passwort);
    mysql_function_query(dbhandle,query,false,"","");
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]= -1;
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,helblau,"Dein Passwort muss mindestens 6 Zeichen lang sein.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Account Erstellung","Gebe bitte nun dein gewünschtes Passwort ein!","Erstellen","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }



    Wenn ich ingame bin und kaufefirmengelände eintippe sagt er mir ich habe schon ein Firmengelände was habe ich falsch gemacht?

  • Die Abfrage muss im Befehl vor der Zuweisung sein, am besten sogar vor der Schleife:
    ocmd:kaufefirmengelaende(playerid,params[])
    {
    if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    sInfo[playerid][firma]= i;
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengeländes!");
    }

  • Wenn ich mir ein Gelände kaufen will sagt er mir "Du Besitzt bereits eine Firma!"


    Und ich weiß jetzt auch nicht den fehler:
    Er setzt in der Datenbank das Firma nicht auf -1 sondern direkt auf 0 und das will ich ja nicht das man direkt am Anfang ein Firmengelände besitzt.


    sInfo für abspeichern in denn Spielerinfo:
    /enum bereich:
    enum playerInfo{
    eingeloggt,
    level,
    db_id,
    alevel,
    fraktion,
    rang,
    spawnchange,
    firma
    }


    Firmengeländeenum:
    enum Firmengeleande
    {
    Float:F_MinX,
    Float:F_MinY,
    Float:F_MaxX,
    Float:F_MaxY,
    Float:F_KaufX,
    Float:F_KaufY,
    Float:F_KaufZ,
    F_Price,
    F_Object,
    Text3D:F_Label,
    F_Besitzer[MAX_PLAYER_NAME]
    }


    Firmengelände richtig zuweisen:
    new Firmengebiete[][Firmengeleande] =
    {
    {647.8892,-1384.1666,786.2288,-1329.5417,777.5681,-1379.9337,13.6566,5}
    };


    Spielerverbindet+Speichern+Neusetzen und Verlassen des Server:
    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    new nachricht[128];
    format(nachricht,sizeof(nachricht),"Du bist mit der ID %i verbunden.",playerid);
    SendClientMessage(playerid,rot,nachricht);
    //Login/Register:
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s' ",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    SendClientMessage(playerid,grün,"Willkommen auf Reallife Version 0.1.4! Wir wünschen euch ein angenehmen Spiel spaß bei uns!");
    //textdraws anzeigen:
    TextDrawShowForPlayer(playerid,Text:uhrzeitLabel);
    TextDrawShowForPlayer(playerid, Jahr);
    SetPlayerColor(playerid,weiß);
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]=-1;
    return 1;
    }
    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i'WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }
    resetPlayer(playerid)
    {
    for(new i=0; i<sizeof(sInfo[]); i++)
    {
    sInfo[playerid][playerInfo:i]=0;
    }
    return 1;
    }
    public OnPlayerDisconnect(playerid, reason)
    {
    savePlayer(playerid);
    resetPlayer(playerid);
    loadPlayerCars(playerid);
    return 1;
    }


    Der Kaufbefehl:
    ocmd:kaufefirmengelaende(playerid,params[])
    {
    if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    sInfo[playerid][firma]= i;
    GivePlayerMoney(playerid,5000000);
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengelhaändes!");
    }


    OnPasswordResponse:
    public OnPasswordResponse(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort Richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][firma] =cache_get_field_content_int(0,"firma",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    loadPlayerCars(playerid);


    }
    else
    {
    //Passwort Falsch
    SendClientMessage(playerid,grün,"Du hast dein Passwort falsch eingetippt. Versuche es nochmal!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    return 1;
    }



    Der Dialog teil wurde aus dem ganzen Public OnDialogResponse kopiert:
    Register/Login:
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,grün,"Gibt bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>5)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s',MD5('%s'), '1')",name,passwort);
    mysql_function_query(dbhandle,query,false,"","");
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]= -1;
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,helblau,"Dein Passwort muss mindestens 6 Zeichen lang sein.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Account Erstellung","Gebe bitte nun dein gewünschtes Passwort ein!","Erstellen","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }

  • Ändere mal:
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i'WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    zu:
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    Möglicherweise mag er das nicht.


    Hast du dich neu registriert? Wenn nicht, mach das.

  • Leider funktioniert es immer noch nicht Jeffry:


    Habe neuen Account erstellt und er setzt direkt in der Datenbank auf 0 und nicht auf -1.
    Ich habe auch grade echt kein plan wie ich es entbuggen kann.


    Hier sind Bilder:



    Hier der Code:


    sInfo für abspeichern in denn Spielerinfo:
    /enum bereich:
    enum playerInfo{
    eingeloggt,
    level,
    db_id,
    alevel,
    fraktion,
    rang,
    spawnchange,
    firma
    }


    Firmengeländeenum:
    enum Firmengeleande
    {
    Float:F_MinX,
    Float:F_MinY,
    Float:F_MaxX,
    Float:F_MaxY,
    Float:F_KaufX,
    Float:F_KaufY,
    Float:F_KaufZ,
    F_Price,
    F_Object,
    Text3D:F_Label,
    F_Besitzer[MAX_PLAYER_NAME]
    }


    Firmengelände richtig zuweisen:
    new Firmengebiete[][Firmengeleande] =
    {
    {647.8892,-1384.1666,786.2288,-1329.5417,777.5681,-1379.9337,13.6566,5}
    };


    Spielerverbindet+Speichern+Neusetzen und Verlassen des Server:
    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    new nachricht[128];
    format(nachricht,sizeof(nachricht),"Du bist mit der ID %i verbunden.",playerid);
    SendClientMessage(playerid,rot,nachricht);
    //Login/Register:
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s' ",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    SendClientMessage(playerid,grün,"Willkommen auf Reallife Version 0.1.4! Wir wünschen euch ein angenehmen Spiel spaß bei uns!");
    //textdraws anzeigen:
    TextDrawShowForPlayer(playerid,Text:uhrzeitLabel);
    TextDrawShowForPlayer(playerid, Jahr);
    SetPlayerColor(playerid,weiß);
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]=-1;
    return 1;
    }
    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',firma='%i' WHERE id='%i' ",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][firma],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }
    resetPlayer(playerid)
    {
    for(new i=0; i<sizeof(sInfo[]); i++)
    {
    sInfo[playerid][playerInfo:i]=0;
    }
    return 1;
    }
    public OnPlayerDisconnect(playerid, reason)
    {
    savePlayer(playerid);
    resetPlayer(playerid);
    loadPlayerCars(playerid);
    return 1;
    }


    Der Kaufbefehl:
    ocmd:kaufefirmengelaende(playerid,params[])
    {
    if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    sInfo[playerid][firma]= i;
    GivePlayerMoney(playerid,5000000);
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengelhaändes!");
    }


    OnPasswordResponse:
    public OnPasswordResponse(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort Richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][firma] =cache_get_field_content_int(0,"firma",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    loadPlayerCars(playerid);


    }
    else
    {
    //Passwort Falsch
    SendClientMessage(playerid,grün,"Du hast dein Passwort falsch eingetippt. Versuche es nochmal!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    return 1;
    }



    Der Dialog teil wurde aus dem ganzen Public OnDialogResponse kopiert:
    Register/Login:
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,grün,"Gibt bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>5)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s',MD5('%s'), '1')",name,passwort);
    mysql_function_query(dbhandle,query,false,"","");
    sInfo[playerid][level]=1;
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][firma]= -1;
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,helblau,"Dein Passwort muss mindestens 6 Zeichen lang sein.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Account Erstellung","Gebe bitte nun dein gewünschtes Passwort ein!","Erstellen","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    }

  • Du kannst es ja mit dem Registrieren mal direkt rein schreiben:
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level, firma) VALUES ('%s',MD5('%s'), '1', '-1')",name,passwort);


    Wenn das auch nichts bringt, dann überschreibst du die -1 irgendwo zu einer 0.

  • Beitrag von Blackshadowscript ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Das kaufen der Firmengelände geht zwar nur mein Problem ist halt das man die Gebiete 2mal kaufen kann und nicht nur 1mal. Das hießt Spieler X kauft sich ein Firmengelände z.B. Stadthalle und dann kommt Spieler Y und kann sich auf die Stadthalle kaufen wie mach ich das
    man das Gebiet nur 1mal kaufen kann das wenn ein Spieler es hat nicht noch mal kaufen kann?

  • Ich habe es so in mein Befehl eingebaut:
    ocmd:kaufefirmengelaende(playerid,params[])
    {
    if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
    for(new i;i<sizeof(Firmengebiete);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
    {
    if(strlen(Firmengebiete[i][F_Besitzer]) > 2) return SendClientMessage(playerid, 0xFF0000FF, "Error: Diese Firma gehört bereits jemandem.");
    GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
    //Hier das Label aktualisieren.
    sInfo[playerid][firma]= i;
    GivePlayerMoney(playerid,-5000000);
    return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengelhaändes!");
    }