#include <a_samp>
#include <Dini>
#include <Dutils>
#include <MD5>
//DIALOG Login/Register
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//Farben
#define ROT 0xFF0000FF
#define GRÜN 0x00FF14FF
#define GELB 0xE1FF00FF
public OnFilterScriptInit()
{
return 1;
}
public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid))return 1; //Ein NPC soll sich ja nicht registrieren sonst käme er ja nicht auf unseren Server
new Spielerdatei[128],string[128],string2[128]; //Spielerdatei,sowie 2 Strings
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Ist klar
if(dini_Exists(Spielerdatei)) //Hier wird abgefragt ob der User Bereits registriert ist
{ //Wenn ja , dann...
format(string,sizeof(string),"{FFFFFF}Herzlich Willkommen zurück auf meinem Server {FFFA00}%s.\n{FFFFFF}Gib unten bitte dein Passwort ein!",SpielerName(playerid)); //String1......
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang",string,"Einloggen","Abbrechen"); //Login Dialog mit der Info string
}
else
{ //Falls nicht
format(string2,sizeof(string2),"{FFFFFF}Herzlich willkommen {FFFA00}%s.\n{FFFFFF}Da dies dein erster Besuch hier ist musst du dich erst registrieren.\nBitte gib unten dein gewünschtes Passwort ein!",SpielerName(playerid)); //String 2
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierungs Vorgang",string2,"Register","Abbrechen"); //Register-Dialog mit der Info string2
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(Spielerdatei,"loggedin") == 1 //Falls er eingeloggt war
{
SpielerSpeichern(playerid); //Unsere SpielerSpeichern-Funktion wird angewendet......
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==DIALOG_LOGIN) //Wenn der Dialog-Login aufgerufen wird
{
if(response==0) //Falls er auf Abbrechen drückt, dann
{
SendClientMessage(playerid,ROT,"Du hast den Login Vorgang abgebrochen und wirst deshalb vom Server gekickt!"); //Nachricht an ihn
Kick(playerid); //Er wird gekickt
return 1;
}
if(response==1) //Falls er aber auf Login drückt, dann...
{
if(!strlen(inputtext)) //Hier prüft man ob er überhaupt was eingegeben hat, sonst müsste er ja nichts eingeben und würde sich einloggen koennen...
{
SendClientMessage(playerid,ROT,"Dein angegebenes Passwort war nicht lange genug!"); //Nachricht
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Dein Account wurde in unserer Datenbank gefunden!\nBitte gib nun dein Passwort ein! ","Login", "Abbrechen"); //Dialog erneut zeigen
return 1;
}
else
{
Login(playerid,MD5_Hash(inputtext)); //Falls es aber was eingegeben wurde wird der Stock Login aufgerufen und ausgeführt.. MD5_Hash bedeutet dass das Passwort nicht wortwörtlich in die Spielerdatei gesetzt wird sondern als String und dann wieder ins richtige umformatiert wird. So schützt man eueren Server vor Hackern, weil Sie dann das PW von diesen nicht wissen...
return 1;
}
}
}
if(dialogid==DIALOG_REGISTER) //Falls der DIALOG_REGISTER aufgerufen wird
{
if(response==0) //Falls er auf abrrechen drückt..
{
SendClientMessage(playerid,ROT,"Du hast den Registrierungs Vorgang abgebrochen und wirst deshalb vom Server gekickt!"); //Nachricht
Kick(playerid); //WIrd gekickt
return 1;
}
if(response==1)
{
if(!strlen(inputtext)) //Überprüft ob was eingegeben wird...
{
SendClientMessage(playerid,GRÜN,"Dein eingegebenes Passwort war nicht lang genug!"); //Wenn er wieder nichts eingibt
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierung","Willkommen auf meinem Server\n bitte gib nun dein gewünschtes Passwort ein","Register","Abbrechen"); //Dann Dialog erneut anzeigen....
return 1;
}
else //Falls aber was eingegeben wurde , dann....
{
Register(playerid,MD5_Hash(inputtext)); //Wir die Funktion Register von Vorhin aufgerufen und ausgeführt und das PW wird erneut gehasht...
return 1;
}
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock SpielerName(playerid)
{
new GetName[MAX_PLAYER_NAME];
GetPlayerName(playerid,GetName,sizeof(GetName)); //Wir getten den Spielernamen
return GetName; //Und returnen ihn hier...
}
stock Register(playerid,key[])//Wir benötigen die Parameter Playerid, sowie key, wobei key das passwort des Users sein soll.....)
{
new Spielerdatei[64];//Wir erstelllen uns eine neue Spielerdatei, in der die Daten des Spielers gespeichert werden sollen
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Wir formatieren die Spielerdatei um, und sagen so dem Script , dass die Daten in dem Scriptfiles Ordner unseres Servers im Ordner "Accounts" gespeichert werden sollen....(Man kann auch /Accounts/%s.txt nehmen,wobei ich .ini jedoch schöner finde..%s ist der String zum Abfragen des Spielernamens...
dini_Create(Spielerdatei); //Hier wird die Dini-datei erstellt
dini_Set(Spielerdatei,"Passwort",key); //In die Spielerdatei soll das Passwort gesetzt werden
SendClientMessage(playerid,GRÜN,"Erfolgreich registriert."); //Die Message die kommt ,wenn man sich erfolgreich registriert hat.....
dini_IntSet(Spielerdatei,"Level",0); //Wir setzen in die Datei das Level 0
dini_IntSet(Spielerdatei,"Banned",0); //Wir setzen Banned auf 0 = Nicht gebannt 1=Gebannt
dini_IntSet(Spielerdatei,"Adminlevel",0); //Wir setzen das Adminlevel auf 0
dini_IntSet(Spielerdatei,"Fraktion",0); //Wir setzen die Fraktion auf 0 = Zivilisten bzw. keine Fraktion
dini_IntSet(Spielerdatei,"Geld",0); //Wir setzen das Geld auf 0
SetPVarInt(playerid,"loggedin",1); //Hier setzen wir die Variable, ob der Spieler eingeloggt ist auf 1, um Sie später wieder abfragenzukönnen...
return 1;
}
stock Login(playerid,key[])
{
new Spielerdatei[128]; //Wieder die Spielerdatei
new string2[128]; //Benötigen einen String
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid)); //Ab in Accounts damit
if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false)) //Hier überprüft er, ob das Passwort, das er zuvor beim registrieren eingegeben hat, mit dem das er jetzt eingegeben hat übereinstimmt....
{
SpielerLaden(playerid); //Hier werden die Daten aus der Spielerdatei geladen, den Stock dazu erstellen wir gleich...
SendClientMessage(playerid,GRÜN,"Du hast dich erfolgreich eingeloggt."); //Nachricht wird gesendet
format(string2,sizeof(string2),"[Join] %s hat den Server betreten",SpielerName(playerid)); //Join-String wird formatiert
SendClientMessageToAll(GRÜN,string2); //Join-Message wird an alle gesendet
}
else //Falls das Passwort nicht damit übereinstimmt soll folgendes passieren
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Das angegebene Passwort war leider falsch!\nBitte gib nun unten dein richtiges Passwort ein! ","LogIn", "Abbrechen"); //Dialog-Style-Passwort und nicht Input.. Hier wird das eingegebene Passwort in Punkte formatiert während man es eingibt ..... Der Dialog wird wieder angezeigt bei Falschem Passwort ..
}
return 1;
}
stock SpielerLaden(playerid)
{
new Spielerdatei[128]; //Wie immer
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid));
SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level")); //Level wird aus der Userdatei abgefragt und ihm dann gegeben
GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld")); //Genauso das Geld
SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion")); //Genauso die Fraktion
SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel")); //Genauso das Admin-Level
SetPVarInt(playerid,"loggedin",1); //Loggedin wird wieder auf 1 gesetzt ...
SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned")); //Genauso mit Banned
if(GetPVarInt(playerid,"Banned")==1) //Falls der User gebannt ist
{
SendClientMessage(playerid,ROT,"Du kannst mit diesem Account nicht spielen, da du gebannt bist.\nBei Fragen oder Einwänden melde dich bei einem Admin"); //Nachricht an User
Kick(playerid); //wird er beim Login vom Server gekickt...
return 1;
}
return 1;
}
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1) //Falls er eingeloggt war, um nicht unnötig Ressourcen zu verbrauchen....
{
new Spielerdatei[128]; //Spielerdatei
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",SpielerName(playerid));
dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid)); //In die Userdatei wird das abgefrage Level gespeichert
dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel")); //Das Adminlevel
dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion")); //Die Fraktion
dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid)); //das Geld
dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid||pID,"Banned")); //Banned
return 1;
}
return 1;
}
Fehler:
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(52) : warning 217: loose indentation
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(53) : warning 217: loose indentation
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(70) : error 017: undefined symbol "Spielerdatei"
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(262) : warning 217: loose indentation
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(285) : warning 217: loose indentation
C:\Users\Marvin\Desktop\samp03e_svr_R2_win32\pawno\Wahr.pwn(362) : error 017: undefined symbol "pID"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
2 Errors.
Why?