Вопросы

Дюха
Освоившийся

Помогите пожалуйста,Я мучаюсь уже 2 дня,Не могу сделать,Можете объяснить как:Заранее спасибо)

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


Ссылка на сообщение

2 ответа на этот вопрос

  • 0
Cawfee
Великий Гуру

@Дюха, ну, например, как-то вот так:

public OnPlayerDeath(playerid, killerid, reason) {
	
	SetSpawnInfo(playerid, 0, 0, /* позиция спавна X */, /*позиция спавна Y*/, /*позиция спавна Z*/, /*позиция спавна A*/, 0, 0, 0, 0, 0, 0);
	return 1;
}

А по окончании лечения следует повторно изменить данные появления игрока через SetSpawnInfo и отправить его на респавн:

SetSpawnInfo(playerid, 0, 0, /* позиция спавна X */, /*позиция спавна Y*/, /*позиция спавна Z*/, /*позиция спавна A*/, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);

 

Однако учтите, что этот метод будет правильно работать только при условии, что в OnPlayerSpawn вы не производите изменение позиции игрока (SetPlayerPos). Если же вы производите, тогда применяйте следующий вариант:

public OnPlayerSpawn(playerid, killerid, reason) {
	SetPVarInt(playerid, "flag_hospital_spawn", 1);
	
	return 1;
}

public OnPlayerSpawn(playerid) {
	if(GetPVarInt(playerid, "flag_hospital_spawn") == 1) {
		SetPlayerPos(playerid, /*позиция спавна X*/, /*позиция спавна Y*/, /*позиция спавна Z*/);
		SetPVarInt(playerid, "flag_hospital_spawn", 0);
		return 1;
	}
	
	return 1;
}

 

Но вообще следует понимать, что логика во втором варианте неправильная. Да, этот метод будет работать, но не предполагалось использовать спавн игрока таким методом. 

 

Изначально считалось, что пользователи должны устанавливать, где игрок будет появляться через SetSpawnInfo. Там и задаются стандартные координаты появления. Однако, все стали использовать изменение позиции игрока через SetPlayerPos внутри OnPlayerSpawn. Из-за этого получается, что при смерти игрок появляется сначала на координатах, которые заданы через SetSpawnInfo (а, учитывая, что оно не используется, эти координаты равны нулю), то есть по сути на координатах 0.0, 0.0, 0.0. А затем уже через SetPlayerPos игрок отправляется на нужные координаты. И порой это время между первым и вторым появлением настолько велико, что игрок успевает заметить, как первый раз появился не там, где нужно. Менять логику на уже готовых модах слишком муторно. Поэтому, к сожалению, актуален второй метод разрешения вашего вопроса.

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


Ссылка на сообщение
  • 0
Дюха
Освоившийся
19 часов назад, odosenok сказал:

@Дюха, ну, например, как-то вот так:


public OnPlayerDeath(playerid, killerid, reason) {
	
	SetSpawnInfo(playerid, 0, 0, /* позиция спавна X */, /*позиция спавна Y*/, /*позиция спавна Z*/, /*позиция спавна A*/, 0, 0, 0, 0, 0, 0);
	return 1;
}

А по окончании лечения следует повторно изменить данные появления игрока через SetSpawnInfo и отправить его на респавн:


SetSpawnInfo(playerid, 0, 0, /* позиция спавна X */, /*позиция спавна Y*/, /*позиция спавна Z*/, /*позиция спавна A*/, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);

 

Однако учтите, что этот метод будет правильно работать только при условии, что в OnPlayerSpawn вы не производите изменение позиции игрока (SetPlayerPos). Если же вы производите, тогда применяйте следующий вариант:


public OnPlayerSpawn(playerid, killerid, reason) {
	SetPVarInt(playerid, "flag_hospital_spawn", 1);
	
	return 1;
}

public OnPlayerSpawn(playerid) {
	if(GetPVarInt(playerid, "flag_hospital_spawn") == 1) {
		SetPlayerPos(playerid, /*позиция спавна X*/, /*позиция спавна Y*/, /*позиция спавна Z*/);
		SetPVarInt(playerid, "flag_hospital_spawn", 0);
		return 1;
	}
	
	return 1;
}

 

Но вообще следует понимать, что логика во втором варианте неправильная. Да, этот метод будет работать, но не предполагалось использовать спавн игрока таким методом. 

 

Изначально считалось, что пользователи должны устанавливать, где игрок будет появляться через SetSpawnInfo. Там и задаются стандартные координаты появления. Однако, все стали использовать изменение позиции игрока через SetPlayerPos внутри OnPlayerSpawn. Из-за этого получается, что при смерти игрок появляется сначала на координатах, которые заданы через SetSpawnInfo (а, учитывая, что оно не используется, эти координаты равны нулю), то есть по сути на координатах 0.0, 0.0, 0.0. А затем уже через SetPlayerPos игрок отправляется на нужные координаты. И порой это время между первым и вторым появлением настолько велико, что игрок успевает заметить, как первый раз появился не там, где нужно. Менять логику на уже готовых модах слишком муторно. Поэтому, к сожалению, актуален второй метод разрешения вашего вопроса.

Спасибо + тебе

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

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

  • Похожий контент

    • grall758
      От grall758
      ищу добровольных ребят которые готовы принять свое участие в развитии масштабного крмп проекта, и заложить свою работу в наш проект. Обязательно предоставляется возможность карьерного роста и получения новых знаний. 
       
      ВСЕ КТО ЗА ИНТЕРЕСОВАН В РОСТЕ ПРОЕКТА ПИШИТЕ:
      телеграмм - @grall758
      дискорд - @grallchik758
       
      желательно когда пишите сразу уточняйте свою направленность.