Вопросы

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

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


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

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

  • 0

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

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 пользователей онлайн

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };