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

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

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

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

ЕМНИП, это проигрывается постпроцесс "agr_u_fade". Если по-хорошему, то убрать ф-ию его вызова из all.spawn:

  Скрыть

Рестриктор 'trader_zone_task'

оригинал

on_actor_inside = {-esc_kill_gunslinger} nil %+esc_kill_gunslinger =run_postprocess(agr_u_fade)%

правлено

on_actor_inside = {-esc_kill_gunslinger} nil %+esc_kill_gunslinger%

 

Спасибо тебе огромное чел, без тебя бы не справился!

Ещё вопрос можно? Как сделать выдачу квеста при старте игры?

Изменено пользователем boneset-jq
Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

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

Как сделать выдачу квеста при старте игры?

Речь про стартовый сюжетный квест? На первый взгляд, всё так же:

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

Имея распакованные конфиги/скрипты, возможность поиска файлов с указанным текстом (Total Commander), начальные навыки в ковырянии и понимание, что ты делаешь, можно пошагово выявить, что где убрать/отключить/переместить и пр.

Первый диалог с Сидоровичем - "escape_trader_start_dialog", в этом диалоге выдаётся инфопоршень, "толкающий" первое задание - "tutorial_wounded_start".

Можно выдать этот инфо прямо на старте, в том же рестрикторе, где отключили затемнение:

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

 

Однако, стоит понимать, что нужно теперь убрать паузу, пока говорит Сидор, его анимации и озвучку, а так же "открыть" дверь бункера и чёрт его знает, что ещё.

 

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

 

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

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

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

И чего только не найдёшь любопытства ради.

Кстати, а зачем ПЫС дублировали вот это вот пресловутое "Убить Стрелка" ?
 

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

 

bind_stalker.script:

--* проверка начала игры
     if self.bCheckStart then
        printf("SET DEFAULT INFOS")        
        if not has_alife_info("storyline_actor_start") and (level.name() == "l01_escape") then
--* поршень с привязаннным таском
            self.object:give_info_portion("storyline_actor_start")          
        end

 

+ info_protions.xml

 <info_portion id="storyline_actor_start">
    <task>storyline_eliminate_gunslinger</task>
  </info_portion>

 

 

 

 

И тут же рестриктор:

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

 

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {-esc_kill_gunslinger} nil %+esc_kill_gunslinger =run_postprocess(agr_u_fade)%

 

info_l01escape.xml

    <info_portion id="esc_kill_gunslinger">
        <task>storyline_eliminate_gunslinger</task>
...
    </info_portion>

 

 

 

---

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

Крот, да не смешно на самом деле: интересно, это обычное ПЫС-ское "как всегда" или действительно есть какой-то сермяжный смысл?

 

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

@Купер , это как и с прекондишенами:

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

    -- Лукаш
    t = {section = "logic@mil_freedom_lukash",
        idle = 0,
        prior = 20, state = {0, 3},
        squad = squad, group = groups[0],
        in_rest = "mil_freedom_wall_restrictor", out_rest = "",
        position_threshold = 600,
        predicate = function (info)
                             return info.profile_name == "mil_Svoboda_leader" and info.story_id == 707
                    end
        }
    table.insert(sj, t)    

***

Хотя, ты уже в курсе)

https://www.amk-team.ru/forum/topic/14288-soc-kovyryaemsya-v-faylah/?do=findComment&comment=1381521

 

@Купер , на самом деле, только два варианта думаю:

Разные люди делали и оставили так и этак.

А может, что бы наверняка... Но что может такого случится в штатном режиме, что бы один из вариантов не сработал?..

 

Изменено пользователем mole venomous
  • Спасибо 1

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

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

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

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

 

Клиент: Синхронизация... *

