Haussystem Problem mit Positionen

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
  • Guten Abend liebe Community,


    ich probiere nun schon ewig diesen Fehler zu beheben.
    Unzwar geht es um mein Haussystem.


    Wenn ich ein Haus erstelle, erscheint das Pickup und der 3D-Text.
    Ich kann es kaufen und auch wieder verkaufen.


    Erstelle ich nun aber ein zweites Haus, kann ich bei dem 2. Haus nichts dergleichen machen.
    Weder kaufen noch verkaufen.


    Mir wird halt immer gesagt, das ich angeblich nicht an der Position des Hauses bin.
    Woran kann das nun liegen?


    Hier einmal die Codeschnipsel:
    Haus erstellen:

    ocmd:chouse(playerid,params[])
    {
    if(Spieler[playerid][Admin] == 5)
    {
    new id,preis,mieter,int,level;
    if(sscanf(params,"ddddd",id,preis,mieter,int,level))
    {
    return SendClientMessage(playerid,COLOR_GREY,"Benutzung: /chouse [ID] [Preis] [Max.Mieter] [Innenraum] [Kaufbar ab Level..]");
    }
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    CreateHouse(id,preis,mieter,int,level,pX,pY,pZ);
    SendStringMsg(playerid,COLOR_LIGHTBLUE,"Haus %d erstellt! Preis: %d,Kaufbar ab Level %d und maximal sind %d Mieter erlaubt!",id,preis,level,mieter);
    }
    return 1;
    }


    Stock zum erstellen des Hauses:

    stock CreateHouse(id,preis,mieter,int,level,Float:hX,Float:hY,Float:hZ)
    {
    new SQL[1000];
    format(SQL, sizeof(SQL), "INSERT INTO `Hauser` (`ID`, `Owner`, `Preis`, `Mieter`, `MaxMieter`, `Level`, `Owned`, `Heal`, `Armour`, `Locked`, `EnterX`, `EnterY`, `EnterZ`, `Kasse`, `mPreis`, `Interior`, `World`, `Erstellt` ) VALUES ('%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d','%d','%d','%f','%f','%f','%d','%d','%d','%d','%d')", id, "Staat", preis, 0, mieter, level, 0, 0, 0, 1, hX, hY, hZ, 0, 0, int, id+1,1);
    mysql_query(SQL); //führe den mit "SQL" formatierten String aus
    SaveHaus(id);
    return LoadHaus(id);
    }


    Hier werden die Häuser geladen:

    stock LoadHaus(hID)
    {
    SendStringMsgToAll(COLOR_RED,"Haus %d geladen!",hID);
    new String[5],str[128];
    //new ehouse;
    format(String, sizeof(String), "%d", hID);
    HausInfo[hID][hEnterX] = mysql_GetFloat("Hauser", "EnterX", "ID", String);
    HausInfo[hID][hEnterY] = mysql_GetFloat("Hauser", "EnterY", "ID", String);
    HausInfo[hID][hEnterZ] = mysql_GetFloat("Hauser", "EnterZ", "ID", String);
    HausInfo[hID][Preis] = mysql_GetInt("Hauser", "Preis", "ID", String);
    HausInfo[hID][MaxMieter] = mysql_GetInt("Hauser", "MaxMieter", "ID", String);
    HausInfo[hID][Interior] = mysql_GetInt("Hauser", "Interior", "ID", String);
    HausInfo[hID][World] = mysql_GetInt("Hauser", "World", "ID", String);
    HausInfo[hID][Owned] = mysql_GetInt("Hauser", "Owned", "ID", String);
    HausInfo[hID][Locked] = mysql_GetInt("Hauser", "Locked", "ID", String);
    HausInfo[hID][Kasse] = mysql_GetInt("Hauser", "Kasse", "ID", String);
    HausInfo[hID][Heal] = mysql_GetInt("Hauser", "Heal", "ID", String);
    HausInfo[hID][Armour] = mysql_GetInt("Hauser", "Armour", "ID", String);
    HausInfo[hID][Level] = mysql_GetInt("Hauser", "Level", "ID", String);
    HausInfo[hID][mPreis] = mysql_GetInt("Hauser", "mPreis", "ID", String);
    HausInfo[hID][Mieter] = mysql_GetInt("Hauser", "Mieter", "ID", String);
    HausInfo[hID][Erstellt] = mysql_GetInt("Hauser", "Erstellt", "ID", String);
    format(HausInfo[hID][Owner], 32, mysql_GetString("Hauser", "Owner", "ID", String));
    HausInfo[hID][ID] = mysql_GetInt("Hauser", "ID", "ID", String);
    return printf("Haus %d wurde erfolgreich geladen!",hID);
    }


    Und so sieht die Abfrage aus, ob ich in der Nähe eines Hauses bin:



    stock GetHausPos(playerid,hid,Float:hx,Float:hy,Float:hz)
    {
    new str[5];
    format(str,5,"%d",hid);
    hx = mysql_GetFloat("Hauser", "EnterX", "ID", str);
    hy = mysql_GetFloat("Hauser", "EnterY", "ID", str);
    hz = mysql_GetFloat("Hauser", "EnterZ", "ID", str);
    if(IsPlayerInRangeOfPoint(playerid,4.0,hx,hy,hz))
    {return 1;}
    else return 0;
    }



    /dhouse zum löschen von Häusern (Wie gesagt, funktioniert nur beim 1. erstelltem Haus...)

    ocmd:dhouse(playerid,params[])
    {
    if(Spieler[playerid][Admin] == 5)
    {
    for(new haus=1;haus<MAX_HOME;haus++)
    {
    new str[5];
    format(str,5,"%d",haus);
    new Float:hx,Float:hy,Float:hz;
    if(GetHausPos(playerid,haus,hx,hy,hz))
    {
    KillHaus(haus);
    SendStringMsg(playerid,COLOR_WHITE,"Du hast das Haus von %s gelöscht!",HausInfo[haus][Owner]);
    mysql_SetInt("Accounts","HouseKey", 0, "Name", HausInfo[haus][Owner]);
    HausInfo[haus][Erstellt] = 0;
    new SQL[100];
    format(SQL, sizeof(SQL), "DELETE FROM Hauser WHERE ID = '%d'", haus);
    mysql_query(SQL);
    return 1;
    }
    else
    {
    return SendClientMessage(playerid,COLOR_GREY,"Du musst an dem zu löschendem Haus stehen!");
    }
    }
    }
    else
    {
    return SendClientMessage(playerid,COLOR_GREY,"Du hast keine Berechtigung diesen Befehl zu nutzen!");
    }
    return 1;
    }



    Ich hoffe mir kann jemand bei dem Problem helfen.
    Also, es ist quasi so, das die Daten aus dem array fürs zweite Haus gelöscht werden...
    In der Datenbank stehen aber alle Daten noch korrekt drinne...


    Ich hoffe ich habe es ausreichend erklärt was mein Problem ist.
    Wäre nett, wenn mir jemand mit diesem arg miesen Problem helfen könnte.


    Liebe Grüße
    Hardcore


    //Edit: /buyhouse Befehl+Abfrage eingefügt.
    //Edit2: Rechtschreibung
    //Edit3: || (Sorry... Nu ist aber gut :D)


    //Edit4: Code auf den Neusten Stand gebracht


    //Edit: Push... Hat echt keiner ne Idee woran es liegen könnte? :/