SetPlayerMarkerForPlayer

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,


    ich habe ein winziges Logikproblem mit SetPlayerMarkerForPlayer.
    Ich möchte, dass Spieler sich in der virtuellen Welt 7 nicht auf dem Radar sehen können.


    Das hier habe ich in dem CMD eingebaut, in dem der Spieler die virtuelle Welt 7 (DM) betritt.
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVirtualWorld(i) && GetPlayerVirtualWorld(playerid) == 7) //wenn der gesehene und der "Seher" in vw 7 sind...
    {
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00)); //soll jeder playerid als unsichtbar ansehen
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(playerid) & 0xFFFFFF00)); //soll playerid alle anderen als unsichtbar ansehen
    }
    }


    Wo liegt mein Denkfehler?

  • Die Spieler sehen sich immer noch.
    Ich hab mal einen Testdurchlauf gemacht, und mir ist aufgefallen, dass wenn ich einen Spieler 1x kille, ihn dann nachm Respawn nicht mehr sehe, er mich aber trotzdem noch sieht. Also, den Marker. Nach weiteren Kills sehen sich beide wieder gegenseitig.

  • for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVirtualWorld(i) == 7 && i!=playerid) //wenn der gesehene und der "Seher" in vw 7 sind...
    {
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00)); //soll jeder playerid als unsichtbar ansehen
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00)); //soll playerid alle anderen als unsichtbar ansehen
    }
    }

  • Ich hab SetPlayerColor verwendet, sicherheitshalber mal so, dass alle dieselbe Farbe haben (blau).


    Wie gesagt, die Schleife soll ja in den CMD. Mit dem CMD betritt man ein DM (virtuelle Welt 7). Dort sollen von Anfang an keine Marker auf dem Radar sichtbar sein. Nametags sind im Moment irrelevant. Aber wenn zwei Spieler beispielsweise nacheinander die DM Arena betreten, sehen sie sich trotzdem auf dem Radar.

  • Also bei mir klappt das wunderbar.


    Lass es mal so laufen, was wird da geprintet?
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    printf("World(%d) = %d | %d != %d", i, GetPlayerVirtualWorld(i), i, playerid);
    if(GetPlayerVirtualWorld(i) == 7 && i!=playerid)
    {
    printf("Verstecke Marker bei ID %d von ID %d", i, playerid);
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    printf("Verstecke Marker bei ID %d von ID %d", playerid, i);
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00));
    }
    }

  • Es klappt nun, war ein Fehler meinerseits, vielen Dank!


    Wenn ich nun die Marker wieder mit der ursprünglichen Farbe färben möchte, muss ich die Farbe davor dann einfach in einer globalen Variable speichern und beim Verlassen CMD mit SetPlayerColor setzen?

  • Okay, es klappt doch nicht. -.- Hier ist, was geprintet wird, wenn 1 Spieler auf dem Server ist.


    [07:57:40] World(0) = 7 | 0 != 0
    [07:57:40] World(1) = 0 | 1 != 0
    [07:57:40] World(2) = 0 | 2 != 0
    [07:57:40] World(3) = 0 | 3 != 0
    [07:57:40] World(4) = 0 | 4 != 0
    [07:57:40] World(5) = 0 | 5 != 0
    [07:57:40] World(6) = 0 | 6 != 0
    [07:57:40] World(7) = 0 | 7 != 0
    [07:57:40] World(8) = 0 | 8 != 0
    [07:57:40] World(9) = 0 | 9 != 0
    [07:57:40] World(10) = 0 | 10 != 0
    [07:57:40] World(11) = 0 | 11 != 0
    [07:57:40] World(12) = 0 | 12 != 0
    [07:57:40] World(13) = 0 | 13 != 0
    [07:57:40] World(14) = 0 | 14 != 0
    [07:57:40] World(15) = 0 | 15 != 0
    [07:57:40] World(16) = 0 | 16 != 0
    [07:57:40] World(17) = 0 | 17 != 0
    [07:57:40] World(18) = 0 | 18 != 0
    [07:57:40] World(19) = 0 | 19 != 0
    [07:57:40] World(20) = 0 | 20 != 0
    [07:57:40] World(21) = 0 | 21 != 0
    [07:57:40] World(22) = 0 | 22 != 0
    [07:57:40] World(23) = 0 | 23 != 0
    [07:57:40] World(24) = 0 | 24 != 0
    [07:57:40] World(25) = 0 | 25 != 0
    [07:57:40] World(26) = 0 | 26 != 0
    [07:57:40] World(27) = 0 | 27 != 0
    [07:57:40] World(28) = 0 | 28 != 0
    [07:57:40] World(29) = 0 | 29 != 0
    [07:57:40] World(30) = 0 | 30 != 0
    [07:57:40] World(31) = 0 | 31 != 0
    [07:57:40] World(32) = 0 | 32 != 0
    [07:57:40] World(33) = 0 | 33 != 0
    [07:57:40] World(34) = 0 | 34 != 0
    [07:57:40] World(35) = 0 | 35 != 0
    [07:57:40] World(36) = 0 | 36 != 0
    [07:57:40] World(37) = 0 | 37 != 0
    [07:57:40] World(38) = 0 | 38 != 0
    [07:57:40] World(39) = 0 | 39 != 0
    [07:57:40] World(40) = 0 | 40 != 0
    [07:57:40] World(41) = 0 | 41 != 0
    [07:57:40] World(42) = 0 | 42 != 0
    [07:57:40] World(43) = 0 | 43 != 0
    [07:57:40] World(44) = 0 | 44 != 0
    [07:57:40] World(45) = 0 | 45 != 0
    [07:57:40] World(46) = 0 | 46 != 0
    [07:57:40] World(47) = 0 | 47 != 0
    [07:57:40] World(48) = 0 | 48 != 0
    [07:57:40] World(49) = 0 | 49 != 0

  • Ich habe es gestern Abend mit 2 Spielern getestet, und da hat es ebenfalls nicht funktioniert. Ich werde bei Gelegenheit dazu auch nochmal den Log posten.


    EDIT:
    [22:32:28] World(0) = 0 | 0 != 1
    [22:32:28] World(1) = 7 | 1 != 1
    [22:32:28] World(2) = 0 | 2 != 1
    [22:32:28] World(3) = 0 | 3 != 1
    [22:32:28] World(4) = 0 | 4 != 1
    [22:32:28] World(5) = 0 | 5 != 1
    [22:32:28] World(6) = 0 | 6 != 1
    [22:32:28] World(7) = 0 | 7 != 1
    [22:32:28] World(8) = 0 | 8 != 1
    [22:32:28] World(9) = 0 | 9 != 1
    [22:32:28] World(10) = 0 | 10 != 1
    [22:32:28] World(11) = 0 | 11 != 1
    [22:32:28] World(12) = 0 | 12 != 1
    [22:32:28] World(13) = 0 | 13 != 1
    [22:32:28] World(14) = 0 | 14 != 1
    [22:32:28] World(15) = 0 | 15 != 1
    [22:32:28] World(16) = 0 | 16 != 1
    [22:32:28] World(17) = 0 | 17 != 1
    [22:32:28] World(18) = 0 | 18 != 1
    [22:32:28] World(19) = 0 | 19 != 1
    [22:32:28] World(20) = 0 | 20 != 1
    [22:32:28] World(21) = 0 | 21 != 1
    [22:32:28] World(22) = 0 | 22 != 1
    [22:32:28] World(23) = 0 | 23 != 1
    [22:32:28] World(24) = 0 | 24 != 1
    [22:32:28] World(25) = 0 | 25 != 1
    [22:32:28] World(26) = 0 | 26 != 1
    [22:32:28] World(27) = 0 | 27 != 1
    [22:32:28] World(28) = 0 | 28 != 1
    [22:32:28] World(29) = 0 | 29 != 1
    [22:32:28] World(30) = 0 | 30 != 1
    [22:32:28] World(31) = 0 | 31 != 1
    [22:32:28] World(32) = 0 | 32 != 1
    [22:32:28] World(33) = 0 | 33 != 1
    [22:32:28] World(34) = 0 | 34 != 1
    [22:32:28] World(35) = 0 | 35 != 1
    [22:32:28] World(36) = 0 | 36 != 1
    [22:32:28] World(37) = 0 | 37 != 1
    [22:32:28] World(38) = 0 | 38 != 1
    [22:32:28] World(39) = 0 | 39 != 1
    [22:32:28] World(40) = 0 | 40 != 1
    [22:32:28] World(41) = 0 | 41 != 1
    [22:32:28] World(42) = 0 | 42 != 1
    [22:32:28] World(43) = 0 | 43 != 1
    [22:32:28] World(44) = 0 | 44 != 1
    [22:32:28] World(45) = 0 | 45 != 1
    [22:32:28] World(46) = 0 | 46 != 1
    [22:32:28] World(47) = 0 | 47 != 1
    [22:32:28] World(48) = 0 | 48 != 1
    [22:32:28] World(49) = 0 | 49 != 1


    [22:32:31] World(0) = 7 | 0 != 0
    [22:32:31] World(1) = 7 | 1 != 0
    [22:32:31] Verstecke Marker bei ID 1 von ID 0
    [22:32:31] Verstecke Marker bei ID 0 von ID 1
    [22:32:31] World(2) = 0 | 2 != 0
    [22:32:31] World(3) = 0 | 3 != 0
    [22:32:31] World(4) = 0 | 4 != 0
    [22:32:31] World(5) = 0 | 5 != 0
    [22:32:31] World(6) = 0 | 6 != 0
    [22:32:31] World(7) = 0 | 7 != 0
    [22:32:31] World(8) = 0 | 8 != 0
    [22:32:31] World(9) = 0 | 9 != 0
    [22:32:31] World(10) = 0 | 10 != 0
    [22:32:31] World(11) = 0 | 11 != 0
    [22:32:31] World(12) = 0 | 12 != 0
    [22:32:31] World(13) = 0 | 13 != 0
    [22:32:31] World(14) = 0 | 14 != 0
    [22:32:31] World(15) = 0 | 15 != 0
    [22:32:31] World(16) = 0 | 16 != 0
    [22:32:31] World(17) = 0 | 17 != 0
    [22:32:31] World(18) = 0 | 18 != 0
    [22:32:31] World(19) = 0 | 19 != 0
    [22:32:31] World(20) = 0 | 20 != 0
    [22:32:31] World(21) = 0 | 21 != 0
    [22:32:31] World(22) = 0 | 22 != 0
    [22:32:31] World(23) = 0 | 23 != 0
    [22:32:31] World(24) = 0 | 24 != 0
    [22:32:31] World(25) = 0 | 25 != 0
    [22:32:31] World(26) = 0 | 26 != 0
    [22:32:31] World(27) = 0 | 27 != 0
    [22:32:31] World(28) = 0 | 28 != 0
    [22:32:31] World(29) = 0 | 29 != 0
    [22:32:31] World(30) = 0 | 30 != 0
    [22:32:31] World(31) = 0 | 31 != 0
    [22:32:31] World(32) = 0 | 32 != 0
    [22:32:31] World(33) = 0 | 33 != 0
    [22:32:31] World(34) = 0 | 34 != 0
    [22:32:31] World(35) = 0 | 35 != 0
    [22:32:31] World(36) = 0 | 36 != 0
    [22:32:31] World(37) = 0 | 37 != 0
    [22:32:31] World(38) = 0 | 38 != 0
    [22:32:31] World(39) = 0 | 39 != 0
    [22:32:31] World(40) = 0 | 40 != 0
    [22:32:31] World(41) = 0 | 41 != 0
    [22:32:31] World(42) = 0 | 42 != 0
    [22:32:31] World(43) = 0 | 43 != 0
    [22:32:31] World(44) = 0 | 44 != 0
    [22:32:31] World(45) = 0 | 45 != 0
    [22:32:31] World(46) = 0 | 46 != 0
    [22:32:31] World(47) = 0 | 47 != 0
    [22:32:31] World(48) = 0 | 48 != 0
    [22:32:31] World(49) = 0 | 49 != 0

    Einmal editiert, zuletzt von Manyula ()

  • Das ist mir auch aufgefallen, dennoch habe ich den Radar Marker von ID 1 immer noch gesehen. D:


    Also, das hier ist der CMD zum Verlassen des DMs.
    COMMAND:exit(playerid, params[])
    {
    if(!IsPlayerInDM[playerid]) return SendLanguageMessage(playerid, C_RED, "»WARNUNG« Du bist in keinem DM! Benutze "#C_DARK_RED_E"/DM"#C_RED_E" für eine Liste der DMs!", "»WARNING« You aren't in a DM! Use "#C_DARK_RED_E"/DM"#C_RED_E" for a list of DMs!");
    if(BufferCMD(playerid)) return 1;

    new pName[MAX_PLAYER_NAME],
    stringDE[128],
    stringEN[128];
    ResetPlayerWeapons(playerid);
    RestoreWeaponSkillLevel(playerid);
    ReturnPlayerWeapons(playerid);
    ReturnPlayerHPandAP(playerid);


    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, GlobalX[playerid], GlobalY[playerid], GlobalZ[playerid]);
    SetPlayerFacingAngle(playerid, GlobalFacingAngle[playerid]);


    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), "»DEATHMATCH« {%06x}%s "#C_DM_E"hat das DM verlassen! [/verlassen]", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»DEATHMATCH« {%06x}%s "#C_DM_E"has left the DM! [/exit]", GetPlayerColor(playerid) >>> 8, pName);
    SendLanguageMessageToAll(C_DM, stringDE, stringEN);
    IsPlayerInDM[playerid] = false;
    UseTeleports[playerid] = true;

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVirtualWorld(i) == 7 && i != playerid)
    {
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid)));
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i)));
    }
    }
    return 1;
    }


    Und das hier der CMD zum Betreten des DMs mit der virtuellen Welt 7.
    COMMAND:bf(playerid, params[])
    {
    new Random = random(sizeof(RandomSpawnsBF)),
    pName[MAX_PLAYER_NAME],
    stringDE[128],
    stringEN[128];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), "»DEATHMATCH« {%06x}%s "#C_DM_E"hat das Battlefield-DM betreten! [/BF]", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»DEATHMATCH« {%06x}%s "#C_DM_E"has joined the Battlefield-DM ! [/BF]", GetPlayerColor(playerid) >>> 8, pName);
    AddToDM(playerid, stringDE, stringEN, RandomSpawnsBF[Random][0], RandomSpawnsBF[Random][1], RandomSpawnsBF[Random][2], RandomSpawnsBF[Random][3], M4, 1000, UZI, 99999, GRENADE, 5, COMBAT_SHOTGUN, 500, 7, 0);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    printf("World(%d) = %d | %d != %d", i, GetPlayerVirtualWorld(i), i, playerid);
    if(GetPlayerVirtualWorld(i) == 7 && i != playerid)
    {
    printf("Verstecke Marker bei ID %d von ID %d", i, playerid);
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    printf("Verstecke Marker bei ID %d von ID %d", playerid, i);
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00));
    }
    }
    return 1;
    }


    Es müsste wirklich alles stimmen. Ich kann dich auch gerne über Hamachi auf meinen Server kommen lassen, wenn das bei der Problemlösung hilft.

  • Manyula:
    Hast du SetPlayerMarkerForPlayer noch irgendwo anders im Code verwendet? Zum Beispiel, dass da ein Timer läuft, der das wieder zurücksetzt?


    Und hast du bei OnPlayerUpdate ganz unten ein "return 1"? Oder hast du irgendwo in OnPlayerUpdate ein "return 0"?



    Ich kann mir das Problem nicht erklären, da der Code einwandfrei aufgerufen wird, nur die Funktion hat keine Wirkung.

  • Nein, ich verwende die Funktion nur in diesem Fall. Unter OnPlayerUpdate stimmt auch alles.


    Vllt wäre es noch nennenswert, dass ich den Code in einer Include ausführe, aber das dürfte normalerweise keinen Unterschied machen...


    Du meintest doch, dass es bei dir klappt? Wie genau führst du den Code aus? Per CMD?

  • Ok, komisch.


    Eigentlich sollte das keinen Unterschied machen, richtig.


    Ja, per Command habe ich das ausführen lassen, aber auch das sollte keinen Unterschied machen.



    Folgendes kannst du mal probieren: Lade dir einen leeren Server herunter (http://files.sa-mp.com/) erstelle einen leeren GameMode und packe nur die Schleife mit dem SetPlayerMarkerForPlayer in einen Befehl (nur den GameMode mit dem Befehl laden, keine Filterscripts, keine Plugins, nichts). Dann gehst du in den Server und gibst den Befehl ein. Die prints lässt du drin. Musst eben darauf achten, dass du entweder in der Abfrage die virtuelle Welt zu 0 änderst, oder die Spieler bei OnPlayerSpawn in Welt 7 setzt.


    Falls das auch nicht klappt, poste bitte den Code von dem "leeren" Gamemode.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen