2 Textdraws in einem?

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,


    hab da ein kleines Problem, und zwar wollte ich wissen wie man 2 Textdraws in einem macht?
    Hab das folgendermaßen gemacht:



    public PlayerHUD()
    {
    new string[256];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {


    }
    }
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    new Levels;
    Levels = GetPlayerLevel(i);
    format(string, sizeof(string), "~w~Level:~r~ %d ~w~Punkte:~r~ %d ~w~Coins:~r~ %d ~w~Kills:~r~ %d ~w~Deaths:~r~ %d ~w~Bank:~r~ %d",Levels,pkt,coins[i] ,kills[i], deaths[i], bank[i]);
    // Links/Rechts //Höhe
    levelanzeige[i] = TextDrawCreate(50.000000,430.000000, string);
    TextDrawLetterSize(levelanzeige[i], 0.5, 1.5);
    TextDrawFont(levelanzeige[i],1);
    TextDrawShowForPlayer(i,levelanzeige[i]);
    TextDrawSetShadow(levelanzeige[i], 0);
    TextDrawSetOutline(levelanzeige[i], 0);
    new hour,minute,second;
    gettime(hour,minute,second);
    if (minute <= 9){
    format(string,25,"%d:0%d",hour,minute);}
    else {format(string,25,"%d:%d",hour,minute);}
    levelanzeige[i] = TextDrawCreate(547.0, 24.0, string);
    TextDrawLetterSize(levelanzeige[i], 0.6, 1.8);
    TextDrawFont(levelanzeige[i], 3);
    TextDrawSetOutline(levelanzeige[i], 0);
    TextDrawShowForAll(levelanzeige[i]);
    if (hour == 0){SetWorldTime(0);
    }
    if (hour == 1){SetWorldTime(1);
    }
    if (hour == 2){SetWorldTime(2);
    }
    if (hour == 3){SetWorldTime(3);
    }
    if (hour == 4){SetWorldTime(4);
    }
    if (hour == 5){SetWorldTime(5);
    }
    if (hour == 6){SetWorldTime(6);
    }
    if (hour == 7){SetWorldTime(7);
    }
    if (hour == 8){SetWorldTime(8);
    }
    if (hour == 9){SetWorldTime(9);
    }
    if (hour == 10){SetWorldTime(10);
    }
    if (hour == 11){SetWorldTime(11);
    }
    if (hour == 12){SetWorldTime(12);
    }
    if (hour == 13){SetWorldTime(13);
    }
    if (hour == 14){SetWorldTime(14);
    }
    if (hour == 15){SetWorldTime(15);
    }
    if (hour == 16){SetWorldTime(16);
    }
    if (hour == 17){SetWorldTime(17);
    }
    if (hour == 18){SetWorldTime(18);
    }
    if (hour == 19){SetWorldTime(19);
    }
    if (hour == 20){SetWorldTime(20);
    }
    if (hour == 21){SetWorldTime(21);
    }
    if (hour == 22){SetWorldTime(22);
    }
    if (hour == 23){SetWorldTime(23);
    }
    if (hour == 24){SetWorldTime(24);
    }
    }
    }
    return 1;
    }



    Es funktioniert zwar man sieht unten mein Menü mit Coins,Punkte etc. und rechts oben die Realtime Uhr, dummerweise wenn man die Zahl unten Aktualisiert, kommt der Textdraw doppelt !? Und man erkennt nichts mehr, also was mach ich da falsch?

  • Nicht getestet sollte aber gehen.

    // zu den anderen
    new Text:Uhr;
    //Unter OnGameModeInit:
    for(new i=0; i<MAX_PLAYERS; i++)//Die Anzeige muss für jeden Spieler erstellt werden da sie immer verschieden ist
    { // Links/Rechts //Höhe
    levelanzeige[i] = TextDrawCreate(50.000000,430.000000, string);
    TextDrawLetterSize(levelanzeige[i], 0.5, 1.5);
    TextDrawFont(levelanzeige[i],1);
    TextDrawShowForPlayer(i,levelanzeige[i]);
    TextDrawSetShadow(levelanzeige[i], 0);
    TextDrawSetOutline(levelanzeige[i], 0);
    }
    Uhr = TextDrawCreate(547.0, 24.0, "00:00");//kann Global erstellt werden da sie für alle immer gleich ist!
    TextDrawLetterSize(Uhr, 0.6, 1.8);
    TextDrawFont(Uhr, 3);
    TextDrawSetOutline(Uhr, 0);
    //das pbulic
    public PlayerHUD()
    {
    new string[256];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    new Levels;
    Levels = GetPlayerLevel(i);
    format(string, sizeof(string), "~w~Level:~r~ %d ~w~Punkte:~r~ %d ~w~Coins:~r~ %d ~w~Kills:~r~ %d ~w~Deaths:~r~ %d ~w~Bank:~r~ %d",Levels,pkt,coins[i] ,kills[i], deaths[i], bank[i]);
    TextDrawSetString(levelanzeige[i],string);//hiermit neu setzen und nicht neu erstellen! ;)
    }
    }
    new hour,minute,second;
    gettime(hour,minute,second);
    format(string,25,"%d:%d",hour,minute);
    TextDrawSetString(Uhr,string);//hiermit neu setzen und nicht neu erstellen! ;)
    SetWorldTime(hour);//so gehts doch auch, warum so umständlich :D
    return 1;
    }

  • Danke für die Antwort, jedoch bekomme ich Fehler, und finde keine Lösung diese zu beheben was kann der grund dafür sein?



    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(598) : error 017: undefined symbol "string"
    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(2267) : warning 216: nested comment
    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(2861) : warning 203: symbol is never used: "txtAnimHelper"
    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(2861) : warning 203: symbol is never used: "ziv1"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


  • Ok, das wäre dann so:


    Zeile:


    598:



    levelanzeige[i] = TextDrawCreate(50.000000,430.000000, string);




    Fehler:



    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(598) : error 017: undefined symbol "string"
    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(2861) : warning 203: symbol is never used: "txtAnimHelper"
    D:\Internet\samp03svr_RC8-1_win32\gamemodes\gls.pwn(2861) : warning 203: symbol is never used: "ziv1"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Die Warnings sind unwichtig, nur der ERROR von oben kann ich nicht beheben.

  • // zu den anderen
    new Text:Uhr;
    //Unter OnGameModeInit:
    for(new i=0; i<MAX_PLAYERS; i++)//Die Anzeige muss für jeden Spieler erstellt werden da sie immer verschieden ist
    { // Links/Rechts //Höhe
    new string[256];
    levelanzeige[i] = TextDrawCreate(50.000000,430.000000, string);
    TextDrawLetterSize(levelanzeige[i], 0.5, 1.5);
    TextDrawFont(levelanzeige[i],1);
    TextDrawShowForPlayer(i,levelanzeige[i]);
    TextDrawSetShadow(levelanzeige[i], 0);
    TextDrawSetOutline(levelanzeige[i], 0);
    }
    Uhr = TextDrawCreate(547.0, 24.0, "00:00");//kann Global erstellt werden da sie für alle immer gleich ist!
    TextDrawLetterSize(Uhr, 0.6, 1.8);
    TextDrawFont(Uhr, 3);
    TextDrawSetOutline(Uhr, 0);
    //das pbulic
    public PlayerHUD()
    {
    new string[256];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    new Levels;
    Levels = GetPlayerLevel(i);
    format(string, sizeof(string), "~w~Level:~r~ %d ~w~Punkte:~r~ %d ~w~Coins:~r~ %d ~w~Kills:~r~ %d ~w~Deaths:~r~ %d ~w~Bank:~r~ %d",Levels,pkt,coins[i] ,kills[i], deaths[i], bank[i]);
    TextDrawSetString(levelanzeige[i],string);//hiermit neu setzen und nicht neu erstellen! ;)
    }
    }
    new hour,minute,second;
    gettime(hour,minute,second);
    format(string,25,"%d:%d",hour,minute);
    TextDrawSetString(Uhr,string);//hiermit neu setzen und nicht neu erstellen! ;)
    SetWorldTime(hour);//so gehts doch auch, warum so umständlich :D
    return 1;
    }


    hier des müsste gehen

  • Super, ich danke euch vielmals! Die errors sind weg, ich werde es jetzt mal austesten ob alles klappt.


    Benjamin


    danke werds mal austesten!



    ---


    Hmm, jetzt kommt weder das Menü unten, geschweigedenn die Uhr rechts oben, hab ich was falsch gemacht ?



    Hab das so:



    new Text:levelanzeige[256];
    new Text:Uhr;
    //über ongamemodeinit


    //OnGameModeInit


    SetTimer("PlayerHUD",1000,1);


    for(new i=0; i<MAX_PLAYERS; i++)//Die Anzeige muss für jeden Spieler erstellt werden da sie immer verschieden ist
    {
    // Links/Rechts //Höhe


    levelanzeige[i] = TextDrawCreate(50.000000,430.000000, " ");
    TextDrawLetterSize(levelanzeige[i], 0.5, 1.5);
    TextDrawFont(levelanzeige[i],1);
    TextDrawShowForPlayer(i,levelanzeige[i]);
    TextDrawSetShadow(levelanzeige[i], 0);
    TextDrawSetOutline(levelanzeige[i], 0);
    }
    Uhr = TextDrawCreate(547.0, 24.0, "00:00");//kann Global erstellt werden da sie für alle immer gleich ist!
    TextDrawLetterSize(Uhr, 0.6, 1.8);
    TextDrawFont(Uhr, 3);
    TextDrawSetOutline(Uhr, 0);



    //PlayerHud


    public PlayerHUD()
    {
    new string[256];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    new Levels;
    Levels = GetPlayerLevel(i);
    format(string, sizeof(string), "~w~Level:~r~ %d ~w~Punkte:~r~ %d ~w~Coins:~r~ %d ~w~Kills:~r~ %d ~w~Deaths:~r~ %d ~w~Bank:~r~ %d",Levels,pkt,coins[i] ,kills[i], deaths[i], bank[i]);
    TextDrawSetString(levelanzeige[i],string);//hiermit neu setzen und nicht neu erstellen! ;)
    }
    }
    new hour,minute,second;
    gettime(hour,minute,second);
    format(string,25,"%d:%d",hour,minute);
    TextDrawSetString(Uhr,string);//hiermit neu setzen und nicht neu erstellen! ;)
    SetWorldTime(hour);//so gehts doch auch, warum so umständlich :D
    return 1;
    }

  • Lol? Genauso hab ichs auch hingeschrieben, dummerweise ist die Uhr Links unten und das Menü ist weg? (o_O?)



    public OnPlayerConnect(playerid)
    {
    TextDrawShowForPlayer(playerid,Uhr);
    TextDrawShowForPlayer(playerid,levelanzeige[playerid]);
    new name[128], save[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(dini_Exists(save))
    { // Wenn ein Spieler mit dem Namen existiert
    SendClientMessage(playerid,COLOR_YELLOW,"*************************************************");
    SendClientMessage(playerid, 0x33CCFFAA, "Herzlich willkommen im sXp-Network SA-MP 0.3a Server!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Du bist bereits Registriert! Logge dich bitte ein!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Benutze dazu /login [passwort].");
    //SendClientMessage(playerid, 0xFFFFFFAA, "Solltest du Spawnen ohne das du dich Einloggst, wirst du sofort gekickt!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Gebe /help für Informationen ein.");
    SendClientMessage(playerid,COLOR_YELLOW,"*************************************************");
    GivePlayerMoney(playerid,dini_Int(save,"Geld")); // Hier wird das geld dem Spieler gegeben, was er vorher hatte
    SetPlayerSkin(playerid,dini_Int(save,"Skin")); // Hier wird der Skin des Spielers geladen
    SetPlayerPkt(playerid,dini_Int(save,"Scorep"));
    SetPlayerWantedLevel(playerid,dini_Int(save, "Wanted"));
    SetPlayerLevel(playerid,dini_Int(save, "Level"));
    SetPlayerCoins(playerid,dini_Int(save, "Coins"));
    bank[playerid]=dUserINT(PlayerName(playerid)).("Bank");
    deaths[playerid]=dUserINT(PlayerName(playerid)).("Tode");
    }
    else
    {
    if(!dini_Exists(save)) // Wenn kein Spieler mit dem Namen existiert
    { //Sende einen Text
    SendClientMessage(playerid, 0x33CCFFAA, "Herzlich willkommen im sXp-Network SA-MP 0.3a Server!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Du besitzt noch kein Account, bitte Registriere dich!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Benutze dazu /register [passwort].");
    //SendClientMessage(playerid, 0xFFFFFFAA, "Solltest du Spawnen ohne das du dich Registrierst & Einloggst, wirst du sofort gekickt!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Gebe /help für Informationen ein.");
    }
    }



    Falsche Koordinate oder wie ?

  • Keine Ahnung, du hast die gepostet, nicht ich,achja wenn du die levelanzeige " " Leer gemacht hast, musste natürlich warten bis sie mit dem public geändert worden ist...
    Ansonten mach statt Leer einfach die Standart Werte,wie auch immer sie lauten...


    "~w~Level:~r~ 0 ~w~Punkte:~r~ 0 ~w~Coins:~r~ 0 ~w~Kills:~r~ 0 ~w~Deaths:~r~ 0 ~w~Bank:~r~ 0"

  • Nein, ich habe das so genommen wie du/ihr es mir gegeben habt:



    new Text:levelanzeige[256];
    new Text:Uhr;


    //GameModeInit
    SetTimer("PlayerHUD",1000,1);


    for(new i=0; i<MAX_PLAYERS; i++)//Die Anzeige muss für jeden Spieler erstellt werden da sie immer verschieden ist
    {
    // Links/Rechts //Höhe
    levelanzeige[i] = TextDrawCreate(547.0, 24.0, " "); //alte koords 50.000000,430.000000
    TextDrawLetterSize(levelanzeige[i], 0.5, 1.5);
    TextDrawFont(levelanzeige[i],1);
    TextDrawShowForPlayer(i,levelanzeige[i]);
    TextDrawSetShadow(levelanzeige[i], 0);
    TextDrawSetOutline(levelanzeige[i], 0);
    }
    Uhr = TextDrawCreate(50.000000,430.000000, "00:00");//kann Global erstellt werden da sie für alle immer gleich ist! alte koords: 547.0, 24.0
    TextDrawLetterSize(Uhr, 0.6, 1.8);
    TextDrawFont(Uhr, 3);
    TextDrawSetOutline(Uhr, 0);
    TextDrawSetShadow(Uhr, 0);


    //


    public OnPlayerConnect(playerid)
    {


    //


    TextDrawShowForPlayer(playerid,levelanzeige[playerid]);
    TextDrawShowForPlayer(playerid,Uhr);


    //


    new name[128], save[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(dini_Exists(save))
    { // Wenn ein Spieler mit dem Namen existiert
    SendClientMessage(playerid,COLOR_YELLOW,"*************************************************");
    SendClientMessage(playerid, 0x33CCFFAA, "Herzlich willkommen im sXp-Network SA-MP 0.3a Server!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Du bist bereits Registriert! Logge dich bitte ein!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Benutze dazu /login [passwort].");
    //SendClientMessage(playerid, 0xFFFFFFAA, "Solltest du Spawnen ohne das du dich Einloggst, wirst du sofort gekickt!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Gebe /help für Informationen ein.");
    SendClientMessage(playerid,COLOR_YELLOW,"*************************************************");
    GivePlayerMoney(playerid,dini_Int(save,"Geld")); // Hier wird das geld dem Spieler gegeben, was er vorher hatte
    SetPlayerSkin(playerid,dini_Int(save,"Skin")); // Hier wird der Skin des Spielers geladen
    SetPlayerPkt(playerid,dini_Int(save,"Scorep"));
    SetPlayerWantedLevel(playerid,dini_Int(save, "Wanted"));
    SetPlayerLevel(playerid,dini_Int(save, "Level"));
    SetPlayerCoins(playerid,dini_Int(save, "Coins"));
    bank[playerid]=dUserINT(PlayerName(playerid)).("Bank");
    deaths[playerid]=dUserINT(PlayerName(playerid)).("Tode");
    }
    else
    {
    if(!dini_Exists(save)) // Wenn kein Spieler mit dem Namen existiert
    { //Sende einen Text
    SendClientMessage(playerid, 0x33CCFFAA, "Herzlich willkommen im sXp-Network SA-MP 0.3a Server!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Du besitzt noch kein Account, bitte Registriere dich!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Benutze dazu /register [passwort].");
    //SendClientMessage(playerid, 0xFFFFFFAA, "Solltest du Spawnen ohne das du dich Registrierst & Einloggst, wirst du sofort gekickt!");
    SendClientMessage(playerid, 0xFFFFFFAA, "Gebe /help für Informationen ein.");
    }
    }


    return 1;
    }


    //


    public PlayerHUD()
    {
    new string[256];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    new Levels;
    Levels = GetPlayerLevel(i);
    format(string, sizeof(string), "~w~Level:~r~ %d ~w~Punkte:~r~ %d ~w~Coins:~r~ %d ~w~Kills:~r~ %d ~w~Deaths:~r~ %d ~w~Bank:~r~ %d",Levels,pkt,coins[i] ,kills[i], deaths[i], bank[i]);
    TextDrawSetString(levelanzeige[i],string);//hiermit neu setzen und nicht neu erstellen! ;)
    }
    }
    new hour,minute,second;
    gettime(hour,minute,second);
    format(string,25,"%d:%d",hour,minute);
    TextDrawSetString(Uhr,string);//hiermit neu setzen und nicht neu erstellen! ;)
    SetWorldTime(hour);//so gehts doch auch, warum so umständlich :D
    return 1;
    }