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

[SoC] Ковыряемся в файлах


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

Народ, как понимать такие записи в lua_help:

 

move (enum MonsterSpace::EScriptMonsterMoveAction, vector&, number);

 

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

А что такое этот загадочный enum - enum MonsterSpace::EScriptMonsterMoveAction? Как здесь сложить концы с концами и понять, что же нужно передавать в функцию(или что оно там на самом деле, не метод точно)

Это вот такое перечисление (суть набор именованных констант) языка C++:

enum MonsterSpace::EScriptMonsterMoveAction {
    eMA_WalkFwd,
    eMA_WalkBkwd,
    eMA_Run,
    eMA_Drag,
    eMA_Jump,
    eMA_Steal,
};

Ему соответствуют константы, определённые в том-же классе move:

move.walk_fwd
move.walk_bkwd
move.run_fwd
move.drag
move.jump
move.steal

Про третий аргумент знаю только, что он имеет тип float

 

И еще, правильно ли я понимаю, что аргументы со звездочкой типа

move (enum MonsterSpace::EScriptMonsterMoveAction, game_object*, number);

сами собой подразумеваются и в явном виде их указывать не нужно?

Не так. Это просто значок указателя на объект. Здесь должен заметить, что все описания из lua_help.script имеют характер неточный и до крайности условный. Они не соответствуют никакому языку, ни C++ ни Lua. Там часто упоминаются внутренние типы данных, как в примере выше, остаются хвосты от исходной структуры экспортированных классов, как с этими указателями. Зато по#ерены типы возвращаемых значений (и вообще наличие возвращаемого значения), а типы данных чисел сведены к единственному number, что лишает это описание существенной части информации.

Что касается звёздочек. Сперва небольшой ликбез по Lua. В этом языке есть встроенные типы данных: nil, строки, числа, логические, таблицы, функции, потоки. Эти типы данных описаны в самом стандарте языка. Кроме этих есть ещё т.н. пользовательский тип данных. Физически этот тип данных всегда представляет собой указатель. На что он там указывает, дело второе. Выражение type(obj) для переменных пользовательского типа всегда возвращает строку "userdata". Все объекты, экспортированные из движка, как раз и представляют собой такие объекты.

Безотносительно Lua, с точки зрения языка C++ объект (например vector, хотя внутри он называется не так) может передаваться в функцию по ссылке

void fun(_vector3<float>&); // _vector3<float> - это как раз и есть внутреннее имя класса, который экспортирован в Lua как vector

или по указателю

void fun(_vector3<float>*);

технически это одно и тоже, поскольку в обоих случаях передаётся адрес объекта. А сточки зрения Lua вообще нет разницы, запишете ли вы описание функции

так: fun(vector*)

так: fun(vector&)

или так: fun(vector)

Поскольку vector - это по любому пользовательский объект (указатель, помните?), и по любому в Lua передаётся как 4 байта.

Так что если увидите звёздочку или амперсанд, то относитесь к этому проще.

 

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

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

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

 

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

камрады подскажите в каком файлике копать , что бы сделать кнопки в пда не активными ?

Свободу всем Даром!

Моя Зона Full Realism Mod STSoC by Wolkolak

"Безвыходных ситуаций не существует в принципе."(с) Ред Шухов

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

скорее всего в скриптах файл типа майн меню скрипт сон к примеру в этом файле сделан

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

сон да , а вот про пда не слова ,

вынести кнопу не получается игра валиться ... :dash2:

 

добавил

 

креш был по другому поводу

в файлике ui_st_pda сделал так

<string id="pda_btn_contacts">

<text></text>

</string>

 

заменил на

<string id="pda_btn_contacts">

<text>...</text>

</string>

крешить перестало

 

 

выносил так

в фалике pda.xml

<button x="195" y="7" width="60" height="20" hint="pda_btn_contacts_hint">

<text align="l" x="0" y="0" font="letterica18" r="255" g="255" b="255">pda_btn_contacts</text>

поигрался с координатами по всякому и ни чего ...

 

 

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

