Перейти к содержанию
Авторизация  
MOP TTEX

Мод с нуля

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

noname_idk

 

 


//шоб дофига букв не писать

Пройдет время (не месяц, не два, но хотя бы полгода), надумаешь этот мод доработать и напрочь забудешь свои сокращения вида MPN, MP, PSW, PSN и так далее.

 

 

 


pDate

Наверное, здесь должно было быть pData (данные), а не дата.

 

 

 


в OnDialogResponse   new string[512];//по возможности можете увеличить

В таком случае ее лучше вынести на глобальный уровень (за пределы этой функции), либо сделать статической: static string[512].

  • Like 1

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


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

@MOP TTEX,собсна мускул какой версии? 

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


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

@Vegas, R39. 

  • Like 1

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


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

Не проверял на работу способность, но должно работать верно:

 

[spoiler=Код]

#include <a_mysql>

new connects; // Переменная отвечающая за подключение к базе данных

const server_name[] = "Criminal Russia MultiPlayer R{ (CR-MP.RU)";

enum pInfo
{
	pID,
	pNames[MAX_PLAYER_NAME],
	pPassword[26],
	pSex,
	pChar
}
static PlayerInfo[MAX_PLAYERS][pInfo];

const
	DIALOG_REG = 1, // к DIALOG_REG будет прибавлять +1, то есть 1+1 = 2 и т.д..
	DIALOG_LOGIN = 3; // Так же как и DIALOG_REG
	
new 
	PlayerLoginCheck[MAX_PLAYERS char],		// Переменная отвечающая за авторизацию игрока
	PlayerRequestCheck[MAX_PLAYERS char]; 	// Переменная отвечающая за запрос(OnPlayerRequest)
	
static const CharMan[] = {230, 154, 239}; // Мужские скины
static const CharWoman[] = {3, 12, 11}; // Женские скины
	
В паблик OnGameModeInit:
connects = mysql_connect("Хостинг", "Пользователь", "База данных", "Пароль");
SetGameModeText("CR-MP.RU | Version 0.0.1"); // Данная функция будет уже прописана с названием мода Simple


В паблик OnGameModeExit:
mysql_close(connects); // Отключение с базы данных при отключение мода.

В паблик OnPlayerRequestClass:
if(!PlayerLoginCheck{playerid})
{
	PlayerRequestCheck{playerid} = 1;
}
SetSpawnInfo(playerid, 0, 3, 0.0, 0.0, 3.0, 0.0, -1, -1, -1, -1, -1, -1);
SpawnPlayer(playerid);

В паблик OnPlayerConnect:

PlayerLoginCheck{playerid} = 0; // Обнуляем при подключение
PlayerRequestCheck{playerid} = 0; // Обнуляем при подключение

GetPlayerName(playerid, PlayerInfo[playerid][pNames], MAX_PLAYER_NAME); // Получаем игровой ник

В паблик OnPlayerSpawn:

if(PlayerRequestCheck{playerid})
{
	static const
		select_accounts[] = "SELECT * FROM `accounts` WHERE `pNames` = '%s'";
	new
		string[sizeof(select_accounts)+(-2+MAX_PLAYER_NAME)]; // Подсчитываем количество ячеек (-2 берется под параметр(%s), + MAX_PLAYER_NAME (прибавляем 24 ячееки для ника)
	format(string, sizeof(string), select_accounts, PlayerInfo[playerid][pNames]);
	mysql_tquery(connects, string, "OnPlayerFindAccounts","i", playerid); // Проверяем зарегистрирован аккаунт или нет	
	return 1;
}

if(!PlayerLoginCheck{playerid} || !IsPlayerConnected(playerid)) return SendClientMessage(playerid, -1, "Необходимо авторизоваться!"); Если, игрок нажал кнопку spawn, то его не респавним, а выдаем сообщение

Создаем паблик с проверкой на аккаунт:

forward OnPlayerFindAccounts(playerid);
public OnPlayerFindAccounts(playerid)
{
	if(cache_get_row_count())
	{ // Авторизация
		ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт зарегистрирован", "Далее", "Отмена");
	}
	else
	{ // Регистрация
		ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт не зарегистрирован", "Далее", "Отмена");
	}
	return 1;
}

В паблик OnDialogResponse:

