Problem mit 3D Label

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 zusammen,


    habe gerade ein System erstellt, dass, wenn ein Spieler Wanteds hat, es über dem Spieler mit einem 3D Label angezeigt wird.


    Nun habe ich folgendes Problem: Wie mach ich, dass das Label nur für Cops sichtbar ist?


    Hier mein Public & wie es NICHT mit den Cops funktioniert: http://pastebin.com/vbcvJhZz



    //EDIT
    Wie ich abfrage, ob ein Spieler Cop ist: Spieler[playerid][Fraktion] == 1

    Mit freundlichen Grüßen,


    Keslo

  • Musst die wohl mit [wiki]CreatePlayer3DTextLabel[/wiki] erstellen.

    So sieht das ganze System aus:


    Iwo im Script: new Text3D: SpielerWantedAnzeige[MAX_PLAYERS];


    Unter OnGameModeInit:
    for(new i; i < MAX_PLAYERS; i++){SpielerWantedAnzeige[i] = Create3DTextLabel(" ", COLOR_BLUE, 0.0, 0.0, 0.0, 20.0, 0, 0);}


    Onplayerconnect:
    Attach3DTextLabelToPlayer(SpielerWantedAnzeige[playerid], playerid, 0.0, 0.0, 0.7);


    Disconnect:
    Update3DTextLabelText(SpielerWantedAnzeige[playerid], COLOR_BLUE, " ");



    Und das letzte ist der Public der oben schon ist.


    //Edit: Sprich also, ich habe es schon erstellt, logischerweiße.

    Mit freundlichen Grüßen,


    Keslo

  • Ist aber immernoch nur ein normaler 3DTextLabel musst das ändern in Player3DTextLabel und den jeweils überall anpassen. Danach einfach mit einer Schleife überprüfen wer im SAPD ist und dann erstellen / Updaten.

  • Hat mir jetzt nicht richtig weitergeholfen, gibt es überhaupt eine Funktion, die "Player3DTextLabel" heißt?
    Hat wer anders noch Lösungsvorschläge?




    //Edit Push

    Mit freundlichen Grüßen,


    Keslo

    Einmal editiert, zuletzt von Keslo ()

  • Mach es einfach so:


    for(new ip=0; ip<MAX_PLAYERS; ip++)
    {
    if(GetPlayerWantedLevel(ip)==0)continue;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if( Spieler[i][Fraktion] == 1 )
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(ip,x,y,z);
    if(!IsPlayerInRangeOfPoint(i,10,x,y,z)) continue;
    CreatePlayer3DTextLabel(i,(Der Text),(Die Farbe),x,y,z,(Die Distanz),ip,0,0);
    }
    }
    }


    so ungefähr musste es gehen.


    wenn nicht schreib einfach wieder hier.

  • Jetzt geht garnichts mehr :D Wird nichts angezeigt



    //push


    Hat keiner eine Lösung?

    Mit freundlichen Grüßen,


    Keslo

    2 Mal editiert, zuletzt von Keslo ()

  • Ersetze die Zeile aus der PlayerLabel Variante mit der hier
    [size=12]CreatePlayer3DTextLabel(i,(Der Text),(Die Farbe),x,y,z,(Die Distanz),ip,INVALID_VEHICLE_ID,0);[/size]


    Außerdem solltest du um keine allzu großen Vorteile zu verteilen bedanken TestLOS einzuschalten

  • Ersetze die Zeile aus der PlayerLabel Variante mit der hier
    [size=12]CreatePlayer3DTextLabel(i,(Der Text),(Die Farbe),x,y,z,(Die Distanz),ip,INVALID_VEHICLE_ID,0);[/size]


    Außerdem solltest du um keine allzu großen Vorteile zu verteilen bedanken TestLOS einzuschalten

    Funktioniert immer noch nicht... :(

    Mit freundlichen Grüßen,


    Keslo

  • Zeig mal allen Code her den du jetzt für die Wantedlabels hast.



    Das wäre jetzt das "neue" System. Wobei ich eins sagen muss: Die 3D Labels werden zwar erstellt, leider nicht über derm Kopf vom Spieler sonst willkürlich irgendwo auf der Map, also es buggt total.
    Wenn ich als Cop in der nähe vom Spieler mit Wanteds bin, können beide diese Verbuggten 3D labels sehen.

    forward GlobalTimer1(playerid);
    public GlobalTimer1(playerid)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    for(new pwtds=0; pwtds<MAX_PLAYERS; pwtds++)
    {
    if(Spieler[i][Fraktion] == 1)
    {
    new string[50];
    format(string,sizeof(string),"Name: %s[%d]\nWanteds: %d",SpielerName(pwtds),pwtds,Spieler[pwtds][Wanteds]);
    new Float:x,Float:y,Float:z;
    GetPlayerPos(pwtds,x,y,z);
    if(!IsPlayerInRangeOfPoint(i,10,x,y,z))continue;
    CreatePlayer3DTextLabel(i,string,COLOR_RED,x,y,z,20.0,pwtds,INVALID_VEHICLE_ID,1);
    }
    }
    }
    }


    Hier aber noch mal mein Code, den ich davor benutzt habe. Es hat wunderbar geklappt, bis auf, dass jeder Spieler die Labels sehen konnte und ich will ja, dass sie nur Cops sie sehen kann.



    new Text3D: SpielerWantedAnzeige[MAX_PLAYERS];


    //GameModeInit
    for(new i; i < MAX_PLAYERS; i++)
    {
    SpielerWantedAnzeige[i] = Create3DTextLabel(" ", COLOR_BLUE, 0.0, 0.0, 0.0, 20.0, 0, 0);
    }



    //On player Connect
    Attach3DTextLabelToPlayer(SpielerWantedAnzeige[playerid], playerid, 0.0, 0.0, 1.0);


    //Disconnect
    Update3DTextLabelText(SpielerWantedAnzeige[playerid], COLOR_BLUE, " ");



    forward GlobalTimer1(playerid);
    public GlobalTimer1(playerid)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(Spieler[i][Wanteds] >= 1)
    {
    new string[50];
    format(string,sizeof(string),"Name: %s [%d]\nWanteds: %d, Grund: %s",SpielerName(i),i,Spieler[i][Wanteds],Spieler[i][WantedGrund]);
    Update3DTextLabelText(SpielerWantedAnzeige[i], COLOR_BLUE, string);
    }
    else if(Spieler[i][Wanteds] == 0)
    {
    Update3DTextLabelText(SpielerWantedAnzeige[i], COLOR_BLUE, " ");
    }
    }
    }


    Hoffe es findet sich eine Lösung :o

    Mit freundlichen Grüßen,


    Keslo

  • Es ist total klar wieso das buggt ;)


    Nummer 1: IsPlayerInRangeOfPoint ist an der Stelle nutzlos, da das 3D Label selbst überprüft ob es sichtbar ist, dafür ist drawdistance zuständig.


    Nummer 2: GetPlayerPos kannst du entfernen und die Koordinaten bei CreatePlayer3DLabel kannst du jeweils auf 0.0 setzten. Die Koordinaten sind relativ zum attachten Spieler und daher ist es total klar das es irgendwo angezeigt wird.


    Nummer 3: Frag in deiner obersten Schleife ab ob der Spieler überhaupt Wanteds hat

  • Nummer 1: IsPlayerInRangeOfPoint ist an der Stelle nutzlos, da das 3D Label selbst überprüft ob es sichtbar ist, dafür ist drawdistance zuständig.


    Nummer 2: GetPlayerPos kannst du entfernen und die Koordinaten bei CreatePlayer3DLabel kannst du jeweils auf 0.0 setzten. Die Koordinaten sind relativ zum attachten Spieler und daher ist es total klar das es irgendwo angezeigt wird.


    Nummer 3: Frag in deiner obersten Schleife ab ob der Spieler überhaupt Wanteds hat

    Danke jetzt funktioniert alles!

    Mit freundlichen Grüßen,


    Keslo