Свободу всем Даром!

Моя Зона Full Realism Mod STSoC by Wolkolak

"Безвыходных ситуаций не существует в принципе."(с) Ред Шухов

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

wolkolak, можно в pda.xml тупо стереть эту кнопку. Если, например, стереть вот такой код текста:

<button x="195" y="7" width="60" height="20" hint="pda_btn_contacts_hint">
<text align="l" x="0" y="0" font="letterica18" r="255" g="255" b="255">pda_btn_contacts</text>
<text_color><t r="231" g="168" b="12"/> <d r="181" g="170" b="148"/> <e r="127" g="127" b="127"/> <h r="255" g="255" b="255"/>
</text_color>
</button>

То кнопка Контакты исчезнит из ПДА, но есть одно НО - слева от всех кнопок появится ооочень маленькая полоса прокрутки. Причину ее появления я не знаю, скорее всего ее возможно как-то убрать, надо копаться...

Изменено пользователем Министр
Ссылка на комментарий
Monnoroch, ну тоесть ты только выбрал бынокль(5 или колесиком) а он уже сразу навелся(как будто ЛКМ или ПКМ нажаты)

Vita sine libertate, nihil

Vita sine litteris - mors est

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

Всем привет.

Вопрос: как через скрипт заспавнить НПЦ в 30-ти метрах от ГГ ?

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

malandrinus

Спасибо за помощь и просвещение! А то делать-то я делаю, но половину не сильно понимая, "зачем" и "почему", только "как" :dash3::)

 

Это вот такое перечисление (суть набор именованных констант) языка C++:

enum MonsterSpace::EScriptMonsterMoveAction {

eMA_WalkFwd,

eMA_WalkBkwd,

eMA_Run,

eMA_Drag,

eMA_Jump,

eMA_Steal,

};

Ему соответствуют константы, определённые в том-же классе move:

move.walk_fwd

move.walk_bkwd

move.run_fwd

move.drag

move.jump

move.steal

 

 

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Monnoroch

 

Что-то, значит, я туплю. Строка, например, eMA_WalkFwd в lua_help вообще не встречается, а MonsterSpace::EScriptMonsterMoveAction - только как аргумент в функциях. Можешь носом ткнуть? У меня lua_help от патча 1.0004, если что, но не думаю, что этот файл менялся от патча к патчу.

 

А eMA_WalkFwd - константа движка как я понял,она из С++, и в луа хелпе не обозначена.

В том-то и дело, что как их вычислять по enum-ам? И enum-ы в аргументах встречаются сплошь и рядом. malandrinus же как-то составил список...

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

C++ class move {

const back = 4;

const criteria = 2;

const crouch = 0;

const curve = 0;

const curve_criteria = 2;

const default = 0;

const dodge = 1;

const down = 64;

const drag = 3;

const force = 1;

const fwd = 2;

const handbrake = 128;

const jump = 4;

const left = 8;

const line = 0;

const none = 1;

const off = 512;

const on = 256;

const right = 16;

const run = 1;

const run_fwd = 2;

const stand = 2;

const standing = 1;

const steal = 5;

const up = 32;

const walk = 0;

const walk_bkwd = 1;

const walk_fwd = 0;

 

move ();

move (enum CScriptMovementAction::EInputKeys);

move (enum CScriptMovementAction::EInputKeys, number);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, game_object*);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, game_object*, number);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, const patrol&);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, const patrol&, number);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, const vector&);

move (enum MonsterSpace::EBodyState, enum MonsterSpace::EMovementType, enum DetailPathManager::EDetailPathType, const vector&, number);

move (const vector&, number);

move (enum MonsterSpace::EScriptMonsterMoveAction, vector&);

move (enum MonsterSpace::EScriptMonsterMoveAction, patrol&);

move (enum MonsterSpace::EScriptMonsterMoveAction, game_object*);

move (enum MonsterSpace::EScriptMonsterMoveAction, vector&, number);

move (enum MonsterSpace::EScriptMonsterMoveAction, number, vector&);

move (enum MonsterSpace::EScriptMonsterMoveAction, number, vector&, number);

move (enum MonsterSpace::EScriptMonsterMoveAction, patrol&, number);

move (enum MonsterSpace::EScriptMonsterMoveAction, game_object*, number);

move (enum MonsterSpace::EScriptMonsterMoveAction, vector&, number, enum MonsterSpace::EScriptMonsterSpeedParam);

move (enum MonsterSpace::EScriptMonsterMoveAction, patrol&, number, enum MonsterSpace::EScriptMonsterSpeedParam);

move (enum MonsterSpace::EScriptMonsterMoveAction, game_object*, number, enum MonsterSpace::EScriptMonsterSpeedParam);

 

function completed();

function path(enum DetailPathManager::EDetailPathType);

function move(enum MonsterSpace::EMovementType);

function position(const vector&);

function input(enum CScriptMovementAction::EInputKeys);

function patrol(const class CPatrolPath*, class shared_str);

function object(game_object*);

function body(enum MonsterSpace::EBodyState);

};

 

 

А eMA_WalkFwd - константа движка как я понял,она из С++, и в луа хелпе не обозначена.

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

Я как раз закончил предварительный разбор некоторой инфы по внутренним потрохам игры. Итак.

Основной источник информации - билд 2945, в котором разрабы оставили вместе с библиотеками движка ещё и файлы с отладочной информацией. Это файлы *.pdb

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

Я откопал утилитку, которая делает дамп всего содержимого файла pdb. Дамп для xrGame.dll вышел немаленьким - 250 Мб первостатейного мусора. Немного почистил (регулярные выражения - великая вещь) получилось 12 Мб. Выделил список экспортированных классов, выделил список всех перечислений.

Теперь по крайней мере можно в этом что-то осмысленно искать. Можно точно сказать, какой тип возвращает функция или метод, что принимает, что возвращает (и возвращает ли), точный состав перечислений (тем более, что именно под этими именами они упоминаются в lua_help.script). Можно сказать, можно ли создавать в Lua свой класс на основе данного, или он для этого не предназначен.

 

Не обольщайтесь, это конечно дополнительная информация, но в конечном итоге не намного больше, чем собственно в lua_help.script

 

Держите в общем:

 

Исходный дамп В архиве 3.8 Мб, распакованный 250 Мб. Море шлака. Зато это всё, что было.

Очищенное от основного мусора В архиве 514 Кб, распакованный 12 Мб. Все классы и перечисления должны были остаться, удалил основной мусор, затрудняющий восприятие и поиск. Что-то могло попасть под раздачу (из-за автоматизации процесса)

Только перечисления В архиве 27 Кб, распакованный 182 Кб. Ясно из названия. Включает все, а не только использованные в скриптах перечисления.

Только экспортированные классы В архиве 51 Кб, распакованный 925 Кб. Попытался оставить полные определения только тех классов, которые входят в список экспортированных. Опять же, что-то могло попасть под раздачу и пропасть (см. исходный файл)

Все перечисленные файлы содержат множество дублирующих записей. Это связано с тем, что в файле pdb запись включается столько раз, сколько она упоминается по коду. Пытался с этим бороться, но безуспешно. С другой стороны, больше не меньше =)

Наконец,

список экспортированных классов Это достаточно объективная информация. Позволяет узнать не только какие классы экспортированы, но и можно ли от класса наследовать в Lua. В двух вариантах: один содержит исходные определения luabind, а второй немного почищен для большего удобства.

 

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

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

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

 

Ссылка на комментарий
Как удалить сон у ГГ

 

АМК 1.4.1

 

amk.script

удаляем строчку:

mod_call("test_sleep_pp")

 

amk_mod.script:

удаляем строчки:

amk.g_start_timer("gg_need_sleep",0,0,6)

amk.spawn_item_in_inv("matras")

 

больше спать не хочешь, или тебе надо совсем с корнями его выдрать?

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

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

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

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

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

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

Войти

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

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

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