Hilfe bei IsPlayerInRangeOfPoint

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
  • Hey,
    ich brauche Hilfe bei If(IsPlayerInRangeOfPoint) beim Banksystem. Hier mein Code:
    ocmd:bank(playerid,params[])
    {
    #pragma unused params
    for(new bank=1;bank<MAX_BANK;bank++)
    {
    if(IsPlayerInRangeOfPoint(playerid,10,BankInfo[bank][bank_x],BankInfo[bank][bank_y],BankInfo[bank][bank_z]))
    {
    ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAbheben\nKontostand","Bestätigen","Abbrechen");
    }
    else SendClientMessage(playerid,Color_DarkRed,"Du bist nicht in der Nähe eines Bankautomaten!");
    break;
    }
    return 1;
    }



    Außerdem hier das Enum:
    #define MAX_BANK 100
    enum bankautomat_info
    {
    Float:bank_x,
    Float:bank_y,
    Float:bank_z,
    bank_id
    }
    new BankInfo[MAX_BANK][bankautomat_info];



    Das Problem: Er gibt mir aus, dass er nicht an dem Punkt ist. Also die Fehlermeldung von oben.
    Was soll ich machen?


    //Edit: Weiß denn keiner weiter??


    Mfg Maksimo007

    Einmal editiert, zuletzt von Maksimo007 ()

  • "Hi


    2 Kleine Sachen:


    Arrays sind nullbasiert, sprich bank muss den Startwert 0 und nicht 1 haben
    Du kannst die Grösse eines Arrays mit dem sizeof Operator abfragenGruss"


    Habe es aber schon immer so gemacht, da die Datei mit dem Namen 1 anfängt und nicht mit 0. Es hat bisher auch immer funktioniert.

  • nee das muss man mit zahlen machen

    @jensiboy_44 Nein, sizeof und MAX_BANKS liefern dir den selben Wert zurück (oder ich würde mich krass irren...)
    Maksimo007


    Haste dir mal die Werte für die 3 Koordinaten printen lassen. Du musst wissen, Arrays sind in Pawn immer nullbasiert, egal ob Du bei 1 anfängst. In deinem Falle müsstest Du den ersten Eintrag überfliegen oder alles eines nach oben verschieben und das Array eines grösser machen als tatsächlich Banken existieren


    Edit: Zeig mal den Ladecode für die Banken
    Edit 2: Mal ganz davon abgesehen, dir ist bewusst, dass das Ganze nach dem ersten Durchlauf eh abbricht ()Mit dem Keyword break) ?


    Mal abgesehen von 0 oder 1
    ocmd:bank(playerid,params[])
    {
    #pragma unused params
    for(new bank = 1;bank < MAX_BANK; bank++)
    {
    if(IsPlayerInRangeOfPoint(playerid,10,BankInfo[bank][bank_x],BankInfo[bank][bank_y],BankInfo[bank][bank_z]))
    {
    ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAbheben\nKontostand","Bestätigen","Abbrechen");
    return 1;
    }
    }
    SendClientMessage(playerid,Color_DarkRed,"Du bist nicht in der Nähe eines Bankautomaten!");
    return 1;
    }

  • Hier wäre der Ladecode:
    stock LoadBank(BankID)
    {
    new pfad[50];
    format(pfad,50,"/Bankautomat/%d.txt",BankID);
    if(!fexist(pfad))return 0;
    BankInfo[BankID][bank_x] = dini_Float(pfad,"x");
    BankInfo[BankID][bank_y] = dini_Float(pfad,"y");
    BankInfo[BankID][bank_z] = dini_Float(pfad,"z");
    BankInfo[BankID][bank_id] = dini_Int(pfad,"BankautomatID");
    return 1;
    }



    Außerdem das Create:
    stock CreateBankautomat(Float:x,Float:y,Float:z)
    {
    new pfad[50];
    for(new bank=1;bank<MAX_BANK;bank++)
    {
    format(pfad,50,"/Bankautomat/%d.txt",bank);
    if(!fexist(pfad))
    {
    dini_Create(pfad);
    dini_FloatSet(pfad,"x",x);
    dini_FloatSet(pfad,"y",y);
    dini_FloatSet(pfad,"z",z);
    dini_IntSet(pfad,"BankautomatID",bank);
    return LoadBank(bank);
    }
    }
    return 1;
    }



    Und wenn ich in die Datei schaue, stehen auch Koordinaten da.

  • Deinen Dateinamen der Banken beginnen bei 1 - also mit 1.txt ? Ich würde die höchste Bank in 0.txt umbenennen und in der Schleife mit 0 anfangen, denn auf die jetztige Art kannste dir nur MAX_BANK - 1 erstellen. Zudem sehe die Bemerkung wegen break im Beitrag oben

  • Sicher? Denn ich habe dies jedes mal so gemacht (mit Haus und Biz). Hier habe ich nur das einzelne durch Bank ersetzt.
    //Edit: Habe gerade gemerkt, dass wenn ich mir die Koordinaten ausgeben lasse (SendClientMessage), nur X,Y,Z: 0.0000 kommt. Auch ohne LoadBank(bank).

    Einmal editiert, zuletzt von Maksimo007 ()