Перейти к содержанию
Dresis

Мод CR-MP с нуля [ Урок №2 ]

Рекомендуемые сообщения

Dresis

Всем снова здравствуйте с вами DreSiS!

сегодня мы будем делать регистрацию на инклуде mxINI.
Заранее благодарю вас за просмотр моего урока!

 

 

1.Масив и сохранение
 

Спойлер

 



 

прошу смотреть и читать внимательно, конечно же можете скопровать),
и так, пишем:

 

#include <mxINI> // загружаем функцию mxINI ссылка в 1-ом уроке на все файлы

загружаемую функцию вписываем ко всем инклудам!
можете сделать красиво как постарался я:

image.png.36e1ad4573e024c225af28f993c892fc.png

 

итак давайте теперь перейдем ниже.

и пишем следующее:

 

enum pInfo //название enum`а
{
	pPass[32], // масив для с сохроненным паролем. 32 - макс. количество цыфр/букв 
}
//Сразу создаем переменную player для будущих использований   (new - переменная хронящая в себе информацию)
new Player[MAX_PALEYRS][pInfo]//Создав переменную мы исполуем enum pInfo!

 

Эта функция нам необходима для сохранения аккаунта, куда информация будет сохранятся сделаем позже!
а сейчас сделаем регистрацию( так как я не хочу 3 часа подключать это все к базе данных, я сделаю регистрацию без mysql )
и так переходим в самый низ вашего мода!

image.thumb.png.de28482fb6a0e18b69fd9700e2a835b2.png

 

и пишем следующие:
 

stock SavePlayer(playerid) // stock-(знаю только то что для создание диологов)playerid( для показа того для кого он активирован)
{
	new string[32]; //локальная переменная( можно искользовать только в пределах скобок)([32]- у меня стоит pPass[32] поэтому я тут поставил 32 цел-ое число)
  		new playername[MAX_PLAYERS_NAME];// лок. переменная и масив для получении имени игрока которое стоит у всех в клиенте.
		GetPlayerName(playerid,playername, sizeof(playername));// Получаем имя игрока (нечего объяснять я думаю)
		format(string, sizeof(string), players/%s.ini,playername);//format- формат.строк sizeof(string)-неогр. строки, players/%s-путь где сохраняються.
		iniFile = iniopenFile(string);// Открываем файл по пути которое указали.    (players/%s.ini)
		ini_setString(iniFile,"Pass",Player[playerid][pPass]);// записываем пароль указанный при регистрации
		ini_closeFile(iniFile); // Закрываем файл (нечего объяснять я думаю) 
}

(все раставленно ровно,при изминени получите варнинг от павно.)

 

следующий пункт.

 


 

 

Спойлер

 

2.Создание регистрации и авторизации

 

система регистрации не токая простая как вам кажется с игры, любой разработчик Pawno вам скажет что регистрация это только начало работы.

ищем public OnPlayerConnect; - (когда игроки подключаются проискходит. (и то что вы там прописали, там текстдравы ставится и всякая лабуда которую мы будем делать))


у вас будет так:

Вписываем новую переменную ко всем невам.

 

new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет

 

потом у вас будет так:

image.png.687320fbec7412ab7778d521ab75eae2.png

 

как я написал уже , нужно писать в OnPlayerConnect.
 

вписываем это

 

public OnPlayerConnect(playerid)
{
	new playername[MAX_PLAYER_NAME];// Масив имени игрока, для регистрации его ника
	new string[128];// Путь до папки с именем игрока ( мы указывали в пункте Масивы и сохранения)(желательно поставить 128 масив в переменной string)
	GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока с папки players.
	format(string,sizeof(string),"players/%s.ini", playername);// Путь к файлу с аккаунтом
	if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие.
	{
		PAccount[playerid] = 1;// Если аккаунт присутствует то будет 1, т.е авторизация.
	}
	else
	{
		PAccount[playerid] = 0;// если аккаунта нету то выполняется регистрация.
	}
	return 1;
}

 

Получится так:

 

image.thumb.png.dc2846884dad8d0c57c978c977397424.png

 

фухх как я устал писать))

вообщем не отстаем писать.

переходим к public OnPlayerRequestClass ( OnPlayerRequestClass - паблик для хранений диологов (не путайте со сток).

и пишем далее:

 

	if(PAccount[playerid] == 1)// Если аккаунт есть
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте!\nВаш аккаунт уже зарегестрирован на сервере!\nВведите свой настаящий пароль в окно","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста.
        }
        else// Если аккаунта нет
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте!\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста.
        }

вы сами сможете стамбулировать или скачать любой тамбулятор(не реклама) в интернете

я много чего объяснял и тут вы уже поймете что к чему в надписях выше

а какие существуют диалоги, короче вся инфа снизу!

теперь впишите это в конец мода(писать долго будет но попытайтесь написать, так лучше поймете язык павно)
 

forward OnPlayerRegister(playerid, password[]);
public OnPlayerRegister(playerid, password[])// Паблик регистрации
{
        if(IsPlayerConnected(playerid))
        {
            	new string[64];// Масив с путём для файла
                new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
                GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
                format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
                new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players
                if(iniFile < 0)// Если Файла нет
                {
                        iniFile = ini_openFile(string);// Открываем
                }
                if(iniFile >= 0)// Если файл есть
                {
                        strmid(Player[playerid][pPass],password,0,strlen(password),255);// Присваиваем масиву pPass, значение password[]
                        ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл
                        ini_closeFile(iniFile);// Закрываем файл
                        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
                }
        }
        return 1;
}

тут тоже объяснять мне нечего потому-что все что нужно я вам описал,
теперь это тоже в конец мода пожалуйсто:

 

forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))// Проверка на подключение игрока
	{
		new string[64];// Масив с путём для файла
		new pass[64];// Масив с паролем
		new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
		GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
		format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
		new iniFile = ini_openFile(string);// Открываем файл
		ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль
		if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
	{
	ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль
	ini_closeFile(iniFile);// Закрываем файл
	}
		else// Если пароль не верен..
	{
	ini_closeFile(iniFile);// Закрываем файл
	ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
	return 1;
	}
		SendClientMessage(playerid,0xFF00000,"Добро пожаловать на наш сервер");// Выводим игрок сообщение
		SpawnPlayer(playerid);// Спавним игрока
	}
return 1;
}



и так переходим в последний на сегодня пункт, переходим в OnDialogResponse

и пишем:

 

if(dialogid == 1)// Ид диалога Для Логина
        {
            if(response)// Если игрок нажал первую кнопку входа
            {
                        if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова
                {
                    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
                    return 1;
                }
                new pass[64];// Масив с паролем
                strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
                OnPlayerLogin(playerid,pass);// Запускаем паблик входа
            }
            else// Если игрок нажал Esc, вернём ему диалог
            {
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
            }
        }
        if(dialogid == 2)// Ид диалога для регистрации
        {
            if(response)// Если игрок нажал первую кнопку 
            {
                if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова
                {
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
                    return 1;
                }
                new pass[64];// Масив с паролем
                strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
                OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации
            }
            else// Если игрок нажал Esc, вернём ему диалог
            {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
            }
        }


на этом все запускаем сервер и наслаждаемся новой регистрацией!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 


Все что вам нужно узнать с этого урока:

mxINI - библиотека функций (используют вместо mysql, типо база данных только находятся в файлах а не в сети)
new - переменная сохраняющийся в себе информацию,
------ new ------
str - string ( целое ) %s -строки цыфры, число или слово
float - (вещественное) %d - 0.0, числа, к примеру целое равно 3, вы его перевели на флоат и получилось 3.0 или 3.00000
все что покачто знаю я и мне это помогает.
--------------------
Диалоги

DIALOG_STYLE_INPUT
DIALOG_STYLE_LIST

DIALOG_STYLE_WEAPON

DIALOG_STYLE_REG 
как я помню) 
----------------------------------------------------------------------
Спасибо тем кто поддержал меня и так же писали в коментарии что так что не так, ценю всех особенно EgasVegas  
выкладывать пытаюсь каждый день так что до завтра,ожидайте новый урок!

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ilya_Turchenko

Что делать?

Снимок.PNG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
failed

Не вижу смысла этого поста, так как в ютубе есть видео, которые более понятны

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Yarik_Criminalovski

Почему столько ошибок? 

Спойлер

C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(28) : error 001: expected token: ";", but found "new"
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(30) : error 001: expected token: ";", but found "public"
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(57) : warning 217: loose indentation
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(60) : warning 217: loose indentation
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(60) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(60) : error 004: function "Itter_OnPlayerConnect" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(77) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(77) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(77) : error 004: function "Itter_OnPlayerDisconnect" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(82) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(82) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(82) : error 004: function "OnPlayerSpawn" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(87) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(87) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(87) : error 004: function "OnPlayerDeath" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(92) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(92) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(92) : error 004: function "OnVehicleSpawn" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(97) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(97) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(97) : error 004: function "OnVehicleDeath" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(102) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(102) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(102) : error 004: function "OnPlayerText" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(107) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(107) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(107) : error 004: function "dc_cmd_OnPlayerCommandText" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(112) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(112) : error 004: function "OnPlayerEnterVehicle" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(117) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(117) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(117) : error 004: function "OnPlayerExitVehicle" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(122) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(122) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(122) : error 004: function "OnPlayerStateChange" is not implemented
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(127) : warning 225: unreachable code
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(127) : error 029: invalid expression, assumed zero
C:\Users\Yaroslav\Desktop\Новая папка\gamemodes\Smoutch.pwn(127) : error 004: function "OnPlayerEnterCheckpoint" is not implemented

Код:

//-------------------------Includes--------------------------//
#include <a_samp>
#include <mxINI>
#include <a_mysql>
#include <streamer>
#include <sscanf2>
#include <crp>
#include <dc_cmd>
#include <foreach>
//-------------------------Define---------------------------//
main()
{
    print("\n----------------------------------");
    print(" Smoutch RolePlay ");
    print("----------------------------------\n");
}
#define SERVER_NAME                 "Smoutch RolePlay"
#define SERVER_MODE                 "Smoutch"
#define SERVER_MAP                  "Russian"
#define SERVER_SITE                 "test"

enum pInfo //Название
{
    pPass[64], // Сохранение пароля. 64 Символа
}
//----------------------------{New}------------------//
new Player[MAX_PLAYERS][pInfo]
new PAccount[MAX_PLAYERS]

public OnGameModeInit()
{
    SetGameModeText(SERVER_MODE);
    SendRconCommand("hostname "SERVER_NAME);
    SendRconCommand("mapname "SERVER_MAP);
    SendRconCommand("weburl "SERVER_NAME);
    SetGameModeText("Smoutch RolePlay");
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 93.5223,1337.2987,29.4460);
    SetPlayerCameraLookAt(playerid, 93.5223,1337.2987,29.4460);
    if(PAccount[playerid] == 1)// ???? ??????? ????
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Вход","Здравствуйте!\nВаш аккаунт зарегистрирован на сервере!\nВведите ваш пароль ниже","Ввод","");// ?????????? ?????? ????? ? ????. ????? ??????? ?????????? ?? ???? ??????.
        }
        else
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Регистрация","Здравствуйте!\nВаш аккаунт не зарегестрирован на сервере.\nЗарегестрируйтесь введя пароль в поле ниже","Далее","");// ?????????? ?????? ???????????. ????? ??????? ?????????? ?? ???? ??????.
    return 1;
}

public OnPlayerConnect(playerid)
{
    new playername[MAX_PLAYER_NAME];
    new string[128];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),"players/%s.ini", playername);
    if(fexist(string))
    {
        PAccount[playerid] = 1;
    }
    else
    {
        PAccount[playerid] = 0;
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    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[])
{
    
}

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[])
{
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

stock SavePlayer(playerid) 
{
    new string[32];
          new playername[MAX_PLAYERS_NAME];
        GetPlayerName(playerid,playername, sizeof(playername));
        format(string,? sizeof(string), players/%s.ini,playername);
        iniFile = iniopenFile(string);
        ini_setString(iniFile,"Pass",Player[playerid][pPass]);
        ini_closeFile(iniFile); 
}
forward OnPlayerRegister(playerid, password[]);
public OnPlayerRegister(playerid, password[]) // Регистрация //
{
        if(IsPlayerConnected(playerid))
        {
            new string[64]:
            new playername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, playername, sizeof(playername));
            format(string, sizeof(string), "players/%s.ini", playername);
            new iniFile = ini_createFile(string);
            if(iniFile < 0)
            {
                iniFile = ini_openFile(string);
            }
            if(iniFile >= 0)
            {
                    strmid(Player[playerid][pPass],password,0,strlen(password),255);
                    ini_setString(iniFile,"Pass",Player[playerid][pPass]);
                    ini_closeFile(iniFile);
                    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Вход","Здравствуйте!\nВаш аккаунт зарегистрирован на сервере!\nВведите ваш пароль ниже","Ввод","");//Вход в игру//
            }
        }
        return 1;
}
forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))
    {
        new string[64];
        new pass[64];
        new playername[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername, sizeof(playername));
        format(string,sizeof(string), "players/%s.ini", playername);
        new iniFile = ini_openFile(string);
        ini_getString(iniFile,"Pass",pass,64);
        if(strcmp(pass,password,true) == 0)
    {
    ini_getString(iniFile,"Pass",Player[playerid][pPass],64);
    ini_closeFile(iniFile);
    }
        else
    {
    ini_closeFile(iniFile);
    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Вход","Здравствуйте!\nВаш аккаунт зарегистрирован на сервере!\nВведите ваш пароль ниже","Ввод","");
    return 1;
    }
        SendClientMessage(playerid,0xFF00000,"Вас приветствует Smoutch RP!");
        SpawnPlayer(playerid);
    }
