PDA

Просмотр полной версии : [Вопрос] Death Bug



naxxyelite
04.01.2018, 19:23
Проконсультируюсь тут

И все же спустя несколько лет, до сих пор не нашел ответа на вопрос по поводу того, что при смерти, игрок не падает в анимации смерти с летящей камерой вверх, а просто продолжает бегать, причем остальные игроки видят педа в анимации смерти и АФК, все темы перешарил, везде одно и тоже: вызывать SpawnPlayer в ручную, подкидывать игрока вверх, и так далее, но это все не то, на проектах гигантах же все без проблем и анимация как положено и камера вверх, и спавн по расписанию, кто что по этому поводу думает?

К топику приложу видео, чтобы было конкретно понятно, о чем идет речь.


https://www.youtube.com/watch?v=DFKFhzsBS4g

DeimoS
05.01.2018, 09:42
Обычно подобные баги - результат обхода встроенных систем (выбора скина, например) или же неправильное использование функций.
Например, спавнить игрока, задавая координаты через SetPlayerPos в OnPlayerSpawn - неверный вариант. Правильнее задавать координаты спавна через SetSpawnInfo ещё до всяких смертей и вызова SpawnPlayer. А если этого не делать, сервер попросту не знает куда спавнить игрока, из-за чего и ломаются некоторые встроенные системы.
В общем,нужно код смотреть и пробовать его изменять, проверяя результат

ziggi
05.01.2018, 10:15
Обычно подобные баги - результат обхода встроенных систем (выбора скина, например) или же неправильное использование функций.
Например, спавнить игрока, задавая координаты через SetPlayerPos в OnPlayerSpawn - неверный вариант. Правильнее задавать координаты спавна через SetSpawnInfo ещё до всяких смертей и вызова SpawnPlayer. А если этого не делать, сервер попросту не знает куда спавнить игрока, из-за чего и ломаются некоторые встроенные системы.
В общем,нужно код смотреть и пробовать его изменять, проверяя результат

Ещё, возможно, нет ни одного вызова AddPlayerClass.

KrutoyKrosch
05.01.2018, 14:51
Никогда не использовал AddPlayerClass и SetSpawnInfo и такого не было. Просто гта чистые ставить нужно и все. Тут проблема на стороне клиента.

Nexius_Tailer
05.01.2018, 15:33
Никогда не использовал AddPlayerClass и SetSpawnInfo и такого не было. Просто гта чистые ставить нужно и все. Тут проблема на стороне клиента.
Нет, это скорее всего серверная проблема.

У самого тоже бывало иногда на тестах, но никаких закономерностей проявления этой проблемы так сам и не смог уловить (но скорее всего из-за своего кода). Также видел что кто-то жаловался на эту проблему, но потом отписал, что всё стало нормально после того, как поменял хостинг, что вообще удивительно. Хотя возможно заодно что-то и в моде изменил, да не заметил.

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

Ради интереса скинь код из OnPlayerDeath, OnPlayerStateChange и OnPlayerSpawn, который может влиять на систему урона или смерти.

seriu
05.01.2018, 15:57
всё стало нормально после того, как поменял хостинг, что вообще удивительно. Хотя возможно заодно что-то и в моде изменил, да не заметил.


Это был я. На тот момент я уже не знал, что думать поэтому я загрузил на хостинг (myarena на тот момент) grand larceny - самый обычный скаченный с sa-mp.com. Заходил на сервер с собейтом и без = баг этот был из-за чего я погрешил на хостинг, но проблема то есть, то нет, так до сих пор и не понял в чем прикол.

DeimoS
05.01.2018, 16:38
Знать бы когда этот баг впервые начал появляться (в какой версии SA-MP). Так бы можно было попытаться что-то в исходниках нарыть, касаемо того, при каких условиях сервер регистрирует смерть и вызывает OnPlayerDeath.
Так же можно посмотреть, какие именно пакеты отправляет сервер во время бага (ну в том плане, что, может, сервер сам устанавливает здоровье обратно)

StevenH
05.01.2018, 16:52
Никогда не использовал AddPlayerClass и SetSpawnInfo и такого не было. Просто гта чистые ставить нужно и все. Тут проблема на стороне клиента.

Не в GTA дело, это явно серверная проблема, а не клиента

naxxyelite
05.01.2018, 21:38
Ради интереса скинь код из OnPlayerDeath, OnPlayerStateChange и OnPlayerSpawn, который может влиять на систему урона или смерти.


OnPlayerDeath при этом баге вызывается нормально, только вот спавна не происходит, анимации смерти нет, и что самое противное, у других ты просто лежишь в АФК на месте смерти, т.е OnPlayerUpdate не вызывается.


public OnPlayerDeath(playerid, killerid, reason)
{
return true;
}

в OnPlayerStateChange ничего такого нет касательно PLAYER_STATE_WASTED


