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

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


Halford

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

Так что ищи объекты с логикой ph_code
Вот это и нужно было. Спасибо.

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


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

Когда наводим взгляд(прицел) актера(ГГ) на какой-либо предмет, с которым можно взаимодействовать, появляется подсказка, к примеру для кодового замка выводится "Кодовый замок (F)". Откуда берется текст этого сообщения - это зашито в движек или устанавливается в каких-то конфигах ? Можно-ли изменить ?

 

Для особо одарённых.

Если ты знаешь, какая надпись высвечивается, даже если не знаешь, зайди в игру и посмотри. В общем ты уже определился с текстом: "Кодовый замок ...").

Открываем любой поисковик слов в файле, можно Total Commander, мне лично удобнее Notepad++, на его примере и покажу.

Итак, отрываем Notepad++, нажимаем чудную комбинацию клавиш Ctrl + F и переходим на вкладочку "Найти в файлах".

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

6d11402c8c2ba25f75be67e1fc93d4c0.jpg

Нажимаем "Найти все" и о чудо, внизу окна программы видим вот такое:

4e4ee96d094e8d196a26a7ba126cee03.jpg

Как понятно из увиденного, данный тест находится в файле config\text\rus\string_table_level_tips.xml.

Неужели это так трудно???

Два тебе за лень.

ColR_iT

 

Добавлено через 208 мин.:

ColR_iT

Вообще-то я не о string_table_level_tips.xml спрашивал.

Я спрашивал о том, как движком определяется, для какого объекта какую подсказку выводить ?

К примеру, тот же кодовый замок, создается на базе секции "physic_destroyable_object", и эта-же секция используется еще для кучи всего - бутылки, стаканы и др. Но при наведении на бутылку, выводится другая подсказка, а не "кодовый замок". И я о том и спрашивал, что текст подсказки для конкретного объекта - это движковое или в каких-то конфигах задается ?

Вот пример:

; cse_abstract properties
section_name = physic_destroyable_object
name = esc_physic_destroyable_object_0000
position = 61.5764122009277, -0.138549506664276, 155.138473510742
direction = 0, 0, 0
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = 0
level_vertex_id = 3978
object_flags = 0xffffff32

; cse_visual properties
visual_name = physics\decor\bottle_bar_stakan

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10
source_id = 65535

судя по визуалу - какой-то стакан

; cse_abstract properties
section_name = physic_destroyable_object
name = codedoor_key_0001
position = -210.539486506843, -22.8791319175720, -122.097147360229
direction = -0.5568, 0, 0.1104
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = 21
level_vertex_id = 42731
object_flags = 0xffffff3a
custom_data = <<END
[logic]
cfg = scripts\dar\dar_codelock1.ltx
END

; cse_visual properties
visual_name = physics\door\codedoor_key

; cse_ph_skeleton properties
skeleton_flags = 1

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10
fixed_bones = link
skeleton_flags = 1
source_id = 65535

а это - кодовый замок. И ни один из параметров не похож на указание текстового содержимого подсказки. Как движек их различает ?

 

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

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


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

Вопрос по содержимому скрипта ph_door.script. В нем, в ф-ции close_door, мне непонятно зачем три раза подряд устанавливается один и тот же обработчик. Кто знает, зачем так сделано разрабами ?

function action_door:close_door(disable_snd)
    printf("_bp: [%s] action_door:close_door()", self.object:name())
--    local disable_snd = self:is_closed()
    if not disable_snd then
        if self.st.snd_close_start then
            self:door_play_snd_from_set(self.st.snd_close_start)
        end
    end

    -- Ставим коллбек для отлова окончания закрытия двери (чтобы заблокировать ее и проиграть звук, если нужно):
--------------- вот это не понял ----------------------------------
    self.object:set_fastcall(self.fastcall,self)
    self.object:set_fastcall(self.fastcall,self)
    self.object:set_fastcall(self.fastcall,self)
-----------------------------------------------------------------------

    printf("_bp: action_door:close_door()")
    if self.st.no_force == true then
        self.joint:set_max_force_and_velocity(0, 0, 0)
    else
        self.joint:set_max_force_and_velocity(200, 3, 0)
    end
    self.block = true -- Закрываем и блокируем    
    self.soundless_block = disable_snd

    if self.show_tips then
        if self.st.locked == true and self.st.tip_unlock then
            self.object:set_tip_text(self.st.tip_unlock)
            return
        end

        if self.st.tip_open then
            self.object:set_tip_text(self.st.tip_open)
        end
    end
end

 

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

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


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

Вопрос по моделям объектов, т.е. о том что находится в файлах "ogf".

Как и чем их создавать ?

Чем редактировать ?

Как правильно добавить в игру ?

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

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


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

zzedik

А как бы сделать так, чтобы у какого-нибудь НПС враждебной группировки было нейтральное отношение к ГГ, а у остальных враждебное?

Может глянуть как это сделано ПЫСами для солдат на посту под мостом на Кордоне ?

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


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

Подскажите, где и чего править, что-бы отключить самовосстановление здоровья актера(ГГ) ? Вроде в actor.ltx должно это быть, да вот не вижу этого параметра.

 

Не понял такой параметр:

satiety_health_v = 0.0001 ;увеличение здоровья при уменьшении сытости

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

 

И еще насчет actor.ltx, в нем есть секция "when actor in sleep" - она работает ? Ведь в чистом ТЧ 1.0004 сна для актера(ГГ) нет.

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

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


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

Для чистого ТЧ 1.0004

В окне диалога с каким-либо НПСом внизу присутствует кнопочка "Торговать". Это движковое, или надпись на конопочке/кол-во кнопочек можно изменить правкой конфигов\скриптово ?

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


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

slavapro

У меня (чистое ТЧ 1.0004) эта строчка закомментирована изначально. Щас попробую раскомментить и выставить в 0, отпишусь.

 

Н-да, не помогло. есть еще варианты ?

 

Добавлено через 32 мин.:

Вопрос снят - помогла установка в 0 "satiety_health_v". Получается, пока актер сыт, здоровье чуток улучшалось.

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

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


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

Для ТЧ v1.0004

В стандартном диалоге актера(ГГ) с НПС можно изменить текст\положение кнопки "Торговать" ?

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


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

Comador

А как насчет динамического изменения, к примеру, положения кнопки "Торговать" ? Ну т.е. в процессе игры, скриптово ?

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


Ссылка на сообщение
Чисто теоретически можно получить любой объект по имени окна. Но это сложно. А зачем тебе?

Ну к примеру для обычных НПСов - стандартный диалог, а для "назначенного" техником - сдвигаем кнопку "Торговать" и добавляем "Ремонт\модификация".

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


Ссылка на сообщение
Убрал бы движковую кнопку за пределы экрана. По инфопоршню (ui_talk) получал бы окно болтанки, где, в зависимости от того с кем разговариваем добавляем или 1 или 2 кнопки

С этим-то все понятно, а собственно изначальный вопрос - получить доступ к кнопке "Торговать" как к оконному объекту ?

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


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

Для классов прописанных в se_item.script метод UPDATE_Write (если его добавить) будет срабатывать ?

К примеру, для se_outfit у меня он не вызывается ни при каких действиях.

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


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

Насчет системных инфо-порций - ui_talk как-то странно выдается.

В info_portions.xml добавил для теста:

    <info_portion id="ui_talk">
        <action>Util_script.On_talk_show</action>
        <disable>ui_talk_hide</disable>
    </info_portion>

В On_talk_show сделал обычную выдачу сообщения на экран.

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

Я чего-то недопонял или с помощью этой инфопорции отследить начало разговора с НПСом не получится ?

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

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


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

ТЧ v 1.0005

Есть НПС с такой логикой:

[logic@esc_lager_technic]
active = kamp@esc_lager_technic_kamp1
trade = misc\trade_technic.ltx

[kamp@esc_lager_technic_kamp1]
center_point = camp_center
path_walk = camp_center_task
meet = meet@technic_kamp1

[meet@technic_kamp1]
use = true
use_wpn = true
meet_talk_enabled = true

 

Спауню возле входа в подвал Сидора, оттуда он должен идти к центральному костру в деревне новичков и сидеть там.

Логика работает, но с одной заморочкой: если в основной секции logic@esc_lager_technic указать параметр trade = misc\trade_technic.ltx, то НПС после спауна "замерзает" на месте, и к костру в деревне не идет. При этом набор торговли соответствует указанному в trade_technic.ltx и взаимодействовать с НПСом можно. Можно его и "разморозить", к примеру переходом по инфо-порции на другую секцию логики.

Если параметр trade = misc\trade_technic.ltx, не указывать(или закомментить) то НПС нормально отрабатывает указанную в active = kamp@esc_lager_technic_kamp1 секцию, т.е. идет к костру, садится там и выполняет стандартные анимации.

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

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

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


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

ТЧ v 1.0004

Вопрос по именам(идентификаторам) уровней в конфигах.

Цитаты из

game_maps_single.ltx

[level_maps_single]

L01_escape

L02_garbage

L03_agroprom

........

........

далее

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[l01_escape]

texture = map\map_escape

bound_rect = -317.164, -633.718, 404.880, 811.627

global_rect = 355.0,2011.0, 576.0,2453.000000

weathers = default

music_tracks = l01_escape_musics

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[L02_garbage]

texture = map\map_garbage

bound_rect = -322.334, -347.225, 321.685, 318.000

global_rect = 371.0,1767.0,561.0,1963.256226

weathers = default

music_tracks = l02_garbage_musics

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[l03_agroprom]

texture = map\map_agroprom

bound_rect = -266.505, -355.611, 331.388, 213.838

global_rect = 161.0, 1834.0, 344.0,2008.293945

weathers = default

;music_tracks = l03_agroprom_musics

music_tracks = l01_escape_musics

Используется то прописная то заглавная буква L. Получается движек не различает регистра ?

Соответственно значение, которое возвращает level.name() можно проверять в любом регистре ?

Т.е. правильно работать будет и

if level.name() == "l01_escape" then
    ................
end

и

if level.name() == "L01_ESCAPE" then
    ................
end

 

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


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

ins33

if db.actor ~= nil and
if has_alife_info("doctor_one_start") and
time_news < time then

ошибка в if после первого and. Имеется в виду, что if там не должно быть.

 

Стрелок

Ответы на Ваш вопрос:

- Вы инфо-порцию kontroler_trup прописали как положено ?

- А как Вы проверяете, что инфо-порция не выдается ?

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

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


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

Дописал в se_item.script для класса se_outfit два метода - STATE_Write(packet) и STATE_Read(packet). Ну и проверил сколько раз эти методы будут вызываться при спауне броника скриптом. Результат:

STATE_Write

STATE_Read

STATE_Write

STATE_Write

STATE_Read

Кто знает, зачем столько раз происходят вызовы методов ? И какова их привязка к последовательности спауна предмета ?

 

Многострочный текст с прокруткой по вертикали - как сделать ? Класс CUIStatic не позволяет такого ? Пытался подсмотреть в оригинальных кодах игры, в частности смотрел как сделано описание предмета в инвентаре. Там это выглядит так:

 
<descr_list x="12" y="223" width="298" height="140" always_show_scroll="0" left_ident="16">
 <font font="letterica16" r="240" g="217" b="182"/>
</descr_list>

Но вычислить какой это класс из CUI... не получилось.

Подскажите.

 

Дописал в se_item.script для класса se_outfit еще один метод - on_before_register(). Когда он вызывается - когда серверный объект, созданный ф-цией create уже существует ?

 

Пять раз методы se_outfit вызывались для случая спауна броника в ящик, проверил для спауна на местности:

STATE_Write

STATE_Write

STATE_Read

То-же не очень понятно кол-во вызовов методов класса.

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


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

Во многих модах для ТЧ сейчас добавлена, кроме вертикальной отдачи при стрельбе еще и горизонтальная. Как это сделано - в конфигах или скриптово ?

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


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

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