return 1;
}
if(dialogid == 1)// ?? ??????? ??? ??????
        {
            if(response)// ???? ????? ????? ?????? ?????? ?????
            {
                        if(!strlen(inputtext))// ???? ???? ????? ??????, ??????? ?????? ?????
                {
                    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Вход","Здравствуйте!\nВаш аккаунт зарегистрирован на сервере!\nВведите ваш пароль ниже","Ввод","");// ?????????? ?????? ????? ? ????.
                    return 1;
                }
                new pass[64];// ????? ? ???????
                strmid(pass,inputtext,0,strlen(inputtext),64);// ????????? ????? ? ???????
                OnPlayerLogin(playerid,pass);// ????????? ?????? ?????
            }
            else// ???? ????? ????? Esc, ?????? ??? ??????
            {
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Вход","Здравствуйте!\nВаш аккаунт зарегистрирован на сервере!\nВведите ваш пароль ниже","Ввод","");// ?????????? ?????? ????? ? ????.
            }
        }
        if(dialogid == 2)// ?? ??????? ??? ???????????
        {
            if(response)// ???? ????? ????? ?????? ??????
            {
                if(!strlen(inputtext))// ???? ???? ????? ??????, ??????? ?????? ?????
                {
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Регистрация","Здравствуйте!\nВаш аккаунт не зарегестрирован на сервере.\nЗарегестрируйтесь введя пароль в поле ниже","Далее","");// ?????????? ?????? ???????????.
                    return 1;
                }
                new pass[64];// ????? ? ???????
                strmid(pass,inputtext,0,strlen(inputtext),64);// ????????? ????? ? ???????
                OnPlayerRegister(playerid,pass);// ????????? ?????? ???????????
            }
            else// ???? ????? ????? Esc, ?????? ??? ??????
            {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Регистрация","Здравствуйте!\nВаш аккаунт не зарегестрирован на сервере.\nЗарегестрируйтесь введя пароль в поле ниже","Далее","");// ?????????? ?????? ???????????.
            }
        }

 

