Wie kann ich denn nur ein 3D Text Label für einen einzigen Spieler erstellen und entfernen? :o Es ist ein Mysterium! (auch hallo, android :D)

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
  • Dann warte ich mal den morgigen Tag ab (bzw. den heutigen) und werde das Ganze mit einem Zweiten testen!


    Vielen Dank für dein Durchhaltevermögen, du hast mir sehr geholfen. ;)


    ------------------------------------------------------------------------------------------------------------------------------------------


    Ich muss dieses Thema mal wieder ausgraben. Ich hoffe du, Jeffry, oder jemand anderes kann mir weiterhelfen.


    Momentan erstelle ich die 3DTextLabel in diesem Stil.
    for(new i = 0; i < MAX_TELEPORT_LABELS; i++)
    {
    for(new g = 0; g < MAX_PLAYERS; g++)
    {
    TeleportLabel[g][i] = CreateDynamic3DTextLabel("» Teleport «\n"#C_WHITE_E"Los Santos\n/LS", C_PURPLE, 2492.7268, -1668.3849, 13.3438, 50.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, -1, g, 50.0);
    //code...
    }
    }


    Nun hatte ich ja folgendes unter meiner stock Funktion stehen.
    UpdateDynamic3DTextLabelText(TeleportLabel[playerid][16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");


    Ich bin mal probeweise an den Ort des Geschehens gegangen und habe die Sprache gewechselt, jedoch wird das Label nicht geupdated.

    Einmal editiert, zuletzt von Manyula ()

  • Die Sprache wird geändert, daran liegt das Problem nicht.


    EDIT: Hier einmal der Befehl im Dialog.
    if(dialogid == DIALOG_LANGUAGES_CMD)
    {
    if(!response) return 1;
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    pInfo[playerid][Language] = LANGUAGE_DE;
    SendClientMessage(playerid, C_RED, "»SPIELER« Du hast deine Sprache auf "#C_DARK_RED_E"Deutsch [GER]"#C_RED_E" gesetzt!");
    UpdateLanguageLabels(playerid);
    }
    case 1:
    {
    pInfo[playerid][Language] = LANGUAGE_EN;
    SendClientMessage(playerid, C_RED, "»PLAYER« You set your language to "#C_DARK_RED_E"English [ENG]"#C_RED_E"!");
    UpdateLanguageLabels(playerid);
    }
    }
    }
    }

    Einmal editiert, zuletzt von Manyula ()

  • Es sind ja nicht direkt PlayerLabel.


    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];


    ---------------------------------------------------------------------------------------------------------------------


    Nochmal ein kleines Update zum Stand der Dinge. Ich poste nun einmal alle Codeschnipsel auf einen Haufen, die relevant sind.


    #undef MAX_GANG_ZONES
    #define MAX_GANG_ZONES 83
    new Text3D:GangZoneLabel[MAX_PLAYERS][MAX_GANG_ZONES];
    //Das hier wird für die Erstellung des Labels des GW Zone benötigt. Hier klappt es wunderbar.


    #define MAX_TELEPORT_LABELS 29
    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];
    //Nach demselben Prinzip läuft das ganze bei den Teleport Labels ab. Nur hier klappt es nicht, obwohl dieselbe Verfahrensweise angewendet wurde.


    stock UpdateLanguageLabels(playerid)
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE)
    {
    new string[128];
    for(new i = 0; i < MAX_GANG_ZONES; i++)
    {
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][0]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[playerid][i], C_ORANGE, string);
    }//Dieser Loop erfüllt seinen Zweck. i läuft alles ab und UpdateDynamic3DTextLabelText wird korrekt aufgeführt.

    for(new t = 0; t < MAX_TELEPORT_LABELS; t++)
    {
    printf("%i", t);
    switch(t)
    {
    case 16: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");
    case 23: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellit-Station\n/Satellit");
    case 24: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Verlassener Flughafen\n/VF");
    case 27: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Geistersee\n/GS");
    }
    }//Dieser Loop wird zwar durchlaufen, aber UpdateDynamic3DTextLabel wird NICHT ausgeführt, aus irgendeinem Grund.
    }
    else
    {
    new string[128];
    for(new i = 0; i < MAX_GANG_ZONES; i++)
    {
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][1]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[playerid][i], C_ORANGE, string);
    }//Dieser Loop erfüllt seinen Zweck. i läuft alles ab und UpdateDynamic3DTextLabelText wird korrekt aufgeführt.

    for(new t = 0; t < MAX_TELEPORT_LABELS; t++)
    {
    printf("%i", t);
    switch(t)
    {
    case 16: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Memorial\n/SFM");
    case 23: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellite Station\n/Satellite");
    case 24: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Abandoned Airport\n/AA");
    case 27: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Ghost Lake\n/GL");
    }
    }//Dieser Loop wird zwar durchlaufen, aber UpdateDynamic3DTextLabel wird NICHT ausgeführt, aus irgendeinem Grund.
    }
    return 1;
    }


    Es ist einfach sau komisch, dass ich dieselbe Verfahrensweise anwende, und sie nur einmal klappt.

    Einmal editiert, zuletzt von Manyula ()

  • Die erstelle ich seperat in einer include.


    #define MAX_TELEPORT_LABELS 29


    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_TELEPORT_LABELS; i++)
    {
    for(new g = 0; g < MAX_PLAYERS; g++)
    {
    TeleportLabel[g][i] = CreateDynamic3DTextLabel("» Teleport «\n"#C_WHITE_E"Los Santos\n/LS", C_PURPLE, 2492.7268, -1668.3849, 13.3438, 50.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, -1, g, 50.0);
    //weitere Label...
    }
    }
    return LABEL_OnGameModeInit();
    }


    forward LABEL_OnGameModeInit();
    #if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
    #else
    #define _ALS_OnGameModeInit
    #endif
    #define OnGameModeInit LABEL_OnGameModeInit

  • #define MAX_TELEPORT_LABELS 29


    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];


    public OnGameModeInit()
    {
    for(new g = 0; g < MAX_PLAYERS; g++)
    {
    TeleportLabel[g][0] = CreateDynamic3DTextLabel("» Teleport «\n"#C_WHITE_E"Los Santos\n/LS", C_PURPLE, 2492.7268, -1668.3849, 13.3438, 50.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, -1, g, 50.0);
    //weitere Label...mit [1] weiter, dann [2] usw.
    }
    return LABEL_OnGameModeInit();
    }


    Da darfst beim Erstellen nicht durch die Labels loopen, sonst erstellt er dir viel zu viele, wenn du alle untereinander hast.