PDA

Просмотр полной версии : [Вопрос] Спавн после смерти [проблема] / Spawn after death [problem] / 2007



naxxyelite
31.05.2018, 05:02
Без надежды обращусь еще раз сюда. Прошу отписывать в теме тех, кто действительно шарит в данной теме. На протяжении вот уже более 5 лет меня терзает все та же проблема с проблемным спавном после смерти. (P.S) Не давайте советов по типу "Кинь OnPlayerDeath"; "Кинь OnPlayerSpawn". Все это бессмысленные занятия, не имеющие к этому вопросу никакого отношения, копать нужно гораздо глубже. Все бы ничего, я смирился бы с данной проблемой еще тогда, когда только узнал о ней. Также совет по типу "впишы SpawnPlayer(playerid); в OnPlayerDeath)0". Да, это от части является решением проблемы, но все это для меня некрасиво и терзает мою душу перфекциониста. Наверняка многие из Вас видели уже где нибудь темы с такой же проблемой, о которой говорится в этой теме. Все бы ничего, если бы на том же SRP уже из года в год все работает как часы и не подает никаких причин хвататься за сердце и гуглить в поисках решения этой проблемы. Скажу сразу: Мод чистый, а значит что ни RLS, ни резнов и прочий ккал) А это значит что OnPlayerSpawn; OnPlayerDeath не несут в себе никаких других функций и ничего другого. (return true;). SetSpawnInfo, AddPlayerClass - все это также улетает, потому что ну никаким образом не относится к данной проблеме. Советы по типу "переустанови GTA"; "удали собейт"; "перезагрузи роутер" и прочее прочее наподобие такого тоже отлетают. Если кто до сих пор не вдуплил о какой проблеме идет речь, то суть такова: Рандомно(ибо я не нашел никаких закономерностей и зацепок в этой проблеме) умерев, от падения, от дамага, не важно - сбивается анимация и персонаж способен дальше рассекать по дорогам штата, как ни в чем не бывало, только уже без синхронизации, а значит что у других игроков мы валяемся котлетой в АФК на месте смерти, одна все это ложь и обман. Скажу сразу: никаких ClearAnimations и прочего дерьма нигде не присутствует. OnPlayerDeath вызывается нормально, а вот что насчет спавна после смерти, то все странно. При нормальной смерти, все как полагается: смерть, анимация, камера вверх, спавн по КД через 2 секунды - все хорошо. При таком же дерьме: смерть, эффект как при ClearAnimations, дальнейший рассинхрон между игроками, способность к перемещению и никакого спавна через 2 секунды. Спавн при такой проблеме произойдет тогда, когда ныне "мёртвый" игрок получит дамаг после такой вот смерти еще раз: т.е упадет с какой нибудь крыши, либо же так получится, что другой игрок стрельнет в воздух (как покажется ему), но пока вы бегали - он попал в Вас, то после повторного дамага произойдет анимация смерти, и спавн через 2 секунды как полагается. Кароче спавну очень очень плохо, но есть жеее какое то решение проблемы.. Все форумы и темы с такой проблемой перешарил аж с 2011-х годов, но толкового решения так мною и не найдено.

Может тут хоть бог спустится с небес и поможет

Спасибо

https://i.imgur.com/TKIr0Ic.jpg

Batya_Montes
31.05.2018, 07:56
Да никак ты это не исправишь. Все дело в реконнекте не выходя из игры. Если тебя каким-то образом реконнектит к серверу без перезахода в игру (потеря соединения, собейтом или еще как-то), то в 99% у тебя будет этот баг. С чем связано - да фиг знает, скорее всего калкор не предусмотрел обнуление чего-то при реконнекте.

Так же еще одним моментом является вызов OnPlayerTakeDamage. После нормальный смерти обычно приходит данный РПЦ с дамагом как будто от падения, если же срабатывает данный баг - этот РПЦ не вызывается.

VVWVV
31.05.2018, 08:03
Попробуйте прологировать пакеты данных через pawn.raknet.

naxxyelite
31.05.2018, 14:33
Попробуйте прологировать пакеты данных через pawn.raknet.

Логировать там нечего. Логировал) Одно и тоже) Смерть вызывается. RPC спавна нет

- - - Добавлено - - -


Да никак ты это не исправишь. Все дело в реконнекте не выходя из игры. Если тебя каким-то образом реконнектит к серверу без перезахода в игру (потеря соединения, собейтом или еще как-то), то в 99% у тебя будет этот баг. С чем связано - да фиг знает, скорее всего калкор не предусмотрел обнуление чего-то при реконнекте.

Так же еще одним моментом является вызов OnPlayerTakeDamage. После нормальный смерти обычно приходит данный РПЦ с дамагом как будто от падения, если же срабатывает данный баг - этот РПЦ не вызывается.

Рандомно. Иногда хоть 10 раз реконнект сделаешь - нормально будет умирать, иногда 1 раз реконнект сделаешь - баг появится. Что насчет OnPlayerTakeDamage - то на скрине показано, у меня детект смерти не по OnPlayerDeath, а по OnPlayerTakeDamage - pHP <= 0.0. OnPlayerDeath ничего вообще в себе не несет. Поэтому при баге OnPlayerTakeDamage вызывается нормально.

+ на SRP сколько раз собейтом не реконнектись - все в порядке будет

pawnoholic
31.05.2018, 14:59
Попробуй библиотеку weapon config (https://github.com/oscar-broman/samp-weapon-config)
Если я не ошибаюсь, у самого еще руки не дошли ее использовать, но вроде как там вообще система смерти кастомная.

Batya_Montes
31.05.2018, 15:41
Логировать там нечего. Логировал) Одно и тоже) Смерть вызывается. RPC спавна нет

- - - Добавлено - - -



Рандомно. Иногда хоть 10 раз реконнект сделаешь - нормально будет умирать, иногда 1 раз реконнект сделаешь - баг появится. Что насчет OnPlayerTakeDamage - то на скрине показано, у меня детект смерти не по OnPlayerDeath, а по OnPlayerTakeDamage - pHP <= 0.0. OnPlayerDeath ничего вообще в себе не несет. Поэтому при баге OnPlayerTakeDamage вызывается нормально.

+ на SRP сколько раз собейтом не реконнектись - все в порядке будет

ты вызываешь при 0 хп setplayerhealth с 0 ?

naxxyelite
31.05.2018, 17:14
ты вызываешь при 0 хп setplayerhealth с 0 ?

Нет, PSpawn(playerid) - PlayerKilled[playerid] = true; , PlayerSpawned[playerid] = false; , GameText + SetSpawnInfo, и если не удастся решить этот трабл придется юзать еще мгновенный спавн (SpawnPlayer)

- - - Добавлено - - -


Попробуй библиотеку weapon config (https://github.com/oscar-broman/samp-weapon-config)
Если я не ошибаюсь, у самого еще руки не дошли ее использовать, но вроде как там вообще система смерти кастомная.

Ставил.. выглядит это тоже так себе) Без камеры вверх и анимация такая себе.. Если дефолтную смерть никак не пофиксить буду юзать мгновенный спавн

=GoD=
28.01.2020, 18:48
Почитал ваш ответ и думаю поставлю я себе проверку. В OnPlayerDeath в конец паблика подкину переменную типа Pvar со значением и в OnPlayerSpawn буду удалять ее. Ну и буду проверять этот Pvar на наличие сек. через 3- 5 после OnPlayerDeath. Если получил значение от Pvar попросить игрока переподключиться в связи, к примеру, рассинхронизации с сервером (они все ровно не поймет о чем речь и просто перезайдет) или самостоятельно его переподключить или как выше упомянуто вызвать спавн. Но это скорее крайность. По мне так лучше самостоятельно отключить игрока и оповестить о причинах требуемого перезахода, чем оставить его на серваке лагать.

vasyok28
28.01.2020, 21:02
Я в OPD сделал таймер на 5 сек, в самом таймере делаю проверку
if(GetPlayerState(playerid) == PLAYER_STATE_WASTED) SetPlayerHealth(playerid, 1.0);
И все нормально работает)

geneff
29.01.2020, 22:58
Избавился от этого бага при помощи использования SetSpawnInfo, так как это правильный медот задавания координат спавна игрока, а не OnPlayerSpawn + SetPlayerPos.

DeimoS
30.01.2020, 19:50
Собственно, как geneff выше уже писал, большинство проблем со спавном случаются сугубо из-за того, что не задаётся информация о следующем спавне. Задаваться она должна не один раз при входе, а при каждом спавне (заспавнили игрока и задали информацию на новый спавн).

seriu
18.02.2021, 20:32
переделал все на SetSpawnInfo
но проблема не пропала.
Заметил то, что когда игрок не умер > нажимаю F4 и тогда он спавнится...

DeimoS
19.02.2021, 11:22
переделал все на SetSpawnInfo
но проблема не пропала.
Заметил то, что когда игрок не умер > нажимаю F4 и тогда он спавнится...

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