Name im Dialog

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 Morgen,
    ich habe ein Dynamic Teleport Geschrieben bzw bin dabei.
    Nun weiß ich aber nicht wie die Namen von meiner Datenbank in einem Dialog anzeige lassen kann.
    Kann mir einer da vielleicht weiter helfen?
    Habe gedacht mit einem format für jeden Namen, nur wären es das bei 50 Teleports bissel Heftig viel oder?


    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Hey Jeffry,
    über SQ-Lite.
    db_get_field_assoc(Result, "Name", field, sizeof(field)); format(TeleInfo[i][tName], 32, "%s", field);


    Das ist jetzt in meinem Stock LoadTeleports();
    Den Befehl habe ich noch nicht Angefangen, da ich nicht weiß wie ich die Namen alle Anzeigen lassen kann.


    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Willst du eine Liste mit allenNamen haben?
    Das würde dann so aussehen (als Auswahlsdialog):


    C
    new str[512];
    for(new i=0; i<sizeof(TeleInfo); i++)
    {
        if(strlen(TeleInfo[i][tName]) > 0) format(str, sizeof(str), "%s%d: %s\n", str, i, TeleInfo[i][tName]);
        else format(str, sizeof(str), "%s%d: -Leer-\n", str, i);
    }
    ShowPlayerDialog(playerid, DIALOG_TELENAMEN, DIALOG_STYLE_LIST, "Teleports", str, "Ok", "Abbrechen");
  • Ja, genau so meinte ich es. :)
    OK, ich muss den string vergrösern habe ich gesehen das ist ja nicht das Problem.
    Jetzt meine Frage, wie kann ich Abfragen ob er auf den bestimmten Namen geklickt hat?


    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Ja, die Größe musst du wahrscheinlich anpassen, ich weiß ja nicht wie viele Teleports du hast und wie lang deren Namen sind.


    Unter OnDialogResponse:

    C
    if(dialogid == DIALOG_TELENAMEN)
    {
        if(!response) return 1;
        new str[145];
        format(str, sizeof(str), "[Teleport] Du hast den Teleport mit dem Namen '%s' angeklickt.", TeleInfo[listitem][tName]);
        return SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
  • Maximal 50 Teleports, 32 Zeichen darf ein Name besitzen.
    Habe den string auf 1024 gesetzt, sollte aussreichen. :D


    Öhm, mir fällt gerade noch auf, das immer nur der gleiche Teleport angezeigt wird obwohl drei Verschiedene Gespeichert habe. :o



    Vielleicht hilft dies ja weiter, wenn ich meinen stock mal Zeigen wie ich es Lade.
    In der Tabele steht auch, das er immer bei eins anfängt zu Zählen und nicht bei 0. Glaube es liegt daran oder?


    MfG. Black_Air :thumbup:


    Achja, habe noch eine Funktion um die ID auszulesen, vielleicht hilft es ja auch.

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Daran sehe ich so erst mal keinen direkten Fehler.


    Versuche die Funktion aber mal so zu schreiben:

    C
    stock GetFreeTeleSlot()
    {
        for(new i=0; i<MAX_TELEPORTS; i++)
        {
            if(!strlen(TeleInfo[i][tName])) return i;
        }
        return -1;
    }

    Das könnte ein Grund, oder einer der Gründe sein.


    Wenn es weiterhin 3x den gleichen Name anzeigt, dann lass dir beim Laden den Name mal im print ausgeben, ob es da passt.
    Wenn es dort passt, dann wird es irgendwo überschrieben.



    Zwecks der Größe:
    Ja, das reicht wahrscheinlich. Theoretisch könnest du 50*32 = 1600 Zeichen belegen, plus die Zeichen für die ID und den Zeilenumbruch, aber ich gehe mal nicht davon aus, dass alle Teleportnamen 32 Buchstaben haben. Aber das kannst du ja bei Bedarf anpassen.
    Kannst auch einfach MAX_TELEPORTS*32 rein schreiben, dann passt es auch, wenn du MAX_TELEPORTS mal größer machst.

  • Jeffry:
    Die Funktion ist richtig, es soll ja in der Tabelen nach einer Freien ID suchen, gibt es eine soll er die Belegen, passt auch und klappt Wunderbar.
    In der Tabele wird alles richtig Abgespeichert, nur im Dialog Falsch ausgegeben.


    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Code
    case DIALOG_TELE:
    	    {
    	        if(response)
    	        {
    	            format(string, sizeof(string), "[Teleport] Du hast dich zu %s Teleportiert.", TeleInfo[listitem][tName]);
    	            SendClientMessage(playerid, FARBE_WEISS, string);
    	            SetPlayerPos(playerid, TeleInfo[listitem][tX], TeleInfo[listitem][tY], TeleInfo[listitem][tZ]);
    				SetPlayerFacingAngle(playerid, TeleInfo[listitem][tA]);
    			}
    	    }

    Der? :D


    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Ups, hier bitte. :)



    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Das passt eigentlich alles.
    Schreibe den Befehl bitte mal so und poste dann was im Server Log steht, wenn du den Befehl ausführst:

  • Jeffry:
    Hier, die Log.

    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Schreibe die Ladefunktion so, dann sollte es passen:

    Das db_next_row hat gefehlt, so hat er immer die Zeile 0 ausgelesen.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Jeffry:
    Erhalte zwei Fehler.

    MfG. Black_Air :thumbup:

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Ahh, sorry. Bin in der Zeile bei dem Print verrutscht.
    So ist es richtig: