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

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


Halford

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

@mole venomous , в оригинале оно, по идее, здесь: autosave_manager.cpp. В OGSR вполне могли "оторвать" за ненадобностью. Т.е. оно даже банально поиском по файлам в сырцах не ищется. Но лучше, конечно, у разработчиков уточнить.

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


Ссылка на сообщение
(изменено)

@Stalkersof , не буду спорить, конечно. Проверял на XRE. Это уже надо непосредственно у разработчиков консультироваться. А быстрее всего самому в игре проверить :biggrin:.

Изменено пользователем Купер
  • Согласен 1

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


Ссылка на сообщение
(изменено)

Навеяло вертолётами из Солянки.

Скрытый текст

логика вертолёта:

[heli_move@idle]
path_move = esc_desant_heli_2_idle_move
engine_sound = false
combat_safe_altitude = 85
invulnerable = true
immortal = true
on_info = {+esc_blocpost_pust} heli_move@fly_sound %+esc_lager_alarm%

 

логика солдат на блокпосте, для "включения" вертушки:

[death@soldier_arhara]
on_info = {=killed_by_actor} %+esc_blocpost_pust%


[logic@esc_blockpost_patrol1]
active = patrol@esc_blokpost_day_patrol_commander
on_death = death@soldier_arhara

 

сама функция в xr_conditions.script

-- проверка, что убийца нпс - актер /amk_embankment/
function killed_by_actor(actor,npc)
    local tab = actor and npc and db.storage[npc:id()].death
    if tab and tab.killer then 
        return tab.killer == actor:id()
    end
    return false
end

 

Почему проверка на именно actora в качестве убивца {=killed_by_actor} не срабатывает? Или просто нам что-то не договаривают?

Изменено пользователем Купер

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


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

@h0N0r , ни разу не специалист, но там же вроде булев (true/false) ключ добавлен:

function generic_object_binder:__init(obj) super(obj)
...    self.used = false
end
function generic_object_binder:save(packet)
...    packet:w_bool(self.used)
end
function generic_object_binder:load(reader)
 ...   self.used = reader:r_bool()
end

А в самом теле функции уже проверка на предмет "первого раза":

generic_object_binder:use_callback(obj, who):

...    if self.object:alive() or self.used then return end

+ выше там же ещё одна "отсечка".

  • Полезно 1

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


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

Забавно, а ведь оно действительно в таком виде не желает работать. По крайней мере, на "классике". Интересно, почему?

 

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


Ссылка на сообщение
(изменено)

@Ali_Babai_45 , для оригинала:

ui_main_menu.script->

function main_menu:InitControls()
...
    local _ver = xml:InitStatic        ("static_version",self)
    local mm                        = _G.main_menu.get_main_menu()
    _ver:SetText                    ("ver. " .. mm:GetGSVer())   
end

Тут более подробно.

Изменено пользователем Купер
  • Спасибо 1
  • Согласен 1

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


Ссылка на сообщение
(изменено)

@Ali_Babai_45 , а пламенный привет борцунам за всё хорошее против всего плохого. Они весь домен gameru.net в РФ грохнули. Тут есть копипаста.

 

Боюсь ошибиться, вот это вот GetGSVer() движком вычитывается по-моему. Сам формат текста здесь:

ui_mm_main.xml (gamedata\config\ui) ->

<static_version>...</static_version>

Т.е., что-то наподобие такого можно соорудить:

ver:TextControl():SetText  ("ver. "..mm:GetGSVer().." + здесь название и версия"). То, что в "..." можно менять/мучить, а mm:GetGSVer() вряд ли изменить получится.

Изменено пользователем Купер
  • Спасибо 1
  • Нравится 1
  • Согласен 1

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


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

@андрей дронав ,

Скрытый текст

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

 

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


Ссылка на сообщение
10 часов назад, phalcor сказал:

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

(Платформа ОП, rx_kill_wounded.script). 

Какой из? Их же уже столько, а в каждом по своему! :biggrin: 

По идее, достаточно в rx_ai.script просто откомментировать загрузку и включение ненужной схемы:

function load_schemes()
function enable_schemes(ini,npc)

В оригинале модулей AI, кстати, достаточно просто удалить/переместить нужный/ненужный файл с соответствующим модулем.

 

 

  • Согласен 1

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


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

А где-то можно почитать предметно относительно недоработок оригинальной движковой GSC схемы добивания подранков? В смысле: " подводные камни", что сделано через пень колоду, etc.

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


Ссылка на сообщение
5 часов назад, EGER.OVERKILL WF сказал:

У меня там следующая билеберда: (брал из этого же файла, с другого рестриктора) 

  Настройки шейпа (Скрыть)

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 4.5480751991272

@EGER.OVERKILL WF, давай-ка полную выкладку, как оно сейчас выглядит?

; cse_shape properties
shapes = shape0 <- ??? - кол-во шейпов
shape0:type = sphere - тип (сфера/параллелепипед)
shape0:offset = 0,0,0 - смещение 
shape0:radius = 5 - радиус (для типа "сфера")

; cse_alife_space_restrictor properties
restrictor_type = 0

В логике я бы лично подстраховался (хотя, в принципе, и лишнее, наверное):

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {-kura} nil %+kura%

{...} - условия для выполнения

%...% - действия

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


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

@EGER.OVERKILL WF , 

36 минут назад, EGER.OVERKILL WF сказал:

; cse_shape properties
shapes = shape0

вот здесь, по идее, число: 1

  • Согласен 1

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


Ссылка на сообщение
(изменено)

@EGER.OVERKILL WF, вот тут ещё посмотри.

---

Не, какая-то ерундистика получается.

Скрытый текст

Для коробки:

  • shape_0:axis_x = 1,0,0
    Длина по оси X
  • shape_0:axis_y = 0,1,0 
    Длина по оси Y
  • shape_0:axis_z = 0,0,1
    Длина по оси Z
  • shape_0:offset = 0,0,0
    Смещение центра коробки от координат объекта, указанных в position.

Длины коробки так странно выглядят, потому что в спавне они заданы как матрица трансформации объекта, поскольку движок оперирует именно ими. Если описываете объект правильным параллелепипедом, значение имеют только «диагональные» координаты: первая для X, вторая для Y, третья для Z. Остальные должны быть нулевые. Если же меняете их, грани шейпа в игре не будут параллельны, коробка будет «кривой».
Для аномалий обычно используется сфера, для всего остального – коробка.

K.D.

Изменено пользователем Купер

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


Ссылка на сообщение
(изменено)

@EGER.OVERKILL WF , что-то наподобие такого в простейшем варианте:

; начальная секция логики
[logic]
active = sr_idle

; если актор в рестрикторе, проверяем {..} наличие поршня stiq, переключаемся на схему sr_territory@1 выдаём %..% поршень kura 
[sr_idle]
on_actor_inside = {+stiq} sr_territory@1 %+kura%

; при выполнении условий отключаем рестриктор и выдаём конечный поршень.
[sr_territory@1]
territory_death = {+lox_dead +lox2_dead -loxi_dead} nil %+loxi_dead%

NB!

1: sr_territory отслеживает только события хита и смерти NPC, засчитанные от актора.

2: смутно припоминается, что глючная она (вот чем, пардон, навскидку не вспомню). Требуется консультация.

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

 

p.s.: вот зря карланом обозвался, придёт разработчик Prosectors Project, ругаться будет :biggrin:

---

@EGER.OVERKILL WF, да про карлана шутка. Вряд ли, как мне кажется, человек обидится. Просто бывают и вот такие курьёзы в нашем славном королевстве. :)

 

 

Изменено пользователем Купер
  • Спасибо 1

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


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

@EGER.OVERKILL WF , решений на самом деле много, в зависимости от того какие именно npc: под гулагом, с отдельной логикой, "именованные" (co story_id). В логике можно использовать не только поршни, но и функции. тынц тынц тынц

Если поршни lox_dead, lox2_dead уже выдаются без проблем, например так.

[logic] active = sr_idle
; если актор в рестрикторе, проверяем {..} наличие поршня stiq, выдаём %..% поршень kura
[sr_idle] on_actor_inside = {+stiq} %+kura%
; при выполнении условий отключаем рестриктор и выдаём конечный поршень.
on_info = {+lox_dead +lox2_dead -loxi_dead} nil %+loxi_dead%

 

  • Согласен 1

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


Ссылка на сообщение
(изменено)

@Ворон545 , @AndrewMor ,

Скрытый текст

Движок у вас какой? В последнем патче у себя (тынц) @RayTwitty как раз, в том числе и перепаковщиком занимался в связке "пояс-инвентарь" (X-Ray Ext). Там, правда, своя экосистема, но "отвязать", в принципе, несложно.

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

 

 

Изменено пользователем Купер
  • Согласен 2
  • Полезно 1

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


Ссылка на сообщение
(изменено)

@Houdini_one ,

1. Cама реализация переключателя тут. А дальше настройка логики объекта.

Товарищи спецы, что-то меня озадачило, посмотрев различные реализации.

А почему нельзя вот так напрямую делать, чем плохо? Cхематично:

[logic]
active = ph_sound@on
[ph_sound@on]
snd = radio_blockpost_kordon
tips = tip_radio_off
on_use =  ph_idle@off

[ph_idle@off]
tips = tip_radio_on
on_use = ph_sound@on

Ну, возможно, поршнем состояния ещё подстраховаться.

 

2. Не знаю насколько костыльно, можно попробовать что-то такое. Т.е. "прикрутить" к объекту биндер и проверяя нужное расстояние просто хитовать актора.

 

 

Изменено пользователем Купер
  • Спасибо 1

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


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

@dsh , в чём сомнения появились: наскоро ingame попробовал. Как ни странно, но даже работает :biggrin:, (триггер переключения, "холодная", "горячая" загрузки. Даже состояние сохраняет - вкл/выкл).

Посмотрел здесь тынц реализацию. LA-шники, так вообще, отдельную ph_ схему делали под такие объекты, с ключом текущего статуса. Ну и сомнения загрызли по поводу "подводных камней".

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


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

 

Скрытый текст

Оно , кстати, на ТЧ действительно в таком виде НЕ работает.

 

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


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

AMK-Team.ru

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