Назрело ещё пару вопросов,как сделать чтобы деньги и фраги сохранялись после выхода,может есть какой то скрипт в котором есть всё всё сразу,ну там деньги кому то переслать,фраги считались и т.д....но самое главное мне это фраги,что бы после выхода,входа они возобновлялись...короче что бы сохранялись даже после того как ты вышел и вошёл...вот только как это сделать...
#include <a_samp>
#include <dudb> #define zelen 0x00FF00FF// Ярко зеленый
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
new PLAYERLIST_authed[MAX_PLAYERS];
new MyKills[MAX_PLAYERS];//Переменная для убийств
new MyDeaths[MAX_PLAYERS];//Переменная для смертей
new IsPlayerInJail[MAX_PLAYERS];
new gangkillcount[MAX_PLAYERS];
new teamkillcount[MAX_PLAYERS];
new taketurfbackcount[MAX_PLAYERS];
forward SystemMsg(playerid,msg[]);//Зафорвардили функцию SystemMsg
В OnPlayerConnect:
Code
//----------Нулевая статистика----------
MyDeaths[playerid] = 0;
MyKills[playerid] = 0;
IsPlayerInJail[playerid] = 0;
taketurfbackcount[playerid] = 0;
gangkillcount[playerid] = 0;
teamkillcount[playerid] = 0;
//----------Нулевая статистика----------
//-----------><-------------
new PlayerName[30], str[256];
GetPlayerName(playerid, PlayerName, 30);
format(str, sizeof(str), "%s.dudb.sav", PlayerName);
if (!udb_Exists(PlayerName2(playerid))) {
SendClientMessage(playerid, zelen, "***СИСТЕМА: Используйте /register [пароль] для создания аккаунта или /help***");
return 1;
}else{
PLAYERLIST_authed[playerid]=false;
SendClientMessage(playerid, zelen, "***СИСТЕМА:Этот ник зарегестрирован! Чтобы войти в аккаунт введите /login [пароль]***");
}
return 1;
}
//-----------><-------------
stock PlayerName2(playerid) {
new name[255];
GetPlayerName(playerid, name, 255);
return name;
}
//-----------><-------------
dcmd_register(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Такой аккаунт уже существует");
if (udb_Exists(PlayerName2(playerid))) return SystemMsg(playerid,"Аккаунт создан, введите '/login <пароль>'.");
if (strlen(params)==0) return SystemMsg(playerid,"***СИСТЕМА: Используйте '/register пароль'***");
if (udb_Create(PlayerName2(playerid),params)) return SystemMsg(playerid,"Аккаунт создан. Войдите '/login пароль'.");
return true;
}
dcmd_login(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Вы уже вошли в аккаунт");
if (!udb_Exists(PlayerName2(playerid))) return SystemMsg(playerid,"Аккаунта не существует, введите '/register пароль'.");
if (strlen(params)==0) return SystemMsg(playerid,"***СИСТЕМА: Используйте '/login пароль'***");
if (udb_CheckLogin(PlayerName2(playerid),params)) {
GivePlayerMoney(playerid,dUserINT(PlayerName2(playerid)).("money")-GetPlayerMoney(playerid));
SetPlayerScore(playerid,dUserINT(PlayerName2(playerid)).("kills")-GetPlayerScore(playerid));
MyDeaths[playerid] = (dUserINT(PlayerName2(playerid)).("deaths"));
MyKills[playerid] = (dUserINT(PlayerName2(playerid)).("kills"));
PLAYERLIST_authed[playerid]=true;
return SystemMsg(playerid,"Вы вошли в cвою учетную запись.Выберите скин и нажмите кнопку >>Shift<<");
}
return SystemMsg(playerid,"Неверный пароль.");
}
//------------------------Stat------------------------------------------------------
ShowScore(playerid)
{
new giveplayerid;
new skin = GetPlayerSkin(giveplayerid);
new ping = GetPlayerPing(giveplayerid);
new tmpTotal[128];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
format(tmpTotal, sizeof(tmpTotal), "*** %s: >>Фраги: [%d]<< | >>Смерти: [%d]<< | >>Рейтинг: [%0.2f]<< | >>Деньги: [$%d]<< ",playername,MyKills[playerid],MyDeaths[playerid], (Float:MyKills[playerid]/Float:MyDeaths[playerid]),GetPlayerMoney(playerid));
SendClientMessage(playerid,zelen, tmpTotal);
format(tmpTotal, sizeof(tmpTotal), ">>Скин [%d]<< | >>Пинг [%d]<< ", skin, ping);
SendClientMessage(playerid,zelen, tmpTotal);
return 1;
}
B OnPlayerDisconnect:
Code
public OnPlayerDisconnect(playerid, reason)
{
if (PLAYERLIST_authed[playerid]) {
dUserSetINT(PlayerName2(playerid)).("money",GetPlayerMoney(playerid));//Сохранение статы в файл с именем игрока в строку money
// Сохранение статистики
dUserSetINT(PlayerName2(playerid)).("kills",MyKills[playerid]);//См.выше ^
dUserSetINT(PlayerName2(playerid)).("deaths",MyDeaths[playerid]);//См.выше ^
}
PLAYERLIST_authed[playerid]=false;
return false;
}
B OnPlayerCommandText:
Code
new tmp[256];
new cmd[256];
new string[256];//Длина строки
new giveplayerid;
//-------------------------
dcmd(login,5,cmdtext);//войти
dcmd(register,8,cmdtext);//зарегиться
//-------------------------
if(strcmp(cmd, "/stat", true) == 0)
{
new skin = GetPlayerSkin(giveplayerid);//Получить скин игрока
new ping = GetPlayerPing(giveplayerid);//Получить пинг игрока
if(!strlen(tmp))
{
ShowScore(playerid);//Просмотр статистики (см.выше)
return 1;
}
if(IsPlayerConnected(playerid))//Проверка на то подключен игрок или нет
{
new playername[MAX_PLAYER_NAME];//Переменная для имени игрока
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "***Твоя статистика: >>Фраги: [%d]<< | >>Смерти: [%d]<< | >>Рейтинг: [%0.2f]<< | >>Деньги: [$%d]<< ***",playername,MyKills[playerid],MyDeaths[playerid],Float:MyKills[playerid]/Float:MyDeaths[playerid],GetPlayerMoney(playerid));
SendClientMessage(playerid, zelen, string);
format(string, sizeof(string), ">>Скин [%d]<< | >>Пинг [%d]<< ", skin, ping);
SendClientMessage(playerid,zelen, string);
return 1;
}
В конец скрипта:
Code
public SystemMsg(playerid,msg[]) {
if ((IsPlayerConnected(playerid))&&(strlen(msg)>0)) {
SendClientMessage(playerid,zelen,msg);
}
return 1;
}