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

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


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

@boneset-jq , квест про "спасти Шустрого и всё остальное" выдаётся следом за инфопоршеном 

8 часов назад, mole venomous сказал:

"tutorial_wounded_start"

А уж как ты этот инфопоршен получишь... Зависит от фантазии. В этом варианте

 

8 часов назад, mole venomous сказал:

on_actor_inside = {-esc_kill_gunslinger} nil %+esc_kill_gunslinger +tutorial_wounded_start%

  он выдаётся в рестрикторе, что в бункере Сидоровича. Перемести рестриктор на координаты ГГ. Или вызывай из скрипта bind_stalker

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

 

***

Дверь в бункер всё равно не откроется :crazy2:

Здесь могла быть ваша реклама.

Ссылка на комментарий
8 часов назад, Купер сказал:

тут и дальше

Благодарю за ответ. Жаль, что в этой "мини-вики" представлено сухое описание, а не более развёрнутый ответ. Еще бы хотелось узнать про следующие элементы:

 

1. Way-Point'ы типа raid. Как они работают и что делают.

 

2. Функции switch_X в схемах некоторых лагерей. Пример ниже.

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

[smart_terrain]
type = general_lager
switch_0 = {=gulag_empty(gar_smart_bandit3)}
switch_1 = {=gulag_population_comed_ge(gar_smart_bandit_2:5) !gulag_empty(gar_smart_bandit3)}
capacity = 5
communities = bandit
cond = {+agroprom_military_case_done -bar_darklab_document_done}
stay = medium
groups = 7

 

Z690 GAMING X DDR4, 12th Gen Intel(R) Core(TM) i7-12700KF, NVIDIA GeForce RTX 2060 SUPER, Windows 11.

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

Мужики, по ОГСМ на ТЧ подскажите, из-за чего может быть такое, что в какой то момент после того как юзаешь его, засыпаешь, гг просыпается, при этом прошло не то время сна, которое ты указывал, и после всё игровое время останавливается - застывает просто, вечная ночь. А при повторном использовании спальника - он просто исчезает, хотя сам "зевок" персонажа есть

Решил намутить магнитофон из золотого шара, всё прикрутил, как надо, он ставится, музычка играет, но при попытке взять его игра вылетает.

 

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

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....a.l.k.e.r. hum 1.1\gamedata\scripts\xr_logic.script:612: attempt to call field '?' (a nil value)

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

 

[logic]
active = ph_idle

[ph_idle]
tips      = magnitofon_use
on_use = %=give_items_to_actor(magnitofon_portable) =play_snd(characters_voice\scenario\afscanner_off) =delme%

 


 

Ссылка на комментарий
13.05.2023 в 18:28, stalkersd23134 сказал:

игра эту ошибку нашла сначала в том скрипте, которого не было

Думаю, в файле game_tasks.xml отсутствует задание (или нет инклуда к новому файлу с новыми заданиями) с нужным идентификатором. Под нужным идентификатором подразумеваю тот, который указан вот здесь (к примеру):

xHDpQ99T.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2014-05-2023%2013:53:01.jpg

Цепочка выглядит так:

Диалог --> Инфопоршень --> Задание

Ошибка в структуре инфопоршена или id квеста .

Изменено пользователем mole venomous
  • Полезно 1

Здесь могла быть ваша реклама.

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

 

[logic]
active = ph_sound


[ph_sound]
snd = script_magnitofon_music6
looped = true
on_info = {=actor_has_item(magnitofon_portable)} ph_sound@stop

[ph_sound@stop]
snd = silence
on_signal = sound_end|nil %=delme%

 



Подскажите, всё ли чисто в этом коде? 

-----
Забуксовал я короче, на вводе магнитофона. Потянуло меня его состряпать, прикольно же - пришел в свой лагерь в заднице зоны, включил приемник, музычка играет, сидишь у костра и читаешь ПДА, паралелльно за окном раздолбанной хаты наступают сумерки. Ладно, это я в лирику ушёл.

Решил всё слямзить у многоуважаемого Жекана из мода "Золотой Шар: завершение". Как идёт система: при "сьедании" магнитофона, он пропадает из инвентаря, вместе с этим спавнится 2 обьекта - сам магнитофон (script_magnitofon) и точка (script_magnitofon_point#), проигрывающая музычку. Если нам надо закругляться с дискотекой - тыкаем на рестриктор вокруг приемника, и он складывается в инвентарь. При чем точка, проигрывающая музычку  убирается при получении инфы, что у нас в инвентаре появился магнитофон. 

 

 

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

Итак, ниже моя писанина с кодом
 

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

 

function magnitofon_interface()
    local spwn = script_magnitofon(get_hud())
    level.start_stop_menu(spwn,true)
end

class "script_magnitofon" (CUIScriptWnd)

function script_magnitofon:__init(owner) super()
    self.dlg = self
    self.owner = owner
    self:InitControls()
    self:InitCallBacks()
end

function script_magnitofon:__finalize() end

function script_magnitofon:InitControls()
    -- здесь определяем координаты левого верхнего угла и ширину-высоту
    self:Init(0,0,1024,768)

    -- файл-описатель наших элементов
    local xml = CScriptXmlInit()
    xml:ParseFile("script_magnitofon.xml")

    -- текстура
    xml:InitStatic("ramka", self)
    xml:InitStatic("name", self)
    xml:InitStatic("text1", self)

    -- кнопки
    self.btn_1 = xml:Init3tButton("btn_1", self)
    self:Register(self.btn_1, "btn_1")
    self.btn_1:Enable(false)
    self.btn_2 = xml:Init3tButton("btn_2", self)
    self:Register(self.btn_2, "btn_2")
    self.btn_2:Enable(false)
    self.btn_3 = xml:Init3tButton("btn_3", self)
    self:Register(self.btn_3, "btn_3")
    self.btn_3:Enable(false)
    self.btn_4 = xml:Init3tButton("btn_4", self)
    self:Register(self.btn_4, "btn_4")
    self.btn_4:Enable(false)
    self.btn_5 = xml:Init3tButton("btn_5", self)
    self:Register(self.btn_5, "btn_5")
    self.btn_5:Enable(false)
    self.btn_6 = xml:Init3tButton("btn_6", self)
    self:Register(self.btn_6, "btn_6")
    self.btn_6:Enable(false)
    self.btn_7 = xml:Init3tButton("btn_7", self)
    self:Register(self.btn_7, "btn_7")
    self.btn_7:Enable(false)
    self.btn_8 = xml:Init3tButton("btn_8", self)
    self:Register(self.btn_8, "btn_8")
    self.btn_8:Enable(false)
    self.btn_9 = xml:Init3tButton("btn_9", self)
    self:Register(self.btn_9, "btn_9")
    self.btn_9:Enable(false)
    self.btn_10 = xml:Init3tButton("btn_10", self)
    self:Register(self.btn_10, "btn_10")
    self.btn_10:Enable(false)

    -- кнопка офф
    self:Register(xml:Init3tButton("btn_quit", self),"btn_quit")

    -- определяем доступность кнопки
    if db.actor:object("casette_1") ~= nil then
        self.btn_1:Enable(true)
    end
    if db.actor:object("casette_2") ~= nil then
        self.btn_2:Enable(true)
    end
    if db.actor:object("casette_3") ~= nil then
        self.btn_3:Enable(true)
    end
    if db.actor:object("casette_4") ~= nil then
        self.btn_4:Enable(true)
    end
    if db.actor:object("casette_5") ~= nil then
        self.btn_5:Enable(true)
    end
    if db.actor:object("casette_6") ~= nil then
        self.btn_6:Enable(true)
    end
    if db.actor:object("casette_7") ~= nil then
        self.btn_7:Enable(true)
    end
    if db.actor:object("casette_8") ~= nil then
        self.btn_8:Enable(true)
    end
    if db.actor:object("casette_9") ~= nil then
        self.btn_9:Enable(true)
    end
    if db.actor:object("casette_10") ~= nil then
        self.btn_10:Enable(true)
    end
end

function script_magnitofon:InitCallBacks()
    -- тут интерактивные элементы, при определенном действии выполняется заданная ф-ия
    self:AddCallback("btn_1", ui_events.BUTTON_CLICKED,  self.btn1, self)
    self:AddCallback("btn_2", ui_events.BUTTON_CLICKED,  self.btn2, self)
    self:AddCallback("btn_3", ui_events.BUTTON_CLICKED,  self.btn3, self)
    self:AddCallback("btn_4", ui_events.BUTTON_CLICKED,  self.btn4, self)
    self:AddCallback("btn_5", ui_events.BUTTON_CLICKED,  self.btn5, self)
    self:AddCallback("btn_6", ui_events.BUTTON_CLICKED,  self.btn6, self)
    self:AddCallback("btn_7", ui_events.BUTTON_CLICKED,  self.btn7, self)
    self:AddCallback("btn_8", ui_events.BUTTON_CLICKED,  self.btn8, self)
    self:AddCallback("btn_9", ui_events.BUTTON_CLICKED,  self.btn9, self)
    self:AddCallback("btn_10", ui_events.BUTTON_CLICKED,  self.btn10, self)
    self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self)