switch(dialogid)
{
	case DIALOG_REG:
	{
		if(!response) return Kick(playerid); // Если нажал кнопку 'Отмена', то кикаем
		if(!strlen(inputtext) || strlen(inputtext) < 6 || strlen(inputtext) > 26) return ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт не зарегистрирован", "Далее", "Отмена");
		
		for(new i = strlen(inputtext); i != 0; --i)
		switch(inputtext[i]) // Проверяем на русские символы
		{
			case 'А'..'Я','а'..'я': return ShowPlayerDialog(playerid, DIALOG_REG, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт не зарегистрирован", "Далее", "Отмена");
		}
		
		strmid(PlayerInfo[playerid][pPassword], inputtext, 0, strlen(inputtext), 26); // Записываем пароль
		ShowPlayerDialog(playerid, DIALOG_REG+1, DIALOG_STYLE_MSGBOX, "Регистрация", "Выберите пол персонажа", "Мужской", "Женский"); // Показываем следующий диалог
	}
	case DIALOG_REG+1:
	{
		new rand = Random(3);
		if(!response) // Женский
		{
			CharMan[rand] = PlayerInfo[playerid][pChar];
		}
		else // Мужской
		{
			CharWoman[rand] = PlayerInfo[playerid][pChar];
		}
		SetPlayerSkin(playerid, PlayerInfo[playerid][pChar]); // Выдаем скин
		PlayerLoginCheck{playerid} = 1; // Ставим значение 1 то, что подключились к серверу
		PlayerRequestCheck{playerid} = 0; // Обнуляем то, что прошел запрос успешно
		
		static const mysql_create_accounts[] =
			"INSERT INTO `accounts` (`pNames`, `pPassword`, `pSex`, `pChar`) VALUES ('%s', '%s', '%d', '%d')";
		new string[sizeof(mysql_create_accounts)+(-2+MAX_PLAYER_NAME)+(-2+26)+(-2+3)+(-2+5)];
		format(string, sizeof(string), mysql_create_accounts,  PlayerInfo[playerid][pNames], PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pChar]);
		mysql_tquery(connects, string);
		
		SpawnPlayer(playerid);
	}
	case DIALOG_LOGIN:
	{
		if(!response) return Kick(playerid);
		if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт зарегистрирован", "Далее", "Отмена");
		OnPlayerLoadingAccounts(playerid, inputtext); // Делаем запрос на верность пароля
	}
}

Создаем сток на запрос верности пароля:

stock OnPlayerLoadingAccounts(playerid)
{
	mysql_format(connects, string, sizeof(string),"SELECT * FROM `accounts` WHERE `pNames` = '%s' AND `pKey` = '%s'", PlayerInfo[playerid][pNames], password);
	mysql_function_query(connects, string, true, "OnPlayerCheckLogin","ds", playerid, password);
	return 1;
}

Создаем паблик с загрузкой аккаунта:

forward OnPlayerCheckLogin(playerid);
public OnPlayerLoadingAccounts(playerid)
{
	new rows[2];
	cache_get_data(rows[0], rows[1]);
	if(!rows[0]) return  ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Добро пожаловать на Criminal Russia Role Play\n\nВаш аккаунт зарегистрирован", "Далее", "Отмена");
	
	PlayerInfo[playerid][pID] = cache_get_field_content_int(0, "pID");
 	cache_get_field_content(0, "pPassword", PlayerInfo[playerid][pPassword], connects, 26);
 	PlayerInfo[playerid][pChar] = cache_get_field_content_int(0, "pChar");
 	PlayerInfo[playerid][pSex] = cache_get_field_content_int(0, "pSex");
	return 1;
} 

 

 

  • Like 2

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


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

 

 


const server_name[] = "Criminal Russia MultiPlayer R{ (CR-MP.RU)";

 

Так только с числами будет работать. Не хватает оператора new или static (лучше static).

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


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

, писал на быструю руку, и не заметил ошибки  

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


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

Стоит ли делать продолжение?

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


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

@MOP TTEX, Да, почему нет? 

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


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

Никакого "урока" здесь нет.

Набор кода не первого сорта.

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


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

А где брать начало мода? папку и плагинны

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


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

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


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

Делай продолжение

 
failed.gif
Изменено пользователем Nikiyp
  • Like 1

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


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

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

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

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

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

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

Войти

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

Войти
Авторизация  

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

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

×

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

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