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

X-Ray extensions


Malandrinus

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

способ обездвижить главного героя?

Разбиндить кнопки передвижения?.. Изменено пользователем RayTwitty

Поделиться этим сообщением


Ссылка на сообщение

 

 

я что то забыл врубить, или лучше что то отключить?

Лучше ничего не трогать и использовать дефолтную конфигурацию из официального репозитория. В твоем что-то опять понахреначили, поди разбери.

 

https://github.com/KD87/xray-extensions/archive/master.zip

Поделиться этим сообщением


Ссылка на сообщение

@Malandrinus,

1. Можно ли использовать уже существующие дефайны, которые лежат в defines.asm (например OGSE_BUILD), для corrections_list?

2. Я думаю, имена дефайнов должны быть написаны, хотя бы с разделением на слова: DLGDISTFIX -> DLG_DIST_FIX. Первый вариант совершенно не воспринимается.

3. Наверно, стоит убрать файлы конфигов в подпапку configs (3312_shoc_10006\configs\), дабы не искать постоянно их в списке всех файлов.

 

кто-нибудь знает, какая правка отвечает за подсветку предметов в инвентаре? Точнее ищу правку, отвечающую за метод:

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

 

А что касается окна инвентаря - в моде LWO (который использует тоже ХЕ) есть закраска патронов для выбранного оружия (как в ЗП) - сделано достаточно заморочено, но разобраться можно. Насколько я помню, там во время заполнения инвентаря вызывается колбек, в который передается указатель на объект иконки (окна) и самого объекта, после чего с ними можно нормально работать (перекрасить, приаттачить что-нибудь или даже заменить текстуру). Полный хак кароче.

Изменено пользователем RayTwitty
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Может у тебя есть точно работающий пример? Я попробовал закраску сделать - никакого эффекта.

Посмотри ogse_trade_precondition.script. Не самая идеальная реализация, тем не менее суть понять можно:

1) Для каждого инвентарного предмета добавили параметры закраски, группировки и торгуемости.

2) Создается таблица (для закраски): индекс цвета = код цвета.

3) При открытии инвентаря, изменяем новые параметры так, как нам надо и получаем результат. Например, задаем закраску тех предметов, которые в слотах.

Поделиться этим сообщением


Ссылка на сообщение

Ну, тогда уж надо выносить в отдельную папку все файлы, связанные с билдом: список патчей, заготовку под dll и diff-файл, все батники и прочее.

Это было бы неплохо, как собственно и создать нормальные общие батники, которыми могли бы пользоваться простые смертные.

 

Кстати, ничего там не изменилось с правовым статусом link.exe и ml.exe? Может всё-таки стоит добавить их в репозиторий? У людей постоянно возникают проблемы, они не могут ничего скомпилить, ибо далеко не у всех есть VS и masm. Ситуация осложняется ещё и тем, что не все версии этих исполняемых файлов (по твоим же словам) подходят для линковки кода. Также, для работы всего этого требуется наличие установленных рантаймов, о чём тоже неплохо бы где-то упомянуть.

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

Поделиться этим сообщением


Ссылка на сообщение

@dsh,

Для этого, правку нужно активировать и написать скриптовую обработку закраски.

А я ведь я писал об этом, чем вы читаете - неизвестно.

 

Вот кстати зачем вообще было кому-то комментить эти правки? Я спецом сделал так, что без скриптовых манипуляций они никому не мешают, и всё ведёт себя по дефолту.

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

 

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

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

Перепроверил. Последняя ревизия, правки включены в движке.

В скриптах убрал включение глобальных флагов (т.е. дб по нулям), убрал вызовы относящиеся к фиче, результат:

http://rghost.ru/private/7H827RrkP/bfe541d734f5a2b1855c5cebed4d10a4

 

 

Не самая идеальная реализация

А как бы сделал ты?

 

Я про скрипт говорил. А в движке без исходников не сильно чего придумаешь. Изменено пользователем RayTwitty
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Заметны какие-то косяки?

На счет косяков не знаю, я скорее про структуру и количество вызовов говорил. В частности, обновление флагов для предметов достаточно делать в трех случаях - на событиях take\drop (при открытом окне обыска\торговли) и при открытии окна инвентаря\обыска\торговли для всех предметов сразу.

 

Сейчас я там заполнил первый элемент, так что покрасневшие предметы не пропадают.

Да, проверил - теперь всё нормально работает.

 

Кстати, остался нерешенным вопрос с правкой

0x102AC460 5 ; jmp game_cl_GameState__net_import_GameTime_dbg_fix

она как я понял, восстанавливает солнце, но вместе с этим, наблюдаются и баги (совершенно точно они происходят из-за этой правки):

1) зависание обновления погоды;

2) необновление каких-то элементов погоды (например свет и флары меняются, а скайбокс нет и наоборот);

3) странное поведение погоды между перезагрузками сейвов (загрузили другой сейв, а погода и час остались теми же).

В общем, что-то с апдейтом там. Возможно, как-то связано с функцией set_ignore_game_state_update() которая вызывается в OGSE, но непонятно для чего.

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

 

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

 

З.Ы. посмотрел в исходниках репозитория 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 и мутить дальше из исходников.

Пока и в исходниках не получается)) Убил вчера весь день, но так и не понял как исправить. Причина не появления флара ясна - при вызове 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 визуального конфига машины и одновременно вызывает и пользование и посадку?.

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

 

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

not db.actor:get_current_holder()

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

Условный номер ревизии 234

В официальном репозитории ревизии уже за 240-ую перевалили, почему-то бы не зарегаться там и не коммитить нормально?

 

Интересует можно ли с помощью этого проекта правильно рассчитать хит нанесенный актору и узнать тип хита ?

Вроде бы можно, но как - не могу сказать. Следует подождать авторов, они точнее ответят. Изменено пользователем RayTwitty
  • Спасибо 1
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Вы уж пожалели бы нас - болезных...и выкладывали ревизии и здесь.

А что их выкладывать? С гитхаба скачать намного проще чем с гуглокода - вон кнопочка "Download ZIP".

https://github.com/KD87/xray-extensions

 

На гуглокод можете забить уже сейчас, его окончательно дропнут после НГ.

 

Кстати - правка по взрыву бэтра вошла в крайние ревизии?

Да.

Поделиться этим сообщением


Ссылка на сообщение

SVN не проще? Трафик хорошо экономит.

К чему\кому такие вопросы?

 

1) гуглокод был закрыт;

2) перенос на гит осуществлял не я;

3) переносить проект svn->svn только потому, что там "трафик хорошо экономит" очень сомнительно;

4) какой трафик? Проект в zip весит 500кб. 500кб, Карл!

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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