Доступ к готовым решениям

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

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

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

Мануал Система сохранения позиции при выходе с возможностью вкл/откл

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

Mr Green

Новичок
Здравствуйте пользователи Pawno-info.ru

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

Начнем:

К enum pInfo добавим:
PHP:
Float:pPosX,
Float:pPosY,
Float:pPosZ,
	pVirtWorld,
	pInterr
В public OnPlayerConnect
PHP:
PlayerInfo[playerid][pPosX] = 0;
	PlayerInfo[playerid][pPosY] = 0;
	PlayerInfo[playerid][pPosZ] = 0;
	PlayerInfo[playerid][pInterr] = 0;
	PlayerInfo[playerid][pVirtWorld] = 0;
Теперь добавим в /mm - > Настройки - > Отключить|Включить сохранение позиции при выходе
Или добавьте туда где Вы сами считаете нужным!
Вот пример из /mm:
PHP:
ShowPlayerDialog(playerid, DIALOGID, DIALOG_STYLE_LIST, "Настройки", "[0] Отключить чат семьи\n[1] Включить чат семьи\n[2] Сменить пол\n[3] Очистить чат\n[4] Подать заявку на смену ника\n[5] Отключить|Включить сохранение позиции при выходе", "Выбрать", "<< Назад");
DIALOGID - id Вашего диалога.

Теперь код диалога для включения/отключения сохранения позиции при выходе (public OnDialogResponse)
Этот код будет выполнятся когда игрок нажмет на пункт диалога [5] Отключить|Включить сохранение позиции при выходе
PHP:
if(PlayerInfo[playerid][pDonateRank] < 2) return SendClientMessage(playerid, COLOR_GREY, "Доступно только для VIP пользователей! (со 2-го уровня)");
						if(PlayerInfo[playerid][pPosX] != 0 && PlayerInfo[playerid][pPosY] != 0)
						{
							PlayerInfo[playerid][pPosX] = 0;
							PlayerInfo[playerid][pPosY] = 0;
							PlayerInfo[playerid][pPosZ] = 0;
							OnPlayerUpdateRL(playerid); // замените на вашу функцию сохранения аккаунта
							SendClientMessage(playerid, COLOR_WHITE, "Теперь ваша позиция после выхода из игры не будет сохранятся!");
							return 1;
						}
						else
						{
							PlayerPositionUpdate(playerid);
							SendClientMessage(playerid, COLOR_WHITE, "Теперь ваша позиция после выхода из игры будет сохранятся!");
							return 1;
						}
По желанию можно сделать только для VIP пользователей

Ко всем stock добавляем
PHP:
stock PlayerPositionUpdate(playerid)
{
	GetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
	PlayerInfo[playerid][pVirtWorld] = GetPlayerVirtualWorld(playerid);
	PlayerInfo[playerid][pInterr] = GetPlayerInterior(playerid);
	return 1;
}
В первую строку public OnPlayerDisconnect вставляем:
PHP:
if(PlayerInfo[playerid][pPosX] != 0 && PlayerInfo[playerid][pPosY] != 0) PlayerPositionUpdate(playerid);
В public OnPlayerDeath:
PHP:
PlayerInfo[playerid][pPosX] = 0;
PlayerInfo[playerid][pPosY] = 0;
В public OnPlayerSpawn
Между скобками ставите все те действия которые обычно происходят при спавне игрока:
PHP:
if(PlayerInfo[playerid][pPosX] != 0 && PlayerInfo[playerid][pPosY] != 0)
	{
		SetPlayerPos(playerid,PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
		SetPlayerVirtualWorld(playerid,PlayerInfo[playerid][pVirtWorld]);
		SetPlayerInterior(playerid,PlayerInfo[playerid][pInterr]);
		SetPlayerToTeamColor(playerid);
		SetPlayerHealthAC(playerid, PlayerInfo[playerid][pHP ]);
		return 1;
	}
Запись:
PHP:
                        ini_setFloat(File,"pPosX",PlayerInfo[playerid][pPosX]);
			ini_setFloat(File,"pPosY",PlayerInfo[playerid][pPosY]);
			ini_setFloat(File,"pPosZ",PlayerInfo[playerid][pPosZ]);
			ini_setInteger(File,"pInter",PlayerInfo[playerid][pInterr]);
			ini_setInteger(File,"pVirtWorld",PlayerInfo[playerid][pVirtWorld]);
Чтение:
PHP:
                ini_getFloat(File,"pPosX",PlayerInfo[playerid][pPosX]);
		ini_getFloat(File,"pPosY",PlayerInfo[playerid][pPosY]);
		ini_getFloat(File,"pPosZ",PlayerInfo[playerid][pPosZ]);
		ini_getInteger(File,"pInter",PlayerInfo[playerid][pInterr]);
		ini_getInteger(File,"pVirtWorld",PlayerInfo[playerid][pVirtWorld]);
Возможно данную систему придется подгонять конкретно под Ваш мод, т.к. возможно будут проблемы, игроки будут застревать на играх (Paintball и т.п.) поэтому данную систему нужно подогнать, но это уже сами :).

Я полноценно не тестировал систему т.к. не на чем (нет своего сервера).

Автор: Mr.Green
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу