Tanksystem-Fehler..

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
  • Yo.. ich hab da wieder ma n kleines sehr mikriges Problem..
    Aber ich raffs einfach nicht xD


    Was ist daran falsch:


    new Float:Tankstellen[2][3] =
    {
    {1004.4747,-939.2281,41.7500},
    {1943.3885,-1772.6721,12.9603}
    };


    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[2][0],Tankstellen[2][1])){ return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}



    && direkt eine zweite Frage:


    Wie mach ich es ambesten, weil derzeit wird der
    String ja einfach nur "überschrieben" und es sollen
    alle Admins online angezeigt werde :D


    ocmd:admins(playerid, params[])
    {
    #pragma unused params
    new string[256], aname[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SpielerInfo[i][pAdmin] == 1)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"Supporter: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 2)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"Supporter Plus: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 3)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"Moderator: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 4)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"Administrator: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 5)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"SuperAdmin: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 6)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"ServerManager: %s\n", aname);
    }
    if(SpielerInfo[i][pAdmin] == 7)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, sizeof(string),"ServerOwner: %s\n", aname);
    }
    ShowPlayerDialog(playerid, admins, DIALOG_STYLE_MSGBOX,".:: Admins Online: ::.",string, "Close","Close");
    }
    }
    return 1;
    }

    Die deutsche Rechtschreibung ist Freeware, sprich du darfst sie kostenlos nutzen...
    Sie ist aber nicht Open Source, somit darfst du sie nicht verändern oder in veränderter Form veröffentlichen!


  • if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[2][0],Tankstellen[2][1])){ return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    Wenn du willst, dass er prüft, ob der Spieler sich an irgendeiner der (in diesem Fall an einer der zwei) Tankstellen befindet, kannst du das ganz einfach mit einer for-Schleife lösen:
    for(new i = 0; i < sizeof(Tankstellen); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])){ return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    }
    Die Z-Koordinate bei der Abfrage hat ebenfalls gefehlt.


    Zur zweiten Frage:
    Hier wurde bereits eine mögliche Lösung vorgestellt.


    Bei ShowPlayerDialog kannst du den zweiten Button übrigens ausblenden, wenn du ihn nicht brauchst, indem du einfach eine leere Zeichenkette einsetzt:
    ShowPlayerDialog(playerid, admins, DIALOG_STYLE_MSGBOX,".:: Admins Online: ::.",string, "Close","");
    Der wird InGame dann nicht mehr angezeigt.

  • Bei dem IsPlayerInRangeOfPoint kommt:


    C:\Users\Kai\Desktop\MySQL-Server[TEST]\gamemodes\new.pwn(1153) : warning 202: number of arguments does not match definition


    Welches vorher auch schon kam, daher diese Frage.

    Die deutsche Rechtschreibung ist Freeware, sprich du darfst sie kostenlos nutzen...
    Sie ist aber nicht Open Source, somit darfst du sie nicht verändern oder in veränderter Form veröffentlichen!



  • for(new i = 0; i < sizeof(Tankstellen); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) { return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    }


    Wenn du das so übernimmst, dürfte es eigentlich funktionieren.
    Bei dir hatte nämlich noch die Z-Koordinate gefehlt (IsPlayerInRangeOfPoint).

  • Habs nu so:


    #define MAX_TANKPOINTS 3
    new Float:Tankstellen[MAX_TANKPOINTS][4] =
    {
    {1004.4747,-939.2281,41.7500,10.0},
    {1943.3885,-1772.6721,12.9603,10.0},
    {-88.6586,-1163.2567,2.2387,11.0}
    };

    for(new i = 0; i < MAX_TANKPOINTS; i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2])) { return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!");}
    }


    --> Trotzdem: "Du bist an keiner Tankstelle!" --> Ganze zeit..

    Die deutsche Rechtschreibung ist Freeware, sprich du darfst sie kostenlos nutzen...
    Sie ist aber nicht Open Source, somit darfst du sie nicht verändern oder in veränderter Form veröffentlichen!


  • Ups.. kleiner Denkfehler meinerseits drinnen. ^^
    for(new i = 0; i < MAX_TANKPOINTS; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,Tankstellen[i][0],Tankstellen[i][1],Tankstellen[i][2]))
    {
    // Hier die Aktionen einfügen, was passieren soll, wenn man an einer Tankstelle ist
    break; // Schleife wird abgebrochen
    }
    if(i >= MAX_TANKPOINTS) return SendClientMessage(playerid, COLOR_RED,"Du bist an keiner Tankstelle!"); // Wird nur aufgerufen, wenn i bereits den Wert der letzten Tankstelle angenommen hat und die Schleife vorher nicht abgebrochen wurde
    }
    Wäre eine Möglichkeit, die nun hoffentlich gehen sollte.