end

function script_magnitofon:btn1()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point1', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn2()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point2', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn3()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point3', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn4()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point4', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn5()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point5', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn6()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point6', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn7()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point7', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn8()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point8', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn9()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point9', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:btn10()
    self:on_quit()
    alife():create('script_magnitofon', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    alife():create('script_magnitofon_point10', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
        amk.remove_item(db.actor:object("magnitofon_portable"))
    HUM_food.actor_disable_inventory()
end

function script_magnitofon:on_quit()
    self:GetHolder():start_stop_menu (self,true)
    self.dlg = nil
    collectgarbage("collect")
end

 




 

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

 

[logic]
active = ph_sound


[ph_sound]
snd = script_magnitofon_music1
looped = true
on_info = {=actor_has_item(magnitofon_portable)} ph_sound@stop

[ph_sound@stop]
snd = silence
on_signal = sound_end|nil %=delme%

 

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

 

[logic]
active = ph_idle

[ph_idle]
tips      = magnitofon_use
on_use = %=give_items_to_actor(magnitofon_portable) =play_snd(characters_voice\scenario\afscanner_off)%

 

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

 

[script_magnitofon]:magnitofon_script
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon.ltx

[script_magnitofon_point1]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point1.ltx

[script_magnitofon_point2]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point2.ltx

[script_magnitofon_point3]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point3.ltx

[script_magnitofon_point4]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point4.ltx

[script_magnitofon_point5]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point5.ltx

[script_magnitofon_point6]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point6.ltx

[script_magnitofon_point7]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point7.ltx

[script_magnitofon_point8]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point8.ltx

[script_magnitofon_point9]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point9.ltx

[script_magnitofon_point10]:place_sleep
visual = physics\decor\priemnik_gorizont.ogf
radius = 1
custom_data = scripts\HUM\script_magnitofon_point10.ltx

 


Ну и плюс файлы типо items.ltx devices.ltx, sound_theme.script, я их подредачил, в первых двух сделал сами предметы, в последнем вгрузил всё музло. При этом всё соотвествует тому, чему надо. 


Если подитожить - при поднятии магнитофона, идёт вылет, с логом:

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

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....a.l.k.e.r. hum 1.1\gamedata\scripts\xr_logic.script:612: attempt to call field '?' (a nil value)


 По-мо-ги-те! Не то, чтобы это смертельно, магнитофон всё таки больше фича, но я реально не вкуриваю, где я ошибся :kez_12:

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

Доброго времени суток Всем!  Скачал ТЧ 1.0006 от Хаттаба. Перёс в файл ui_main_menu.script функцию ремонта из припасённого ui_main_menu.script от ТЧ 1.0004. Функцию когда-то выдернул из мода на ремкомплекты, только ремонт стал производиться по нажатии клавиши. При этом на экран выводится текст с результатами ремонта.  Проблема в том, что вместо русского текста отображаются кракозябры. Я думал, что дело в кодировке. Файл из 6 патча показывает кодировку в UTF-8, а из 4 патча - кириллица макинтош. Пробовал конвертировать и исходный файл из 4 патча в UTF-8, и измененный файл из 6 патча - толку никакого. С файлами работаю в редакторе Notepad++.

Если что, Винда 10. Пробовал исправить кириллицу в Региональных стандартах и через реестр. Не помогло.

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

@Ali_Babai_45 ,

1. Стандартный блокнот в новых версиях Win (8+) по умолчанию как раз сохраняет файлы в "неправильной" для Сталкера кодировке. UTF with BOM (на всякий случай).

2. У N++, к сожалению, очень давно поломано автоопределение кодировки при открытии (есть такая настройка у него) - кодировка открываемого файла определяется наобум.

ANSI / Windows 1251 для скриптов. Вот это вот: "кириллица макинтош" точно жуть. тынц тынц тынц

3. Вообще, кириллица в скриптах - дичайший моветон на самом деле, хотя мы все так и делаем :biggrin:.

game.translate_string("...") - почему бы не использовать?

 

  • Спасибо 1
  • Нравится 2
  • Полезно 1
Ссылка на комментарий

Подскажите, есть ли какой то способ, изменить "зрение" неписей, через скрипт? Вот, чтобы надел ты костюм - и у всех неписей зрение уменьшилось, чтобы тебя не палили....

 

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

Маскировочный экзоскелет в "солянке" работает через npc:set_range(num)

По умолчанию 80 метров, 3–5 метров достаточно для обхода противников вблизи. При значении 0 с ними даже говорить можно. Применять в онлайне.

 

Есть еще какой-то мод с переодеванием, который правит логику поведения NPC добавлением условий "костюм такой-то = не считать врагом" с высшим приоритетом.

 

  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

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

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

  • Полезно 1
Ссылка на комментарий

Есть вопрос. Как добавить свой айди в game_story_ids. Проблема в том что там нету изначально командира южного блокпоста на кордоне. Поэтому мне надосделать свой АЙДИ.

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

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

Господа. подсобите, в dialog_manager не пойму несколько фраз:  вокруг бара и мимо бара. Бара - в смысле, локация Бар, или бар - бар "100 рентген"?

 

"У старых складов база "свободовцев" находится. Они ребята беспечальные, душевные; с ними под бутылочку чего хорошего посидеть - одно удовольствие. И "Долг", как вокруг бара, не мельтешит."

 

"Это ты зачем здесь? На Янтарь собрался или артефакты втихую мимо бара пронести хочешь?"

Ссылка на комментарий
39 минут назад, bsanek628 сказал:

бар "100 рентген"

Именно он имеется ввиду в обоих случаях.

  • Спасибо 1

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@boneset-hq по аналогии и сделай... В чём проблема?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@imcrazyhoudini Просто я не пойму как именно это делается. Где надо что прописать. Я зелень полная не разбираюсь

Ещё question для крутых мододелов. Командир блокпоста на Кордоне днём уходит на своё место как в логике и стоит не разговаривает, даже внимания не обращает просто стоит и тупит в стену. Сколько логику и скрипты не ковырял так и не понял что не так.:mebiro_01:

 

"Do you like what you see?" © Billy Herrington

Boneset-HQ.gif

Ссылка на комментарий
9 минут назад, boneset-hq сказал:

не понял что не так.

Бэкапы и откаты в помощь.

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@boneset-hq ,
по умолчанию для военных логика схемы meet не назначается. xr_meet.script

Скрытый текст
   elseif npc_community == "military" or
            npc_community == "monolith" or
            npc_community == "killer" or
            npc_community == "bandit" or
            npc_community == "zombied" then
        def.meet_state        = ""
        def.meet_state_wpn    = ""
        def.init_meet        = ""
        def.victim            = ""
        def.victim_wpn        = ""
        def.use                = "false"
        def.use_wpn            = "false"
        def.syndata            = ""
        def.precond            = "visibility"
        def.abuse            = "false"


Перенастроить/добавить для нужного перса обработку этой схемы в соответствии с соответствующими параметрами для требуемой секции логики его логики. gulag_escape.ltx:

Скрытый текст
[camper@esc_blockpost_commander_day]
path_walk = commander_walk
path_look = commander_look
meet = meet@abc --* примерно так

[meet@abc] <--* примерно так
meet_state  =...
meet_state_wpn =...
victim  =...
victim_wpn  =...
use  =...
use_wpn =...
syndata =...
meet_dialog =...

 

Ориентируясь, например, на того же Кузнецова под мостом.

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

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

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

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

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

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

Войти

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

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

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