Просмотр полной версии : [Вопрос] Death Bug
naxxyelite
04.01.2018, 19:23
Проконсультируюсь тут
И все же спустя несколько лет, до сих пор не нашел ответа на вопрос по поводу того, что при смерти, игрок не падает в анимации смерти с летящей камерой вверх, а просто продолжает бегать, причем остальные игроки видят педа в анимации смерти и АФК, все темы перешарил, везде одно и тоже: вызывать SpawnPlayer в ручную, подкидывать игрока вверх, и так далее, но это все не то, на проектах гигантах же все без проблем и анимация как положено и камера вверх, и спавн по расписанию, кто что по этому поводу думает?
К топику приложу видео, чтобы было конкретно понятно, о чем идет речь.
https://www.youtube.com/watch?v=DFKFhzsBS4g
Обычно подобные баги - результат обхода встроенных систем (выбора скина, например) или же неправильное использование функций.
Например, спавнить игрока, задавая координаты через SetPlayerPos в OnPlayerSpawn - неверный вариант. Правильнее задавать координаты спавна через SetSpawnInfo ещё до всяких смертей и вызова SpawnPlayer. А если этого не делать, сервер попросту не знает куда спавнить игрока, из-за чего и ломаются некоторые встроенные системы.
В общем,нужно код смотреть и пробовать его изменять, проверяя результат
Обычно подобные баги - результат обхода встроенных систем (выбора скина, например) или же неправильное использование функций.
Например, спавнить игрока, задавая координаты через 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, который может влиять на систему урона или смерти.
всё стало нормально после того, как поменял хостинг, что вообще удивительно. Хотя возможно заодно что-то и в моде изменил, да не заметил.
Это был я. На тот момент я уже не знал, что думать поэтому я загрузил на хостинг (myarena на тот момент) grand larceny - самый обычный скаченный с sa-mp.com. Заходил на сервер с собейтом и без = баг этот был из-за чего я погрешил на хостинг, но проблема то есть, то нет, так до сих пор и не понял в чем прикол.
Знать бы когда этот баг впервые начал появляться (в какой версии SA-MP). Так бы можно было попытаться что-то в исходниках нарыть, касаемо того, при каких условиях сервер регистрирует смерть и вызывает OnPlayerDeath.
Так же можно посмотреть, какие именно пакеты отправляет сервер во время бага (ну в том плане, что, может, сервер сам устанавливает здоровье обратно)
Никогда не использовал 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 (рестарт) сервера произойдет, в общем если заход на сервер осуществился не выходя при этом из клиента
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
А неет, баг остался (
Античитов на здоровье нет?
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
не сказал бы так, сколько я рестартов делал, было все нормально, а подобное видел из за дополнительной анимации при смерти игрока.
P.S но если это так, выход я так понимаю кикать игроков при рестарте?
Тоже не замечал никаких проблем с релогом без выхода из игры. И собейтом часто релогаюсь во время тестов, и рестарты часто переживаю без выхода из игры (даже на серверах, которые курирую в качестве скриптера, рестарты реализованы без кика и всё норм).
Хотя с одним соглашусь - проблема, в первую очередь, на стороне клиента происходит, так как именно игрок не отсылает данные о том, что он умер. Но что-то подсказывает, что этот баг является лишь следствием каких-то проблем на стороне сервера. И проблем, как минимум, несколько. Как уже выше заметили, при анимации такая проблема имеет место быть. Так же, как выше писал, обход выбора скина такой эффект иногда даёт (cуть в том, что иногда при обходе выбора скина исчезает раскачивание камеры после смерти. Исчезает она потому что клиент пытается перейти к выбору скина, вызывая OnPlayerRequestClass, который, в свою очередь, вызывает SpawnPlayer. И то ли из-за отсутствия инфы о спавне в SetSpawnInfo, то ли из-за отсутствия AddPlayerClass, то ли из-за чего-то ещё в некоторых случаях так же не спавнит). В общем, как мне кажется, причин может быть множество.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot