Beiträge von Jeffry

    Hast du die Debug Nachrichten noch drin? Wenn ja, poste die bitte. Wenn nicht, mach sie wieder rein und poste sie dann.
    Inwiefern das mit dem Löschen aber zusammenhängt kann ich mir nicht erklären.

    //Hier dann das mit dem Interior und die Postion^^
    zu:
    for(new j=0; j<sizeof(Houses_Data); j++)
    {
    if(Houses_Data[j][eArt] == Art && Houses_Data[j][eInt] == Inte)
    {
    hInfo[i][PosX] = Houses_Data[j][eIntX];
    //usw...für alle Daten die du übernehmen willst.
    break;
    }
    }



    Und das enum muss so aussehen:
    enum hdIntDaten
    {
    eArt,
    eInt,
    Float:eIntX,
    Float:eIntY,
    Float:eIntZ,
    eText[34]
    }
    new Houses_Data[MAX_HOUSE][hdIntDaten] =
    {
    {1, 5 , 1261.0065,-785.5643,1091.9063, "17 Zimmer"}//Ist die Art(Groß/Mittel/Klein) Interior XYZ vom Interior
    };




    EDIT:
    @_iPit_: Da dein Problem behoben ist, wäre es super, wenn du den Thread als erledigt markierst. Danke! :)

    Ok.


    Im Befehl:
    format(HouseInfo[i][h_owner], 24, "");
    zu:
    format(HouseInfo[i][h_owner], 24, "-");
    Muss halt was drin stehen, da du danach ja abfragst, ob das Haus existiert.

    Mach den Befehl mit der Eingabe und dem Splitten der Eingaben soweit mal fertig wie du es haben willst, dann kann ich dir den Rest entsprechend zeigen.

    new Float:x, Float:y, Float:z, i, w;
    GetPlayerPos(NPC_ID, x, y, z);
    GetPlayerInterior(NPC_ID, i);
    GetPlayerVirtualWorld(NPC_ID, w);
    SetPlayerPos(playerid, x, y, z);
    SetPlayerInterior(playerid, i);
    SetPlayerVirtualWorld(playerid, w);


    Schreibe das mal in einen Befehl, dann ersetze NPC_ID mit der ID die der NPC im Server hat und gebe dann den Befehl ein, wenn der NPC verschwunden ist.


    Siehst du den NPC dann wieder?

    Alles klar.


    Könntest du uns bitte auch sagen, wie du den Fehler behoben hast?
    Hast du das entsprechende Array gefunden, oder war es was anderes?

    Ich sehe da kein Problem. :S


    Kann es sein, dass du das Pickup/Label mehrmals an gleicher Stelle erstellt hast und es somit nicht siehst, dass das Pickup/Label entfernt wurde?

    Dann erstelle im /pawno/ Ordner eine Datei "pawn.cfg" und schreibe "-d3" da rein.
    Dann kompiliere deinen Code neu und poste den Log nochmal.

    Ja, klar geht das.
    Entweder du splittest die Eingabe (params) mit strtok oder mit sscanf, wie du willst und übergibst es entsprechend anstatt dem switch an die Variablen.

    Erhöhe es auf 100. Je nach dem was der höchste Index ist, mit dem du auf das Array zugreifen willst musst du es entsprechend erhöhen, also so lange bis die Meldung weg ist.

    Ich rate dir es so zu machen, ist zwar nicht die schönste Variante, aber damit wirst du am ehesten klar kommen, da es genau gleich ist wie sonst auch:
    if(hInfo[house][Gekauft] == 1)
    {
    if(hInfo[house][Lock] != 0)
    {
    if((!strcmp(SpielerName(playerid), hInfo[house][Mieter1]) && strlen(hInfo[house][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[house][Mieter2]) && strlen(hInfo[house][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[house][Mieter3]) && strlen(hInfo[house][Mieter3])) || (!strcmp(SpielerName(playerid), hInfo[house][Besitzer]) && strlen(hInfo[house][Besitzer])))
    {
    //Nichts, da erlaubt.
    }
    else
    {
    return SendClientMessage(playerid, error, "Dieses Haus ist verschlossen. Zutritt nur für Mieter/Bezitzer");
    }
    }
    SetPlayerPos(playerid, hInfo[house][IntX],hInfo[house][IntY],hInfo[house][IntZ]);
    SetPlayerInterior(playerid, hInfo[house][IntID]);
    SetPlayerVirtualWorld(playerid, hInfo[house][VID]);
    return 1;
    }

    Wenn du es so machst, dann wird die Schleife nie ausgeführt.
    Warum?


    i = 1
    => Prüfe i == 2000 -> Nein (da i = 1)
    => Beende Schleife


    Die Bedingung ist immer die Bedingung für den nächsten Durchlauf. Ist die falsch, wird sofort beendet.

    ocmd:kuendigen(playerid, params[])
    {
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
    {
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) return format(hInfo[i][Mieter1], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 1 bye"), SaveAllHouses();
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) return format(hInfo[i][Mieter2], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 2 bye"), SaveAllHouses();
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])) return format(hInfo[i][Mieter3], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 3 bye"), SaveAllHouses();
    return 1;
    }
    }
    return 1;
    }

    Nein, du machst die Schleife ja so:
    for(new i=1; i<sizeof(tank); i++)


    Und da 2000 nicht mehr kleiner als 2000 (sizeof) ist, wird i = 2000 nicht vorkommen.


    Anfangen tut es bei 1, das hast du ja so angegeben (new i = 1).

    Nein, wenn du i==sizeof(tank) machst, dann würde er gar nichts machen, da beim ersten Durchlauf i = 1 ist, und das ist nicht sizeof(tank), sprich die Scheife wird beendet.


    Wenn, dann musst du i<=sizeof(tank) machen, allerdings wird dir das beim letzten Durchlauf (i=2000) das Array sprengen, da ein Array[2000] keinen Index 2000 (i) hat, sondern maximal den Index 1999 (0 bis 1999 = 2000).

    for(new i=1; i<sizeof(tank); i++)
    Heißt:
    i=1
    i=2
    i=3
    i=4
    i=5
    ...
    i=1997
    i=1998
    i=1999
    ENDE.


    Da sizeof(tank) 2000 ist, und 2000 nicht kleiner als 2000 ist, wird 2000 nicht mehr für i genommen.