Gruppenhaus Systemfehler

  • Ich wollte nicht mehrere Threads aufmachen, deswegen packe ich mal alles in diesen hier.
    Aktuell besteht das Problem wenn ich das Haus zu einem Gruppenhaus umbaue, dann kann man dort seinen Spawn aber nicht mit /spawnchange hinverlegen.
    Hierfür habe auch ein paar meiner dazu verwendeten Funktionen ausgegeben und sie geben mir 0 aus, also nicht vorhandene Daten.


    Fangen wir mal beim Umbau selber an.
    Die Spieler, die Online sind, bekommen auch die Nachricht dass das Haus umgebaut wurde aber das Gruppenhaus wird anscheinend nicht zugeteilt.



    case 3: // Gruppenumbau
    {
    if(IsPlayerGroupLeader(playerid) ==
    0)return SendClientMessage(playerid, COLOR_RED, "HAUS: {FFFFFF}Du bist
    kein Gruppierungsleiter!");
    if(HouseData[id][hGroupHouse] ==
    1)return SendClientMessage(playerid, COLOR_RED, "HAUS: {FFFFFF}Dein Haus
    hat dieses Upgrade bereits!");
    if(HouseData[id][hGroupHouse] ==
    DELINCE_GROUP_ADDON)return SendClientMessage(playerid, COLOR_RED, "HAUS:
    {FFFFFF}Dieses Haus ist nicht für das Gruppenaddon geeignet..");
    if(getPlayerMoney(playerid)
    < 5000)return SendClientMessage(playerid, COLOR_RED, "FEHLER:
    {FFFFFF}Du hast nicht genug Geld dabei!");
    if(HouseData[id][hRentMember] > 0)
    {
    ShowPlayerDialog(playerid,
    DIALOG_GADDON, DIALOG_STYLE_MSGBOX, "Gruppenaddon", "Es wohnen aktuell
    noch andere Spieler in deinem Haus!\nWenn du das Haus umbauen möchtest,
    musst die Spieler zuerst rauswerfen.\nDu kannst sie anschließend wieder
    Einladen.", "Rauswerfen", "Zurück");
    return 1;
    }
    givePlayerMoney(playerid, -5000),
    HouseData[id][hGroupHouse] = 1;
    for(new i;i {
    if(IsPlayerLoggedIn(i) == true)
    {
    if(pInfo[i][pGroup] != 0 && pInfo[i][pGroup] == pInfo[playerid][pGroup])
    {
    SendClientMessage(i,
    COLOR_GREEN, "Dein Gruppierungsleiter hat sein Haus zu einem
    Gruppenhaus umgebaut. (/spawnchange)"),
    pInfo[i][pGHouse] = HouseData[id][hSQL];
    }
    }
    }
    mysql_format(handle,
    query, sizeof query, "UPDATE account SET GHouseID=%i WHERE Group=%i",
    HouseData[id][hSQL], pInfo[playerid][pGroup]),
    mysql_pquery(handle, query);
    new gid = GetPlayerGroupID(playerid), str[128];
    Group[gid][gHouse] = GetMyHouseID(playerid),
    format(str,sizeof str, "gHouse: %i, GMHouseID: %i, mygid: %i", Group[gid][gHouse], GetMyHouseID(playerid), gid),
    SendClientMessage(playerid, -1, str),
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dein Haus zum Gruppierungshaus umgebaut."),
    SendClientMessage(playerid, COLOR_GREEN, "Du hast jetzt kein Mieterlimit aber kannst auch keine Miete mehr verlangen!");



    GetPlayerGroupID, GetMyGroupHouseID & GetMyHouseID Die Funktionen geben teilweise 0 aus

    stock GetMyHouseID(playerid)
    {
    for(new i;i {
    if(HouseData[i][hOwnerSQL] == getPlayerSQL(playerid))return i;
    }
    return -1;
    }
    stock GetMyGroupHouseID(playerid)
    {
    for(new i;i {
    if(Group[i][gSQL] != 0 && Group[i][gHouse] == pInfo[playerid][pGHouse])return i;
    }
    return -1;
    }
    stock GetPlayerGroupID(playerid)
    {
    for(new i;i {
    if(Group[i][gSQL] != 0 && Group[i][gSQL] == pInfo[playerid][pGroup])return i;
    }
    return 0;
    }


    SpawnChange Funktion (Gruppenhaus wird nicht angeboten)

    stock SpawnChange(playerid)
    {
    switch(pInfo[playerid][pSpawn])
    {
    case 0:
    {
    new id = GetMyRentHouseID(playerid);
    if(id == -1)
    {
    pInfo[playerid][pSpawn] +=1;
    SpawnChange(playerid);
    return 1;
    }
    if(HouseData[id][hInterior] == -1)
    {
    pInfo[playerid][pSpawn] +=1;
    SpawnChange(playerid);
    return 1;
    }
    if(pInfo[playerid][pHouse] < 1)return SendClientMessage(playerid, COLOR_RED, "FEHLER: {FFFFFF}Du hast leider keine Unterkunft wo du Spawnen könntest.");
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft dort, wo du Eingemietet bist.");
    pInfo[playerid][pSpawn] = 1;
    }
    case 1:
    {
    new id2 = GetMyGroupHouseID(playerid);
    printf("Bryans id2: %i", id2);
    if(id2 != -1 && id2 != 0)
    {
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft in deinem Gruppierungshaus.");
    pInfo[playerid][pSpawn] = 2;
    return 1;
    }
    pInfo[playerid][pSpawn] ++, SpawnChange(playerid);
    }
    case 2:
    {
    if(pInfo[playerid][pHitman] < 1) {pInfo[playerid][pSpawn] ++,SpawnChange(playerid);return 1;}
    else pInfo[playerid][pSpawn] = 3;
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft in der Agency.");
    }
    case 3:
    {
    pInfo[playerid][pSpawn] = 0,
    SendClientMessage(playerid, COLOR_GREEN, "Du spawnst nun in Zukunft wieder am Bahnhof.");
    }
    }
    return 1;
    }


    Hoffe ihr habt einen Denkanstoß für mich.

    Мозг = выключен :sleeping:

    Einmal editiert, zuletzt von seegras () aus folgendem Grund: Spoiler behindern nur den Lesefluss, daher hab ich sie mal entfernt

  • mysql_format(handle, query, sizeof(query), "UPDATE account SET GHouseID=%i WHERE Group=%i",HouseData[id][hSQL], pInfo[playerid][pGroup]);


    zu


    mysql_format(handle, query, sizeof(query), "UPDATE account SET GHouseID='%i' WHERE Group='%i'",HouseData[id][hSQL], pInfo[playerid][pGroup]);
    Probier mal so

  • Korrekt bzw. besser wäre es aber so `%i`, sprich anstelle des Apostroph ein Backtick

    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Früher habe ich es mit `` gemacht, das ist in der neusten Version, nicht mehr von Relevanz.
    Es ging vor dem Query schon nicht bei den Leuten die Online sind, in der Gruppe sind und auch die Nachricht bekommen.

    Мозг = выключен :sleeping:

    Einmal editiert, zuletzt von Kasakow ()

  • Ich denke es hängt damit zusammen dass das Array bei 0 Anfängt zu zählen und du Abfragst Ob sie nicht 0 ist. Da ich annehme dass du zum Testen nur ein Haus erstellt hast das Array mit der ID 0 die Hausdaten birgt.

  • Probier mal so

    Die Apostrophen werden benötigt, wenn ein String übergeben wird, bei Integern ist es nicht zwingend notwendig.
    UPDATE users SET name = 'Max Mustermann' WHERE id = %i


    sprich anstelle des Apostroph ein Backtick

    Die Backticks werden nur bei Spalten-Namen benötigt, die z.B. eine SQL-Funktion darstellen.
    Beispiel: alter
    Dann wäre folgendes nötig: UPDATE users SET `alter` = 18 WHERE id = %i


    Backticks beim Wert sind syntaktisch nicht möglich.



    Hat niemand eine Idee ?

    Deine GetMyGroupHouseID gibt einen falschen Wert zurück, und zwar den Index der Gruppe im Array (i).
    Ändere dort
    if(Group[i][gSQL] != 0 && Group[i][gHouse] == pInfo[playerid][pGHouse])return i;
    zu:
    if(Group[i][gSQL] != 0 && Group[i][gSQL] == pInfo[playerid][pGroup]) return Group[i][gHouse];

    sigsmall_winter.png

  • zu:


    if(Group[i][gSQL] != 0 && Group[i][gSQL] == pInfo[playerid][pGroup]) return Group[i][gHouse];


    Danke erstmal für deine Antwort! :)


    Das ist so aber nicht gewollt. Da ich ja in der Funktion wirklich den Index Integer ausgeben möchte.
    Beispielsweise, Ich suche in einer Schleife eine Gruppe, die Zeitlich gesperrt wurde. Diese würde dann auch geladen werden mit Group[i][gLock] = (1);.
    Ich suche diese Gruppe jetzt und möchte das Array mit dem Index der besagten Gruppe bearbeiten. Dann ist i in der Schleife letztes endlich meine Antwort.
    Deine Variante habe ich benutzt, diese verhindert dann andere Funktionen die mit der gleichen Funktion eine Information erzeugen möchten.
    Also ob ein Spieler Besitzer der Gruppe ist, kann nicht mehr ermittelt werden, vorher hat das ganz gut Funktioniert. Ich zeige dir mal die Funktion der Leaderermittlung, dann kommst du dem Hintergrund vielleicht näher.
    stock IsPlayerGroupLeader(playerid)
    {
    for(new i, gID;i<MAX_GROUP;i++)
    {
    if(IsPlayerLoggedIn(i) == true)
    {
    if(pInfo[i][pGroup] != 0)
    {
    gID = GetPlayerGroupID(i);
    if(Group[gID][gLeaderSQL] == getPlayerSQL(playerid))return 1;
    }
    }
    }
    return 0;
    }


    ((WIESO SCHREIBT ER BEI MIR ALLES KURSIV ?))

    Мозг = выключен :sleeping:

  • Da ich ja in der Funktion wirklich den Index Integer ausgeben möchte.

    GetMyGroupHouseID soll doch aber nicht den Index der Gruppe ausgeben, sondern die ID des Hauses.
    Ansonsten macht die Bezeichnung der Funktion keinen Sinn, oder?



    ((WIESO SCHREIBT ER BEI MIR ALLES KURSIV ?))

    Weil du einen Code zitiert hast, der [i] enthält, das ist der Start für "kursiv-schreiben".

    sigsmall_winter.png

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ja, funktioniert so nicht.


    Schau, ich glaub wir reden aneinander vorbei.
    Ich meine es so, ich möchte das aus der MySQL geladene Array bearbeiten, wie bei einem Haussystem zum Bespiel ja.
    Ich möchte herausfinden ob mir das Haus gehört.



    stock MyHouseID(playerid){for(new i;i<sizeof Haus;i++){if(Haus[i][hID] == pInfo[playerid][pHaus])return i; //Das jeweilige array, was zu bearbeiten ist, ist dem Fall, Haus[i]}return INVALID_HAUS_ID;}



    Jetzt möchte ich sagen, okay.. das Haus bekommt ein Upgrade.
    Dann arbeite ich so:



    new hid = MyHouseID(playerid);if(hid == INVALID_HAUS_ID){Haus[i][hUpgrade] = 1;}


    //Sorry die Formatierung, mein Editor spinnt gerade etwas.

    Мозг = выключен :sleeping: