Player Marker auf der Karte nur für LSPD/FBI

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
  • //Edit


    Also, nochmal neu.
    Ich möchte es jetzt so haben:


    Cops & FBI können sich gegenseitig auf der Karte sehen.
    Andere Spieler können Cops & FBI aber nicht auf der Karte sehen, und sehen den Namen bei TAB auch nicht farbig.
    Nur Cops & FBI sehen die Namen farbig.
    Wenn ein Cop/FBI nicht im Dienst ist, werden sie nicht auf der Karte angezeigt und werden weiß.
    Wenn ein Cop/FBI /bk macht, wird die Person Rot angezeigt, auch nur für Cop & FBI.


    Kann jemand helfen? -.-

  • Die Funktion "SetPlayerMarkerForPlayer" in Verbindung mit einer Schleife sollte dir wohl bei deinem Problem behiflich sein.


    (Quelle: http://wiki.sa-mp.com/wiki/SetPlayerMarkerForPlayer )


    Die Syntax ist folgende:

    Code
    (playerid, showplayerid, color)


    Es gibt auch eine dazugehörige "HidePlayerMarkerForPlayer" - Funktion mit der gleichen Syntax.


    Hoffe das sollte dir helfen ;)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Also, ich habe es jetzt folgendermaßen:
    forward UpdateRadar();
    public UpdateRadar()
    {
    for ( new i = 0; i < MAX_PLAYERS; i ++ )
    {
    if(IsPlayerConnected(i))
    {
    new Float:playerPos[3];
    new Float:targetPos[3];
    GetPlayerPos(i,playerPos[0],playerPos[1],playerPos[2]);



    for ( new j = 0; j < MAX_PLAYERS; j++ )
    {
    if(IsPlayerConnected(j) && j !=i)
    {
    GetPlayerPos(j,targetPos[0],targetPos[1],targetPos[2]);
    new distance;


    distance =floatround(floatsqroot(floatpower(floatabs(floatsub(playerPos[0],targetPos[0])),2)+floatpower(floatabs(floatsub(playerPos[1],targetPos[1])),2)));


    if((Spieler[i][pFraktion] == 1 || Spieler[i][pFraktion] == 2) && !(Spieler[j][pFraktion] == 1 || Spieler[j][pFraktion] == 2))
    {
    if(NeedBackup[j] == 1)
    {
    SetPlayerMarkerForPlayer(i,j,COLOR_BK);
    }
    }
    if(distance <= 200)
    {
    SetPlayerMarkerForPlayer(i,j,(GetPlayerColor(j)& 0xFFFFFF00));
    }
    else
    {
    SetPlayerMarkerForPlayer(i,j,GetPlayerColor(j));
    }
    }
    }
    }
    }
    return 1;
    }


    Ein Spieler, der nun /bk, /backup eingibt, wird aber nicht angezeigt. (Bei /backup,/bk wird NeedBackup auf 1 gesetzt.)


    Kann jemand helfen? :/

  • Also das Distanz Gedöns kannst du deutlich einfacher haben..
    Nutze doch bitte die "GetPlayerDistanceFromPoint" Funktion:

    public UpdateRadar(playerid)
    {
    for ( new j = 0; j < MAX_PLAYERS; j++ )
    {
    if(!IsPlayerConnected(j)) continue;
    if(playerid==j) continue; //Unterbricht den Durchlauf für Fall playerid=j

    if(!(Spieler[j][pFraktion] == 1 || Spieler[j][pFraktion] == 2)) continue;
    //Die Verneinung müsste ggf. überarbeitet werden; Weiß nicht, wie die Fraks bei dir definiert sind..


    //Jetzt unsere Marker setzen..
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(j,X,Y,Z);
    if(GetPlayerDistanceFromPoint(playerid,X,Y,Z)<= 200){SetPlayerMarkerForPlayer(i,j,(GetPlayerColor(j)& 0xFFFFFF00));}
    else{SetPlayerMarkerForPlayer(playerid,j,GetPlayerColor(j));}

    }
    return 1;
    }

    "i" war doch nie definiert. Wir gehen hier doch von einer Spieler Funktion aus, welche durch einen Spieler ausgelöst wird. Der Parameter im Callback wäre dann also playerid (oder etwas ähnliches)
    Außerdem: Warum zwei loops??!!


    "Why do you always make these things so complicated .. " ;)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

    Einmal editiert, zuletzt von FACE () aus folgendem Grund: Fehler ausgemerzt..

  • Frage halt vor dem Command ab, ob der Spieler in der passenden Stellung (Fraktion, Level oder sonstwas) ist, um den CMD durchzuführen..


    Wir führen dann den CMD aus und lassen einen Loop durch alle Spieler laufen.
    Jeder der Online, in der passenden Fraktion und Stellung ist, bekommt dann den Marker gesetzt.
    (Spezieller halt noch in Abhängigkeit von der Distanz).



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Es müsste aber auch über den Timer machbar sein.
    Ich möchte beim Befehl nur die Variable setzen lassen.
    Beim Timer wird's dann angezeigt andauernd, solange man halt die Variable auf 1 hat.


    Habs jetzt so:
    forward UpdateRadar(playerid);
    public UpdateRadar(playerid)
    {
    for ( new j = 0; j < MAX_PLAYERS; j++ )
    {
    if(!IsPlayerConnected(j)) continue;
    if(playerid==j) continue;

    if(!(Spieler[playerid][pFraktion] == 1 || Spieler[playerid][pFraktion] == 2) && !(Spieler[j][pFraktion] == 1 || Spieler[j][pFraktion] == 2)) continue;
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(j,X,Y,Z);
    new Float:distance = GetPlayerDistanceFromPoint(playerid, X, Y, Z);
    if(distance < 200){SetPlayerMarkerForPlayer(playerid,j,(GetPlayerColor(j)& 0xFFFFFF00));}
    else{SetPlayerMarkerForPlayer(playerid,j,GetPlayerColor(j));}
    }
    return 1;
    }


    Mein Name ist blau, der von den anderen Cops ist weiß und ich sehe sie nich auf der karte und sie mich nicht.