Изменено пользователем mikilov
Добавил спойлер (код)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Dresis
      От Dresis
      Здравствуйте! и так это мой первый урок и не судите строго!
      скачать чистый сервер:http://www.gtasrv.ru/index_ru.html   (не реклама)
       
      1.Основное
       
      Заходим в pawno и нажимаем на new.
      потом наблюдаем это:
       
      // This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #include <a_samp> #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } #endif
      Удаляем:
       
      // This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else #endif
      Переходим в OnPlayerCommandText и удаляем следующее:
      if (strcmp("/mycommand", cmdtext, true, 10) == 0) { // Do something here return 1; } Нажимаем F5 и ожидаем ответа от pawno
      если у вас написало как у меня 



      то все правильно!

       
      2.Плагины

       
      Скачиваем данный архив(там находятся нужные плагины):https://yadi.sk/d/LAE8aw1C3TU4of(ссылка не моя)
      теперь открываем архив и переносим папку с файлами на роб.стол(куда хотите)
      делайте все как на скринах!
       
      1. открываем папку
       

       
      Открываем plugins и переносим в нашу папку нашего сервера!







      Открываем папку "pawno" и заходим в папку "include".
       

       
      файл "a_mysql" переносим в (название вашего сервера/pawno/include/)
       

       
      Отлично!
      теперь выходим из папки "include" и "pawno"

       
       
      открываем папку "pawno" и переносим в папку вашего проекта(если нужно будет замена, заменяем!)

       

       
      теперь переносим папку "plugins" в папку вашего проекта с заменой!



      с папкой "streamer" делайте то же самое))
      Отлично!


       
      3.Первые изменения в моде
       
       
      Открываем ваш мод снова и видим
       

       
       
      изменяем "Blank Gamemode by your name here"
      на ваш текст(он будет отображаться в консоли)



       
      и видим
       

       
      в OnGameModeInit видем


       
       
      и изменяем Blank Script на свой текст(показывает название вашего мода в клиенте)
       

       

       


      3.Настройки server.cfg

       
      открываем server.cfg и видим
       


      сначала у вас не будут таких настроек,
      просто некоторые функции перепишите от сюда
      (обязательно поменяйте rcon_password!)
      убираем все filterscripts

      забыл сказать что в строке gamemode0 поменяйте simple на название вашего мода
       

       
      вы помните мы добавили плагины?
      и так добавляем строку plugins в самый низ и добавляйте прописывайте плагины
      или спишите как у меня!

      должно получиться так:

      plugins streamer sscanf pawnregex mysql dc_cmd
      сохраняем server.cfg


      А продолжим мы в следующем уроке, ссылку на него я оставлю в ответах темы, следите за этой темой!
      вопросы тоже задаем!

      Всех уважаю
    • Reyn
      От Reyn
      Всем привет пользователи форума cr-mp.ru в данном уроке я напишу "Как подключить Handling Editor к чистому серверу CRMP 0.3.7"
      Примечание: Данная тема актуально только тем, кто создает сервер в CRMP 0.3.7 для 0.3e она не подходит.
      И так! Для начала нам нужно скачать чистый сервер 0.3.7 2.4 версии, скачать можно тут *тык*(Версия сервера для Windows) или *тык*(Версия сервера для Linux)
      Распаковываем сервер в любую вам удобную папку и скачиваем теперь сам Handling Editor 1.4 *тык*
      Открываем архив с Handling Editor`om у нас много папок, но нужны только 2 файла и 1 папка:

       
      mp_handling.inc кидаем по пути pawno>includes
      handling_editor.pwn кидаем в filterscripts
      Открываем папку bin в ней будут 3 файла

      Их нужно перенести в папку plugins, но в чистой версии сервера её нет и её нужно создать с названием "plugins" и все с папки bin перекинуть именно туда. Теперь открываем pawno.exe и нажимаем в меню File>Open заходим в папку filterscripts и открываем handling_editor.pwn и делаем компиляцию "F6"
      Теперь открываем server.cfg в нём прописываем строку plugins делаем отступ и пишем mp_handling(Для Windows) mp_handling.so(Для Linux) 
      Теперь ищем строку filterscripts в которой прописываем handling_editor
      Должно получиться так:
       
      Сохраняем и запускаем сервер, теперь после того как вы спавнитесь у вас выходит надпись с командой Usage: /heditor
      Это означает что Handling Edtor у вас полностью работает!
      Желаю удачи в дальнейшей доработке Handling`a
      Советую посмотреть документацию *тык*
       
      Автор создания данной статьи: Я(Reyn)
       
    • olegp
      От olegp
      Итак, всех посетителей темы приветствую.
      Я хорошенько прогуглил наличие подобной темы в интернете, и понял, что народ не понимает, а если и понимает, то не может самостоятельно продлить треки в нужную ему сторону.
      Единственное, что смог найти - платные предложения достроить/продать ПО.
       
      Предыстория, кто вообще ничего не понимает:
       
       
      [spoiler=Открыть]
      В игре присутсвуют файлы типа "tracks.dat".
      Что это такое ? Это явно описанная по координатам ломаная, по которой (и только по которой) может передвигаться поезд, и иной транспорт, имеющий на то такие флаги.
      Только назад и только вперед. Не более.
      Ок, разобрались.
      Что хотим далее ? 
      Предположим, мы хотим закончить ЖД, и сомкнуть их в полную кольцевую.
      Что для этого потребуется? 
      Первым делом, само собой, маппинг.
      Но даже после продолжения путей поезд по ним не поедет.
      Необходимо в файлы треков вставить те координаты, по которым поезд должен ехать. Одну за одной.
      Можно тупо делать /save каждые 10 шагов. Но зачем ? Я предлагаю решение проще.
       
       
       
       
       
      Решение проблемы по существу:
      Я не знаю, почему народ не допер до этого, но весь вопрос решается записью координат с определенным промежутком. Это буквально пара строчек кода.
      Вам потребуется пустой тестовый сервер, и включение моего скрипта либо в качестве ГМ, либо в качестве ФС.
      Все инструкции я приложил ниже.
      Скрипт использует стандартные библиотеки, и не требует дополнительного ПО.
       
      Инструкция:
      Для TrainsTracks скрипта и программы обработки:
      Скрипт Позволяет создавать ЖД-треки. Для старта введите /start и начинайте ехать по необходимым ЖД - путям. В конце путей введите /stop Данный скрипт не будет работать без специального конвертера Program2.exe Полученный после всех операций файлик tracks.txt переименовать в in.txt и поместить в папку с конвертером Program2.exe Запустить конвертер. Полученный файлик out.txt будет готовым к добавлению в tracks.dat  
      Открыть файлик, скопировать строки, добавить куда нужно.   Для программы просмотра путей:   Данная вещь позволяет исключительно просматривать пути и редактировать их. Не самая удобная хрень. Открыть программу, на вкладке edit -- select maps указать путь до файла карты игры. Он отобразится впоследствии в программе. Работать.  
       
      Итоги:
      В конце, естественно, ссылка на полный архив с софтом: https://yadi.sk/d/iczlDVQ2gpH1yw
      На разработку, тест, поиск проги для просмотров потрачено 2 часа.
      А сколько вопросов сразу отпадёт ))
      И сколько появится, как обычно )))
       
      Кстати, в данном скрипте координаты подобраны так, что ехать лучше всего на любом мото на средней скорости.
      Ехать ровно по центру ЖД.
    • MOP TTEX
      От MOP TTEX
      Всем привет, с Вами @MOP TTEX. Сегодня я начинаю писать мод с нуля для форума.
      Пожалуйста, не пишите Ваши "спасибо/уже было/ниче нового не придумал?" - я буду все обновления скидывать сюда. Спасибо)
       
      Для начала создадим базу данных "server". В ней сделаем таблицу user.
      Содержимое:
      ID INT AUTO INCREMENT,  Name VAR CHAR (24), Pass VAR CHAR (24), Skin INT, Sex INT.  Теперь перейдем к самому моду.
      Создаем новый файл (CTRL + N)
       
      Кидаем это в начало:
      #include a_mysql #define MPN MAX_PLAYER_NAME//шоб дофига букв не писать #define SQL_HOST "localhost"//хост для бд #define SQL_USER "root"//логин бд #define SQL_DB "server"//имя бд #define SQL_PASS ""//пароль #define SERVER_NAME "CR-MP.RU RolePlay | All So Cool"// - для удобства название сервера в hostname #define SERVER_VERSION "0.0.1"// - для удобства версия сервера #define SERVER_MAP "Где-то в России..." // - для удобства карта сервера #define MP MAX_PLAYERS//шоб дофига букв не писать forward FindPlayer(i); forward LoadRegister(i); forward LoadLogin(i); forward Login(playerid); enum PDATE { pPass[64],//пароль pName[MPN],//имя pSex,//пол игрока pSkin,//Скин игрока }; enum { REG, REG1, REG2, LOG } new pDate[MAX_PLAYERS][PDATE];//массив с нашими данными аккаунта new mysql_connect_id;// переменная подключения к БД new PlayerLogged[MP];//проверка залогинился игрок или нет В OnGameModeInit
      mysql_connect_id = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);//собственно подключение к бд SetGameModeText(SERVER_VERSION);//ставим версию в мультиплеере new string[8+2+20] = "hostname %s";//ставим название в мультиплеере format(string, 30, string, SERVER_NAME);//ставим версию в мультиплеере В OnGameModeExit
      mysql_close(mysql_connect_id); В OnPlayerRequestClass
       
      if(PlayerLogged[playerid]) return SpawnPlayer(playerid);//если нажал F4 - спавним В OnPlayerConnect
      GetPlayerName(playerid, pDate[playerid][pName], MPN);//узнаем имя сразу при подключении PlayerLogged[playerid] = 0;//ставим логин на 0, то есть он не залогинен new string[31+24+7+5] = "SELECT * FROM `user` WHERE `Name` = '%s'";//форматируем запрос << есть ли аккаунт с таким именем >> format(string, 68, string, pDate[playerid][pName]);//как и выше mysql_tquery(mysql_connect_id, string, "FindPlayer", "i", playerid);//собсна отправляем запросчег Создаем дополнительные паблики
      public Login(playerid) { new rows, fields; cache_get_data(rows, fields); if(!rows) { SendClientMessage(playerid, 0x33aa33aa, "Ошибка!"); Kick(playerid); return 1; } pDate[playerid][pSex] = cache_get_field_content_int(0, "Sex", mysql_connect_id); pDate[playerid][pSkin] = cache_get_field_content_int(0, "Skin", mysql_connect_id); PlayerLogged[playerid] = 1; SpawnPlayer(playerid); return 1; } stock SPS(playerid, man, woman) { switch(pDate[playerid][pSex]) { case 1: { pDate[playerid][pSkin] = man; SetPlayerSkin(playerid, man); } case 2: { pDate[playerid][pSkin] = woman; SetPlayerSkin(playerid, woman); } } return 1; } public FindPlayer(i) { new rows, fields; cache_get_data(rows, fields); if(!rows) { SetTimerEx("LoadRegister", 2500, false, "i", i);// если аккаунта нет - выводим регистрацию через 2.5 секунды (хз зачем :) ) return 1; } cache_get_field_content(0, "Pass", pDate[i][pPass], mysql_connect_id, 64);//унаем какой пароль SetTimerEx("LoadLogin", 2500, false, "i", i);//аккаунт есть - выводим логин return 1; } public LoadRegister(i) { ShowPlayerDialog(i, REG, DIALOG_STYLE_INPUT, "Регистрация", "\tДобро пожаловать на "SERVER_NAME"\n\n{33aa33}Ваш аккаунт не зарегистрирован...\nВведите свой пароль в окошко ниже:", ">>", ""); return 1; } public LoadLogin(i) { ShowPlayerDialog(i, LOG, DIALOG_STYLE_INPUT, "Авторизация", "\tДобро пожаловать на "SERVER_NAME"\n\n{33aa33}Ваш аккаунт зарегистрирован...\nВведите свой пароль в окошко ниже:", ">>", ""); return 1; } И наконец в OnDialogResponse
       
      new string[512];//по возможности можете увеличить switch(dialogid) { case REG: { if(!response) return Kick(playerid);//отказался? пшел вон! if(strlen(inputtext) < 6) return LoadRegister(playerid);//если меньше 6 символов format(pDate[playerid][pPass], (64), "%s", (inputtext)); ShowPlayerDialog(playerid, REG1, DIALOG_STYLE_LIST, "Выберите пол:", "- Мужской\n- Женский", ">>", ""); return 1; } case REG1: { if(!response) return Kick(playerid);//опять отказался? опять пшел вон :) ! pDate[playerid][pSex] = listitem+1;//устанавливаем пол SPS(playerid, 14, 13);//ставим скин PlayerLogged[playerid] = 1;//даем логин SpawnPlayer(playerid);//спавним format(string, 177, "INSERT INTO `user` (`Name`, `Pass`, `Sex`, `Skin`) VALUES ('%s', '%s', '%d', '%d')", pDate[playerid][pName], pDate[playerid][pPass], pDate[playerid][pSex], pDate[playerid][pSex]); mysql_tquery(mysql_connect_id, string);//добавляем аккаунт в БД return 1; } case LOG: { if(!response) return Kick(playerid);//отказался? пшел вон! if(strlen(inputtext) < 6) return LoadLogin(playerid);//если меньше 6 символов if(strcmp(pDate[playerid][pPass], (inputtext))) return LoadLogin(playerid);//если неверный format(string, 128, "SELECT * FROM `user` WHERE `Name` = '%s'", pDate[playerid][pName]); mysql_tquery(mysql_connect_id, string, "Login", "i", playerid); return 1; } } Все. К сожалению скриншотов нет - не у себя дома  -> нет криминалки. 
      Надеюсь, кому то пригодится)

      Автор: MOP TTEX
      Увидел, что в этом нуждается ChillyWilly, решил делать для всего форума)
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.