HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > [халва] Детектирование прекращения игры на клиенте
надёжное, железобетонное
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

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

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

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

Сообщить модератору | | IP: Записан
Сообщение: 158022

Старое сообщение 13-08-2016 14:27
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34524
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

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

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

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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 158023

Старое сообщение 13-08-2016 14:29
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32210
Нанёс повреждений: 392 ед.

Рейтинг



- Загрузку карты можно отловить через 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'

Сообщить модератору | | IP: Записан
Сообщение: 158026

Старое сообщение 13-08-2016 14:47
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34524
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 158027

Старое сообщение 13-08-2016 14:58
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32210
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 158029

Старое сообщение 13-08-2016 15:07
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


Цитата:
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]

Сообщить модератору | | IP: Записан
Сообщение: 158034

Старое сообщение 13-08-2016 15:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32210
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
~ 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'

Сообщить модератору | | IP: Записан
Сообщение: 158040

Старое сообщение 13-08-2016 16:07
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

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

Сообщить модератору | | IP: Записан
Сообщение: 158041

Старое сообщение 13-08-2016 16:13
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34524
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 158043

Старое сообщение 13-08-2016 16:25
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32210
Нанёс повреждений: 392 ед.

Рейтинг



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

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

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 158044

Старое сообщение 13-08-2016 16:50
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

Сообщить модератору | | IP: Записан
Сообщение: 158048

Старое сообщение 13-08-2016 17:29
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32210
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 158050

Старое сообщение 13-08-2016 18:24
-
marikcool
Житель форума

Дата регистрации: Jul 2011
Проживает: kz
Сообщений: 1522
Возраст: 37

Рейтинг



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

__________________
vk.com/skullcapstudios

Сообщить модератору | | IP: Записан
Сообщение: 158109

Старое сообщение 15-08-2016 09:16
- За что?
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

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

Сообщить модератору | | IP: Записан
Сообщение: 158605

Старое сообщение 02-09-2016 08:51
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 01:46. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > [халва] Детектирование прекращения игры на клиенте
надёжное, железобетонное
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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