Haus Problem - Position Problem & Pickup Problem

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
  • Hallo Leute.


    Ich habe ein kleines Problem.
    Ich habe soeben ein Haus-System erstellt und wollte nun mal zu dem Ort fahren wo das Haus ist.
    Eigentlich sollte dort ein 3D-Text sein und ein Pickup, dort ist aber garnix.


    Meine .ini Datei sieht wie folgt aus:



    So bei OnGameModeInit sollte eigentlich ein Pickup und der 3DText Erstellt werden.


    new PropertyString[200];
    for(new h = 0; h<sizeof(Houses); h++)
    {
    if(Houses[h][hOwned] == 0)
    {
    format(PropertyString, sizeof(PropertyString), "Zum Verkaufen!\nPreis: $%d\nLevel: %d\nTippe /buyhouse um es zu kaufen", Houses[h][HousePrice], Houses[h][hLevel]);
    HouseLabel[h] = Create3DTextLabel(PropertyString, COLOR_WHITE, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5, 40.0, 0, 1);
    HousePickup[h] = AddStaticPickup(1273, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5);
    }
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] == 1)
    {
    format(PropertyString, sizeof(PropertyString), "Besitzer: %s\nMiete: %d\n \n/mieten", Houses[h][hOwner], Houses[h][hRent]);
    HouseLabel[h] = Create3DTextLabel(PropertyString ,COLOR_WHITE,Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5,35.0, 0, 1);
    HousePickup[h] = AddStaticPickup(1239, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]);
    }
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] != 1)
    {
    format(PropertyString, sizeof(PropertyString), "Besitzer: %s", Houses[h][hOwner]);
    HouseLabel[h] = Create3DTextLabel(PropertyString ,COLOR_WHITE,Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5,35.0, 0, 1);
    HousePickup[h] = AddStaticPickup(1239, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]);
    }
    }
    On3DTextUpdate();
    SetTimer("On3DTextUpdate", 3000, 1);


    Der Public für On3DTextUpdate sieht folgendermaßen aus:



    public On3DTextUpdate()
    {
    new PropertyString[128];
    for(new h = 0; h<sizeof(Houses); h++)
    {
    if(Houses[h][hOwned] == 0)
    {
    format(PropertyString, sizeof(PropertyString), "Zum Verkaufen!\nPreis: $%d\nLevel: %d\nTippe /buyhouse um es zu kaufen", Houses[h][HousePrice], Houses[h][hLevel]);
    Update3DTextLabelText(HouseLabel[h], COLOR_WHITE, PropertyString);
    }
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] == 1)
    {
    format(PropertyString, sizeof(PropertyString), "Besitzer: %s\nMiete: %d\n \n/mieten", Houses[h][hOwner], Houses[h][hRent]);
    Update3DTextLabelText(HouseLabel[h], COLOR_WHITE, PropertyString);
    }
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] != 1)
    {
    format(PropertyString, sizeof(PropertyString), "Besitzer: %s", Houses[h][hOwner]);
    Update3DTextLabelText(HouseLabel[h], COLOR_WHITE, PropertyString);
    }
    }
    return 1;
    }


    Es wird weder ein Text noch ein Pickup erstellt.
    So nun zum enum & der Positions Abfrage.



    #define MAX_HOUSES 200



    enum HouseData
    {
    hInteriorID,
    Float: hInteriorX,
    Float: hInteriorY,
    Float: hInteriorZ,
    HousePrice,
    hExteriorID,
    Float: hExteriorX,
    Float: hExteriorY,
    Float: hExteriorZ,
    hOwner[255],
    LockStatus,
    hLevel,
    hOwned,
    //hType,
    hRent,
    hRentabil,
    hHeal
    }
    new Houses[MAX_HOUSES][HouseData];


    if(strcmp("/buyhouse", cmdtext, true) == 0)
    {
    print("DB1");
    new string[128], hname[128];
    print("DBHauskey");
    if(Spieler[playerid][HausKey] == 255)
    {
    print("DBFor");
    for(new h = 0; h<sizeof(Houses); h++)
    {
    print("DBRange");
    if(IsPlayerInRangeOfPoint(playerid, 3, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]))
    {
    print("DB2");
    if(strcmp(Houses[h][hOwner], "Keiner", true) == 0)
    {
    if(Houses[h][hOwned] == 1)
    {
    format(hname, sizeof(hname), "Dieses Haus ist im Besitz von %s", Houses[h][hOwner]);
    SendClientMessage(playerid, COLOR_WHITE, hname);
    return 1;
    }
    if(Houses[h][hLevel] > Spieler[playerid][Level])
    {
    format(string, sizeof(string), "Du brauchst Level %d um dieses Haus kaufen zu können.", Houses[h][hLevel]);
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }
    else
    {
    print("DB3");
    if(GetPlayerMoney(playerid) > Houses[h][HousePrice])
    {
    new sendername[MAX_PLAYER_NAME];
    GivePlayerMoney(playerid, -Houses[h][HousePrice]);
    GetPlayerName(playerid, sendername, sizeof(sendername));
    strmid(Houses[h][hOwner], sendername, 0, strlen(sendername), 255);
    print("DB4");
    SendClientMessage(playerid, COLOR_GREEN, "Du hast das Haus erfolgreich gekauft.");
    SendClientMessage(playerid, COLOR_WHITE, "Weitere Hilfe erhälst du unter /househelp oder unter /sup.");
    Spieler[playerid][HausKey] = h;


    On3DTextUpdate();
    SaveHouse(h);
    printf("[HOUSE]%s hat Haus-Nr %d für $%d erworben!", sendername, h, Houses[h][HousePrice]);
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du hast nicht genügend Geld.");
    print("DB5");
    return 1;
    }
    }
    }
    else
    {
    format(hname, sizeof(hname), "Dieses Haus ist im Besitz von %s", Houses[h][hOwner]);
    SendClientMessage(playerid, COLOR_WHITE, hname);
    print("DB6");
    return 1;
    }
    }
    }
    print("DB7");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du besitzt bereits ein Haus. Tippe /sellhouse zum verkaufen.");
    return 1;
    }
    }
    if(strcmp("/gotohouse", cmdtext, true) == 0)
    {
    SetPlayerPos(playerid, 725.6904, -1439.6199, 13.5391);
    return 1;
    }



    Bei der Positions Abfrage hört das Debuggen auf und geht nurnoch bis DB7.


    Kann mir jemand helfen?
    Bin echt am verzweifeln. :S


    Vielen Dank im Vorraus. ^^

  • Zu 1. :
    Die Häuser werden aber schon davor geladen oder? Wenn ja: Debug mal Zeile für Zeile und lass dir den PropertyString ausgeben.


    Zu 2.:
    Wenn schon beim Laden die Koordinaten nicht richtig geladen werden, dann funktioniert die IsPlayerInRangeOfPoint-Abfrage auch nicht richtig.
    Debug einfach mal die komplette Lade-Funktion.

  • Ja das mit dem Laden und Saven habe ich vergessen, aber dann direkt eingefügt. Trotzdem ging nichts.
    Ich werde nun mal alles debuggen und es hier schicken bzw. reineditieren.


    //Edit

    //Überall mal Debug reingehauen:
    //OnGameModeInit
    print("Debug1");
    LoadHouses();
    printf("Debug2");
    new PropertyString[200];
    new PropertyString2[200];
    new PropertyString3[200];
    printf("Debug3");
    for(new h = 0; h<sizeof(Houses); h++)
    {
    printf("Debug4");
    if(Houses[h][hOwned] == 0)
    {
    printf("Debug5");
    format(PropertyString, sizeof(PropertyString), "Zum Verkaufen!\nPreis: $%d\nLevel: %d\nTippe /buyhouse um es zu kaufen", Houses[h][HousePrice], Houses[h][hLevel]);
    printf("Debug6");
    printf(PropertyString);
    printf("Debug7");
    HouseLabel[h] = Create3DTextLabel(PropertyString, COLOR_WHITE, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5, 40.0, 0, 1);
    printf("Debug8");
    HousePickup[h] = AddStaticPickup(1273, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5);
    printf("Debug9");
    }
    printf("Debug10");
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] == 1)
    {
    printf("Debug11");
    format(PropertyString2, sizeof(PropertyString), "Besitzer: %s\nMiete: %d\n \n/mieten", Houses[h][hOwner], Houses[h][hRent]);
    printf("Debug12");
    HouseLabel[h] = Create3DTextLabel(PropertyString2 ,COLOR_WHITE,Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5,35.0, 0, 1);
    printf("Debug13");
    HousePickup[h] = AddStaticPickup(1239, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]);
    printf("Debug14");
    }
    printf("Debug15");
    if(Houses[h][hOwned] == 1 && Houses[h][hRentabil] != 1)
    {
    printf("Debug16");
    format(PropertyString3, sizeof(PropertyString3), "Besitzer: %s", Houses[h][hOwner]);
    printf("Debug17");
    HouseLabel[h] = Create3DTextLabel(PropertyString3 ,COLOR_WHITE,Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]+0.5,35.0, 0, 1);
    printf("Debug18");
    HousePickup[h] = AddStaticPickup(1239, 1, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]);
    printf("Debug19");
    }
    }
    On3DTextUpdate();
    SetTimer("On3DTextUpdate", 3000, 1);


    //buyhouse


    if(strcmp("/buyhouse", cmdtext, true) == 0)
    {
    print("DB1");
    new string[128], hname[128];
    print("DB2");
    if(Spieler[playerid][HausKey] == 255)
    {
    print("DB3");
    for(new h = 0; h<sizeof(Houses); h++)
    {
    print("DB4");
    if(IsPlayerInRangeOfPoint(playerid, 3, Houses[h][hExteriorX], Houses[h][hExteriorY], Houses[h][hExteriorZ]))
    {
    print("DB5");
    if(strcmp(Houses[h][hOwner], "Keiner", true) == 0)
    {
    print("DB6");
    if(Houses[h][hOwned] == 1)
    {
    print("DB7");
    format(hname, sizeof(hname), "Dieses Haus ist im Besitz von %s", Houses[h][hOwner]);
    print("DB8");
    SendClientMessage(playerid, COLOR_WHITE, hname);
    print("DB9");
    return 1;
    }
    print("DB10");
    if(Houses[h][hLevel] > Spieler[playerid][Level])
    {
    print("DB11");
    format(string, sizeof(string), "Du brauchst Level %d um dieses Haus kaufen zu können.", Houses[h][hLevel]);
    print("DB12");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("DB13");
    return 1;
    }
    else
    print("DB14");
    {
    print("DB15");
    if(GetPlayerMoney(playerid) > Houses[h][HousePrice])
    {
    print("DB16");
    new sendername[MAX_PLAYER_NAME];
    print("DB17");
    GivePlayerMoney(playerid, -Houses[h][HousePrice]);
    print("DB18");
    GetPlayerName(playerid, sendername, sizeof(sendername));
    print("DB19");
    strmid(Houses[h][hOwner], sendername, 0, strlen(sendername), 255);
    print("DB20");
    SendClientMessage(playerid, COLOR_GREEN, "Du hast das Haus erfolgreich gekauft.");
    print("DB21");
    SendClientMessage(playerid, COLOR_WHITE, "Weitere Hilfe erhälst du unter /househelp oder unter /sup.");
    print("DB22");
    Spieler[playerid][HausKey] = h;
    print("DB23");
    On3DTextUpdate();
    print("DB24");
    SaveHouse(h);
    print("DB25");
    printf("[HOUSE]%s hat Haus-Nr %d für $%d erworben!", sendername, h, Houses[h][HousePrice]);
    print("DB26");
    }
    else
    print("DB27");
    {
    print("DB28");
    SendClientMessage(playerid, COLOR_WHITE, "Du hast nicht genügend Geld.");
    print("DB29");
    return 1;
    }
    }
    }
    else
    print("DB30");
    {
    print("DB31");
    format(hname, sizeof(hname), "Dieses Haus ist im Besitz von %s", Houses[h][hOwner]);
    print("DB31");
    SendClientMessage(playerid, COLOR_WHITE, hname);
    print("DB32");
    return 1;
    }
    }
    }
    print("DB33");
    return 1;
    }
    else
    print("DB34");
    {
    print("DB35");
    SendClientMessage(playerid, COLOR_GREY, "Du besitzt bereits ein Haus. Tippe /sellhouse zum verkaufen.");
    return 1;
    }
    }



    Mein Server-Log:


    http://pastebin.com/50y100hR

    Einmal editiert, zuletzt von Ap0llinaris ()