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

Редактирование движка X-Ray


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

Monnoroch, вообще меня интересует ф-ция работы с "bind_object". Она находится выше предыдущей ("motivation_action_manager"). Строка с "bind_object" встречается в движке только один раз - это там. Ну а если идет регистрация, как ты говоришь, то можно как-то узнать, куда в итоге идет ф-ция. Изменено пользователем SkyLoader
Ссылка на комментарий

SkyLoader, Я все еще ничего не понимаю. Теперь ты говоришь, что тебя интересует другая проблема, нежели ты описал выше.

Напиши подробно что тебе надо от движка?

 

И функция никуда не идет. Функции ходить не умеют, инфа 100%.

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

SkyLoader, а мне откуда знать по какому она адресу? О_о

с чего, опять же ты взял, что существует некое действие "bind_object"?

и в чем, по твоему оно выражается?

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

Что касается технологии Luabind, то там нет функции которая "всё биндит". Это потому, что Luabind построен на шаблонах C++ и для каждого экспорта при компиляции создаётся своя функция, причём не одна, а целая куча, и имён у них нет, поскольку они не выходят за пределы xrgame, да ещё и оптимизатор зачастую превращает это всё в малопонятную мешанину. Это кстати чертовски усложняет доэкспорт существующих в движке функций. Например, я совсем не представляю, как можно экспортировать некий класс. Я даже не понимаю, как можно экспортировать метод уже экспортированного класса, если нет экспортированного метода с таким же прототипом. В некоторых случаях удаётся это сделать, втиснув метод в другой, с похожим прототипом, оставив часть аргументов неиспользуемыми.

 

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

  Полезный утиль (Показать)
Ссылка на комментарий

malandrinus, я примерно о том же и говорю, что понять мало что с такого кода можно.

просто из приведенного кода явно видно, что вызывается метод

luabind::detail::class_base::add_method(char const *,luabind::detail::overload_rep const &) с первым аргументом "motivation_action_manager"

push    offset amоtivation_act;
"motivation_action_manager"
call    ds:?add_method@class_base@detail@luabind@@QAEXPBDABUoverload_rep@23@@Z;
luabind::detail::class_base::add_method(char const *,luabind::detail::overload_rep const &)

 

вот, собственно и все, что на первый взгляд видно.

возникает ощущение, что в класс "motivation_action_manager" добавляется некоторый метод.

Тут важно, что имеется ввиду класс LUA. То есть конечно в с++ класс что-то добавить это нонсенс.

какой - а черт его знает. я даже не знаю что такое luabind::detail::overload_rep.

 

далее, чуть выше есть код:

lea     edx, [esp+58h+var_38]
push    edx

что наводит на мысль о связи var_38 и той самой добавляемой функцией типа luabind::detail::overload_rep (это вообще функция ли?), которая походу в коде представляла собой указатель, поскольку по-видимому выделена на стеке, ибо [esp+58h+var_38].

И собственно постоение которой, походу и есть в коде выше.

 

собственно, вот и все, что можно сказать (=

Ну, вернее, я больше ничего там разобрать не могу.

Изменено пользователем Monnoroch
Ссылка на комментарий
Monnoroch, да я на самом деле тупанул. Просто в билде я сначала искал "script_binding", чтобы изменить там кой-чего, а потом, бегая по ф-циям, забрел в "bind_object", искал. Там было 2 вызова ф-ций. Одна просто CScriptBinder_что-то там...Bind_Object, а другая - CScriptBinder__set_object. Во второй ф-ции я нашел и изменил одну проверку, которая мне нужна была. Хотел перенести это на оригинал и по привычке начал искать "bind_object", а там все изменено до неузнаваемости. В итоге оказалось, что все это лежит в "script_binding". Изменено пользователем SkyLoader
Ссылка на комментарий

_Призрак_, хех, я только место нашел, поэтому на стадии ковыряния. При изменении одной проверки биндер отключается в сп. Я уже пробовал раз 8 различными подходами, без результата.

Если есть желание, можешь сам глянуть:

.text:101C9883                 cmp     byte ptr [ecx], 0

Если 0 заменить на 1, то в сп биндер отключается, однако если следующую строчку с jnz убрать вообще, то ничего не изменится.

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

SkyLoader, _Призрак_, в CScriptBinder::set_object() есть проверка на сингловый тип игры. Надо не на нуль там заменять, а убрать проверку.

На билде 2947 выглядит вот так:

.text:1006F91F                 call    ?IsGameTypeSingle@@YA_NXZ; IsGameTypeSingle(void)
.text:1006F924                 test    al, al
.text:1006F926                 jz      short loc_1006F92F

Ссылка на комментарий
KD87, ну я и говорю, что я билде я так делал, а в оригинале все по-другому. В оригинале даже вроде нет проверок на IsGameTypeSingle, все вручную проверяется. Изменено пользователем SkyLoader
Ссылка на комментарий
  Цитата
Если 0 заменить на 1, то в сп биндер отключается, однако если следующую строчку с jnz убрать вообще, то ничего не изменится.

 

логично. у тебя зеро флаг был 1, выполняется cmp - становится 0.jnz не выполняется.

убираешь cmp - остается 1 - jnz выполняется всегда.

 

а тебе походу надо отключить jnz. так ты замени его на nop.

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

Monnoroch, вот я и говорю, что заменил на nop, а ничего не изменилось.

 

mov     ecx, ds:?g_dedicated_server@@3_NA
cmp     byte ptr [ecx], 0
jnz     short loc_101C98AB --тут на nop заменил

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

SkyLoader, скажи, а зачем пытаться перенести найденное в билдах 18xx в финалку? тебе недостаточно билдов 29xx с _отладочной информацией_?

Как бы то ни было, я нашел нужную тебе функцию в dll от четвертого патча:

  ассемблерный листинг (Показать)
Изменено пользователем KD87
Ссылка на комментарий

KD87, скоро этот билд скачаю себе.

1) Про псевдокод я вообще не знал, что он встроен, спасибо! F5

2) Как ты ф-цию нашел? Я ее искал две недели. Неужели в этот билде все настолько схоже?

3) Я проверку и на 0 менял и на 2 (может в деатматче заработает), но ничего не работает - биндер отключается в сингле и не работает в мульте. Я пробовал следующую jz short loc_1012B4D9 заменить на jmp. Ведь на на проверку это больше влиять не будет? Но, тоже самое - отключение биндера везде.

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

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

 

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

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

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

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

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

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

Войти

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

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

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