Доступ к архиву

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Делаем Админку и VIP

Статус
В этой теме нельзя размещать новые ответы.

[Pawno]Stenly

Пользователь
Для начала, мы сделаем небольшую регистрацию, чтобы все наше дело сохранялось:

Добавляем ко всем инклудам:
PHP:
#include <mxINI>
Если у кого то его нет, качать тут
Затем создадим парочку дефайнов, для урощения работы:
PHP:
#define registerdialog 1
#define logindialog 2

#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
Теперь создаем массив для хранения данных игрока. У нас это деньги, очки, уровень админки и вип игрок или нет.
PHP:
enum pInfo {
pMoney,
pScore,
pAdmin,
pVip
};
И под массивом глоб. переменную:
PHP:
new Player[MAX_PLAYERS][pInfo];
Так, далее мы обозначим диалоговые окна в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
PHP:
if(dialogid == registerdialog)
	{
		if(!strlen(inputtext)) return ShowPlayerDialog(playerid, registerdialog, DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "Ок", "");
		if(response)
		{
			new PlayerName[MAX_PLAYER_NAME];
			GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
			new account[128];
			format(account,sizeof(account),"users/%s.ini",PlayerName);
			if(fexist(account)) return ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
			new iniFile = ini_createFile(account);
			if(iniFile < 0) ini_openFile (account);
			{
				ini_setString(iniFile,"Пароль",inputtext);
				ini_setInteger(iniFile, "Money", 500000);
				ini_setInteger(iniFile, "Admin", 0);
                ini_setInteger(iniFile, "Vip", 0);
				ini_setInteger(iniFile, "Score", 0);
				ini_closeFile(iniFile);
				SetPVarInt(playerid, "Logged", 0);
				ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
			}
		}
		else
		{
			ShowPlayerDialog(playerid, registerdialog, DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "Ок", "");
		}
    }
    if(dialogid == logindialog)
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
        if(response)
        {
            new PlayerName[MAX_PLAYER_NAME], password[64];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerName);
            if(IsPlayerNPC(playerid))return 1;
            new iniFile = ini_openFile(account);
            ini_getString(iniFile, "Пароль",password);
            if(!strcmp(inputtext, password, true))
            {
            	ini_getInteger(iniFile, "Money", Player[playerid][pMoney]);
                GivePlayerMoney(playerid, Player[playerid][pMoney]);
                ini_getInteger(iniFile, "Score", Player[playerid][pScore]);
                SetPlayerScore(playerid, Player[playerid][pScore]);
                ini_getInteger(iniFile, "Admin", Player[playerid][pAdmin]);
                ini_getInteger(iniFile, "Vip", Player[playerid][pVip]);
                ini_closeFile(iniFile);
                OnPlayerSpawn(playerid);
                return 1;
            }
            else
            {
                SendClientMessage(playerid, COLOR_SYSTEM, "Cервер: Неверный пароль! Повторите попытку!");
                ShowPlayerDialog(playerid, logindialog, DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "Ок", "");
                return 1;
            }
        }
        else
        {
            ShowPlayerDialog(playerid, logindialog, DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "Ок", "");
        }
    }
Затем, мы делаем так, чтобы при подключении зарегестрированного игрока вышел диалог логина. И наоборот:
В public OnPlayerConnect(playerid)
PHP:
new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
    new account[128];
    format(account,sizeof(account),"users/%s.ini",PlayerName); 
    if(!fexist(account))
    {
        ShowPlayerDialog(playerid,registerdialog,DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "REGISTER", ""); //...Показываем игроку диалог реги
    }
    else
    {
        ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", ""); //если он есть, то авторизуем его
    }
И парочку очерков, для сохранения аккаунта после дисконекта, и сток для сохранения в самой игре:
В public OnPlayerDisconnect(playerid, reason)
PHP:
SaveAccount(playerid);
В конец мода вставляем это:
PHP:
public SaveAccounts()
{
    for(new f; f < GetMaxPlayers(); f++)
    {
        if(!IsPlayerConnected(f))continue;
        SaveAccount(f);
    }
}



stock SaveAccount(playerid)
{
    new PlayerName[MAX_PLAYER_NAME], account[128];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
    format(account,sizeof(account), "users/%s.ini", PlayerName);
    new iniFile = ini_openFile(account);
    ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));
    ini_setInteger(iniFile, "Score", GetPlayerScore(playerid));
    ini_setInteger(iniFile,"Admin",Player[playerid][pAdmin]);
    ini_setInteger(iniFile,"Vip",Player[playerid][pVip]);
    ini_closeFile(iniFile);
    return 1;
}

