User werben User System

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
  • Hallo,


    ich habe ein User werben User system gefunden, allerdings ist dies auf MySQL Basis.


    Ist es möglich auch mit .dini eine Userabfrage zu Starten?


    Hier ein Auszug:


    if(response) {
    if(mysql_GetIntByString("samp_accounts","cvar","io_N",inputtext) == 0)
    {
    format(string, sizeof(string), "Der Spieler '%s' existiert nicht.\n{FFFFFF}Bitte gebe unten den Namen von dem Spieler der dich geworben hat ein\nBitte drück auf Niemand wenn du von niemanden geworben wurdest.",inputtext);
    ShowPlayerDialog(playerid, DIALOG_ADVERTISED, DIALOG_STYLE_INPUT, "Geworben?",string, "Weiter","Niemand");
    return 1;
    }

    Einmal editiert, zuletzt von Shoxx ()

  • Den Name kannst du einfach mit dini_Set speichern und mit dini_Get auslesen.


    Wenn du nicht weißt wie, mache bitte ein konkretes Beispiel mit Namen und Zahlen und was wann wie passieren soll.


    Danke für deine Hilfe :)


    Also es sollte eigentlich ganz einfach sein, und zwar sollte man bei dem Login ein Dialogfenster bekommen, wo man halt den Namen des "Werbers" reinschreiben kann und ein Button wo man "Niemand" anklicken sollte. Dann soll in der "Werber" dini ein Wert auftauchen, dass er jemanden geworben hat und mit diesem Wert kann man dann z.B. beim Payday eine if abfrage starten können so das der "werber" mehr geld bekommt.


    In erster Linie geht es mir aber daraum, dass der "Geworbene" in seiner Dini stehen hat, dass z.B. Geworben von: Shox und bei Shox steht dann z.B. in der dini Werberstatus = 1. So dass der Werber einen Vorteil bekommt, da er den Status 1 hat und ich dann somit eine if abfrage tätigen kann.

  • Danke für die ausführliche Erklärung!
    Das geht dann ganz einfach.


    Nach der Registrierung zeigst du dem Spieler den Dialog an, um den Werber einzutragen:
    ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Werber eintragen", "Trage nun bitte deinen Werber ein:", "Ok", "Niemand");


    Bei OnDialogResponse:


    if(dialogid == DIALOG_WERBER)
    {
    new path[64];
    if(response)
    {
    format(path, sizeof(path), "/accounts/%s.ini", inputtext);
    if(!fexist(path))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: User existiert nicht.");
    return ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Werber eintragen", "Trage nun bitte deinen Werber ein:", "Ok", "Niemand");
    }
    dini_Set(path, "Werberstatus", "1");
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", inputtext);
    new pID = GetIDFromName(inputtext);
    if(pID != INVALID_PLAYER_ID) SpielerInfo[pID][pWerberstatus] = 1;
    }
    else
    {
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", "-Niemand-");
    }
    return 1;
    }


    Den Werberstatus lässt du beim Login ganz normal laden:
    SpielerInfo[playerid][pWerberstatus] = dini_Int(path, "Werberstatus");


    Und beim PayDay:
    if(SpielerInfo[playerid][pWerberstatus] == 1)
    {
    //Er ist Werber
    }
    else
    {
    //Er ist kein Werber
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()


  • Ich muss aber auch bei OnPlayerRegister sowas einfügen oder?
    format(var, 32, "Werberstatusn=%d\n",PlayerInfo[playerid][pWerberStatus]);fwrite(hFile, var);

  • Das kannst du machen, wenn der Rest auch so aufgebaut ist, ja.



    EDIT:
    Mir ist grade noch eingefallen, dass der Werber ja auch online sein könnte.
    Füge das hier beim OnDialogResponse-Teil von oben hinzu:
    new pID = GetIDFromName(inputtext);
    if(pID != INVALID_PLAYER_ID) SpielerInfo[pID][pWerberstatus] = 1;


    Und das hier ganz unten im Gamemode:
    stock GetIDFromName(name[])
    {
    new tmp[MAX_PLAYER_NAME];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, tmp, MAX_PLAYER_NAME))
    {
    if(!strcmp(name, tmp)) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

  • Wenn ichs richtig verstanden habe, möchte er 'Werberstatus' hochzählen lassen. Da sollte mans hochzählen lassen, falls er bereits mehrere User geworben hat.
    Einfach den Werbestatus Wert auslesen, einen draufpacken und wieder einspeichern.

  • Das könnte man so machen, wenn man es hochzählen lassen will:
    if(dialogid == DIALOG_WERBER)
    {
    new path[64];
    if(response)
    {
    format(path, sizeof(path), "/accounts/%s.ini", inputtext);
    if(!fexist(path))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: User existiert nicht.");
    return ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Werber eintragen", "Trage nun bitte deinen Werber ein:", "Ok", "Niemand");
    }
    new status = dini_Int(path, "Werberstatus")+1;
    dini_IntSet(path, "Werberstatus", status);
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", inputtext);
    new pID = GetIDFromName(inputtext);
    if(pID != INVALID_PLAYER_ID) SpielerInfo[pID][pWerberstatus] = status;
    }
    else
    {
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", "-Niemand-");
    }
    return 1;
    }


    Shoxx: Beachte den Edit in Post #6 zum OnDialogResponse Teil, ich hatte den "Niemand" Teil unterschlagen. Ist jetzt dabei.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()


  • Super funktioniert schon mal, ist es noch möglich, dass auch der Name in des "Werbers" beim "Geworbenen" in der dini gespeichert wird und der "Werber" beim Login z.B. eine Nachricht bekommt, dass XY dich als Werber eingetragen hat.


    und ich bekomme diesen Error error 017: undefined symbol "dini_SetInt"
    reicht da ein einfaches new dini_SetInt?

    Einmal editiert, zuletzt von Shoxx ()

  • Sorry, das muss dini_IntSet heißen.


    Okay danke. Ist es noch möglich, dass auch der Name in des "Werbers" beim "Geworbenen" in der dini gespeichert wird und der "Werber" beim Login z.B. eine Nachricht bekommt, dass XY dich als Werber eingetragen hat.


    //Edit


    was nun auch ist, dass wenn ich den namen des "werbers" eingebe, ändert sich in desse .dini datei die reihenfolge



    Meldung=0
    Autoradio=1
    Navi=1
    SpawnX=1085.906860
    SpawnY=-1800.150878
    SpawnZ=13.328669
    SpawnR=358.502807
    SInterior=0
    SVirtualWorld=0
    SHealth=87.000000
    Werberstatus=1



    Alles ist nun untereinander und nicht mehr nebeneineander wie ändere ich das?


    Liegt das an dini_Int?


    Ich habe damit noch nicht gearbeitet.

    2 Mal editiert, zuletzt von Shoxx ()

  • Ändere mal alle diese hier:
    format(var, 32, "Werberstatusn=%d\n",PlayerInfo[playerid][pWerberStatus]);fwrite(hFile, var);
    zu:
    format(var, 32, "Werberstatusn=%d\r\n",PlayerInfo[playerid][pWerberStatus]);fwrite(hFile, var);


    Alle Zeilen davon, überall \r\n machen.


    Geht es dann? (Musst dich neu registrieren!)


  • Jetzt schreibt er es zwar untereinander, allerdings ließt er das passwort nicht mehr, auch nach dem neu Registrieren kann man, nachdem man sein passwort festgelegt hat und dann sich eigentlich einloggen sollte mit dem passwort nicht rein. da steht das passwort ist nicht korrekt


    So wird das Passwort gelesen:


    Encrypt(password);
    new string2[128];
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
    new PassData[256];
    new keytmp[256], valtmp[256];
    fread( UserFile , PassData , sizeof( PassData ) );
    keytmp = ini_GetKey( PassData );
    if( strcmp( keytmp , "Key" , true ) == 0 )
    {
    valtmp = ini_GetValue( PassData );
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    }
    if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
    {
    new key[ 256 ] , val[ 256 ];
    new Data[ 256 ];
    while ( fread( UserFile , Data , sizeof( Data ) ) )
    {
    key = ini_GetKey( Data );


    Komischerweise, ist es nun auch so, dass ich mich selber als werber eintragen kann. Also irgendwie ist da ein fehler.
    Kann man das Werber System nicht so schreiben, dass es nicht die dini. datei verändert sondern einfach nur nen Wert in dessen Datei hinzufügt?


    //Edit:


    was mir noch aufgefallen ist, das komischerweise das passwort gelöscht wird wenn ich mich selber als werber eintrage

    Einmal editiert, zuletzt von Shoxx ()

  • Ja, das liegt daran dass du kein dini verwendest, sondern etwas anderes, was es jetzt natürlich zerschossen hat.


    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    zu:
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-2, 255);
    Dann sollte es nach der neu-Registration wieder gehen.


    Dich selbst als Werber:
    Wie sieht der Code bei OnDialogResponse bei dir jetzt aus?


  • Okay das mit dem Passwort funktioniert wieder, allerdings kann ich mich, wenn ich mich Registriere mit Shox auch bei dem Werber Dialog Shox eingeben so dass Shox also Ich selber mich als Werber eingetragen habe.
    Wie kann man das unterbinden?

    2 Mal editiert, zuletzt von Shoxx ()

  • Poste bitte den Code vom OnDialogResponse-Teil von dem Werber Dialog.


    if(dialogid == DIALOG_WERBER)
    {
    new path[64];
    if(response)
    {
    format(path, sizeof(path), "/accounts/%s.ini", inputtext);
    if(!fexist(path))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: User existiert nicht.");
    return ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Wurdest du Geworben? (4/6)", "Nun hast du die möglichkeit, deinen User, der dich Geworben hat einzutragen:", "Weiter", "Niemand");
    }
    new status = dini_Int(path, "WerberStatus")+1;
    dini_IntSet(path, "WerberStatus", status);
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", inputtext);
    new pID = GetIDFromName(inputtext);
    if(pID != INVALID_PLAYER_ID) PlayerInfo[pID][pWerberStatus] = status;
    ShowPlayerDialog(playerid,DIALOG_REGSTEP_1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus. (5/6)","Gehörst du des Männlichen oder Weiblichen Geschlechts an?","Männlich","Weiblich");
    }
    else
    {
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werberstatus", "-Niemand-");
    ShowPlayerDialog(playerid,DIALOG_REGSTEP_1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus. (5/6)","Gehörst du des Männlichen oder Weiblichen Geschlechts an?","Männlich","Weiblich");
    }
    return 1;
    }

  • if(dialogid == DIALOG_WERBER)
    {
    new path[64];
    if(response)
    {
    if(!strcmp(SpielerName(playerid), inputtext))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst dich nicht selbst werben.");
    return ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Wurdest du Geworben? (4/6)", "Nun hast du die möglichkeit, deinen User, der dich Geworben hat einzutragen:", "Weiter", "Niemand");
    }
    format(path, sizeof(path), "/accounts/%s.ini", inputtext);
    if(!fexist(path))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: User existiert nicht.");
    return ShowPlayerDialog(playerid, DIALOG_WERBER, DIALOG_STYLE_INPUT, "Wurdest du Geworben? (4/6)", "Nun hast du die möglichkeit, deinen User, der dich Geworben hat einzutragen:", "Weiter", "Niemand");
    }
    new status = dini_Int(path, "WerberStatus")+1;
    dini_IntSet(path, "WerberStatus", status);
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werber", inputtext);
    new pID = GetIDFromName(inputtext);
    if(pID != INVALID_PLAYER_ID) PlayerInfo[pID][pWerberStatus] = status;
    ShowPlayerDialog(playerid,DIALOG_REGSTEP_1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus. (5/6)","Gehörst du des Männlichen oder Weiblichen Geschlechts an?","Männlich","Weiblich");
    }
    else
    {
    format(path, sizeof(path), "/accounts/%s.ini", SpielerName(playerid));
    dini_Set(path, "Werberstatus", "-Niemand-");
    ShowPlayerDialog(playerid,DIALOG_REGSTEP_1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus. (5/6)","Gehörst du des Männlichen oder Weiblichen Geschlechts an?","Männlich","Weiblich");
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen