Tore mit Passwörten+Ändern/Speichern

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 Tag,
    heute möchte ich euch erklären wie man z.B. ein Fraktionstor mit einem Passwort versähen kann.
    Ich erkläre euch wie ihr es verändern könnte/wie man es abspeichert etc. Ok kommen wir zum wesentlichen:


    ...::Inhaltsverzeichnis:::...


    -Was brauchen wir?
    -Scripting+Erklärung


    ...::Was brauchen wir?::...


    Zuerst brauchen wir etwas um das Passwort zu speichern.
    Zur Abspeicherung nehmen wir Dini
    Hier ein Link:
    Download
    Tutorial
    Wir brauchen natürlich auch einen Dialog um das Passwort einzugeben
    Dann brauchen wir noch einige weitere Funktion:
    SendClientMessage
    CreateObject
    MoveObject
    AddStaticPickup
    Enum
    So im Grunde waren das die Hauptfunktionen die wir brauchen.
    Kommen wir nun zum Scripting.



    ...::Scripting+Erklärung::...


    Zu aller erst brauchen wir ein Enum um das Passwort zu Speichern:


    enum Tor_Passworter
    {
    Tor1/*,*///Das definiert das Passwort für das 1. Tor ihr könnt so weitere Tore ganz einfach hinzufügen und mit Passwörtern versehn dann dürft ihr aber das , nicht vergessen
    /* Tor2,
    Tor3//beim letzten darf nie ein Komma sein
    */
    }
    new tInfo[playerid][Tor_Passworter];


    Dann muss es ja geladen werden wenn wir den Gamemode betreten also laden wir aus der .ini Datei beim Connecten das Passwort raus:


    Falls ihr ein Login/Registersystem habt dann könnte man das mit einem stock machen also so:
    stock TorLaden(playerid)
    {
    new save[40];
    format(save,sizeof(save),"/Fraktionstore/Tore.ini",);
    format(tInfo[playerid][Tor1], 50, dini_Get(save, "Tor_Passwort1"));
    }
    Dann wenn die Account Sachen geladen werden nur noch:
    TorLaden(playerid);
    Vermutlich muss das bei euch zu OnGameModeInit
    Da wir ja nichts speichern müssen, kommen wir zum nächsten Schritt.
    Ihr müsst dafür dann in den Scriptfiles den Ordner:
    Fraktionstore erstellen


    Kommen wir nun zu den Toren. Zuerst müssen wir sie definieren:
    new Fraktionstor[1]; //Wenn ihr die Zahl in den Klammern: [] verändert könnt ihr die Tore ganz einfach vermehren.


    So wir haben nun die Tore definiert dann müssen wir noch ein Tor bei OnGameModeInit einfügen also:
    Fraktionstor[0] = CreateObject(Modelid,X,Y,Z,RotationX,RotationY,RotationZ);
    Die Funktion könnt ihr nachlesen ansonsten ist es denke ich gut genug erklärt


    Dann wollen wir ja das das Tor sich von alleine schließt also erstellen wir noch ein forward:
    forward TorTimer();
    Kommen wir nun zu dem Dialog. Zuerst wollen wir sobald man das Pickup neben dem Tor betritt der Dialog mit dem Passwortfeld erscheint also erstellen wir ein Pickup:
    new TorPickup;


    Dann müssen wir bei OnGameModeInit das Pickup erstellen mit dem new haben wir es nur definiert:
    TorPickup = AddStaticPickup(Pickupid,Respawntyp,X,Y,Z,Virtuelle Welt);
    Ok jetzt müssen wir ja es so programmieren das sobald wir das Pickup betreten das der Dialog erscheint also gehen wir zu dem public OnPlayerPickupPickup und fügen das ein:
    Zuerst müssen wir aber noch den Dialog definieren:
    #define TorDialog Dialogid//Bitte die Dialogid anpassen
    if(pickupid == TorPickup) //if() stellt in nahezu allen fällen eine if/else abfrage da pickupid == TorPickup fragt ab ob es dieser Dialog ist
    {
    ShowPlayerDialog(playerid,TorDialog,DIALOG_STYLE_INPUT,"Fraktionstor","Bitte gib nun das Passwort für das Fraktionstor ein","Bestätigen","Abbrechen");
    }
    Ok soweit sind wir nun fertig. Jetzt brauchen wir nur noch den Timer und das was passieren soll wenn man Bestätigen drückt.
    Also gehen wir nun zu OnDialogResposne:
    Dort müssen wir nun das hier einfügen:
    if(dialogid == TorDialog)
    {
    if(response)
    {
    new save[128];
    format(save,sizeof(save),"/Fraktionstore/Tore.ini",);
    format(tInfo[playerid][Tor1], 50, dini_Get(save, "Tor_Passwort1"));
    if(strcmp(inputtext, tInfo[playerid][Tor1], true)) //Wenn das Passwort nicht mit dem gespeicherten übereinstimmt
    {
    ShowPlayerDialog(playerid,TorDialog,DIALOG_STYLE_INPUT,"Fraktionstor","Du hast ein falsche Passwort eingegeben.\nBitte gib nun bitte das richtige ein","Bestätigen","Abbrechen");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    else if(!strcmp(inputtext, tInfo[playerid][Tor1], true)) //Wenn das Passwort mit dem gespeicherten übereinstimmt
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast das richtige Passwort eingegeben es bleibt nun 5 Sekunden offen");
    MoveObject(Fraktionstor[1],X,Y,Z,Geschindigkeit,RotationsX,RotationsY,RotationsZ);//Bewegt das Objekt an die Position wenn es offen ist
    SetTimer("TorTimer",5000, 1); //Startet den Timer
    }
    }
    }


    Da wir die Farbe Rot noch definieren müssen sieht das dann so aus:
    #define COLOR_RED 0xAA3333AA


    Kommen wir nun zu dem public für den Timer:
    public TorTimer
    {
    MoveObject(Fraktionstor[1],X,Y,Z,Geschindigkeit,RotationsX,RotationsY,RotationsZ);
    SendClientMessage(playerid,COLOR_RED,"Das Tor ist nun wieder geschlossen");
    }



    Ihr wollt nun zu letzt bestimmt wissen wie ihr das Passwort ändern könnt oder?
    Wir definieren den Dialog:
    #define PasswortAnderTor Dialogid//Bitte die Dialogid anpassen

    Das machen wir am einfachsten mit einem Befehlt:
    if(strcmp("/changetorpw",cmdtext,true) == 0)
    {
    if(SpielerLeader == 1) //bitte anpassen und abfragen ob er ein Fraktionsleader ist
    {
    ShowPlayerDialog(playerid,PasswortAnderTor,DIALOG_STYLE_INPUT,"Passwort ändern","Bitte gib nun das neue Fraktionstorpasswort:","Weiter","Abbrechen");
    }
    return 1;
    }
    Ok jetzt gehen wir zu dem Dialog:
    if(dialogid == PasswortAnderTor)
    {
    if(response)
    {
    new save[128],string[128];
    format(save,sizeof(save),"/Fraktionstore/Tore.ini",);
    if(!strlen(inputtext))
    {
    }
    dini_Set(save,"Passwort",inputtext);
    strmid(pInfo[playerid][passwort], inputtext, 0, strlen(inputtext)-1, 255);
    format(string, sizeof(string), "Du hast dein Passwort erfolgreich geändert.\n Dein neues Passwort ist: %s",pInfo[playerid][passwort]);
    SendClientMessage(playerid,COLOR_RED,string);
    }
    }


    Ich hoffe ich konnte euch mit diesem Tutorial helfen.
    Mit freundlichen Grüßen
    Sven
    //edit 1 Code versucht einzurücken
    //edit 2 //edit 1 hinzugefügt
    //Edit 3 Beitrag buggt rum da steht sind mehr als 20.000Zeichen obwohl es nicht mal 8000 sind...


    Bewerte mich und meine Transaktionen als Mittelsmann

    2 Mal editiert, zuletzt von lollipop ()

  • |GXR|B3ar
    Es ist nich wirklich komplizierter. Der unterschied ist der das man bei mir InGame als Leader der Fraktion das Passwort ändern kann.
    Bei dem anderne Tutorial kann man das SCript nur im Script ändern ;D wems leichter fällt ok aber da muss man immer im Gamemode
    das Passwort ändern.
    Naja egal


    Blackybecks
    Ich seh das mal als Spam an anstatt ne Bewertung abzugeben oder so einfach nur ein Satz der falsch gebildet ist raussuchen und Spammen...


    Mit freundlichen Grüßen
    Sven


    Bewerte mich und meine Transaktionen als Mittelsmann