Abfrage ob Spieler in einem Bizpunkt ist ?

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 :P


    Ich arbeite grade an einem Bizsystem.


    Nun weiß ich allerdings nicht mehr weiter , wie ich abfragen soll , ob der Spieler in einem Bizpunkt steht!
    Sprich wenn der Spieler in Biz3 steht , soll dem Spieler das Geld von Biz3 abgezogen werden!
    Und wenn er in Biz19 steht , das Geld von Biz19 usw!



    ocmd:buybiz(playerid,params[])
    {
    new Biz[64];
    format(Biz,sizeof(Biz),"Biz/%s.txt",name);
    if(IsPlayerInRangeOfPoint(playerid,3.0,dini_Float(Biz,"X"),dini_Float(Biz,"Y"),dini_Float(Biz,"Z")) //Hier weiß ich nciht weiter!
    {
    GivePlayerMoney(playerid,-dini_Int(Biz,"Preis")); //Hier auch nicht!
    }
    return 1;
    }


    ocmd:createbiz(playerid,params[])
    {
    new name[26],
    preis;
    if(sscanf(params,"si",name,preis))return SendClientMessage(playerid,Rot,"Fehler: /createbiz [Name] [Preis]");
    {
    new Biz[64];
    format(Biz,sizeof(Biz),"Biz/%s.txt",name);
    if(!dini_Exists(Biz))
    {
    dini_Create(Biz);
    dini_Set(Biz,"Name",name);
    dini_IntSet(Biz,"Preis",preis);
    dini_Set(Biz,"Besitzer","Staat");
    dini_IntSet(Biz,"Frei",1);
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    dini_FloatSet(Biz,"X",X);
    dini_FloatSet(Biz,"Y",Y);
    dini_FloatSet(Biz,"Z",Z);
    new string[256];
    format(string,sizeof(string),"Ein Biz mit dem Namen %s und dem Preis von %i$ wurde erstellt.",name,preis);
    SendClientMessage(playerid,Gruen,string);
    }
    else
    {
    SendClientMessage(playerid,Rot,"Das Biz existiert bereits!");
    }
    }
    return 1;
    }


    ocmd:delbiz(playerid,params[])
    {
    new name[26];
    if(sscanf(params,"si",name))return SendClientMessage(playerid,Rot,"Fehler: /delbiz [Name]");
    {
    new Biz[64];
    format(Biz,sizeof(Biz),"Biz/%s.txt",name);
    if(!dini_Exists(Biz))
    {
    SendClientMessage(playerid,Rot,"Das Biz existiert nicht!");
    }
    else
    {
    dini_Remove(Biz);
    SendClientMessage(playerid,Rot,"Das Biz wurde erfolgreich gelöscht!");
    }
    }
    return 1;
    }

  • Mit einem if statement abfragen ob der Spieler in der nähe eines Punktes (InRangeOfPoint) ist.
    Danach mit vielen else if statements die anderen Möglichkeiten abfragen.


    Das war mir schon klar , aber ich brauch ja irgendwie den Namen des bizzes!
    Also das steht ja



    new Biz[64];
    format(Biz,sizeof(Biz),"Biz/%s.txt",name); // Hier muss ja abgefragt werden , in welchem Biz der Spieler steht !
    if(IsPlayerInRangeOfPoint(playerid,3.0,dini_Float(Biz,"X"),dini_Float(Biz,"Y"),dini_Float(Biz,"Z"))

  • Mach eine Schleife und und gehe in einer Datei in der alle Biz' drinstehen durch.
    In der Datei müssen die Koordianten von jedem Biz stehen.
    Die prüfst du dann mit IsPlayerInRangeOfPoint.
    Sobald die Funktion dann true returned liest du den Namen aus.
    Dürfte nicht so schwer sein.


    pseudo:
    für jedes (biz in datei biz.txt)
    {
    wenn (SpielerInReichweite(Biz[i]Koordinaten)
    {
    name = Biz[i]Name;
    }
    }


    #Brotfischbaron


    In schā'a llāh

  • Ja habe ich, und nein ich kann dir nicht per TeamViewer helfen.
    Mit der gegebenen Hilfestellung und einer funktionierenden Suchmaschine sollte jeder halbwegs begabter Scripter in der Lage sein, das Problem zu lösen.


    #Brotfischbaron


    In schā'a llāh

  • Sagen wir du hast für jedes Biz eine Datei in einem Ordner.
    Dann liest du jede Datei in einer Schleife aus.
    In der Schleife erstellst du 4 Variablen.
    Eine für den Namen und drei für die Koordinaten X, Y und Z.
    Dann liest du alle Informationen in die Variable ein.
    Wenn der Spieler nun in Reichweite des aktuellen Biz' ist, das gerade durchläuft, dann brichst du die Schleife ab und hast deinen Biz-Namen.


    #Brotfischbaron


    In schā'a llāh

  • Sagen wir du hast für jedes Biz eine Datei in einem Ordner.
    Dann liest du jede Datei in einer Schleife aus.
    In der Schleife erstellst du 4 Variablen.
    Eine für den Namen und drei für die Koordinaten X, Y und Z.
    Dann liest du alle Informationen in die Variable ein.
    Wenn der Spieler nun in Reichweite des aktuellen Biz' ist, das gerade durchläuft, dann brichst du die Schleife ab und hast deinen Biz-Namen.


    Wie mach ich denn eine Schleife , die durch alle Dateien geht ?


    irgendwas mit for(new i=0; i<...) ?