Последний штрих:
В public OnPlayerDeath(playerid, killerid, reason)
PHP:
if(killerid != INVALID_PLAYER_ID) SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    GivePlayerMoney(killerid, 3000);
    GivePlayerMoney(playerid, -500);
Этим, мы даем убийце 1 очко и 3000вирт а убитому отнимаем 500вирт.


__________________________________________________________________________________________________

Приступаем к созданию самой админки и випки:
Рассуждая логически наши массивы для А и В это pVip и pAdmin. Значит, если у игрока Вип =1, значит он является вип игроком.(Кэп) С админкой так же, но можно сделать подразделы на 1,2,3,4 уровень. Начнем:
Сделаем простую команду для админа и для випа:
p.s не удивляйтесь виду команды, это dcmd. Подробнее о ней узнайте Тут.
В любое место:
PHP:
dcmd_weap(playerid,params[])
{
new pleer,weap;
pleer = strval(params[0]);
weap = strval(params[1]);
if(IsPlayerConnected(pleer))
{
if(Player[playerid][pAdmin] >= 1)
{
GivePlayerWeapon(pleer,weap,9999999);
}
}
return 1;
}
В public OnPlayerCommandText(playerid, cmdtext[])
PHP:
dcmd(weap,4,cmdtext);
Строка if(Player[playerid][pAdmin] >= 1) и есть проверка на нашу админку. Поясняю: >= 1 это с какого уровня доступна команда. Значит, оружка доступен нам с первого уровня админки. А если же команда выглядит так:
PHP:
dcmd_weap(playerid,params[])
{
new pleer,weap;
pleer = strval(params[0]);
weap = strval(params[1]);
if(IsPlayerConnected(pleer))
{
if(Player[playerid][pAdmin] == 1)
{
GivePlayerWeapon(pleer,weap,9999999);
}
}
return 1;
}
То это значит, что она доступна ТОЛЬКО! 1 уровню администратора.
Операторы:
PHP:
== логическое равно(ТОЛЬКО)
>= Больше либо равно
<=Меньше либо равно
!= Не равно
> Больше
< Меньше
Это был пример команды для админа. Чтобы дать игроку админку, нужно войти в папку scriptfiles затем в папку users открыть аккаунт игрока, и в графе Admin поставить число(уровень админки).
Дальше мы сделаем команду, по которой мы можем посмотреть онлайн администратором и их уровень:
PHP:
dcmd_admins(playerid,params[]) {
#pragma unused params
new sendername[MAX_PLAYER_NAME], string[128];
if(IsPlayerConnected(playerid))
{SendClientMessage(playerid, COLOR_YELLOW, "ServeR | Администрация онлайн:");
 for(new i = 0; i < MAX_PLAYERS; i++)
{if(IsPlayerConnected(i)){
if(Player[i][pAdmin] >= 1){
GetPlayerName(i, sendername, sizeof(sendername));
format(string, 256, "* Администратор %s | Уровень %d", sendername, Player[i][pAdmin]);
SendClientMessage(playerid, 0xFFFF00AA, string);}}}}
return 1;}
Вот. Теперь после команды /admins нам покажут админов онлайн.

Теперь сделаем команду для випов.
Принцип тот же, но вместо
PHP:
if(Player[playerid][pAdmin] == 1)
мы делаем:
PHP:
if(Player[playerid][pVip] == 1)
И делаем команду:
PHP:
dcmd_skin(playerid,params[])
{
new skin;
skin = strval(params[0]);
if(IsPlayerConnected(playerid))
{
if(Player[playerid][pVip] == 1)
{
SetPlayerSkin(playerid,skin);
}
}
return 1;
}
Это всовывали в любое место мода, а это в public OnPlayerCommandText(playerid, cmdtext[])
PHP:
dcmd(skin,4,cmdtext);
Чтобы дать игроку випку, нужно войти в папку scriptfiles затем в папку users открыть аккаунт игрока, и в графе Vip поставить число 1 дать випку и 0 забрать.

И по традиции:
PHP:
dcmd_vips(playerid,params[]) {
#pragma unused params
new sendername[MAX_PLAYER_NAME], string[128];
if(IsPlayerConnected(playerid))
{SendClientMessage(playerid, COLOR_YELLOW, "ServeR | VIP онлайн:");
 for(new i = 0; i < MAX_PLAYERS; i++)
{if(IsPlayerConnected(i)){
if(Player[i][pVip] == 1){
GetPlayerName(i, sendername, sizeof(sendername));
format(string, 256, "* Vip %s", sendername);
SendClientMessage(playerid, 0xFFFF00AA, string);}}}}
return 1;}
Вот и все. Теперь можете делать команды на дкмд по уроку

The End

Автор материала: [Pawno]Stenly

не откажусь от +сика
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу