Question

Вопрос таков: После смерти перед спавном, да и вообще при любом спавне, игрок на пол секунды где то спавнится в 0, 0,0 координатах, а потом уже появляется в том месте, которое указано в моде.

Так вот, можно ли как то это исправить? т. е чтоб он даже на мили секунду не появлялся в нулевых координатах.

Share this post


Link to post

6 answers to this question

  • 0

@Clinton Lee, потому что неправильно реализована логика появления игрока. Нужно не в OnPlayerSpawn телепортировать игрока с помощью SetPlayerPos на координаты, а следует заранее устанавливать координаты появления в SetSpawnInfo.

Можете создать что-то вроде такого:

Спойлер

 


enum e_spawn_types
{
	SPAWN_TYPE_REGISTER, // место, где у игрока будет осуществляться, например, выбор скина при регистрации
	SPAWN_TYPE_HOUSE, // появление в доме
	SPAWN_TYPE_STANDART, // если негде появляться
	SPAWN_TYPE_JAIL, // появление в тюрьме
};

stock SetSpawnInfoEx(playerid, e_spawn_types:spawntype, team = 0, skin = -1, weapon1 = -1, ammo1 = -1, weapon2 = -1, ammo2 = -1, weapon3 = -1, ammo3 = -1)
{
	if(skin == -1) {
		skin = g_player[playerid][pSkin];
	}
	
	if(weapon1 == -1 && ammo1 == -1) {
		weapon1 = g_player[playerid][pWeapon][0];
		ammo1 = g_player[playerid][pAmmo][0];
	}
	
	if(weapon2 == -1 && ammo2 == -1) {
		weapon2 = g_player[playerid][pWeapon][1];
		ammo2 = g_player[playerid][pAmmo][1];
	}
	
	if(weapon3 == -1 && ammo3 == -1) {
		weapon3 = g_player[playerid][pWeapon][2];
		ammo3 = g_player[playerid][pAmmo][2];
	}
	
	new Float:x, Float:y, Float:z, Float:a;
	switch(spawntype)
	{
		case SPAWN_TYPE_REGISTER: {
			x = 0.0; // координата X места выбора скина
			y = 0.0; // координата Y места выбора скина
			z = 0.0; // координата Z места выбора скина
			a = 0.0; // угол поворота
		}
		
		case SPAWN_TYPE_HOUSE: {
			new houseid = g_player[playerid][pHouse];
			x = g_house[houseid][hX]; // координата X появления в доме
			y = g_house[houseid][hY]; // координата Y появления в доме
			z = g_house[houseid][hZ]; // координата Z появления в доме
			a = 0.0; // угол поворота
		}
	}
	
	SetSpawnInfo(playerid, team, skin, x, y, z, a, weapon1, ammo1, weapon2, ammo2, weapon3, ammo3);
	SpawnPlayer(playerid);
	return 1;
}

 

 

Таким образом вы и будете управлять координатами, где следует спавнить игрока. А все телепортации из OnPlayerSpawn следует уничтожить.

Share this post


Link to post
  • 0
3 часа назад, odosenok сказал:

@Clinton Lee, потому что неправильно реализована логика появления игрока. Нужно не в OnPlayerSpawn телепортировать игрока с помощью SetPlayerPos на координаты, а следует заранее устанавливать координаты появления в SetSpawnInfo.

Можете создать что-то вроде такого:

  Пример функции (закрыть спойлер)

 



enum e_spawn_types
{
	SPAWN_TYPE_REGISTER, // место, где у игрока будет осуществляться, например, выбор скина при регистрации
	SPAWN_TYPE_HOUSE, // появление в доме
	SPAWN_TYPE_STANDART, // если негде появляться
	SPAWN_TYPE_JAIL, // появление в тюрьме
};

stock SetSpawnInfoEx(playerid, e_spawn_types:spawntype, team = 0, skin = -1, weapon1 = -1, ammo1 = -1, weapon2 = -1, ammo2 = -1, weapon3 = -1, ammo3 = -1)
{
	if(skin == -1) {
		skin = g_player[playerid][pSkin];
	}
	
	if(weapon1 == -1 && ammo1 == -1) {
		weapon1 = g_player[playerid][pWeapon][0];
		ammo1 = g_player[playerid][pAmmo][0];
	}
	
	if(weapon2 == -1 && ammo2 == -1) {
		weapon2 = g_player[playerid][pWeapon][1];
		ammo2 = g_player[playerid][pAmmo][1];
	}
	
	if(weapon3 == -1 && ammo3 == -1) {
		weapon3 = g_player[playerid][pWeapon][2];
		ammo3 = g_player[playerid][pAmmo][2];
	}
	
	new Float:x, Float:y, Float:z, Float:a;
	switch(spawntype)
	{
		case SPAWN_TYPE_REGISTER: {
			x = 0.0; // координата X места выбора скина
			y = 0.0; // координата Y места выбора скина
			z = 0.0; // координата Z места выбора скина
			a = 0.0; // угол поворота
		}
		
		case SPAWN_TYPE_HOUSE: {
			new houseid = g_player[playerid][pHouse];
			x = g_house[houseid][hX]; // координата X появления в доме
			y = g_house[houseid][hY]; // координата Y появления в доме
			z = g_house[houseid][hZ]; // координата Z появления в доме
			a = 0.0; // угол поворота
		}
	}
	
	SetSpawnInfo(playerid, team, skin, x, y, z, a, weapon1, ammo1, weapon2, ammo2, weapon3, ammo3);
	SpawnPlayer(playerid);
	return 1;
}

 

 

Таким образом вы и будете управлять координатами, где следует спавнить игрока. А все телепортации из OnPlayerSpawn следует уничтожить.

Не много сложно для меня :) 
Попробую, отпишу что получиться, спасибо.
Кстати, что нужно сделать, что бы мои сообщения сразу отправлялись, а не ждать одобрение модерации?

Edited by Clinton Lee

Заметка от DEST , создано

Набрать 5 одобренных сообщений.

Share this post


Link to post
  • 0

SpawnPlayer сначала, а потом нужную позицию задаёшь и скин.

Share this post


Link to post
  • 0
Спойлер

stock SetSpawnInfoEx(playerid, e_spawn_types:spawntype, team = 0, skin = -1, weapon1 = -1, ammo1 = -1, weapon2 = -1, ammo2 = -1, weapon3 = -1, ammo3 = -1)
{
	new Float:x, Float:y, Float:z, Float:a;
	switch(spawntype)
	{
		case SPAWN_TYPE_AUTHORIZATION:
		{
		    SetCameraBehindPlayer(playerid);
			x = 240.8770;
			y = 1725.3722;
			z = 12.1484;
			a = 265.2861;
		}
	}
	SetSpawnInfo(playerid, team, skin, x, y, z, a, weapon1, ammo1, weapon2, ammo2, weapon3, ammo3);
	SpawnPlayer(playerid);
	return 1;
}

 

Вот и как мне сделать, что бы игрок появлялся при авторизации, по этому кейсу??

Я первый раз с таким работаю, можно по подробнее описать, плиз)@odosenok 

Share this post


Link to post
  • 0

@Clinton Lee в авторизации приравниваешь "spawntype" к нужному значению.

По коду, тебя сначала спавнит куда-то, а потом уже выполняется OnPlayerSpawn. У меня в таком паблике идёт перенаправление в нужный сток, возможно у тебя тоже.

Share this post


Link to post
  • 0

Разобрался, можно закрывать, спасибо.

Заметка от Shakoladka , создано

Если проблема успешно решина, то опишите в чем дело было, вдруг другим людям будет тоже такая же проблема, они вам будут благодарны

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • JAFAR
      By JAFAR
      Удалил полностью все объекты с города Батырево
      вы спросите зачем я это сделал?
      Я вам отвечу я хотел удалить все города с карты CRMP но затея не оправдала себя
      так как я хотел сделать единый город с 0 на crmp 0.3e ну потом я подумал и решил бросить затею
      так как это долго и нудно и смысл не вижу дальше продолжать!
       
      Если хотите что бы я продолжил делать дело с вас Like.
      Скриншоты проделанной работы:
       
      Желаю вам удачи!
      Удалённый батырево.txt
    • Jadyn Allen
      By Jadyn Allen
      Всем привет! Купил Мод Moscow RolePlay, поставил на хост, захожу и тут бац! Пишет что подключился и сразу выкидывает с сервера с переподключением с ошибкой LШ connection to the server. Reconnecting crmp. Кто сможет помочь буду благодарен