Beiträge von Goldkiller

    Angenommen du willst mehrere Einträge aus einer Datei auslesen für bspw zufällige Nachrichten ( Werbungen ).
    Würdest du dann machen :
    sWerbung1 = dini_Get("motd.ini", "werbung1");
    sWerbung2 = dini_Get("motd.ini", "werbung2");
    sWerbung3 = dini_Get("motd.ini", "werbung3");
    sWerbung4 = dini_Get("motd.ini", "werbung4");
    sWerbung5 = dini_Get("motd.ini", "werbung5");
    ?
    Du kannst es natürlich machen wie du willst,nur "Dynamisch" ist das nicht unbedingt ;).

    Bin jetzt nur durch einen Anderen Thread von dir auf dieses Thema aufmerksam geworden,da es ja als Referenz für dich her halten soll.
    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Dynamisches Motd System by Hijashy... Loaded!");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Dynamisches Motd System by Hijashy... Loaded!");
    print("----------------------------------\n");
    }


    #endif
    Wenn man sich den Quellcode anschaut,hast du es nirgendwo FILTERSCRIPT definiert.Reicht doch wenn du einfach nur OnFilterScriptInit / Exit einfügst.
    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Dynamisches Motd System by Hijashy... Loaded!");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }

    Wozu man hier DINI brauch ist auch fraglich,dass kann man auch ganz normal nur über fopen,fread,fwrite und fclose machen.
    Hätte man besser machen können :p

    Das hast du dann aber schon ganz oben in deinem Code falsch gehabt.
    Du müsstest aber schon in der Lage sein,dass selber hinzubekommen.Denn es ist kaum Aufwand,nur den Kick() Abschnitt zu verschieben 0o.
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == 1)
    {
    if(!Eingeloggt[playerid])
    {
    if(response)
    {
    if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
    SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
    }
    else {
    GetPlayerName(playerid,Name,sizeof(Name));
    format(s,sizeof(s),"acc/%s.ini",Name);
    if(!dini_Exists(s))
    {
    dini_Create(s);
    dini_IntSet(s,"Passwort",udb_hash(inputtext));
    dini_FloatSet(s,"X",-2756.4143);
    dini_FloatSet(s,"Y",374.9626);
    dini_FloatSet(s,"Z",4.3366);
    dini_FloatSet(s,"A",269.2460);
    dini_FloatSet(s,"Health",100);
    dini_FloatSet(s,"Armor",0);
    dini_IntSet(s,"Geld",500);
    dini_IntSet(s,"Skin",26);
    dini_IntSet(s,"Virt",0);
    dini_IntSet(s,"Inte",0);
    ShowPlayerDialog(playerid,2,DIALOG_STYLE_MSGBOX,"Wohnort","Bitte geben sie an wo sie Wohnen möchten.","SF","LV");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Bla bla blubb");
    Kick(playerid);
    }
    }
    }
    return 1;
    }

    Wo soll den Kick() funktionieren?
    Man wird doch nur gekickt,wenn der Account bereits existiert.


    Liegt wohl daran,dass man dann wahrscheinlich auch eingeloggt ist.Dann scheitert es an dieser Abfrage:
    if(!Eingeloggt[playerid])

    Schau doch den Code an.Gibt er keinen Text ein,wird nichts erstellt.
    if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
    SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
    }
    else { // Ein Text wurde eingegeben ...

    Der Fehler liegt schon beim strlen().

    Zitat

    if(!strlen(inputtext))


    Der Code geht an dieser Stelle nur weiter,wenn man KEINEN Text eingegeben hat und somit die Stringlänge 0 ist.


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == 1)
    {
    if(!Eingeloggt[playerid])
    {
    if(response)
    {
    if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
    SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
    }
    else {
    GetPlayerName(playerid,Name,sizeof(Name));
    format(s,sizeof(s),"acc/%s.ini",Name);
    if(!dini_Exists(s))
    {
    dini_Create(s);
    dini_IntSet(s,"Passwort",udb_hash(inputtext));
    dini_FloatSet(s,"X",-2756.4143);
    dini_FloatSet(s,"Y",374.9626);
    dini_FloatSet(s,"Z",4.3366);
    dini_FloatSet(s,"A",269.2460);
    dini_FloatSet(s,"Health",100);
    dini_FloatSet(s,"Armor",0);
    dini_IntSet(s,"Geld",500);
    dini_IntSet(s,"Skin",26);
    dini_IntSet(s,"Virt",0);
    dini_IntSet(s,"Inte",0);
    ShowPlayerDialog(playerid,2,DIALOG_STYLE_MSGBOX,"Wohnort","Bitte geben sie an wo sie Wohnen möchten.","SF","LV");
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Bla bla blubb");
    Kick(playerid);
    }
    }
    }
    }
    }
    return 1;
    }
    Hab den Code mal umstrukturiert,logischer ist es nämlich,dass die Abfrage der Stringlänge nach der Abfrage kommt,ob response 1 ist.

    Der Fehler liegt in folgendem Abschnitt.Ließ den Kommentar
    #include <a_samp>


    #include <dini>


    #if defined FILTERSCRIPT // - Guckt ob FILTERSCRIPT irgendwo definiert wurde
    // Die Frage ist aber,ist FILTERSCRIPT bereits definiert ?
    // Nein,ist es nicht.Deshalb wird der folgende Abschnitt auch nicht abgearbeitet sondern es wird
    // bis zum #else gesprungen und der Abschnitt abgearbeit bis es zum #endif kommt.
    // Du willst das Script aber sowieso nicht als Filterscript haben
    // Deswegen ist die Abfrage eher unnötig und führt zu dem Fehler.


    enum spieler_daten
    {
    wanted,
    skin,
    Float:lastx,Float:lasty,Float:lastz,
    eingeloggt
    }
    new Spieler[MAX_PLAYERS][spieler_daten];
    #define DIALOG_LOGIN
    #define DIALOG_REG


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Test");
    print("--------------------------------------\n");
    return 1;


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else // Wurde NICHT als FILTERSCRIPT defininiert


    main()
    {
    print("\n----------------------------------");
    print(" Test");
    print("----------------------------------\n");
    }


    #endif // Abschnitt beendet
    Wie gesagt,du willst es nicht als Filterscript haben ( Nehme Ich jedenfalls an da du OnGameModeInit() benutzt ) deswegen löschst du die # Inline Anweisungen ( #if defined , #else #endif ) und lösch OnFilterscriptInit / Exit.
    #include <a_samp>


    #include <dini>


    enum spieler_daten
    {
    wanted,
    skin,
    Float:lastx,Float:lasty,Float:lastz,
    eingeloggt
    }
    new Spieler[MAX_PLAYERS][spieler_daten];
    #define DIALOG_LOGIN 24 // Du MUSST hier auch besser einen Wert zuweisen.Sonst bringt es später nichts
    #define DIALOG_REG 25 // Du MUSST hier auch besser einen Wert zuweisen.Sonst bringt es später nichts
    main()
    {
    print("\n----------------------------------");
    print(" Test");
    print("----------------------------------\n");


    Das weiss Ich nicht genau,Ich nehme es aber an.Wäre ja logischer.


    Deshalb benutzt ich kaum booleans. Ich mach das immer direkt über bits und kann so 32 Ja/Nein ; True/False Werte anhand einer Variable abfragen.Das ist dann Bitwise Operationen,aber zu schwer für die meisten.Viele erkennen auch nicht den Vorteil dabei.

    Das geht auch.Hab das damals auch nur in der PAWN Docu gefunden:
    enum e_Test {
    T_iEins,
    T_iZwei,
    T_iDrei,
    T_iVier
    }
    new aPlayers[MAX_PLAYERS][e_Test];
    public OnPlayerConnect(playerid)
    {
    for( new i ; i < sizeof(aPlayers[]) ; i++) {
    aPlayers[playerid][e_Test:i] = (i * 5);
    }
    return 1;
    }

    Wieso ? true ist doch nichts Anderes als 1 und false 0.
    stock bool:dini_Int(filename[],key[]) {
    if(strval(dini_Get(filename,key)) == 0) return false;
    return true;
    }
    Ich merke,habe in meinem Code anstatt dini_Bool dini_Int verändert x(.Hätte ja eigentlich so aussehen müssen:
    stock bool:dini_Bool(filename[],key[]) {
    return bool:strval(dini_Get(filename,key));
    }

    Da liegt der Fehler nicht bei dir,sondern bei dini selber.
    stock dini_Bool(filename[],key[]) {
    return strval(dini_Get(filename,key));
    }
    Wie du siehst,dort wird nirgendwo gesagt, dass es boolean sein soll.Benutzt doch einfach dini_Int().
    Ansonsten probier mal
    stock bool:dini_Int(filename[],key[]) {
    return bool:strval(dini_Get(filename,key));
    }
    möglich dass es so auch geht.

    Selber Schuld wer es nicht richtig nutzen kann.Ich hab damit keine Probleme, alles funktioniert.
    Die ganzen meisten Leute die dort im offiziellen Thread rumheulen, sind sowieso meist Anfänger die absolut kein Plan haben wie man den Streamer einstellen / installieren.