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

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

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

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

new.pwn

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

Artyr_Shevchenko

Компетентный
Совсем недавно хотел взять за основу "New PWN".
Искал довольно не мало времени.
Поэтому делюсь с вами.

Полная сборка сервера.
Мод на MySQL ~R7~
Система регистрации
Команды ZCMD
Применен паблик "OnPlayerCommandPerformed" [Анти server unknown command :D]
Сделана тестовая команда "/cmd" и команда "gmx"
Сделан прозрачный цвет при спавне
В чате типерь пишет не разноцветным а серым
Чтобы сохранить данный мод на вечно сделаю в спойлеры коды мускул базы и пвн.
А так-же это облегчит просмотр кода.
PHP:
#include <a_samp>
main(){}
#include <a_mysql>
#include <regex>
#include <zcmd>
//-------------------------------- D E F I N E ---------------------------------
#define COLOR_WHITE					0xFFFFFFAA
//----------------------------- E N D   D E F I N E ----------------------------
#define mysql_host					"localhost"
#define mysql_db					"new"
#define mysql_user					"root"
#define mysql_pass					""

#define TABLE_ACCOUNTS "Accounts"

#define send(%0,%1) SendClientMessage(%0, -1, %1)
//------------------------------------------ N E W -----------------------------

//------------------------------------------------------------------------------
new connectionHandle, RegEx:checkPass;
new mysql_query[80], mysql_splayer[144], rows, fields;

public OnGameModeInit()
{
    connectionHandle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);
    if(mysql_ping() != 1) print("MySQL соединение, false.");

    checkPass = regex_build("[A-Za-z0-9А-Яа-я]{6,25}");
	SetGameModeText("Test | MySQL");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}

public OnGameModeExit()
{
    mysql_close(connectionHandle);
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    mysql_format(connectionHandle, mysql_query, "SELECT `Name` FROM `"TABLE_ACCOUNTS"` WHERE `Name` = '%e'", Name(playerid));
    mysql_function_query(connectionHandle, mysql_query, true, "OnPlayerRegCheck", "d", playerid);
	return 1;
}

public OnPlayerConnect(playerid)
{
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SavePlayer(playerid);
	return 1;
}

public OnPlayerSpawn(playerid)
{
    if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Прежде чем заспавниться, нужно быть авторизированым.");
    SetPlayerScore(playerid, GetPVarInt(playerid, "Pl_Level"));
    SetPlayerTeamColor(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[])
{
    if(!GetPVarInt(playerid, "Logged")) return send(playerid, "Что бы писать в чат, нужно быть авторизированым.");
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(!success) SendClientMessage(playerid, COLOR_WHITE, "Данной команды не существует на нашем сервере.");
    return 1;
}

CMD:cmd(playerid, params[])
{
	send(playerid, "{FF00FF}Командный процесс ZCMD");
	return 1;
}

CMD:gmx(playerid, params[])
{
	for(new i=0;i<MAX_PLAYERS;i++)
	{
	    if(IsPlayerConnected(i))
		{
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
			SendClientMessage(i, COLOR_WHITE, " ");
		}
		GameTextForAll("~r~SERVER RESTARTING", 5000, 5);
	}
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
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[])
{
    switch(dialogid)
    {
         case 1://Регистрация
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:", "Далее", "Отмена");
            if(!regex_match_exid(inputtext, checkPass)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:", "Далее", "Отмена");
            OnPlayerRegister(playerid, inputtext);
            return 1;
        }
        case 2://Авторизация
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация", "Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:", "Войти", "Отмена");
            OnPlayerLogin(playerid, inputtext);
            return 1;
        }
    }
	return 1;
}

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

stock Name(i) { new pl[24]; GetPlayerName(i, pl, 24); return pl; }

forward OnPlayerRegCheck(playerid);
public OnPlayerRegCheck(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        cache_get_data(rows, fields);
        if(rows) ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация", "Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:", "Войти", "Отмена");
        else ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Добро пожаловать на сервер!\nВаш аккаунт не зарегистрирован!\n\nВведите пароль:", "Далее", "Отмена");
    }
    return 1;
}

stock OnPlayerRegister(i, password[])
{
    mysql_format(connectionHandle, mysql_query, "INSERT INTO `"TABLE_ACCOUNTS"` (`Name`, `Key`) VALUES ('%e', '%e')", Name(i), password);
    mysql_function_query(connectionHandle, mysql_query, false, "RegisterCallback","d", i);
    return 1;
}

forward RegisterCallback(playerid);
public RegisterCallback(playerid)
{
    send(playerid,"Регистрация прошла успешно, теперь авторизуйтесь!");
    ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Авторизация", "Здравствуйте!\n\nВы зарегистрированы!\nВведите пароль:", "Войти", "Отмена");
    return 1;
}

stock SavePlayer(i)
{
    if(!GetPVarInt(i, "Logged")) return 1;
    mysql_format(connectionHandle, mysql_splayer, "UPDATE `"TABLE_ACCOUNTS"` SET `Level` = '%d'",
    GetPVarInt(i, "Pl_Level"));
    mysql_format(connectionHandle, mysql_splayer, "%s WHERE `Name` = '%e'", mysql_splayer, Name(i));
    mysql_function_query(connectionHandle, mysql_splayer, false, "","");
	return 1;
}

stock OnPlayerLogin(i, password[])
{
    mysql_format(connectionHandle, mysql_query, "SELECT * FROM `"TABLE_ACCOUNTS"` WHERE `Name` = '%e' AND `Key` = '%e'", Name(i), password);
    mysql_function_query(connectionHandle, mysql_query, true, "LoginCallback","ds", i, password);
    return 1;
}

stock SetPlayerTeamColor(playerid)
{
	SetPlayerColor(playerid, 0xFFFFFF11);
	return 1;
}

forward LoginCallback(i, password[]);
public LoginCallback(i, password[])
{
    new string[144], maximum[75];
    cache_get_data(rows, fields);
    if(!rows)
    {
		if(GetPVarInt(i, "wrongPass") == 2) return send(i, "Вы ввели 3 раза неверный пароль, поэтому были кикнуты сервером."), Kick(i);
		SetPVarInt(i, "wrongPass", GetPVarInt(i, "wrongPass") + 1);
		format(string, sizeof(string), "Здравствуйте!\n\nВы зарегистрированы!\n\n______________________________\n\nНеверный пароль(осталось %i/3)\nВведите пароль:", 3 - GetPVarInt(i, "wrongPass"));
		ShowPlayerDialog(i, 2, DIALOG_STYLE_PASSWORD, "Авторизация", string, "Войти", "Отмена");
		return 1;
    }
    cache_get_field_content(0, "Level", maximum), SetPVarInt(i, "Pl_Level", strval(maximum));

    send(i, "Вы успешно авторизовались!");
    SetPVarInt(i, "Logged", 1), SpawnPlayer(i);
    return 1;
}
PHP:
CREATE TABLE IF NOT EXISTS `Accounts` (
	`Name` varchar(24) COLLATE cp1251_bin NOT NULL,
	`Key` varchar(34) CHARACTER SET utf8 NOT NULL,
	`Level` int(3) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;



Пароль от скачки? "By_Artur"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу