Перейти к контенту
Malandrinus

X-Ray extensions

Рекомендуемые сообщения


а оно может измениться и после открытия

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

 

На счет правки солнца - понятно. Значит придумать, как исправить баг, а эту правку в топку.

 

З.Ы. посмотрел в исходниках репозитория xp-dev и что-то не нашел упоминания о правке. Получается её до сих пор не сделали? :o Всегда думал, что солнце уже исправлено и даже не обращал внимание на его отсутствие.

 

Здесь ситуация такая, что я сам понятия не имею, что реально делает эта правка.

Провел анализ кода - в этой правке (не считая проверки флага g_ignore_game_state_update, который в оригинале не влияет) ты просто убрал вызов GamePersistent().Environment().Invalidate() (call ds:CEnvironment__Invalidate). Собственно, солнце у меня восстановилось и в исходниках, после того как я закомментировал вызов. Но вместе с солнцем "восстановились" и баги)) Будем думать дальше. Изменено пользователем Murarius
Ссылка на комментарий

Такс...А можно поподробней узнать, что там вообще с солнцем?

Я сейчас юзаю последнюю ревизию и сборку на которой погода вроде как АМК, но положение солнца поправлено. Ну и луны само собой. Багов вроде не наблюдал, хотя подолгу и не бегал.

Ссылка на комментарий

Багов вроде не наблюдал, хотя подолгу и не бегал.

Включи игру, загрузи сейв, например с утренней погодой. Потом загрузи ночной сейв (сама секция погоды должна быть той же) и посмотри, что получится.

 

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

 

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

http://www.gameru.net/forum/index.php?autocom=gallery&req=si&img=44233

Скрин сделан именно в такой момент. При нормальной работе погоды, такого часа просто бы не существовало.

Изменено пользователем RayTwitty
Ссылка на комментарий

Значит придумать, как исправить баг, а эту правку в топку

Сдаётся мне, что если и поймёшь, как это исправить, то вряд ли сможешь это перенести в виде патча. Рациональней будет уже забить на XE и мутить дальше из исходников.

 

как ты относишься к Mercurial репозиториям?

Я мало про них знаю. Ну вот открываю вики, читаю слова:

"разработанная для эффективной работы с очень большими репозиториями кода"

"является распределённой (децентрализованной) системой контроля версий"

"поддерживает полностью децентрализованную работу, ветвление"

 

Это всё замечательно, но конкретно этот проект - полная противоположность этих требований. XE - проект на самом деле очень маленький (особенно если рассматривать каждый подпроект по отдельности). Количество разработчиков - также очень небольшое. Ветвление - может где-то и полезно, но конкретно в этом проекте, IMHO, фича вредная. Сам проект XE вертится вокруг предельно конкретных DLL, правки обычно сугубо локальные и никак не могут, точнее не должны, вести к созданию изолированных сборок. Более того, форки в контексте нашего проекта вообще противоречат его изначальной задумке аккумулировать все правки. Вот конфигурирование проекта - дело полезное, но ветки для этого не нужны.

 

Поэтому нам больше подходит система контроля версий централизованная и желательно как можно более простая, типа SVN.

 

ЗЫ: Я всё же хочу уточнить на всякий случай, что "git - отстой" я имел в виду только в том смысле, что "для этого проекта - отстой". Так-то наверное замечательная система.

Изменено пользователем Malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
0x101DF506 6 ; Скриптовый коллбек (138 для CActor) на использование (но не посадку\выход) машины. Проверку на дистанцию делать в скриптах.

Я правильно понимаю, что это можно использовать, например, для создания и использования багажника и пр.? И если да, то как эта правка примерно работает?

Ссылка на комментарий

Рациональней будет уже забить на XE и мутить дальше из исходников.

Пока и в исходниках не получается)) Убил вчера весь день, но так и не понял как исправить. Причина не появления флара ясна - при вызове GamePersistent().Environment().Invalidate() сбрасывается стейт флара в none, процесс начинается сначала и так на постоянном обновлении. В то же время, в ЧН\ЗП код такой же, однако всё работает.

 

И если да, то как эта правка примерно работает?

Так же, как колбек на юз. Изменено пользователем RayTwitty
  • Спасибо 1
Ссылка на комментарий

Итого, примерно двое суток потребовалось для выяснения причины отсутствия солнца в ТЧ.

 

Как выяснилось, в ЗП game_cl_GameState::net_import_GameTime вообще не вызывается, следовательно -> нет вызова GamePersistent().Environment().Invalidate() -> нет сброса текущего стейта флара. Путем отладки было также выяснено, что Invalidate() в ЗП отрабатывает ТОЛЬКО при вызове CEnvironment::SetWeather (а это именно та функция, которая экспортирована в level.set_weather), следовательно Invalidate() в ЗП вызывается только из скриптов и только вполне определенное количество раз (а не на апдейте, как в ТЧ). Таким образом, выпиливание вызова из net_import_GameTime - это правильный шаг, правка абсолютно корректна. Но для этой правки требуется скриптовая доделка, в виде установки погоды из скрипта после загрузки сейва (очевидно, в ЗП эту функцию выполняет система динамической погоды), однако у меня нормально погода устанавливается только на первом апдейте актора, на спавне почему-то не хочет.

Собственно, в OGSE и не было проблем потому, что там идет полное управление погодой из скрипта.

 

З.Ы. на счет net_import_GameTime - можно было конечно поступить как в ЗП, убрать вообще вызов этой функции (а точнее убрать экспорт), но это уже серьезные вмешательства в работу системы клиент-сервера, неизвестно к чему это приведет - в ЗП все-таки там основательно все переделали...

Изменено пользователем RayTwitty
Ссылка на комментарий

Обнаружил два колбека с одинаковыми номерами:
debug_fixes.asm

185 строка - CALL_ACTOR_CALLBACK_INT_INT 153, edx, eax

по умолчанию не вызывается, используется в OGSE.

stalker_fix.asm
https://code.google.com/p/xray-extensions/source/diff?spec=svn152&r=152&format=side&path=/trunk/3312_shoc_10006/stalker_fix.asm
вызывается, используется вроде бы в модификации Lost World.

Не критично, так как первый закомментирован, но все-таки не мешало бы поменять номер у дебагового, мало ли что.

З.Ы. вообще, надо было наверно с самого начала проекта в отдельный файл выписывать дефайны с номерами используемых колбеков, чтобы каждый раз не гадать, какой номер свободен.

Изменено пользователем RayTwitty
Ссылка на комментарий

Так же, как колбек на юз.

 

В общем задействовал я этот колбек на юз. За основу определения дистанции и направления взял схему из ОГСЕ. Примерно в 90% случаев работает нормально, однако при определенных ракурсах одновременно происходит и юзание машины и посадка в нее. Отсюда вопрос: движок  как-то определяет, что надо делать в в конкретном случае - юзать или аттачить или просто смотрит на расстояние до дверей, указанных в doors визуального конфига машины и одновременно вызывает и пользование и посадку?.

Также попробовал колбеки на посадку/высадку (attach_vehicle, detach_vehicle), но что-то они ничего не делают, вернее с ними всё вообще перестает работать. 

 

Ссылка на комментарий

Примерно в 90% случаев работает нормально, однако при определенных ракурсах одновременно происходит и юзание машины и посадка в нее.

Ну, судя по описанию правки, колбек должен вызываться только при юзе без посадки. Либо правка некорректна, либо неправильно применяете.

 

Т.е. тут надо не запутаться - в оригинале есть колбек на юз для машины, а в ХЕ добавился колбек на юз машины для актора.

 

или просто смотрит на расстояние до дверей, указанных в doors визуального конфига машины и одновременно вызывает и пользование и посадку?.

Расстояние до дверей + замороченный алгоритм определения, что смотрим именно в зону нахождения двери.

 

А проверять, то что актор не сел, у меня получалось путем вызова

not db.actor:get_current_holder()

после отработки стандартного колбека на юз для машины.

Изменено пользователем RayTwitty
Ссылка на комментарий

@RayTwitty, ну значит я наверное неправильно сделал. Я сделал биндер для машин и там сделал колбек на юз. А выходит нужно было его ставить актору? 

Ссылка на комментарий

@phorumer,  да, 138 колбек ставится актору -

http://code.google.com/p/xray-extensions/wiki/new_collbacks

аргумент - машина которую юзаем.

Изменено пользователем RayTwitty
Ссылка на комментарий

@RayTwitty, ну в общем переделал с использованием новых колбеков. Работает нормально. Правда от схемы определения действий в зависимости от направления и расстояния пришлось отказаться ввиду ее замудренности. Вместо этого сделал меню как в ЛА. Спасибо за помощь и советы.

Ссылка на комментарий

Хоть это и не моё дело совершенно. но не могу не влезть, ибо использую хг уже давно и даже не для кода

[...]
 

Я мало про них знаю. Ну вот открываю вики, читаю слова:

[...]

 

Меркуриал как раз отлично подходит. Не надо читать вики, надо просто попробовать, и всё понравится.

  • Согласен 1

хранилище утилит и прибежище описаний

не стесняйтесь, добавляйте полезную информацию

Ссылка на комментарий

Хочу включить слот детектора без включения остальных слотов для ОГСЕ. Так как в ассемблере мягко говоря не силен решил спросить: 

1) Если я в соответствующих местах в new_engine_slots.asm уберу ifdef OGSE_BUILD и соответственно endif для детектора, то будет ли это так работать?

2) Если на первый вопрос ответ да, то что делать вот с этим куском:

ifdef OGSE_BUILD
	sub     eax, 2
	jz      short is_detector	; eax == 8
	sub     eax, 1
else
	sub     eax, 3
endif
Ссылка на комментарий

1) Если я в соответствующих местах в new_engine_slots.asm уберу ifdef OGSE_BUILD и соответственно endif для детектора, то будет ли это так работать?

Да, только там не во всех местах перед дефайнами написано "detector". Надо смотреть куда ведут метки. В 269 строке надо тоже дефайн поправить.

 

2) Если на первый вопрос ответ да, то что делать вот с этим куском:

Поставить ifndef OGSE_BUILD например. Изменено пользователем RayTwitty
  • Спасибо 1
Ссылка на комментарий

Всем привет. Интересует можно ли с помощью этого проекта правильно рассчитать хит нанесенный актору и узнать тип хита ? Вот недавно @RayTwitty кидал stalker_fix.asm. Нашел там такие строки  

 

...
cmp [esp+58h+var_14], 9 ; if (HDS.hit_type == ALife::eHitTypeWound_2) //тип хита?
...
jnz short lab2 ; if(ALife::eHitTypeBurn != HDS.hit_type) 
...
call CDamageManager__HitScale ;
CDamageManager::HitScale(HDS.boneID, conditions().hit_bone_scale(), conditions().wound_bone_scale(), pHDS->aim_bullet) // Вот это тоже интересует, я так понимаю расчет хита? 
conditions().hit_bone_scale() // А что это такое? Расчет хита по определенной кости ГГ?

 

 

Изменено пользователем TIGER_VLAD
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...