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

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

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

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

Регистрация с нуля

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

Vlad7060908

Умник
Итак, представляю свой урок. Когда я только начинал учить мускул, я начал писать с нуля мод на мускуле, заодно и обучаясь. Так вот сделал регистрацию, потом забросил, так как не было времени, а сейчас вот уже другой мод пишу. И вот вчера нашел этот pwn файл, где и есть эта самая регистрация. Вот решил выложить, а то ну просто очень многим новичкам хочется с нуля напистаь мод - ну чтож, руки в ноги и вперед, толчок я вам дам.
Итак, приступим.

Откпываем new.pwn и пишем:
PHP:
#include <a_samp>
#include <C-MySQL>
#include <md5>
это мы сделали инклуды, теперь создадим enum

После инклудов пишем:

PHP:
enum pInfo
{
	pPassword[256],
	pAdmin,
	pLevel,
	pMoney,
	pBank,
	pSkin,
	pLeader,
	pMember,
	pHouse
};
Те кто разбирается хоть немного в павно - поняли, для чего это.

Далее создадим переменные, которые используются в регистрации:
Для этого после enum пишем:

PHP:
new PlayerInfo[MAX_PLAYERS][pInfo];
new pLogedIn[MAX_PLAYERS];
Далее небольшая информация о моде(можете не писать))))

PHP:
main()
{
	print("\n----------------------------------");
	print(" New Mysql Roleplay Mode by Vlad7060908");
	print("----------------------------------\n");
}
Ну а далее уже пойдут паблики и стокк.
Создаем новый паблик:

PHP:
public OnGameModeInit()
{
	mysql_init();
	if(mysql_connect("localhost", "root", "vertrigo", "samp"))
	{
		print("Connection established");
  	}
	else
	{
        print("Connection not established");
	}
	SetGameModeText("New Mysql Roleplay");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}
Далее еще несколько пабликов:

PHP:
public OnGameModeExit()
{
    mysql_close();
	return 1;
}

public OnPlayerConnect(playerid)
{
	new pname[256];
	GetPlayerName(playerid, pname, sizeof(pname));
	PlayerInfo[playerid][pAdmin] = 0;
	PlayerInfo[playerid][pMoney] = 0;
	PlayerInfo[playerid][pBank] = 0;
	PlayerInfo[playerid][pLevel] = 0;
	PlayerInfo[playerid][pSkin] = 0;
	PlayerInfo[playerid][pLeader] = 0;
	PlayerInfo[playerid][pMember] = 0;
	PlayerInfo[playerid][pHouse] = 0;
	if(CMySQL_Exists(pname))
	{
		ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT,
		"Вход на сервер",
		"Здравствуйте, пожалуйста ведите ваш пароль",
		"Войти", "Отмена");
	}
	else
	{
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT,
		"Регистрация на сервере",
		"Здравствуйте, пожалуйста ведите ваш пароль для регистрации",
		"Далее", "Отмена");
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	OnPlayerSave(playerid);
	return 1;
}
Мы создали паблики, которые отвечают за зашход и выход игрока на сервер и с сервера.
Далее снова паблики:

PHP:
public OnPlayerSpawn(playerid)
{
	if(PlayerInfo[playerid][pLeader] == 0 && PlayerInfo[playerid][pMember] == 0)
	{
		if(PlayerInfo[playerid][pHouse] != 9999)
		{

		}
		else
		{
		    SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], 1154.3356,-1767.8496,16.5938, 0.0,0,0,0,0,0,0);
			SpawnPlayer(playerid);
		}
	}
	SetCameraBehindPlayer(playerid);
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    OnPlayerSave(playerid);
	return 1;
}

public OnPlayerText(playerid, text[])
{
	return 1;
}
Теперь сделаем несколько команд, правда я хз зачем я их сразу делал:

PHP:
public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/givememoney", cmdtext, true, 10) == 0)
	{
		GivePlayerMoney(playerid, 1000);
		return 1;
	}
	if (strcmp("/kill", cmdtext, true, 5) == 0)
	{
		SetPlayerHealth(playerid, 0);
		return 1;
	}
	return 0;
}
Снова паблики:

PHP:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    if(pLogedIn[playerid] == 0) return 0;
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}
А теперь создадим сами диалоги:

PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == 0)
	{
		if(response)
		{
		    if(strlen(inputtext) != 0)
		    {
			    new pname[256];
				GetPlayerName(playerid, pname, sizeof(pname));
				CMySQL_Get(pname, "pass", PlayerInfo[playerid][pPassword]);
				if(!strcmp(MD5_Hash(inputtext),PlayerInfo[playerid][pPassword],true))
	            {
	                OnPlayerLogin(playerid);
	            }
	            else
	            {
                    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT,
					"Вход на сервер",
					"Здравствуйте, пожалуйста ведите ваш пароль",
					"Войти", "Отмена");
				}
            }
            else
            {
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT,
				"Вход на сервер",
				"Здравствуйте, пожалуйста ведите ваш пароль",
				"Войти", "Отмена");
			}
		}
		else
		{
			Kick(playerid);
		}
	}
	if(dialogid == 1)
	{
		if(response)
		{
		    if(strlen(inputtext) != 0)
		    {
  				OnPlayerRegister(playerid,inputtext);
     		}
     		else
     		{
                ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT,
				"Регистрация на сервере",
				"Здравствуйте, пожалуйста ведите ваш пароль для регистрации",
				"Далее", "Отмена");
			}
		}
		else
		{
			Kick(playerid);
		}
	}
	return 1;
}
Теперь несколько стокк:

PHP:
stock OnPlayerLogin(playerid)
{
	new pname[256];
	GetPlayerName(playerid, pname, sizeof(pname));
	PlayerInfo[playerid][pLevel] = CMySQL_Int(pname, "level");
	PlayerInfo[playerid][pMoney] = CMySQL_Int(pname, "money");
	PlayerInfo[playerid][pAdmin] = CMySQL_Int(pname, "admin");
	PlayerInfo[playerid][pBank] = CMySQL_Int(pname, "bank");
	PlayerInfo[playerid][pSkin] = CMySQL_Int(pname, "skin");
	PlayerInfo[playerid][pLeader] = CMySQL_Int(pname, "leader");
	PlayerInfo[playerid][pMember] = CMySQL_Int(pname, "member");
	PlayerInfo[playerid][pHouse] = CMySQL_Int(pname, "house");
	SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
	GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
	pLogedIn[playerid] = 1;
	SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], 1154.3356,-1767.8496,16.5938, 0.0,0,0,0,0,0,0);
	SpawnPlayer(playerid);
}

stock OnPlayerRegister(playerid, pass[])
{
    new pname[256];
	GetPlayerName(playerid, pname, sizeof(pname));
	CMySQL_Create(pname, pass);
	CMySQL_SetInt(pname, "bank", 1000);
	CMySQL_SetInt(pname, "money", 5000);
	CMySQL_SetInt(pname, "level", 1);
	CMySQL_SetInt(pname, "admin", 0);
	CMySQL_SetInt(pname, "skin", 137);
	CMySQL_SetInt(pname, "leader", 0);
	CMySQL_SetInt(pname, "member", 0);
	CMySQL_SetInt(pname, "house", 9999);
 	ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT,
	"Вход на сервер",
	"Вы успешно зарегистрировались\nПожалуйста ведите ваш пароль",
	"Войти", "Отмена");
}

stock OnPlayerSave(playerid)
{
    new pname[256];
	GetPlayerName(playerid, pname, sizeof(pname));
	PlayerInfo[playerid][pMoney] = GetPlayerMoney(playerid);
	PlayerInfo[playerid][pLevel] = GetPlayerScore(playerid);
	CMySQL_SetInt(pname, "bank", PlayerInfo[playerid][pBank]);
	CMySQL_SetInt(pname, "money", PlayerInfo[playerid][pMoney]);
	CMySQL_SetInt(pname, "level", PlayerInfo[playerid][pLevel]);
	CMySQL_SetInt(pname, "admin", PlayerInfo[playerid][pAdmin]);
	CMySQL_SetInt(pname, "skin", PlayerInfo[playerid][pSkin]);
	CMySQL_SetInt(pname, "leader", PlayerInfo[playerid][pLeader]);
	CMySQL_SetInt(pname, "member", PlayerInfo[playerid][pMember]);
	CMySQL_SetInt(pname, "house", PlayerInfo[playerid][pHouse]);
	
}
И снова паблик:

PHP:
public OnPlayerRequestClass(playerid, classid)
{
	OnPlayerSpawn(playerid);
	return 1;
}
Вот и все.
На этом я в прошлый раз закончил свйо мод. Сейчас конечно продвинулся гораздо дальше)). Ставим плюсики и оставляем комментарии.

Если есть варнинги или ошибки, то конечноже пишем сюда. Постараюсь помочь.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу