Hallo Liebe Community,
ich möchte hier eines meiner neuen Sachen vorstellen welches helfen soll ein Login/Register Skript ohne große Probleme zu integrieren,
es muss nicht viel getan werden lediglich ein paar Sachen gesetzt und voreingestellt werden.
Diese "Include" hat den Dialog schon integriert also muss nichts mehr getan werden, es enthält zudem Zusatz "Callback" Funktionen die signalisieren wenn der Spieler ausgeloggt wird,
eingeloggt wird oder sich registriert.
Features
- Integrierter Dialog
- einfaches Speichern und laden
- einfaches eingliedern ins Skript ohne großen Aufwand
Callbacks die ins eigene Skript einbezogen werden können.
public BA_OnPlayerRegister(playername[],playerid,password[])
- Standard Rückgabe "true" oder 1
- wird aufgerufen sobald der Spieler sich registriert hat
- playername[] ( enthält den Spielernamen des registrierten )
- playerid ( ID des registrierten )
- password[] ( Passwort des registrierten )
public BA_OnPlayerLoad(playername[],playerid)
- Standard Rückgabe "true" oder 1
- wird aufgerufen sobald der Spieler die Verbindung zum Server aufnimmt und sein Account gefunden wird!
- playername[] ( Name des geladenen )
- playerid ( ID des geladenen )
public BA_OnPlayerLogout(playername[],playerid)
- Standard Rückgabe "true" oder 1
- wird aufgerufen sobald der Spieler den Server verlässt und ausgeloggt wird.
- playername[] ( Name desjenigen der den Server verlässt )
- playerid ( ID desjenigen der den Server verlässt )
public BA_OnPlayerLogin(playername[],playerid,password[])
- Standard Rückgabe "true" oder 1
- wird aufgerufen sobald sich der Spieler erfolgreich einloggt.
- playername[] ( Spielername des eingeloggten )
- playerid ( ID des eingeloggten )
- password[] ( verwendetes Passwort des eingeloggten )
Hier noch Funktionen die genutzt werden können.
IsPlayerLoggedIn(playerid)
- fragt ab ob Spieler eingeloggt ist
- gibt je nach dem "true" oder "false" zurück
DoPlayerAccExist(playerid)
- fragt ab ob der Spieler Account existiert.
- gibt je nach dem "true" oder "false" zurück
Und hier ein Beispiel Skript wie das ganze abläuft bzw. wo was hin muss : http://pastebin.com/xYn65Dbd
Wie funktioniert das mit meinen Variablen die gespeichert werden sollen und woher weiss das Skript was ich speichern will ?
Es gibt eine feste Struktur in diesem System und das ist sie
enum pVariables_Save
{
var_name[MAX_VAR_NAME],
var_type,
def_val_str[128],
def_val_int,
Float:def_val_float
};
Erklärung :
- Name der Spieler Variable die ihr zum Speicher/Lade Prozess hinzufügen wollt
- Der Typ dieser Variable ( Ist sie Float, String oder Integer ? ) dazu verwendet ihr bitte die Typen der SpielerVariablen ( http://wiki.sa-mp.com/wiki/PvarTypes )
- Standardwert wenn es eine Variable vom Typ String/Text ist
- Standardwert wenn es eine Variable vom Typ Integer/Zahl ist
- Standardwert wenn es eine Variable vom Typ Float/Fliesskommazahl ist
Wozu die Standardwerte ?
diese werden lediglich bei der registrierung übernommen damit das Skript einen festen Wert übernehmen kann für neu registrierte
Wie verwende ich diese Struktur und wie definiere ich sie ? Wozu braucht das Skript sie wenn ich die SpielerVariablen selber definieren kann ?
1. Zuerst einmal das Skript braucht sie um zu wissen welche Spieler Variablen geladen und gespeichert werden sollen, es kann nicht hellsehen und ich auch nicht, wer es kann Glückwunsch
2. Die Struktur wird ganz simpel definiert :
new mein_name[][pVariables_Save] = {{"geld",V_INT,"",20000,0.0} , // jetzt ist diese Variable in der Struktur sprich sie soll gespeichert werden und sie heißt "geld" darin setz ich normalerweise mein Geld Status "SetPVarInt", Standardmäßig 20.000$
{"wantedlevel",V_INT,"",0,0.0} // hier mein Wanted level ebenfalls Typ Integer und Standardmäßig 0
};
Wie verwende ich das nun ?
Folgendes, ihr habt 3 wichtige Funktionen die zuerst in euer Skript müssen und genau in die selber "Callbacks" wie ihr Name es schon sagt
BA_OnDialogResponse(playerid, dialogid, response, listitem, inputtext, <struktur>);
BA_OnPlayerDisconnect(playerid,<struktur>);
BA_OnPlayerConnect(playerid,<struktur>);
<struktur> ist der Platzhalter für euren Namens Container der Variablen dort setzt ihr den Container dann auch ein damit das Skript weiss wo die Daten übernommen werden sollen sprich
welche Spielervariablen gespeichert und geladen werden sollen.
Beispiel :
BA_OnPlayerConnect(playerid,mein_name);
jetzt werden alle Spielervariablen mit den Namen von "mein_name" gespeichert und geladen
Zu beachten bei "BA_OnPlayerDisconnect", bitte setzt eure Variablen bevor ihr dieses ausführt sonst gehen sie euch verloren sprich sie werden nicht gespeichert!
Beispiel :
public OnPlayerDisconnect(playerid, reason)
{
SetPVarInt(playerid,"spielergeld",GetPlayerMoney(playerid)); // bitte vor dem Speichern ausführen!
BA_OnPlayerDisconnect(playerid,meine_vars); // Alles übernehmen und speichern etc...
return 1;
}
Die wichtigsten Definitionen der in der INC die ihr verändern könnt
#define LOGGED_IN "logged" // Spieler eingeloggt
#define DO_EXIST "do_exist" // existiert der Account des Spielers ?
#define PW_KEY "passwort" // Variable für Spieler Passwort
#define MAX_VAR_NAME 64 // Maximale Variablen Länge
#define PLAYER_ACC "%s.dat" // Spieler Account (Speicher / lade Pfad )
#define MIN_PW_LEN 8 // Mindest. länge für Spieler Passwort
#define H_LOGIN_DIAG 58 // Login Dialog
#define H_REGISTER_DIAG 59 // Register Dialog
#define REG_HEADER "Registrierung" // Dialog Titel für Registrierung
#define REG_TEXT "Bitte registriere dich." // Dialog Text für Registrierung
#define LOG_HEADER "Einloggen" // Dialog Titel für Login
#define LOG_TEXT "Logge dich in deinen Account ein." // Dialog Text für Login
Pastebin [Coming Soon ]
Achtung : Es wird ein von mir entworfenes Speicherverfahren benötigt , mehr infos hier :
http://forum.sa-mp.de/san-andr…fx-ini-system-cache-based