HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 30.01.2026, 05:33
Tema05
Познавший АНТИЧАТ
Регистрация: 05.10.2019
Сообщений: 1,649
С нами: 3477805

Репутация: 168


По умолчанию

На Аризоне есть система скейта и спрыгнув с него есть вероятность зацепить его персонажам до того как сервер удалит транспорт. Из-за этого будут бесконечно лететь варнинги и все процессы в игре заморозятся. Проблуждав много часов с дебаггером и смотря файл сампа в иде я выяснил, что проблема в том, что коллизия скейта не загружена из-за чего её обработка приводит к невозможности игрой продолжить обработку фрейма.

Я решил просто вызывать опкод
Код:
0247: load_model
для загрузки модели, связи с чем погрузится и её коллизия, благодаря чему меня отпускает и игра продолжает работать.

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

Пока я это всё чинил скачал ultimate model viewer. И заметил, что если я через него открою скейт, то после этого коллизия никогда не выгружается. Я пока так и не понял почему.

Кто знает по каким принципам модели загружаются, выгружаются и как можно намертво оставить загруженной коллизию определённой модели?
 
Ответить с цитированием

  #2  
Старый 01.02.2026, 23:16
Tectrex
Участник форума
Регистрация: 01.02.2023
Сообщений: 162
С нами: 1728028

Репутация: 48
По умолчанию

опкод 0247 помечает модель в состояние "нужно загрузить", движок начинает подгружать DFF/текстуры и связанные ресурсы, следом как не удивительно идет опкод 0248 который проверяет, завершилась ли загрузка. Дальше ебать 0249 идет, классно да? Опкод 0249 снимает пометку "нужно", после этого движок может выгрузить модель по своему усмотрению. Внутренне движок стриминга держит счётчики ссылок для каждого ресурса, collision может подгружаться вместе с DFF или запрашиваться отдельно. Движок выгружает модели когда: пометка снята и ресурс не используется/не виден и/или при очистке стрима (освобождение памяти, удаление неактивных лодов). Программа Model Viewer, держит ссылку ну или создает экземпляр хз не шарю.

собственно ты вызываешь опкод 0247, коллизия загружается, но вскоре движок уменьшает счётчик и выгружает ресурс. Поэтому приходится дергать 0247 каждый раз. Тебе лучше хукать или пропатчить сам стриминг и найти функцию выгрузки модели в памяти клиента, и перехватывать вызов, блокируя выгрузку нужного model id.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.