1 TextDraw für jeden Spieler modifizieren

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
  • Guten Tag,


    ich habe 2 TextDraws im Kopf des Scripts wie folgt definiert:

    new Text:WantedStarTextDraw;
    new Text:WantedLevelTextDraw;


    Dann habe ich die 2 TextDraws unter OnGameModeInit modifiziert und einen Timer festgelegt:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw, 0);
    TextDrawTextSize(WantedStarTextDraw, 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw, 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw , true);
    TextDrawSetShadow(WantedStarTextDraw, 0);
    TextDrawColor(WantedStarTextDraw, gold);

    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw = TextDrawCreate(520, 102, "0");
    TextDrawFont(WantedLevelTextDraw , 3);
    TextDrawLetterSize(WantedLevelTextDraw , 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw , white);
    TextDrawSetOutline(WantedLevelTextDraw , true);
    TextDrawSetProportional(WantedLevelTextDraw , true);
    TextDrawSetShadow(WantedLevelTextDraw , 0);


    SetTimer("WantedsCheck", 500, true);


    Dann habe ich die Public Funktion so aufgebaut:

    public WantedsCheck()
    {
    new string[3];

    for (new i = 0; i <= MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    if (GetPVarInt(i, "wanteds") != 0)
    {
    TextDrawShowForPlayer(i, WantedStarTextDraw);

    format(string, sizeof(string), "%i", GetPVarInt(i, "wanteds"));
    TextDrawSetString(WantedLevelTextDraw, string);
    TextDrawShowForPlayer(i, WantedLevelTextDraw);
    }
    else
    {
    TextDrawHideForPlayer(i, WantedStarTextDraw);
    TextDrawHideForPlayer(i, WantedLevelTextDraw);
    }
    }
    }
    }


    Die Frage ist eigentlich ganz simpel aber ich komme damit nicht klar irgendwie. Mein Problem ist einfach das ich für jeden Spieler eine individuelle Anzeige von WantedLevelTextDraw geben möchte. Nicht jeder Spieler hat nicht die selben Wanteds (wenn überhaupt welche).


    Ich habe praktisch das Problem das wenn ich Wanteds habe und ich vergebe jemand Wanteds, dass bei mir und ihm seine Wanteds angezeigt werden. Bei mir sollen meine Wanteds stehen und bei ihm seine Wanteds. Wenn er garkeine hat soll er WantedStarTextDraw und WantedLevelTextDraw nicht sehen können. Dachte eigentlich das es so funktioniert wie ich das aufgebaut habe aber anscheinend doch nicht.

  • Du hast 2 Möglichkeiten. Einerseits kannst du normale textdraws benutzen oder per-player textdraws


    1. Möglichkeit:


    new Text:WantedStarTextDraw[MAX_PLAYERS];
    new Text:WantedLevelTextDraw[MAX_PLAYERS]; //für jeden Spieler jeweils ein Textdraw
    //[...]
    //In der for() Schleife:
    TextDrawShowForPlayer(i, WantedStartTextDraw[i]);



    2. Möglichkeit:

    new PlayerText:WantedStarTextDraw[MAX_PLAYERS];
    new PlayerText:WantedLevelTextDraw[MAX_PLAYERS]; //um auf Nummer sicher zu gehen, auch hier [MAX_PLAYERS]
    //[...]
    //In der for() Schleife:
    PlayerTextDrawShow(i, WantedStartTextDraw[i]);


    Per-player textdraws ist eigentlich dazu da damit man mehr textdraws erstellen kann (für jeden Spieler jeweils 256 maximal). Zwar hat jeder Spieler sein eigenes Textdraw ID "system" (d.h. zwei Spieler können zur gleichen zeit zwei verschiedene textdraws mit der gleichen ID haben), aber zur Sicherheit empfehle ich dir auch hier MAX_PLAYERS zu nutzen.

  • Normal das ich jetzt 16 Warnings habe ? (Eigentlich 20 aber 4 sind noch wegen etwas anderes):


    Kopf im Script:

    new PlayerText:WantedStarTextDraw[MAX_PLAYERS];
    new PlayerText:WantedLevelTextDraw[MAX_PLAYERS];


    Dann habe ich jetzt das aus OnGameModeInit gelöscht:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw, 0);
    TextDrawTextSize(WantedStarTextDraw, 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw, 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw , true);
    TextDrawSetShadow(WantedStarTextDraw, 0);
    TextDrawColor(WantedStarTextDraw, gold);

    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw = TextDrawCreate(520, 102, "0");
    TextDrawFont(WantedLevelTextDraw , 3);
    TextDrawLetterSize(WantedLevelTextDraw , 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw , white);
    TextDrawSetOutline(WantedLevelTextDraw , true);
    TextDrawSetProportional(WantedLevelTextDraw , true);
    TextDrawSetShadow(WantedLevelTextDraw , 0);


    Habe dann das ganze in OnPlayerConnect eingefügt und modifiziert:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw[playerid] = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw[playerid], 0);
    TextDrawTextSize(WantedStarTextDraw[playerid], 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw[playerid], 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw[playerid], true);
    TextDrawSetShadow(WantedStarTextDraw[playerid], 0);
    TextDrawColor(WantedStarTextDraw[playerid], gold);


    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw[playerid] = TextDrawCreate(520, 102, "WantedLevel");
    TextDrawFont(WantedLevelTextDraw[playerid], 3);
    TextDrawLetterSize(WantedLevelTextDraw[playerid], 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw[playerid], white);
    TextDrawSetOutline(WantedLevelTextDraw[playerid], true);
    TextDrawSetProportional(WantedLevelTextDraw[playerid], true);
    TextDrawSetShadow(WantedLevelTextDraw[playerid], 0);


    Und das hier ist meine neue Public Funktion:

    public WantedsCheck()
    {
    new string[3];

    for (new i = 0; i <= MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    if (GetPVarInt(i, "wanteds") != 0)
    {
    TextDrawShowForPlayer(i, WantedStarTextDraw[i]);

    format(string, sizeof(string), "%i", GetPVarInt(i, "wanteds"));
    TextDrawSetString(WantedLevelTextDraw[i], string);
    PlayerTextDrawShow(i, WantedLevelTextDraw[i]);
    }
    else
    {
    PlayerTextDrawHide(i, WantedStarTextDraw[i]);
    PlayerTextDrawHide(i, WantedLevelTextDraw[i]);
    }
    }
    }
    }


    Warnings sind immer gleich:

    Code
    warning 213: tag mismatch


    Genau wie bei meinem anderen Problem (hat nichts hier mit dem Problem zu tun). Die Warnings befinden sich in jeder Zeile in der WantedStarTextDraw oder WantedLevelTextDraw befindet.