phase time: 10 ms *
phase cmem: 300837 K *
[win32]: free[2384324 K], reserved[216456 K], committed[1593460 K] * [ D3D ]: textures[858870 K] * [x-ray]: crt heap[300837 K], process heap[1067023 K], game lua[25699 K], engine lua[253 K], render[0 K] * [x-ray]: economy: strings[3802 K], smem[28537 K] [16-9] get_xml_name for[game_tutorials.xml] returns [game_tutorials.xml] [16-9] get_xml_name for[ui_credits.xml] returns [ui_credits.xml] [16-9] get_xml_name for[ui_movies.xml] returns [ui_movies.xml] [16-9] get_xml_name for[map_spots.xml] returns [map_spots.xml] [16-9] get_xml_name for[map_spots_escape.xml] returns [map_spots_escape.xml] [16-9] get_xml_name for[map_spots_garbage.xml] returns [map_spots_garbage.xml] [16-9] get_xml_name for[map_spots_agroprom.xml] returns [map_spots_agroprom.xml] [16-9] get_xml_name for[map_spots_darkvalley.xml] returns [map_spots_darkvalley.xml] [16-9] get_xml_name for[map_spots_bar.xml] returns [map_spots_bar.xml] [16-9] get_xml_name for[map_spots_military.xml] returns [map_spots_military.xml] [16-9] get_xml_name for[map_spots_radar.xml] returns [map_spots_radar.xml] [16-9] get_xml_name for[map_spots_mp.xml] returns [map_spots_mp.xml] [16-9] get_xml_name for[map_spots_relations.xml] returns [map_spots_relations.xml] [16-9] get_xml_name for[map_spots_lchangers.xml]
returns [map_spots_lchangers.xml]
! Invalid ogg-comment version, file: c:\program files (x86)\games\s.t.a.l.k.e.r. Тень Чернобыля\gamedata\sounds\weapons\generic_sounds\generic_close.ogg
! Invalid ogg-comment version, file: c:\program files (x86)\games\s.t.a.l.k.e.r. Тень Чернобыля\gamedata\sounds\weapons\knife\knife_kick_2.ogg

 

FATAL ERROR

 

[error]Expression : start_node && path

[error]Function : CXml::NavigateToNode

[error]File : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp

[error]Line : 97 [error]Description : NavigateToNode failed in XML file

[error]Arguments : gameplay\game_tasks.xml

Скрипт:

<objective>

<text>task_2_1</text> - ошибка

<map_location_type>green_location</map_location_type>

<object_story_id>Escape_anomaly_field</object_story_id>

</objective>
<objective>

 


И причём, игра эту ошибку нашла сначала в том скрипте, которого не было. А это значит, что где то в диалогах проблема. Я долго рылся и ничего не нашёл. Помогите мне, пожалуйста, сталкеры.

Добавлено  Murarius,

Перемещено

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

 

Откуда информация, что здесь ошибка? 

2 часа назад, stalkersd23134 сказал:

<text>task_2_1</text> - ошибка

 

На форуме ошибка Line 97:

https://www.amk-team.ru/forum/faq/5-spravochnik-vyletov-line-1-line-100/#elQuestion-68

Цитата:

В указанном файле в одном из диалогов игра не может найти первую фразу

  • Нравится 1
  • Полезно 1

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

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

Доброго времени суток, дорогие форумчане. Очень надеюсь, что пишу в нужную тему. Подскажите, пожалуйста, что означают параметры: Team, Squad и Group в параметрах Сталкера-НПС в СДК?
 

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

image.png

Так же хочется узнать, что такое stay и groups в параметрах general_lager/lair. Заранее низкий поклон за все ответы.

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

Хочу сделать продвинутый general_lager/lair для НПС. Чтобы они раз в какое-то время занимали работы, иногда менялись и тд.

 

  • Полезно 1

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

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

@mole venomous Нет, я имел в виду выдачу при старте именно игры, а не у сидоровича. Тоесть у меня спавн ГГ не у сидора. Нужно чтобы квест выдавался типо как квест со стрелком при начале игры.

7 минут назад, boneset-jq сказал:

@mole venomous Нет, я имел в виду выдачу при старте именно игры, а не у сидоровича. Тоесть у меня спавн ГГ не у сидора. Нужно чтобы квест выдавался типо как квест со стрелком при начале игры.

Короче, я сам догадался. Надо было в инфопоршне по выдаче квеста Стрелка просто свой квест прописать и готово!

Цитата

    <info_portion id="esc_kill_gunslinger">
        <task>storyline_eliminate_gunslinger</task>
        <task>test_quest</task> - Мой квест
        <article>about_enciclopedia</article>
        <article>sl_beginning</article>
    </info_portion>

 

 

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

@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:

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

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

@Nowislaw , вот тут и дальше.

Хмм... а вот тоже почитал бы с интересом на внятном языке как это всё работает :russian_ru:.

  • Спасибо 1
  • Согласен 2
Ссылка на комментарий
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
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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