Beiträge von legend

    Hallo,


    ich habe folgendes Enum:

    enum SpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    Float:pHealth,
    pWeaponId[13],
    pWeaponAmmo[13]
    }


    In pWeaponId[13] würde ich gerne alle Waffen während der Laufzeit abspeichern, die der Spieler hat.
    Analog dazu in pWeaponAmmo[13] die jeweilige Anzahl der "Waffen" (Das mache ich mit zwei Variablen, da zweidimensionale Arrays nicht erlaubt sind in Enums).


    Davon gibt es natürlich noch eine Variable:


    new SpielerInfo[MAX_PLAYERS][SpielerDaten];


    Wenn der Spieler in ein bestimmtes Pickup läuft, will ich, dass alle aktuellen Waffen des Spielers in seinem Enum abgespeichert werden:

    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if (pickupid == pickup_parcel)
    {
    new WaffenP[13][2];
    new Waffen_namen[13][128];
    new weapon_slot = 1;

    for (new i = 0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i, WaffenP[i][0], WaffenP[i][1]);
    if (WaffenP[i][0] > 0 && WaffenP[i][1] > 0)
    {
    GetWeaponNameDE(WaffenP[i][0], Waffen_namen[weapon_slot]);
    printf(Waffen_namen[weapon_slot]);

    SpielerInfo[playerid][weaponId:weapon_slot] = WaffenP[i][0];
    SpielerInfo[playerid][weaponAmmo:weapon_slot] = WaffenP[i][1];

    new test[256];
    new test1[256];
    format(test, sizeof(test), "%i", SpielerInfo[playerid][weaponId:weapon_slot]);
    printf(test);
    format(test1, sizeof(test1), "%i", SpielerInfo[playerid][weaponAmmo:weapon_slot]);
    printf(test1);

    weapon_slot++;
    }
    }
    }
    return 1;
    }


    Allerdings speichert er die Waffendaten falsch im Enum ab..


    Zur Info: GetWeaponNameDE ist nichts als die normale GetWeaponName Funktion, nur returne ich die deutschen Namen davon.


    Gruß
    legend


    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    if(!strlen(inputtext)) // Wenn das eingegebene Passwort mehr als ein Zeichen hat, wenn das Passwort länger als X-Zeichen sein soll, dann ändere diese Zeile einfach in: if(!(strlen(inputtext) > X))
    {
    SendClientMessage(playerid,COLOR_GREEN,"SERVER: Das gewünschte Passwort ist zu kurz, bitte wählen Sie ein anderes!");
    ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"German Oldschool Reallife - Registrierung","Herzlich Willkommen,\nzum Registrieren geben bitte ein Passwort ein!","Registrieren","Abbrechen");
    return 1;
    }
    else
    {
    Register(playerid, MD5_Hash(inputtext));
    return 1;
    }
    else // Wenn der Benutzer die Registrierung abgebrochen hat
    {
    SendClientMessage(playerid,COLOR_RED,"SERVER: Registrierung wurde abgebrochen!");
    SendClientMessage(playerid,COLOR_RED,"Du wurdest vom Server gekickt!");
    Kick(playerid);
    return 1;
    }
    return 1;
    }


    Wie schauts so aus?
    // Nicht getestet..

    Vielen Dank! :)


    //EDIT:
    //Häuser des Empfängers aus der Datenbank auslesen, die einen Briefkasten haben.
    format(queryGetHouseEmpf, sizeof(queryGetHouseEmpf), "SELECT h.* FROM house h, player p WHERE p.playerName = '%s' AND h.playerRef = p.playerRef AND h.briefkasten = 1", inputtext);
    mysql_query(queryGetHouseEmpf);
    mysql_store_result();


    numRowsGetHouse = mysql_num_rows();

    //Wenn mindestens ein Haus mit einem Briefkasten gefunden wurde
    if (numRowsGetHouse > 0)
    {
    new i = 1;
    while(mysql_fetch_row(queryGetHouseEmpf,"connection"))
    {
    sscanf(queryGetHouseEmpf,"p<|>sd",strHouseStadt[i],houseRef[i]);
    SendClientMessage(playerid, ROT, strHouseStadt[i]);
    i++;
    }
    mysql_free_result();
    strcat(strAusgabeHaus, strHouseStadt[1]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[2]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[3]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[4]);
    strcat(strAusgabeHaus, "\n");

    ShowPlayerDialog(playerid, dialogPaketAufgebenS3, DIALOG_STYLE_LIST, "Spand - Paketlieferservice 3/4", strAusgabeHaus, "Weiter", "Abbrechen");

    } else SendClientMessage(playerid, ROT, "Dieser Spieler hat kein Haus und/oder keinen Briefkasten.");


    Wenn ich meinen SELECT einzeln ausführen lasse in der Console, dann liefert er mir zwei Zeilen zurück.
    Jedoch habe ich bei obigem Code immer noch ein leeres Resultat.


    Wie kann ich das nun beheben?



    //EDIT: Thema hat sich erledigt, danke für die Mühe!

    Normalerweise müsste dem Plugin dass du hinzugefügt hast eine Datei namens "LIBMYSQL.dll" beigelegt sein.
    Diese musst du in das Hauptverzeichnis deines Servers legen.

    Moin moin,


    ich hätte da ne kleine Frage.
    Ich möchte gerne mittels SELECT einen Datensatz aus der Datenbank selektieren (Mehrere Reihen).
    Jetzt möchte ich jedes einzelne Feld jeder Zeile in ein Array speichern.


    Mein Code sieht bisher so aus:

    new i = 1;
    while(i <= numRowsGetHouse)
    {
    mysql_fetch_row();
    mysql_fetch_field("stadt", strHouseStadt[i]);
    mysql_fetch_field("houseRef", houseRef[i]);
    i++;
    }



    Danach möchte ich für einen ListenDialog eine String-Variable(255) mit allen Elementen aus strHouseStadt befüllen lassen mit abschließendem \n.
    Bisher sieht dies folgendermaßen aus (Ist aber eigentlich quatsch :D):


    strcat(strAusgabeHaus, strHouseStadt[1]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[2]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[3]);
    strcat(strAusgabeHaus, "\n");
    strcat(strAusgabeHaus, strHouseStadt[4]);
    strcat(strAusgabeHaus, "\n");


    ShowPlayerDialog(playerid, dialogPaketAufgebenS3, DIALOG_STYLE_LIST, "Spand - Paketlieferservice 3/4", strAusgabeHaus, "Weiter", "Abbrechen");
    In meinem Dialog habe ich jedoch nur eine Zeile danach und dort ist auch kein Text zu sehen.


    Kann ich dies mit in der Schleife tun, oder benötige ich nach dem mysql_free_result eine neue Schleife?
    Besser gesagt, stimmen meine Zuweisungen überhaupt; läuft er so alle Zeilen meines Ergebnisses durch?


    Viele Grüße


    Zusatzinfo: Ich benutze das MySQL-Plugin von StrickenKid in der Version 2.1.1

    Hast du eine Spielerdatei, wo die Waffen drinnenstehen, oder möchtest du sie einfach so vergeben?


    Du machst bei OnPlayerDeath folgendes:

    new weapons[13][2];


    for (new i = 0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]); //Hiermit befüllst du ein Array mit der Waffen-ID und der dazugehörigen Munition
    GivePlayerWeapon(playerid, weapons[i][0], weapons[i][1]); //So vergibst du die Waffen wieder an den Spieler.
    }








    Ein einfaches Beispiel:


    new a = 5;
    new b = 1;


    if (a == 5 && b == 1)
    ->Hier müssen BEIDE Bedingungen wahr/true sein, damit der If-Zweig ausgeführt wird.


    if(a == 5 || b == 1)
    -> Es würde reichen, wenn a den Wert 5 hat ODER wenn b den Wert 1 hat.


    Verstanden?