Dialog mit string geht nicht!

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
  • Problem 1 [Geklärt]


    Spoiler anzeigen
    Ich habe versucht , einen string (%s) in einen Dialog zu machen.

    Spoiler anzeigen
    Es klappt sonst immer , nur dieses mal nicht! Wenn ich /contractlist eingebe , passiert nichts.
    Wenn ich aber

    Spoiler anzeigen
    ShowPlayerDialog(playerid,Dialog_Contracts,DIALOG_STYLE_MSGBOX,"Contracts:","test","Okay","");

    Spoiler anzeigen
    mache , kommt der Dialog!

    Spoiler anzeigen
    ocmd:contractlist(playerid,params[])
    {
    new Spieler[64];
    new Spieler2[64];
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    if(dini_Int(Spieler,"Fraktion")==3)
    {
    new string[600];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(i));
    if(IsPlayerConnected(i))
    {
    if(dini_Int(Spieler2,"Kopfgeld")>0)
    {
    format(string,sizeof(string),"%s\n%s %i€",string,PlayerName(i),dini_Int(Spieler2,"Kopfgeld"));
    }
    }
    }
    ShowPlayerDialog(playerid,Dialog_Contracts,DIALOG_STYLE_MSGBOX,"Contracts:",string,"Okay","");
    }
    return 1;
    }


    Problem 2[Geklärt]

    Spoiler anzeigen

    Wenn ich /contract [ID] [Kopfgeld] mache , kommen auch alle Nachrichten , aber in der Datei wird kein Kopfgeld gesetzt!

    Spoiler anzeigen
    ocmd:contract(playerid,params[])
    {
    new Spieler[64],Spieler2[64],pID,kopfgeld;
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(pID));
    //if(dini_Int(Spieler,"Fraktion")==3)return SendClientMessage(playerid,Rot,"Du bist selber Hitman!");
    //{
    if(sscanf(params,"ui",pID,kopfgeld))return SendClientMessage(playerid,Rot,"Fehler: /contract [ID/Name] [Kopfgeld]");
    {
    if(kopfgeld<999 && kopfgeld>50001)return SendClientMessage(playerid,Rot,"Das Kopfgeld muss mindestens 1000€ und höchstens 50.000€ betragen!");
    {
    GivePlayerMoney(playerid,-kopfgeld);
    dini_IntSet(Spieler2,"Kopfgeld",dini_Int(Spieler2,"Kopfgeld")+kopfgeld);
    new string[128];
    format(string,sizeof(string),"Du hast einen Contract auf %s gesetzt. Kopfgeld: %i€",PlayerName(pID),kopfgeld);
    SendClientMessage(playerid,Hellblau,string);
    }
    }
    //}
    return 1;
    }


    Problem 3[Ungeklärt]

    Spoiler anzeigen

    Ich möchte machen , dass man dann per Liste einen aus der Contractist annehmen kann.
    Nur es wird es auf 0 gesetzt , wegen dem listitem.

    Spoiler anzeigen
    Wie kann ich machen , dass zB. ID10 listitem 5 ist , und man listitem5 auswählt , die Variable auf 10 gesetzt wird?

    Spoiler anzeigen

    new pContract[MAX_PLAYERS];

    Spoiler anzeigen
    if(dialogid == Dialog_Contracts)
    {
    if(response==1)
    {
    pContract[playerid]=listitem;
    new string[256];
    format(string,sizeof(string),"Du hast den Contract auf %s angenommen.",PlayerName(pContract[playerid]));
    SendClientMessage(playerid,Lila,string);
    }
    }

    Spoiler anzeigen
    ocmd:contractlist(playerid,params[])
    {
    new Spieler[64];
    new Spieler2[64];
    new string[600];
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    if(dini_Int(Spieler,"Fraktion")==3)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(i));
    if(IsPlayerConnected(i) && dini_Int(Spieler2,"Kopfgeld")>0)format(string,sizeof(string),"%s %i€\n",PlayerName(i),dini_Int(Spieler2,"Kopfgeld"));
    }
    ShowPlayerDialog(playerid,Dialog_Contracts,DIALOG_STYLE_LIST,"Contracts:",string,"Annehmen","Abbrechen");
    }
    return 1;
    }

  • ich weiß nicht ob ich richtig leige aber schau dir diese zeile ma an:

    format(string,sizeof(string),"%s\n%s %i€",string,PlayerName(i),dini_Int(Spieler2,"Kopfgeld"));


    du hast vorne den string format gemacht un dann verwendest du ihn aber auch drin (hinter dem euo zeichen) vllt liegt es daran setzt dort mal was anderes ein :D

  • ich weiß nicht ob ich richtig leige aber schau dir diese zeile ma an:

    format(string,sizeof(string),"%s\n%s %i€",string,PlayerName(i),dini_Int(Spieler2,"Kopfgeld"));


    du hast vorne den string format gemacht un dann verwendest du ihn aber auch drin (hinter dem euo zeichen) vllt liegt es daran setzt dort mal was anderes ein :D


    Das hatte ich schon probiert , 'string' und das vordere '%s' rauszunehmen , geht trotzdem nicht :/

  • naja wenn du nur name und kopfgeld ausgeben willst dann mach das


    format(string,sizeof(string),"%s %i€",PlayerName(i),dini_Int(Spieler2,"Kopfgeld")); das msus aber gehen haste das ma mit SendClientMessage probiert ?

  • Versuch mal so :D

    format(string,sizeof(string),"%s %i€\n%s",PlayerName(i),dini_Int(Spieler2,"Kopfgeld"),string);

    __________________________________________


    Scripter & Programmierer im Ruhestand

    Derzeitiges Projekt:
    __________________________________________

  • Ich merke gerade , dass es daran liegt , dass mein /contract Befehl nicht geht , somit auch kein Spieler >0 Kopfgeld hat , weshalb der Dialog nicht angezeigt wird ^^



    ocmd:contract(playerid,params[])
    {
    new Spieler[64],Spieler2[64],pID,kopfgeld;
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(pID));
    //if(dini_Int(Spieler,"Fraktion")==3)return SendClientMessage(playerid,Rot,"Du bist selber Hitman!");
    //{
    if(sscanf(params,"ui",pID,kopfgeld))return SendClientMessage(playerid,Rot,"Fehler: /contract [ID/Name] [Kopfgeld]");
    {
    if(kopfgeld<999 && kopfgeld>50001)return SendClientMessage(playerid,Rot,"Das Kopfgeld muss mindestens 1000€ und höchstens 50.000€ betragen!");
    {
    GivePlayerMoney(playerid,-kopfgeld);
    dini_IntSet(Spieler2,"Kopfgeld",dini_Int(Spieler2,"Kopfgeld")+kopfgeld);
    new string[128];
    format(string,sizeof(string),"Du hast einen Contract auf %s gesetzt. Kopfgeld: %i€",PlayerName(pID),kopfgeld);
    SendClientMessage(playerid,Hellblau,string);
    }
    }
    //}
    return 1;
    }


    Edit wieso geht der Command nicht =?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Lösch mal deine Accounts und starte deinen Server neu.
    Bei mir musste ich das machen wenn ich ein neues "GetPVarInt" erstellt habe musste ich alle (alten) Accounts löschen weil er die nach dem Server Restart nicht neu einträgt. Probier das mal ;-). Unter deinem Stock "CreateAccount" oder "SpielerSpeichern" oder wie auch immer..
    Da musst du folgende Zeile noch einfügen:

    dini_IntSet(Spielerdatei,"Kopfgeld",GetPVarInt(playerid,"Kopfgeld"));


    /e Fail.
    /e Omg

  • ausserdem würde ich /contractlist so machen



    ocmd:contractlist(playerid,params[])
    {
    new Spieler[64];
    new Spieler2[64];
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    if(dini_Int(Spieler,"Fraktion")==3)
    {
    new string[600];
    format(string, 600, "Contracts:");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(i));
    if(IsPlayerConnected(i) && dini_Int(Spieler2,"Kopfgeld")>0)format(string,sizeof(string),"%s\n%s %i€",string,PlayerName(i),dini_Int(Spieler2,"Kopfgeld"));
    }
    ShowPlayerDialog(playerid,Dialog_Contracts,DIALOG_STYLE_MSGBOX,"Contracts:",string,"Okay","");
    }
    return 1;
    }


    //edit contract

    ocmd:contract(playerid,params[])
    {
    new Spieler[64],Spieler2[64],pID,kopfgeld;
    format(Spieler,sizeof(Spieler),"Spieler/%s.txt",PlayerName(playerid));
    if(dini_Int(Spieler,"Fraktion")==3)return SendClientMessage(playerid,Rot,"Du bist selber Hitman!");
    if(sscanf(params,"ui",pID,kopfgeld))return SendClientMessage(playerid,Rot,"Fehler: /contract [ID/Name] [Kopfgeld]");
    format(Spieler2,sizeof(Spieler2),"Spieler/%s.txt",PlayerName(pID));//pID ist null bevor sscanf ?!!!!!!!!!!
    if(dini_Int(Spieler2, "Kopfgeld") > 0)return SendClientMessage(playerid, Rot, "Auf den Spieler ist bereits kopfgeld ausgesetzt worden.");
    if(kopfgeld<999 && kopfgeld>50001)return SendClientMessage(playerid,Rot,"Das Kopfgeld muss mindestens 1000€ und höchstens 50.000€ betragen!");
    GivePlayerMoney(playerid,-kopfgeld);
    dini_IntSet(Spieler2,"Kopfgeld",kopfgeld);
    new string[128];
    format(string,sizeof(string),"Du hast einen Contract auf %s gesetzt. Kopfgeld: %i€",PlayerName(pID),kopfgeld);
    SendClientMessage(playerid, Rot, string);
    return 1;
    }



    MFG Piet