Форум Pawn.Wiki - Воплоти мечту в реальность!: Проверка на свой тс - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Проверка на свой тс

#1
Пользователь офлайн   Savvka 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Здравствуйте, подскажите пожалуйста, как проверять садится игрок в свой байк или нет.

Есть функция вызова байка:

if(player_info[playerid][BAIK] == 1)
{
	if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
	{
		new Float:pos[4];
		DestroyVehicle(GetPVarInt(playerid, "baik"));//Удаляем старое авто если оно есть
		DeletePVar(playerid,"baik");//Удаляем PVar
		GetPlayerPos(playerid, pos[0], pos[1], pos[2]);//Узнаем координаты игрока
		GetPlayerFacingAngle(playerid, pos[3]);//Узнаем угол поворота игрока
		new baik = CreateVehicle(463, pos[0], pos[1] + 1, pos[2], pos[3], 0, 0, -1);
		SetVehicleVirtualWorld(baik, GetPlayerVirtualWorld(playerid));//Ставим авто в виртуальный мир
		SetPVarInt(playerid,"baik", baik);//Создаем PVar что бы потом удалить
		new string[54];
		format(string, sizeof(string), "%s вызывает клубный байк!", player_info[playerid][NAME]);
		ProxDetector(20.0, playerid, string, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN);
		PlayerPlaySound(playerid, 19402, 0, 0, 0);
	}
	else
	{
		SCM(playerid, COLOR_WHITE, "Покиньте транспорт!");
	}
}
else
{
	SCM(playerid, COLOR_RED, "У вас нет клубного байка!");
}


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

Сообщение отредактировал Savvka: 11 февраля 2024 - 14:36

0

#2
Пользователь офлайн   neonpro5 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Самый надёжный способ - проверять в паблике OnPlayerStateChange. Когда игрок меняет состояние на DRIVER, нужно получать id машины в которую он сел с помощью функции GetPlayerVehicleId, и сравнивать с его ид байка. Если ид не совпадают, то выбрасывать игрока из транспорта с помощью RemovePlayerFromVehicle или setplayerpos
0

#3
Пользователь офлайн   Savvka 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Я тоже об этом думал, сохранять ид вызванного байка в переменную игрока.

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

Сообщение отредактировал Savvka: 11 февраля 2024 - 17:32

0

#4
Пользователь офлайн   neonpro5 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Когда другой игрок выходит из игры, нужно проверять, создавал ли он байк. Если да, то удалять его с помощью функции DestroyVehicle.
Паблик OnPlayerDisconnect вызывается при выходе игрока.
0

#5
Пользователь офлайн   Savvka 

  • Местный
  • Вставить ник
  • Раскрыть информацию
У меня удаляется байк при выходе из игры, если он вызван

public OnPlayerDisconnect(playerid, reason)
{
    DestroyVehicle(GetPVarInt(playerid, "baik"));
    DeletePVar(playerid,"baik");
}

Сообщение отредактировал Savvka: 11 февраля 2024 - 17:59

0

#6
Пользователь офлайн   neonpro5 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
public OnPlayerDisconnect(playerid, reason)
{
    if(GetPVarInt(playerid, "baik") != 0)
    {
        if(IsValidVehicle(GetPVarInt(playerid, "baik")))
             DestroyVehicle(GetPVarInt(playerid, "baik"));
        DeletePVar(playerid,"baik");
    }
}

1

#7
Пользователь офлайн   Savvka 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Вышел из положения, записал ид транспорта при его вызове.

 
new Float:pos[4];
DestroyVehicle(GetPVarInt(playerid, "baik"));//Удаляем старое авто если оно есть
DeletePVar(playerid,"baik");//Удаляем PVar
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);//Узнаем координаты игрока
GetPlayerFacingAngle(playerid, pos[3]);//Узнаем угол поворота игрока
new baik = CreateVehicle(463, pos[0], pos[1] + 1, pos[2], pos[3], 0, 0, -1);
SetVehicleVirtualWorld(baik, GetPlayerVirtualWorld(playerid));//Ставим авто в виртуальный мир
SetPVarInt(playerid,"baik", baik);//Создаем PVar что бы потом удалить
new string[54];
format(string, sizeof(string), "%s вызывает клубный байк!", player_info[playerid][NAME]);
ProxDetector(20.0, playerid, string, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN, COLOR_DGREEN);
PlayerPlaySound(playerid, 19402, 0, 0, 0);
baik_id[playerid] = GetPVarInt(playerid, "baik"); //Запись ид байка в переменную


А далее, просто сделал проверку на ид когда игрок садится на байк.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика