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...