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
  • So, ich habe nun den exakt selben Code auf einem separaten Script laufen lassen, und siehe da - es funktioniert. Eben nur nicht in meinem eigentlichen GM. Es muss an irgendetwas anderem liegen...
    Hier ist der Code.


    #include <a_samp>
    #include <zcmd>


    #undef MAX_PLAYERS
    #define MAX_PLAYERS 2


    main()
    {
    print("Blank Gamemode by your name here");
    }


    COMMAND:bf(playerid, params[])
    {
    SetPlayerVirtualWorld(playerid, 7);
    SendClientMessage(playerid, -1, "World 7.");
    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;
    }


    COMMAND:exit(playerid, params[])
    {
    SetPlayerVirtualWorld(playerid, 0);
    return 1;
    }


    public OnGameModeInit()
    {
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }

  • Dann hast du entweder einen Timer irgendwo in deinem Code laufen, der den Spieler wieder sichtbar setzt, oder du setzt ihn direkt beim betreten der Welt 7 wieder sichtbar.
    Nutzt du die SetPlayerMarkerForPlayer Funktion irgendwo im Code (checke auch die Filterscripts)?

  • Wie gesagt, ich verwende die Funktion nur in dem genannten Beispiel, sonst in keiner Include und in keinem filterscript.
    Ich hab auch alle Timer-Funktionen überprüft, in keiner ist auch nur annähernd eine solche Funktion verwendet worden.


    Direkt beim Betreten der virtuellen Welt wird doch nur der CMD aufgerufen und kein Callback. Also kann es nur innerhalb des CMD etwas sein.
    Sonst hätt ich gesagt, dass evtl. unter OnPlayerSPawn etwas sein könnte, aber das betrifft ja nicht den ersten Spawn, sondern REspawn.

  • Deshalb ging meine Vermutung zu OnPlayerUpdate hin.
    Du kannst ja mal versuchen deinen Befehl im GameMode auf den im leeren GameMode zu reduzieren (Befehl im GameMode = /bf aus leerem GameMode), klappt es dann? Klar, du wirst nicht mehr gespawnt, aber wenn es dann klappt, wenn ihr euch zwar sehen könnt, aber nicht mehr auf dem Radar seid, dann liegt es an etwas im Befehl. Seht ihr euch auf dem Radar trotzdem noch, dann liegt es an etwas außerhalb des Befehls.

  • Ich glaube du hast mich nicht ganz verstanden. ^^
    Du sollst den Befehl im GameMode mit dem hier ersetzen:


    SetPlayerVirtualWorld(playerid, 7);
    SendClientMessage(playerid, -1, "World 7.");
    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;


    Da es im leeren GameMode geht muss es auch in dem normalen GameMode gehen. Wenn es geht, liegt es an deinem Befehl, wenn es auch nicht geht, liegt es an etwas außerhalb des Befehls.
    Du spawnst zwar nicht, aber darum geht es ja nicht, sondern erstmal um festzustellen, an was es liegt.

  • Aso... sorry.^^ Also, der oben genannte Code funktioniert nicht. Also muss der Fehler irgendwo im GM versteckt sein? D: Lass die Schnitzeljagd beginnen. -.-


    EDIT: Ich habe die starke Vermutung, dass es etwas mit SetPlayerColor zu tun hat. Ich habe es momentan unter OnPlayerSpawn stehen.
    SetPlayerColor(playerid, 0x007BFFFF);
    Könnte das evtl. die Marker beeinträchtigen?

    Einmal editiert, zuletzt von Manyula ()

  • Sollte mit SetPlayerColor einfacher gehen, wenn ich mich richtig erinnere.


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVirtualWorld(i) == 7) // wer in Welt 7 ist, wird unsichtbar.
    {
    SetPlayerColor(i, GetPlayerColor(i) & 0xFFFFFF00);
    }
    }


    Cheers Many

  • Damit funktioniert es schon mal, nur wie behalte ich dann die Farbe für den Chat bei?
    Zurzeit setze ich die Spielerfarbe bei OnPlayerSpawn. Wenn ich nun ins DM gehe, dann ändern sich die Chatfarben.


    Cheers, 007, lange nichts mehr von dir gehört. ;)

  • Also, ich bleibe jetzt bei dem Ändern der Farben, da mit das mit SetPlayerMarkerForPlayer doch zu sehr die Suche nach der Nadel im Heuhaufen ist...


    Jeffry, ich möchte mich ganz herzlich bei dir für dein Durchhaltevermögen bedanken, sieht man echt nicht oft hier im Forum. Props to you. ;)