PDA

Просмотр полной версии : [Вопрос] OnPlayerSpawn (2 раза вызывается)



DmX
14.12.2016, 02:42
Прологировал collback OnPlayerSpawn, оказывается у меня он вызывается 2 раза. Как исправить? Идет SpawnPlayer(playerid); один раз всего и это после авторизации.

vovandolg
14.12.2016, 08:59
Видимо ты сделал так чтобы при авторизации не было видно кнопок << >> Spawn...

OnPlayerConnect => OnPlayerRequestClass => OnPlayerRequestSpawn => OnPlayerSpawn
Эта цепочка вызовется без всяких вспомогательных функций, то бишь ты ещё вызывал функцию и добавил ещё один вызов тем самым, чтобы не вызывался по 2 раза надо чекать проверку внутри OnPlayerSpawn на то что уже заспавнился недавно.
Я бы это так примерно сделал:


new OneSpawn[MAX_PLAYERS char];

public OnPlayerSpawn(playerid)
{
if(OneSpawn{playerid} == true) return 1;
OneSpawn{playerid} = true;
//весь код
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
OneSpawn{playerid} = false; // с помощью этой же переменной можно и флуд смертями присечь тут же =)
//весь код
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
OneSpawn{playerid} = false;
//весь код
return 1;
}


Но опять же возможно в игре сменить класс кто то задействует и будет такая чихарда(проверять нужно)

DeimoS
14.12.2016, 12:25
Вполне возможно, что TogglePlayerSpectating ещё имеется, который так же вызывает OnPlayerSpawn.

DmX
14.12.2016, 17:02
Имеется. Я скрыл << >>.

ziggi
14.12.2016, 23:17
Имеется. Я скрыл << >>.

Тогда не вызывай SpawnPlayer. Вызов TogglePlayerSpectating(playerid, false) тоже заспавнит.

vovandolg
16.12.2016, 22:44
Просто когда мы с DeimoS тестили код по скрытию этих кнопок там без двойного спавна не обойтись,
поэтому я выложил варик который подошёл бы лучше.

Tiago Santoro
17.12.2016, 13:50
Вполне возможно, что TogglePlayerSpectating ещё имеется, который так же вызывает OnPlayerSpawn.

А если сервер закрывает соединение ?

P.S Та же проблема