Notrüfe im Dialog auflisten?

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
  • Hallöschen,


    zunächst einmal zu meiner Situation:
    Ich möchte das in einem Dialog alle eingegangenen Notrüfe aufgelistet sind.
    Soweit weis ich alles,


    jedoch muss man in diesem fall ja mit einem string arbeiten um den Namen etc anzuzeigen.
    Das problem dabei liegt darin das ich dem string keine genaue größe geben kann, da sich der
    string ja der Anzahl der Notrüfe anpassen müsste.


    Hat jemand einen vorschlag wie ich das problem lösen kann?

  • So oft wie die Anzahl der Notrufe eine Schleife durchlaufen lassen und in jedem Schleifen-Durchlauf mit strcat "\n%s" hinter den String setzen.
    Den String dann beim Dialog benutzen. Es sollten dann genauso viele "%s" im String sein, wie benötigt.

  • ich hab mal etwas rumprobiert und es derzeit so:


    ocmd:na(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) { return 1; }
    if(Team[playerid] == 0) return SendClientMessage(playerid,Rot,"Du bist dazu nicht befugt.");
    for(new i =0; i < MAX_PLAYERS; i++)
    {
    if(NotrufState[i] == 0) { return 1; }
    if(NotrufState[i] != Team[playerid]) { return 1; }
    new string[128] = "[NOTRUF]";
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(i,Name,sizeof(Name));
    strcat(string, "%s---",Name); //Error
    strcat(string, "%s---",Zeit[i]); //Error
    strcat(string, "%s---\n",Pos[i]); //Error
    strcat(string, "->%d\n\n",Beschreibung[i]); //hier seltsamer weise nicht xD
    }
    return 1;
    }


    Das ganze soll später so aussehen: (ein Beispiel)
    [NOTRUF]DialogHD---17:06---Santa Maria Beach---
    -> Hier brennt es


    allerdings bekomme ich 3 Errors:
    (1931) : error 035: argument type mismatch (argument 3)
    (1932) : error 035: argument type mismatch (argument 3)
    (1933) : error 035: argument type mismatch (argument 3)

    Einmal editiert, zuletzt von DialogHD ()

  • Ich hoffe du weißt wie man strcat benutzt zum formatieren wie format ist das nicht gedacht.


    hier mal den Syntax
    strcat(dest[],const source[],maxlength=sizeof string)


    Beschreibung[i] wird ein integer sein daher wird hier kein warning angezeigt

  • benutz format weil bei strcat du keine %... benutzen kannst.


    /e

    ocmd:na(playerid,params[])
    {
    if(!Team[playerid]) return SendClientMessage(playerid,Rot,"Du bist dazu nicht befugt.");
    new str[512], Name[MAX_PLAYER_NAME], nr=0;
    for(new i =0; i < MAX_PLAYERS; i++)
    {
    if(NotrufState[i] != Team[playerid])continue;
    GetPlayerName(i,Name,sizeof(Name));


    if(!nr)format(str, 512, "[NOTRUF]%s---%d---%s---\n->%s\n\n", Name, Zeit[i], Pos[i], Beschreibung[i]);
    else format(str, 512, "%s[NOTRUF]%s---%d---%s---\n->%s\n\n", str, Name, Zeit[i], Pos[i], Beschreibung[i]);
    nr=1;
    }
    ShowPlayerDialog(playerid, DIALOG_xxx, DIALOG_STYLE_MSGBOX, "Notrufe", str, "Ok", "");
    return 1;
    }


    Gruß, Piet

  • Soweit funktioniert alles,
    allerdings habe ich das ganze im DIALOG_STYLE_LIST, weil ich möchte das er den Notruf anklicken kann und anschließend ein Checkpoint etc entsteht.
    Wie kann ich jetzt am besten im Dialog die ID speichern bzw dafür sorgen das er die richtige ID bekommt.


    Gibt es dafür eine funktion?

  • Gibt viele Möglichkeiten die ID zu speichern, z.B. in deinem Spieler enum (falls du sowas hast) oder mit SetPVarInt...
    Und dann einfach in einem Dialog prüfen welche ID gespeichert ist.


    enum würde doch nicht funktionieren da der Dialog von Script aus vergrößert/verkleinert wird und nicht immer die selbe größe hat.
    Wie stellst du dir das vor?
    und mit SetPVarInt kann ich doch nur Werte für Spieler Speichern, ich kann ja auch schlecht die Position vom Notruf im Dialog Speichern.