public OnPlayerSpawn(playerid)
{
// Выбор скина при регистрации //
if(pRegister{playerid} == true) return ChosePlayerSkin(playerid);
SetPlayerSpawn(playerid);
SetPlayerColorToTeam(playerid);
SetPlayerTeam(playerid, 1);
return true;
SetPlayerSpawn(playerid); телепортирует игрока на определенные координаты.

Еще не знаю, ошибаюсь или нет, но заметил закономерность, что такой баг происходит, если перезайти на сервер или же спомощью собейта Shift + 0, или если gmx (рестарт) сервера произойдет, в общем если заход на сервер осуществился не выходя при этом из клиента

StevenH
05.01.2018, 22:14
OnPlayerDeath при этом баге вызывается нормально, только вот спавна не происходит, анимации смерти нет, и что самое противное, у других ты просто лежишь в АФК на месте смерти, т.е OnPlayerUpdate не вызывается.


public OnPlayerDeath(playerid, killerid, reason)
{
return true;
}

в OnPlayerStateChange ничего такого нет касательно PLAYER_STATE_WASTED


public OnPlayerSpawn(playerid)
{
// Выбор скина при регистрации //
if(pRegister{playerid} == true) return ChosePlayerSkin(playerid);
SetPlayerSpawn(playerid);
SetPlayerColorToTeam(playerid);
SetPlayerTeam(playerid, 1);
return true;
SetPlayerSpawn(playerid); телепортирует игрока на определенные координаты.

Еще не знаю, ошибаюсь или нет, но заметил закономерность, что такой баг происходит, если перезайти на сервер или же спомощью собейта Shift + 0, или если gmx (рестарт) сервера произойдет, в общем если заход на сервер осуществился не выходя при этом из клиента

SetSpawnInfo есть? AddPlayerClass?

naxxyelite
05.01.2018, 23:05
Не могу точно утверждать, но почти уверен что баг исправлен, после того, как последовал совету DeimoS'a,
при авторизации беру координаты спавна и делаю не SetPlayerPos, а SetSpawnInfo, два раза откатывал до SetPlayerPos и результат таков:

SetPlayerPos - 10 смертей, 9 реконнектов при помощи SF плагина, 9 раз появился баг
SetSpawnInfo - 10 смертей, 9 реконнектов, 0 раз появился баг

Не знаю, может я и ошибаюсь, но результат такой.

naxxyelite
06.01.2018, 02:24
А неет, баг остался (

ziggi
06.01.2018, 09:26
Античитов на здоровье нет?

DeimoS
06.01.2018, 09:32
AddPlayerClass имеется в OnGameModeInit?
Залогировать бы пакеты, которые сервер отправляет/получает при баге

naxxyelite
06.01.2018, 18:35
AddPlayerClass имеется в OnGameModeInit?
Залогировать бы пакеты, которые сервер отправляет/получает при баге

AddPlayerClass имеется в OnGameModeInit? - Имеется
Насчет пакетов, если залогирую, сообщу.

vovandolg
11.01.2018, 17:22
У меня на сервере 03е была подобная проблема когда с огнемёта жаришь или коктейля кинешь кому нибудь он у всех клиентов лежит мёртвый не убирается с земли а сам багнутый бегает типо и хп нету, вот именно с флудом огня в дамажке такая дичь творилась, бывало частенько даже кикало багнутого, наверное пакетов много посылал и кривая защита срабатывала, попробуй рили проверь SetPlayerHealth или перехвати его и добавь проверку чтобы при смерти не выдавалось, может где накосяпорил с выдачей, а так хз

p.s. а версия сампца то какая?

DmitriyVasilev
18.04.2019, 12:06
Актуальная версия - SAMP 0.3.7-R2:thank_you:

Batya_Montes
19.04.2019, 08:03
Это баг клиента, вызывающийся после нескольких реконнектов. Клиент не подготовлен к рестартам не выходя из игры, а потому там не все обнуляется. Это так же можно добиться имея чистую игру и рестартя тупо сервер через gmx - через несколько рестартов игрок опять не будет умирать нормально. Так же в этом состоянии на сервер не отправляются 2 последних RPC - GiveTakeDamage, хотя при нормальной смерти после они всегда доходят на сервер. Хотя, игра и так ломается при каждом спавне, но это уже другая история и другой баг :D

Paradox
19.04.2019, 17:55
не сказал бы так, сколько я рестартов делал, было все нормально, а подобное видел из за дополнительной анимации при смерти игрока.
P.S но если это так, выход я так понимаю кикать игроков при рестарте?

DeimoS
19.04.2019, 19:15
Тоже не замечал никаких проблем с релогом без выхода из игры. И собейтом часто релогаюсь во время тестов, и рестарты часто переживаю без выхода из игры (даже на серверах, которые курирую в качестве скриптера, рестарты реализованы без кика и всё норм).

Хотя с одним соглашусь - проблема, в первую очередь, на стороне клиента происходит, так как именно игрок не отсылает данные о том, что он умер. Но что-то подсказывает, что этот баг является лишь следствием каких-то проблем на стороне сервера. И проблем, как минимум, несколько. Как уже выше заметили, при анимации такая проблема имеет место быть. Так же, как выше писал, обход выбора скина такой эффект иногда даёт (cуть в том, что иногда при обходе выбора скина исчезает раскачивание камеры после смерти. Исчезает она потому что клиент пытается перейти к выбору скина, вызывая OnPlayerRequestClass, который, в свою очередь, вызывает SpawnPlayer. И то ли из-за отсутствия инфы о спавне в SetSpawnInfo, то ли из-за отсутствия AddPlayerClass, то ли из-за чего-то ещё в некоторых случаях так же не спавнит). В общем, как мне кажется, причин может быть множество.