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

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

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

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

 

[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
Ссылка на комментарий

@Купер Респект что ещё сказать. Хотя когда я сам meet добавлял не получалось но хоть как-то.:yahoo:

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

Boneset-HQ.gif

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

Я хочу создать рестриктор в который не должны заходить НПС. Какой тип рестриктора ставить и нужно ли его потом регистрировать у НПС?

На древнем форуме вычитал, что нужно сделать рестриктор с типом eRestrictorTypeNone но зарегистрировать как in рестриктор.

Если использовать eDefaultRestrictorTypeIn или eRestrictorTypeIn, то нужно ли их регистрировать в НПС?

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

Expression    : assertion failed
Function      : CKinematicsAnimated::Load
File          : E:\stalker\sources\trunk\xr_3da\SkeletonAnimated.cpp
Line          : 589
Description   : set_cnt<MAX_ANIM_SLOT

 

Лог. Что не так сделано?

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

Boneset-HQ.gif

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

@Graff46 определённые нпс или все нпс?

@boneset-hq объясни что делал, откати назад, что-то со слотами накосячил.

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

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

@imcrazyhoudini все, кроме 2 специальных нпс. У меня есть палатка, она динамическим объектом сделана, в нее вечно нпс упираются, но 2 нпс под специальной логикой стоят в палатке. Мб, как вариант сделать шейп рестриктора четко по геометрии палатки, т. к. 2 нпс стоят не внутри палатки, а впритык к ней. Я для простоты хотел сферическим шейпом окружить палатку, но тогда сфера много пространства занимает вокруг палатки.

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

@Graff46 если спавнишь через сдк или акдк можно назначить им то ли в in то ли в out рестриктор, в который они не могут зайти.

 

В ЧН эти настройки прямо в логику перенесли, так что можешь оттуда взять это если не через сдк/акдк спавнишь.

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

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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