HLFX.Ru Forum
Показать все 14 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- [халва] Детектирование прекращения игры на клиенте (https://hlfx.ru/forum/showthread.php?threadid=4837)


Отправлено ~ X ~ 13-08-2016 в 14:27:

Question [халва] Детектирование прекращения игры на клиенте

Всем доброго утра.

Подскажите, кто хорошо знает Золотой Источник (тм): как на клиенте детектировать:
- загрузку карты
- дисконнект
- выдернутый сетевой кабель (т.е. таймаут и вылет в меню)
- любое другое прерывание игры

Для чего: нужно в срочном порядке отключать все эффекты в т.ч. системы частиц чтобы ни в коем члучае не вызвались движковые трейсы, пойнтконтенты, энтити и прочие крошилки.
Трай-кэч работает плохо и хак, так что, не предлагайте.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 13-08-2016 в 14:29:

Цитата:
~ X ~ писал:
загрузку карты

В gamestate-сообщении изменился номер сервера (server id).
Цитата:
~ X ~ писал:
дисконнект

От сервера приходит мессага. Но может и не прийти, если сервер рухнул с каким-нибудь success violation. Надёжного способа нет, увы.
Цитата:
~ X ~ писал:
выдернутый сетевой кабель

Никак. С точки зрения клиента это обычный лаг. Только по таймауту.
Цитата:
~ X ~ писал:
Трай-кэч работает плохо и хак, так что, не предлагайте.

Какой ещё трай-кэч, причём он тут?

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-08-2016 в 14:47:

- Загрузку карты можно отловить через VidInit. Каллбэк этот многоцелевой и вызывается по куче поводов, но другого способа попросту нет. Ну есть еще HUD_Init и HUD_Reset, если это как-нибудь поможет. Оно слоупочное, но более информативное. Я лично в ксаше выводил новые каллбэки, потому что в голдсорсе нет явных таких вызовов.

- дисконнект ловится... Да никак он не ловится. Это чисто для движка инфа.
В ксаше я опять-таки вывел калбэк R_ProcessEntData на высвобождение энтить.

- выдернутый сетевой кабель (т.е. таймаут и вылет в меню)
это даже движок расчухать не в состоянии. Ну то есть он ждёт какое-то время, в надежде что соединение восстановится.

Цитата:
~ X ~ писал:
Трай-кэч работает плохо и хак, так что, не предлагайте.

Ловить дисконнект трей-катчем? С таким же успехом можно сортировать строчки в дельта.лст

Добавлено 13-08-2016 в 17:47:

Я вот думаю, может поэкспериментировать с messagenum у игрока. Он может по идее зависнуть, если игрок перестанет получать обновления.
Ну там надо хранить преведущее значение и каждые полсекунды проверять. Если осталось старым, значит клиент перестал принимать пакеты.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 13-08-2016 в 14:58:

Цитата:
Дядя Миша писал:
Если осталось старым, значит клиент перестал принимать пакеты.

Это может быть просто длинный лаг.

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-08-2016 в 15:07:

Я думаю надо зайти с другой стороны. К примеру движок живёт в обстановке тотальной неизвестности, придет что-то с сервера или же нет.
Но это не мешает ему корректно всё обрабатывать. А нашему другу вдруг надо, кровь из носа. Я думаю там сама рендер-система имеет неправильную архитектуру, поэтому такое и происходит.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 13-08-2016 в 15:55:

Цитата:
XaeroX писал:
Какой ещё трай-кэч, причём он тут?

Цитата:
Дядя Миша писал:
Ловить дисконнект трей-катчем?

раз вы даже оба не поняли, объясню
try
{
gEnguneFFFUnctions->pAnusAPI->TraceLine(wtf, wtf2, etc, etc..);
}
catch (...)
{
conprintf(1, "Dam, the engine crushed again! Bawww\n");
delete pCurrentParticleSystemAndEverythingElse;
}

Т.е. прекращение рендеринга мира и вывал в меню (а главное - инвалидацию всех энтитей) отследить не получится?

МБ вообще какой ках прикрутить - например, мониторить отсутствие тэмпэнтить - их же движок перестаёт апдейтить.
Или вызывать RenderManager->UpdateSystems() не из HUD_Frame(), а откуда-то ещё.
Потому что, например, при дисконнекте, снег продолжает пытаться трейсить, а трейсить нечего. И всякие GetGabeNByIndex() тоже крошатся.

Цитата:
Дядя Миша писал:
Я вот думаю, может поэкспериментировать с messagenum у игрока. Он может по идее зависнуть, если игрок перестанет получать обновления.
Ну там надо хранить преведущее значение и каждые полсекунды проверять. Если осталось старым, значит клиент перестал принимать пакеты.

Думал над этим. У меня дял всех энтить это проверяется, но может случиться так, что это поздно - хоть на кадр.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 13-08-2016 в 16:07:

Цитата:
~ X ~ писал:
Dam, the engine crushed again!

А какая тебе разница что произойдет с XDM, если движок крашнулся?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 13-08-2016 в 16:13:

Надо чтобы он НЕ крэшанулся.
Оборачивая трейсы в траи мне удавалось кое-как избегать вылетов во время дисконнектов. Т.е. юзер мог играть дальше. Но это плохо.

Надо знать, КОГДА ПЕРЕСТАТЬ ОБНОВЛЯТЬ эффекты. Точнее - удалить их.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 13-08-2016 в 16:25:

~ X ~
Если у тебя вылеты во время дисконнектов - ты вызываешь функции из неправильных мест. Ищи ошибку в логике.

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-08-2016 в 16:50:

Цитата:
~ X ~ писал:
Оборачивая трейсы в траи мне удавалось кое-как избегать вылетов во время дисконнектов.

помоему у тебя серъезная логическая ошибка в рендер системе, если дисконнект приводит к вылету в движке. А ты теперь пытаешься каким-то хаком это исправить. Возьми и всё по быстрому переделай.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 13-08-2016 в 17:29:

блин, ну вы что - на другом языке говорите?
Я же сказал ПЕРЕПИСЫВАЮ К ЖИГУЛЯМ ЭТОТ КОД, вместо ответа, куда шатдаун пилить, получаю "переписывай".

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 13-08-2016 в 18:24:

Вот и перепиши так, чтобы шотдавн был ненужен

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено marikcool 15-08-2016 в 09:16:

если узел доступен но порт закрыт то получим 10054 ошибку на сокете при отправке, если же лаг/вылетел кабель то ошибок небудет.

__________________
vk.com/skullcapstudios


Отправлено ~ X ~ 02-09-2016 в 08:51:

marikcool не в этом суть. Суть в том, чтобы отследить момент, когда игра вылетает в главное меню или режим "лоадинг".

В общем, проблему я обошёл и даже не хачно. Но она не единственная. Так что, вопрос остаётся открытым.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Временная зона GMT. Текущее время 18:24.
Показать все 14 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024