Код:
////////////////////////////////////////////////////////////////////////////////
#include <a_samp>
#include <dini>
#include <dudb>
#include <dutils>
#pragma unused strtok
////////////////////////////////////////////////////////////////////////////////
#define COLOR_MESSAGE 0x00C7FFAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000FF
#define COLOR_YELLOW 0xFFFF0088
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTRED 0xFF6347AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOUR_LIGHTBLUE 0x33CCFFAA
#define COLOR_LIGHTGREEN 0x9ACD32AA
#define COLOR_GREEN2 0x33FF33AA
#define COLOR_ERROR 0xFF0000AA
#define COLOR_MSG 0x00FFFFFF
#define COLOR_PINK 0xFF66FFAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREEN1 0x33AA33AA
#define COLOR_BROWN 0xA52A2AAA
#define COLOR_PURPLE 0x800080AA
#define COLOR_BLACK 0x000000AA
#define COLOR_GREEN1 0x33AA33AA
////////////////////////////////////////////////////////////////////////////////
#define REGISTERDIALOG 500
#define LOGINDIALOG 501
#define STATS 502
#define AUTOLOGIN 503
////////////////////////////////////////////////////////////////////////////////
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
////////////////////////////////////////////////////////////////////////////////
enum PlayerData
{
Name[MAX_PLAYER_NAME],
IP[16],
Registered,
Password,
LoggedIn,
Autologin,
Kills,
Deaths,
};
////////////////////////////////////////////////////////////////////////////////
new PlayerInfo[MAX_PLAYERS][PlayerData];
////////////////////////////////////////////////////////////////////////////////
public OnFilterScriptInit()
{
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerConnect(playerid)
{
new playername[MAX_PLAYER_NAME];
new string1[64];
GetPlayerName(playerid, playername, sizeof(playername));
format(string1, sizeof(string1), "--%s (ID: %d) has joined the server--", playername, playerid);
SendClientMessageToAll(COLOR_LIGHTBLUE, string1);
new file[128];
format(file, sizeof(file), "register/%s.ini", pName(playerid));
PlayerInfo[playerid][Name] = playername;
PlayerInfo[playerid][IP] = 0;
PlayerInfo[playerid][Registered] = 0;
PlayerInfo[playerid][LoggedIn] = 0;
PlayerInfo[playerid][Autologin] = 0;
PlayerInfo[playerid][Password] = 0;
PlayerInfo[playerid][Password] = dini_Int(file,"Password");
PlayerInfo[playerid][Kills] = dini_Int(file,"Kills");
PlayerInfo[playerid][Deaths] = dini_Int(file,"Deaths");
if(userfile(playerid))
{
new RegIP_hash;
RegIP_hash = num_hash(dini_Get(file,"Ip"));
new playerIp[16];
GetPlayerIp(playerid,playerIp,sizeof(playerIp));
new playerIP_hash;
playerIP_hash = num_hash(playerIp);
if(PlayerInfo[playerid][Autologin] == 1)
{
if(playerIP_hash == RegIP_hash)
{
Autolog(playerid);
new autolog[128];
ShowPlayerDialog(playerid, AUTOLOGIN, DIALOG_STYLE_MSGBOX,"AutoLogin",autolog,"Ok","Cancel");
format(autolog, sizeof(autolog), "Welcome back %s. You have been automatically logged in.", pName(playerid));
GivePlayerMoney(playerid, dini_Int(file, "money")-GetPlayerMoney(playerid));
}
}
else
{
ShowPlayerDialog(playerid, LOGINDIALOG, DIALOG_STYLE_INPUT, " Login", "Enter your Password to login to your account", "Login", "Cancel");
new msg2[128];
format(msg2, sizeof(msg2), "Welcome back. Your account is registered. Please Login.");
SendClientMessage(playerid, COLOR_LIGHTGREEN, msg2);
}
}
else
{
ShowPlayerDialog(playerid, REGISTERDIALOG ,DIALOG_STYLE_INPUT, "Registration", "Please enter a New Password and Register with our server.\n And do remember this password for your future Logins","Register","Cancel");
new msg3[128];
format(msg3, sizeof(msg3), "Welcome to our server %s. You are not registered yet. Please reigster before you continue.", pName(playerid));
SendClientMessage(playerid, COLOR_LIGHTGREEN, msg3);
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerDisconnect(playerid, reason)
{
new playerName[MAX_PLAYER_NAME], string[56];
GetPlayerName(playerid, playerName, sizeof(playerName));
switch(reason)
{
case 0: format(string, sizeof(string), "%s has left the server. (Ping Timeout)", playerName);
case 1: format(string, sizeof(string), "%s has left the server. (Leaving)", playerName);
case 2: format(string, sizeof(string), "%s has left the server. (Kicked)", playerName);
}
SendClientMessageToAll(COLOR_GREY, string);
new pfile[256];
format(pfile,sizeof(pfile),"register/%s.ini", pName(playerid));
dini_IntSet(pfile,"Kills",PlayerInfo[playerid][Kills]);
dini_IntSet(pfile,"Deaths",PlayerInfo[playerid][Deaths]);
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new playername[MAX_PLAYERS];
GetPlayerName(playerid, playername, sizeof(playername));
if(dialogid == REGISTERDIALOG)
{
if(response == 1)
{
if(!inputtext[0])
{
ShowPlayerDialog(playerid, REGISTERDIALOG ,DIALOG_STYLE_INPUT, " Registration", "Enter the password for your account.","Register","Cancel");
return 1;
}
new pfile[128];
format(pfile, sizeof(pfile), "register/%s.ini", pName(playerid));
new Ip[16];
GetPlayerIp(playerid,Ip,sizeof(Ip));
new password = num_hash(inputtext);
PlayerInfo[playerid][Password] = password;
PlayerInfo[playerid][Registered] = 1;
PlayerInfo[playerid][LoggedIn] = 1;
dini_Create(pfile);
dini_IntSet(pfile,"Password",PlayerInfo[playerid][Password]);
dini_Set(pfile,"Ip",Ip);
PlayerInfo[playerid][Kills] = 0;
PlayerInfo[playerid][Deaths] = 0;
dini_IntSet(pfile,"Kills",0);
dini_IntSet(pfile,"Deaths",0);
SendClientMessage(playerid, COLOR_GREY, "Registration Done");
SendClientMessage(playerid, COLOR_GREY, "Welcome to the server.");
new string[256];
format(string, sizeof(string), "Your New Password is: \'%s\'.", inputtext);
SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
}
if(response == 0)
{
Kick(playerid);
new string[256];
format(string, sizeof(string),"%s hasn't registered and so have been kicked from the server",playername);
SendClientMessageToAll(COLOR_RED, string);
}
}
if(dialogid == LOGINDIALOG)
{
if(response == 1)
{
new password = num_hash(inputtext);
if(PlayerInfo[playerid][Password] == password)
Autolog(playerid);
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Welcome back to the server. You have successfully been logged in.");
}
else
{
Kick(playerid);
new string1[256];
format(string1, sizeof(string1),"%s hasn't logged in and so have been kicked from the server",playername);
SendClientMessageToAll(COLOR_RED, string1);
}
}
if(response == 0)
{
Kick(playerid);
new string1[256];
format(string1, sizeof(string1),"%s hasn't logged in and so have been kicked from the server",playername);
SendClientMessageToAll(COLOR_RED, string1);
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerDeath(playerid, killerid, reason)
{
new pname[24], kfile[50], pfile[50], kname[24];
GetPlayerName(playerid, pname, sizeof(pname));
GetPlayerName(killerid, kname, sizeof(kname));
format(kfile, sizeof(kfile), "register/%s.ini", kname);
format(pfile, sizeof(pfile), "register/%s.ini", pname);
if(killerid == INVALID_PLAYER_ID)
{
SendDeathMessage(INVALID_PLAYER_ID, playerid, reason);
PlayerInfo[playerid][Deaths]++;
dini_IntSet(pfile, "Deaths", PlayerInfo[playerid][Deaths]);
}
else
{
SendDeathMessage(killerid, playerid, reason);
PlayerInfo[killerid][Kills]++;
PlayerInfo[playerid][Deaths]++;
dini_IntSet(pfile, "Deaths", PlayerInfo[playerid][Deaths]);
dini_IntSet(pfile, "Kills", PlayerInfo[killerid][Kills]);
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerClickPlayer(playerid,clickedplayerid,source)
{
if(clickedplayerid == playerid)
{
new statstr[500];
format(statstr, sizeof(statstr), "Name: %s\nIP: %d\nKills: %d\nDeaths: %d",PlayerInfo[playerid][Name],PlayerInfo[playerid][IP],PlayerInfo[playerid][Kills],PlayerInfo[playerid][Deaths]);
ShowPlayerDialog(playerid, STATS, DIALOG_STYLE_MSGBOX,"Player Stats", statstr, "Ok", "Cancel");
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////
stock pName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
////////////////////////////////////////////////////////////////////////////////
stock userfile(playerid)
{
new FilePath[128];
format(FilePath, sizeof(FilePath), "register/%s.ini", pName(playerid));
if(dini_Exists(FilePath)) return 1;
return 0;
}
////////////////////////////////////////////////////////////////////////////////
stock Autolog(playerid)
{
new file[128];
format(file, sizeof(file), "register/%s.ini", pName(playerid));
PlayerInfo[playerid][LoggedIn] = 1;
PlayerInfo[playerid][Registered] = 1;
PlayerInfo[playerid][Kills] = dini_Int(file,"Kills");
PlayerInfo[playerid][Deaths] = dini_Int(file,"Deaths");
}
////////////////////////////////////////////////////////////////////////////////
Well you should have, because there is alot of scripts which saves money, there is tutorials, and there is alot of topics about it.