Textdraw String Problem

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
  • Nabend Com!
    Ich habe ein Problem mit meinem Textdraw. Es soll nämlich das Level (Score) auslesen.
    Mein Score ingame ist 3, doch das Textdraw zeigt es so an: "Level: 0".
    Hier mal der Code:



    new tdstring[64];
    format(tdstring,sizeof(tdstring),"Level: %i",GetPlayerScore(playerid));
    StatisticBox = CreatePlayerTextDraw(playerid,490.000000, 320.000000, tdstring);
    PlayerTextDrawShow(playerid,StatisticBox);
    PlayerTextDrawBackgroundColor(playerid,StatisticBox, 255);
    PlayerTextDrawFont(playerid,StatisticBox, 3);
    PlayerTextDrawLetterSize(playerid,StatisticBox, 0.600000, 2.000000);
    PlayerTextDrawColor(playerid,StatisticBox, -1);
    PlayerTextDrawSetOutline(playerid,StatisticBox, 1);
    PlayerTextDrawSetProportional(playerid,StatisticBox, 1);
    PlayerTextDrawSetSelectable(playerid,StatisticBox, 0);

  • Der Code kann auf Grund mehrerer Tatsachen so nicht funktionieren. Auch das was oben gepostet wurde ist absoluter Käse, man kann doch nicht nur eine Variable für alle Spieler benutzen, ist doch klar, dass das nicht tut.


    Fangen wir mal ganz von vorne an:


    1.) Die Variable:
    new PlayerText:StatisticBox[MAX_PLAYERS] = {PlayerText:-1, ...}; //Initialisiert das Array (für alle Spieler) mit dem Wert -1.


    2.) OnPlayerConnect:
    StatisticBox[playerid] = CreatePlayerTextDraw(playerid,490.000000, 320.000000, "Level: --"); //Erstellt das Textdraw für den Spieler, GetPlayerScore macht in OnPlayerConnect wenig Sinn, daher der Timer.
    PlayerTextDrawShow(playerid,StatisticBox[playerid]);
    PlayerTextDrawBackgroundColor(playerid,StatisticBox[playerid], 255);
    PlayerTextDrawFont(playerid,StatisticBox[playerid], 3);
    PlayerTextDrawLetterSize(playerid,StatisticBox[playerid], 0.600000, 2.000000);
    PlayerTextDrawColor(playerid,StatisticBox[playerid], -1);
    PlayerTextDrawSetOutline(playerid,StatisticBox[playerid], 1);
    PlayerTextDrawSetProportional(playerid,StatisticBox[playerid], 1);
    PlayerTextDrawSetSelectable(playerid,StatisticBox[playerid], 0);


    3.) OnGameModeInit/OnFilterScriptInit (je nach dem):
    SetTimer("CheckAllScore", 1000, 1); //Ein Timer zum Updaten der Levels, automatische Änderung des Textdraws wenn sich ein Level ändert.


    4.) Unten im GM/FS:
    forward CheckAllScore(); //Der Aufruf des Timers.
    public CheckAllScore()
    {
    new str[64];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    format(str,sizeof(str),"Level: %i",GetPlayerScore(i));
    PlayerTextDrawSetString(i,StatisticBox[i],str);
    }
    }
    return 1;
    }



    5.) OnPlayerDisconnect:

    //Wenn das Textdraw existiert, lösche es.
    if(StatisticBox[playerid] != PlayerText:-1) PlayerTextDrawDestroy(playerid, StatisticBox[playerid]);
    StatisticBox[playerid] = PlayerText:-1;



    Hierbei noch einmal die Bitte: Wenn Ihr keine Ahnung habt, dann postet bitte nicht. Das ist nicht böse gemeint, sondern um eben sowas zu verhindern, dass der Frage-Steller erst recht keinen Durchblick mehr haben wird, weil nur undurchdachter Käse gepostet wird, durchmischt mit Fragen die Off-Topic sind.
    Erst Hirn ein, dann Posten. Das macht es uns allen leichter.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: playerid anstatt i geschrieben. Thx@BaRkS

  • Du hast auch ein Fehler, Jeffry:
    Bei Punkt 4 unten hast du playerid benutzt.


    Kommt davon wenn man zu viel Copy&Paste macht. Danke dir, sehr aufmerksam. :)


    Übrigens, da du schreibst "auch ein Fehler": Ich sprach nicht von Fehlern, die kommen vor. Es ging darum, dass sich keiner Gedanken gemacht hat warum der Code nicht tut und einfach mal ins blaue geschossen hat.

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