Перейти к содержанию
Overf1rst

[CoP] Модострой: вопросница

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

 
 
Emilien220

Здравствуйте уважаемые мододелы продолжил делать мод на зп и решил сделать панель для ввода кода для двери однако когда подхожу и нажимаю ф на кнопку для ввода цифр получаю вылет :
 

[LUA] Error: [string "xr_logic"]:639: attempt to call a nil value

FATAL ERROR

[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : F:\ixray-team\ixray-1.6-stcop\src\xrScripts\script_storage.cpp
[error]Line          : 530
[error]Description   : see call_stack for details!


хочу поделится custom data моей панели для ввода кода:
 

Спойлер

 

[logic]
active = ph_button@wait

[ph_button@wait]
anim = off
on_press = %=ui_code_pad.open_my_door_code%
tip_text = "st_btn_enter_code"
on_info = {+lab_door_unlocked} ph_button@unlocked

[ph_button@unlocked]
anim = on
tip_text = "st_btn_access_granted"

 

Спойлер

 

class "UI_CodePad" (CUIScriptWnd)

function UI_CodePad:__init(correct_code, on_success_info) super()
    self.correct_code = tostring(correct_code or "1234")
    self.on_success_info = on_success_info
    self.entered_code = ""

    self:InitControls()
    self:InitCallBacks()
end

function UI_CodePad:__finalize()
end

function UI_CodePad:InitControls()
    self:SetWndRect(Frect():set(0, 0, 1024, 768))

    local xml = CScriptXmlInit()
    xml:ParseFile("ui_code_pad.xml")

    self.dialog = xml:InitStatic("background", self)

    -- Дисплей
    self.display = xml:InitTextWnd("code_display", self.dialog)
    self.display:SetText("----")

    -- Кнопки
    self.btn_1 = xml:Init3tButton("btn_1", self.dialog)
    self:Register(self.btn_1, "btn_1")

    self.btn_2 = xml:Init3tButton("btn_2", self.dialog)
    self:Register(self.btn_2, "btn_2")

    self.btn_3 = xml:Init3tButton("btn_3", self.dialog)
    self:Register(self.btn_3, "btn_3")

    -- Сброс и Подтверждение
    self.btn_clear = xml:Init3tButton("btn_clear", self.dialog)
    self:Register(self.btn_clear, "btn_clear")

    self.btn_ok = xml:Init3tButton("btn_ok", self.dialog)
    self:Register(self.btn_ok, "btn_ok")
end

function UI_CodePad:InitCallBacks()
    -- Безопасная привязка через методы класса (без анонимных функций)
    self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.OnBtn1, self)
    self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.OnBtn2, self)
    self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.OnBtn3, self)

    self:AddCallback("btn_clear", ui_events.BUTTON_CLICKED, self.OnClear, self)
    self:AddCallback("btn_ok", ui_events.BUTTON_CLICKED, self.OnCheckCode, self)
end

-- Обработчики нажатий на кнопки
function UI_CodePad:OnBtn1()
    self:AddDigit("1")
end

function UI_CodePad:OnBtn2()
    self:AddDigit("2")
end

function UI_CodePad:OnBtn3()
    self:AddDigit("3")
end

function UI_CodePad:AddDigit(digit)
    if string.len(self.entered_code) < 4 then
        self.entered_code = self.entered_code .. digit
        self.display:SetText(self.entered_code)
    end
end

function UI_CodePad:OnClear()
    self.entered_code = ""
    self.display:SetText("----")
end

function UI_CodePad:OnCheckCode()
    if self.entered_code == self.correct_code then
        if self.on_success_info and self.on_success_info ~= "" then
            db.actor:give_info_portion(self.on_success_info)
        end
        
        -- Звук успеха
        local snd = sound_object([[device\pda\pda_tip]])
        if snd and snd:path() ~= "" then 
            snd:play(db.actor, 0, sound_object.s2d) 
        end

        self:OnClose()
    else
        self.display:SetText("ERR")
        self.entered_code = ""
        
        -- Звук ошибки
        local snd = sound_object([[device\pda\pda_alarm]])
        if snd and snd:path() ~= "" then 
            snd:play(db.actor, 0, sound_object.s2d) 
        end
    end
end

function UI_CodePad:OnKeyboard(dik, keyboard_action)
    CUIScriptWnd.OnKeyboard(self, dik, keyboard_action)
    if keyboard_action == ui_events.WINDOW_KEY_PRESS then
        if dik == DIK_keys.DIK_ESCAPE then
            self:OnClose()
        end
    end
    return true
end

function UI_CodePad:OnClose()
    self:GetHolder():start_stop_menu(self, true)
end

-- Глобальная функция для вызова из логики (customdata)
function start_code_ui(code, info_portion)
    local hud = UI_CodePad(code, info_portion)
    level.start_stop_menu(hud, true)
end

-- Вызов конкретно для этой двери
function open_my_door_code()
    local hud = UI_CodePad("1234", "lab_door_unlocked")
    level.start_stop_menu(hud, true)
end

 

подскажите пожайлуста что я делаю не так?


Дополнено 32 минуты спустя
32 минуты назад, Emilien220 сказал:

Здравствуйте уважаемые мододелы продолжил делать мод на зп и решил сделать панель для ввода кода для двери однако когда подхожу и нажимаю ф на кнопку для ввода цифр получаю вылет :
 

[LUA] Error: [string "xr_logic"]:639: attempt to call a nil value

FATAL ERROR

[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : F:\ixray-team\ixray-1.6-stcop\src\xrScripts\script_storage.cpp
[error]Line          : 530
[error]Description   : see call_stack for details!


хочу поделится custom data моей панели для ввода кода:
 

  custom data (Показать контент)

 

[logic]
active = ph_button@wait

[ph_button@wait]
anim = off
on_press = %=ui_code_pad.open_my_door_code%
tip_text = "st_btn_enter_code"
on_info = {+lab_door_unlocked} ph_button@unlocked

[ph_button@unlocked]
anim = on
tip_text = "st_btn_access_granted"

 

  scrpt code pad (Показать контент)

 

class "UI_CodePad" (CUIScriptWnd)

function UI_CodePad:__init(correct_code, on_success_info) super()
    self.correct_code = tostring(correct_code or "1234")
    self.on_success_info = on_success_info
    self.entered_code = ""

    self:InitControls()
    self:InitCallBacks()
end

function UI_CodePad:__finalize()
end

function UI_CodePad:InitControls()
    self:SetWndRect(Frect():set(0, 0, 1024, 768))

    local xml = CScriptXmlInit()
    xml:ParseFile("ui_code_pad.xml")

    self.dialog = xml:InitStatic("background", self)

    -- Дисплей
    self.display = xml:InitTextWnd("code_display", self.dialog)
    self.display:SetText("----")

    -- Кнопки
    self.btn_1 = xml:Init3tButton("btn_1", self.dialog)
    self:Register(self.btn_1, "btn_1")

    self.btn_2 = xml:Init3tButton("btn_2", self.dialog)
    self:Register(self.btn_2, "btn_2")

    self.btn_3 = xml:Init3tButton("btn_3", self.dialog)
    self:Register(self.btn_3, "btn_3")

    -- Сброс и Подтверждение
    self.btn_clear = xml:Init3tButton("btn_clear", self.dialog)
    self:Register(self.btn_clear, "btn_clear")

    self.btn_ok = xml:Init3tButton("btn_ok", self.dialog)
    self:Register(self.btn_ok, "btn_ok")
end

function UI_CodePad:InitCallBacks()
    -- Безопасная привязка через методы класса (без анонимных функций)
    self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.OnBtn1, self)
    self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.OnBtn2, self)
    self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.OnBtn3, self)

    self:AddCallback("btn_clear", ui_events.BUTTON_CLICKED, self.OnClear, self)
    self:AddCallback("btn_ok", ui_events.BUTTON_CLICKED, self.OnCheckCode, self)
end

-- Обработчики нажатий на кнопки
function UI_CodePad:OnBtn1()
    self:AddDigit("1")
end

function UI_CodePad:OnBtn2()
    self:AddDigit("2")
end

function UI_CodePad:OnBtn3()
    self:AddDigit("3")
end

function UI_CodePad:AddDigit(digit)
    if string.len(self.entered_code) < 4 then
        self.entered_code = self.entered_code .. digit
        self.display:SetText(self.entered_code)
    end
end

function UI_CodePad:OnClear()
    self.entered_code = ""
    self.display:SetText("----")
end

function UI_CodePad:OnCheckCode()
    if self.entered_code == self.correct_code then
        if self.on_success_info and self.on_success_info ~= "" then
            db.actor:give_info_portion(self.on_success_info)
        end
        
        -- Звук успеха
        local snd = sound_object([[device\pda\pda_tip]])
        if snd and snd:path() ~= "" then 
            snd:play(db.actor, 0, sound_object.s2d) 
        end

        self:OnClose()
    else
        self.display:SetText("ERR")
        self.entered_code = ""
        
        -- Звук ошибки
        local snd = sound_object([[device\pda\pda_alarm]])
        if snd and snd:path() ~= "" then 
            snd:play(db.actor, 0, sound_object.s2d) 
        end
    end
end

function UI_CodePad:OnKeyboard(dik, keyboard_action)
    CUIScriptWnd.OnKeyboard(self, dik, keyboard_action)
    if keyboard_action == ui_events.WINDOW_KEY_PRESS then
        if dik == DIK_keys.DIK_ESCAPE then
            self:OnClose()
        end
    end
    return true
end

function UI_CodePad:OnClose()
    self:GetHolder():start_stop_menu(self, true)
end

-- Глобальная функция для вызова из логики (customdata)
function start_code_ui(code, info_portion)
    local hud = UI_CodePad(code, info_portion)
    level.start_stop_menu(hud, true)
end

-- Вызов конкретно для этой двери
function open_my_door_code()
    local hud = UI_CodePad("1234", "lab_door_unlocked")
    level.start_stop_menu(hud, true)
end

 

подскажите пожайлуста что я делаю не так?

ps я нашел проблему оказывается я забыл добавить вызов функции через xr.effects 

 


Дополнено 11 минуты спустя

Еще имеется вопрос я делаю мод где будет 3 главы первая готова вторая на 50 процентов 3 0 процентов но 3 глава ну очень короткая когда можно анонсировать проект для ребят? Или стоит закончить полностью и потом уже анонс делать?

  • Смех 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
mic900

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
Sovkastom

Парни есть у кого локация Радар под ЗП с исходниками СДК? Перенести из ТЧ локацию умения нет.

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


Ссылка на сообщение
Поделиться на другие сайты
 
Владос2012

@SovkastomК сожаленью у меня нет, но перенести в ЗП просто


Дополнено 3 минуты спустя

Сначала ищи локацию, которую ты хочешь перенести. Перенеси в gamedata своей игры и СДК, её террейн в текстуры СДК и игры. Потом в конфигах прописываешь локацию для того, чтобы смог компилировать. Декомпилируешь эту локацию и заходишь в Level Editor, делаешь, что хочешь там, потом надо компилировать AL-сетку, спавн, а лучше всё. Компилируешь всё это через батники и ложишь всё в свою игру - спавн в папке spawns, AL-сетка в папке уровня(или геометрия). Всё

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


Ссылка на сообщение
Поделиться на другие сайты
 
Emilien220
В 26.10.2026 в 23:15, mic900 сказал:

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

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


Дополнено 17 минуты спустя

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
denis2000
19 часов назад, Emilien220 сказал:

Я смог это реализовать очень костыльным методом создав вне уровня лвл чейнджер и телепортируя гг к нему.

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

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
Pavel2000
15 часов назад, Emilien220 сказал:

Выглядит маскимально костыльно

Если вы имеете в виду то что видно как гг перемещается то перед перемещением можно сделать затемнение экрана как это делали разрабы в оригинале

  • Сталкерский лайк 1

 1540412914_ezgif.com-optimize(1).gif.ec7250e918399802d8fe85d6d4fd7081.gif

«Если долго мучиться, что-нибудь получится»
Испытуемый №28: Начало и Испытуемый №28: Игры Разума

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


Ссылка на сообщение
Поделиться на другие сайты
 
Emilien220
19 часов назад, denis2000 сказал:

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

Все понял благодарю!

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


Ссылка на сообщение
Поделиться на другие сайты
 
Emilien220

Здравствуйте уважаемые мододелы вопрос как при получении инфопоршня заблокировать переход(lvl_changer) пробовал через story id через custom data самого чейнджера ничего не робит помогите пожайлуста.

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


Ссылка на сообщение
Поделиться на другие сайты
 
mic900
15 часов назад, Emilien220 сказал:

Здравствуйте уважаемые мододелы вопрос как при получении инфопоршня заблокировать переход(lvl_changer) пробовал через story id через custom data самого чейнджера ничего не робит помогите пожайлуста.

В xr_effects есть закомментированные функции function enable_level_changer(actor, npc, p) и function disable_level_changer(actor, npc, p). Попробуй раскомментировать их и использовать в логике, пример: on_info = {+esc_transition_locked} %=disable_level_changer(esc_to_garbage)%. В level_changer в custom_data нужен story_id: [story_object] story_id = esc_to_garbage

  • Сталкерский лайк 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
Emilien220

Спасибо огромное за ответ и у меня еще вопрос как преместить на той же локации спавн элемент (машину ниву белую)там тоже самое проверил стори айди все испробовал так и не поянял как xr effects я тоже проверил на случай вдруг опять зацементированные функции есть но вроде ничего не нашел.

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


Ссылка на сообщение
Поделиться на другие сайты
 
denis2000

Emilien220 Собственно функция всего одна, для спавна декораций: xr_effects.spawn_object
А вот если вы собираетесь именно полноценное транспортное средство, то тут SDK понадобится.

Изменено пользователем denis2000
  • Жму руку 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
Владос2012

Всем привет. Сегодня делал логику кнопки. Просто нажатие - работает, ключ-карта - работает, но когда наступает очередь ввода кода - вылет.

[logic]
active = ph_button@locked

[ph_button@locked]
anim = button_true
tooltip = tips_labx16switcher_press
on_info = {+dver} ph_button@unlocked
on_press = %+dver%

[ph_button@no_card]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_access_card)} ph_button@has_card

[ph_button@has_card]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@kod
on_info = {!actor_has_item(zat_a23_access_card)} ph_button@no_card

[ph_button@unlocked]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_access_card)} ph_button@has_card

[ph_button@kod]
code = 1243
on_code = %+x11_door_kanal_done%

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


Ссылка на сообщение
Поделиться на другие сайты
 
Emilien220
8 минут назад, Владос2012 сказал:

Всем привет. Сегодня делал логику кнопки. Просто нажатие - работает, ключ-карта - работает, но когда наступает очередь ввода кода - вылет.

[logic]
active = ph_button@locked

[ph_button@locked]
anim = button_true
tooltip = tips_labx16switcher_press
on_info = {+dver} ph_button@unlocked
on_press = %+dver%

[ph_button@no_card]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_access_card)} ph_button@has_card

[ph_button@has_card]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@kod
on_info = {!actor_has_item(zat_a23_access_card)} ph_button@no_card

[ph_button@unlocked]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_access_card)} ph_button@has_card

[ph_button@kod]
code = 1243
on_code = %+x11_door_kanal_done%

Хоть я и новичок но в сталкере зп уже реализована панель для ввода кода готовая функция вот мой пример как у меня:
 

function open_lab_door_code(actor, npc)
    local numpad = ui_numpad.numpad(npc)
    level.start_stop_menu(numpad, true)
end

class "lab_door_code_handler"

function lab_door_code_handler:__init()
end

function lab_door_code_handler:OnNumberReceive(code)
    if code == "1986" then
        db.actor:give_info_portion("lab_door_unlocked")
    end
end

function open_lab_door_code(actor, npc)
    local handler = lab_door_code_handler()
    local numpad = ui_numpad.numpad(handler)
    level.start_stop_menu(numpad, true)
end

а в самом сдк на спавн элементе в кастом дата такой код :

Спойлер

 

[logic]
active = ph_button@wait

[ph_button@wait]
anim = off
on_press = %=open_lab_door_code%
tip_text = "st_btn_enter_code"
on_info = {+lab_door_unlocked} ph_button@unlocked

[ph_button@unlocked]
anim = on
tip_text = "st_btn_access_granted"

 


Дополнено 8 минуты спустя
4 часа назад, denis2000 сказал:

Emilien220 Собственно функция всего одна, для спавна декораций: xr_effects.spawn_object
А вот если вы собираетесь именно полноценное транспортное средство, то тут SDK понадобится.

Да вы были правы функция работает а машина (нива достаточно написать m_car и та самая белая нива появится)

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
denis2000

Владос2012 В секции кнопки ph_button вместо секции кодового замка ph_code пытаетесь задать код, причем опустив обязательные параметры.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
Начинающий модмейкер

Делаю свой 1 мод на сталкер зов Припяти, нужна помощь с 1 вопросом:

 

как сделать функцию или что либо, чтобы диалог у персонажа появлялся после разговора с 1 персонажем, то есть, например: я подошел к NPC и он отказал мне в какой-либо информации, после этого я подошел к другому NPC и он дал эту информацию, только в таком порядке, и каждый из диалогов должен появляться только 1 раз, проговорил его и больше он в окне диалогов не появляется.

У меня структура диалога такая:

<Dialog>

    <Dont_has_info>название инфопоршня</Dont_has_info>

           <Dialog id="...">

           <Phrase _list>

                  <Phrase id="0"(то есть диалог начинает ГГ)

                  <Text>...</text>

                  <Givi_info>название инфопоршня, которое прописано сверху</give info>

                  </Phrase>

             </Phrase_list>

</Dialog>

То есть пока инфопоршня нет( не назначен), диалог есть, а после последней фразы я даю информацию по этому инфопоршню(give info) и закрываю этим самым 1 диалог потом я делаю второй диалог после этого:

<Dialog>

     <Has_info>название инфопоршня от прошлого диалога<has_info>

     <Dialog id="..." >

     <Phrase_ list>

         <Phrase id="0">

                 <Text>...</text>

             Не знаю,  в этом месте загвоздка, ниже пропишу ее

         </Phrase>

     </Phrase_list>

</Dialog>

 

И он работает, если поговорил с 1 NPC, открывается диалог со вторым NPC и убирается возможность ещё раз проговорить этот диалог с 1 NPC, а у 2 NPC можно миллион раз спросить об этом, я понимаю что это можно исправить сюжетом, чтобы он там ушел на другую локацию, погиб и т.д., но хотелось бы сделать это правильно, потому что делать так с каждым персонажем не хотелось бы, в коде мог допустить ошибки незначительные, т.к. писал с телефона,  заранее благодарен 

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


Ссылка на сообщение
Поделиться на другие сайты
 
Disam

Начинающий модмейкер Нужно и во втором диалоге добавить отдельный инфопоршень с dont_has_info и give_info, тогда он повторятся не будет.

Изменено пользователем Disam
  • Жму руку 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
Начинающий модмейкер

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

Файл Dialogs_zaton.xml

<dialog id="first_quest">
        <dont_has_info>zat_boroda_first_quest</dont_has_info>
        <phrase_list>
            <phrase id="0">
                <text>zat_boroda_first_quest_0</text>
                <next>1</next>
            </phrase>
            <phrase id="1">
                <text>zat_boroda_first_quest_1</text>
                <next>2</next>
            </phrase>
            <phrase id="2">
                <text>zat_boroda_first_quest_2</text>
                <action>mod_functions.zat_vodka_quest_start</action>
            </phrase>
            <phrase id="3">
                <precondition>has_item("vodka")</precondition>
                <precondition>mod_functions.check_vodka_quest_status == true</precondition>
                <text>zat_boroda_first_quest_3</text>
                <action>mod_functions.complete_vodka_quest</action>
                <next>4</next>
            </phrase>    
            <phrase id="4">
                <text>zat_boroda_first_quest_4</text>
                <precondition>db.actor:has_info_portion("zat_vodka_quest_done")</precondition>
                <action>dialogs.break_dialog</action>
                <give_info>zat_boroda_first_quest</give_info>
            </phrase>
        </phrase_list>                                                                                                                                                  </dialog>

Файл mod_functions.script

function zat_vodka_dialog_out(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") -- Забираем у ГГ водку
    dialogs.relocate_money_to_actor(first_speaker, second_speaker, 500) -- Выдаём ГГ 500 рублей
end

function zat_vodka_dialog_check(first_speaker, second_speaker)
    return db.actor:object("vodka") ~= nil
end

function zat_vodka_quest_start()
    task_manager.get_task_manager():give_task("zat_find_vodka_quest")
end

function zat_vodka_dialog_out(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") -- Забираем у ГГ водку
end

function set_vodka_quest_done()
    db.actor:give_info_portion("zat_vodka_quest_done")
end

function complete_vodka_quest()
    db.actor:remove_item("vodka", 1)
    db.actor:give_info_portion("zat_vodka_quest_done")
    db.actor:set_money(db.actor:get_money() + 10000)

end
function check_vodka_quest_status()
    if db.actor:has_info_portion("zat_vodka_quest_done") then
        return false
    end
    if task_manager.get_task_manager():has_active_task("zat_find_vodka_quest") and db.actor:has_item("vodka") then
        return true
    end
    return "searching"
end

Я понимаю, что разбираться в чужом коде тяжело, но я просто не могу понять, что я делаю не так, уже в ИИ залез, не помогает, надеюсь на помощь брата сталкера.Заранее спасибо.

Изменено пользователем Начинающий модмейкер

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


Ссылка на сообщение
Поделиться на другие сайты
 
Etil

Начинающий модмейкер в <precondition></precondition> вписывай название_скрипта.название_функции, а не проверку на выполнение этой функции. Если функция возвращает true, то условие выполняется. Если false, то фразы не будет. В теории, Lua должен бы приравнивать строку к true, но я хз, будет ли это работать в диалогах. Так что я всегда прописываю либо return true , либо return false .


Дополнено 2 минуты спустя

Кроме того, у тебя вообще нет перехода на 3 фразу. Ты забыл его добавить.


Дополнено 8 минуты спустя

Чем дольше всматривался в диалог тем хуже становилось. И учти, я понятия не имею, что у тебя за реплики в диалоге. Такая структура МОЖЕТ работать, но не обязательно будет работать так, как ты того хочешь. Если желаешь более полный ответ, скинь реплики в диалоге и способ его вызова (логика или профиль персонажа, ты начинаешь разговор или НПС).
 

Спойлер

<dialog id="first_quest">
        <dont_has_info>zat_vodka_quest_done</dont_has_info>
        <phrase_list>
            <phrase id="0">
                <text>zat_boroda_first_quest_0</text>
                <next>1</next>
                <next>3</next>
                <next>5</next>
            </phrase>
            <phrase id="1">
                <text>zat_boroda_first_quest_1</text>
                <next>2</next>
            </phrase>
            <phrase id="2">    
            <dont_has_info>zat_vodka_quest_started</dont_has_info>
                <text>zat_boroda_first_quest_2</text>
            <give_info>zat_vodka_quest_started</give_info>
                <action>mod_functions.zat_vodka_quest_start</action>
            </phrase>
            <phrase id="3">
            <has_info>zat_vodka_quest_started</has_info>
                <precondition>mod_functions.zat_vodka_dialog_check</precondition>
                <text>zat_boroda_first_quest_3</text>
                <action>mod_functions.complete_vodka_quest</action>
                <next>4</next>
            </phrase>    
            <phrase id="4">
                <text>zat_boroda_first_quest_4</text>
                <action>dialogs.break_dialog</action>
            </phrase>
            <phrase id="5">
                <text>vodki_net_no_vi_derzhites_phrase</text>
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>  

 


Дополнено 18 минуты спустя

Кхм кхм, здравствуйте, товарищи знатоки. Сталкивался ли кто-либо с такой проблемой, что мутанты не могут атаковать игрока? Пытаются, но не могут. Дистанционные атаки работают (прыжки, атаки контролёра), а ближний бой - нет. Как это лечить? Проблема в ИИ сетке, логике, чём-то другом?

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
Начинающий модмейкер

Etil Спасибо за помощь, но использовав твой код, ничего не изменилось, диалог о сдачи квеста не появляется, так еще теперь, если попытаться дважды проговорить диалог о квесте игра вылетает, может я чего-то не понимаю, либо что-то еще. А реплики вообще влияют на код как-то, реплики это же последнее дело(они есть).

 

Изменено пользователем Начинающий модмейкер

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


Ссылка на сообщение
Поделиться на другие сайты
 
Etil

Начинающий модмейкер Без реплик я не понимаю, какая фраза означает что. И я вынужден гадать, кто и что говорит в ней.


Дополнено 2 минуты спустя

Также не забывай, что для теста диалога нужно загрузить сохранение, сделанное ДО того, как ты его начал. Если ты загружал сохранение, сделанное уже после того, как ты поговорил с НПС и промотал поломанный диалог, то и результата не будет.

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
Начинающий модмейкер

Etil Ну я же не настолько начинающий, естественно сохранение сделано до.

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


Ссылка на сообщение
Поделиться на другие сайты
 
Etil

Начинающий модмейкер Тогда реплики в студию! И способ запуска диалога, вид диалога тоже.

  • Аплодисменты 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
Начинающий модмейкер

Etil Реплики, из файла st_dialods_zaton.xml 

<string id="zat_boroda_first_quest_0">
        <text>Может работа какая есть?</text>
    </string>
    <string id="zat_boroda_first_quest_1">
        <text>Есть конечно, принеси мне бутылку водки.</text>
    </string>
    <string id="zat_boroda_first_quest_2">
        <text>Сейчас принесу.</text>
    </string>
    <string id="zat_boroda_first_quest_3">
        <text>Держи твою водку.</text>
    </string>
    <string id="zat_boroda_first_quest_4">
        <text>Держи, хорошая работа.</text>
    </string>


Дополнено 2 минуты спустя

Etil Что значит способ запуска диалога и его вид, могу еще скинуть вот это, файл с самим квестом

[zat_find_vodka_quest]
icon = ui_inGame2_Put_na_plato
prior = 10
storyline = false
title = {=actor_has_item(vodka)} zat_bring_vodka_name, zat_find_vodka_name
descr = {=actor_has_item(vodka)} zat_bring_vodka_desc, zat_find_vodka_desc
target = nil
reward_money = 10000
condlist_0 = {+zat_vodka_quest_done} complete

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


Ссылка на сообщение
Поделиться на другие сайты
 
Etil

Начинающий модмейкер Тут нужно два диалога, а не один. Первый на квест, второй на сдачу квеста. Оба должны быть прописаны НПС. Предыдущий код был с небольшой проблемой - я не заметил, что ты не отправил закрывающий тег   </dialog>, без которого игра крашилась.

Спойлер

    <dialog id="first_quest">
        <dont_has_info>zat_vodka_quest_started</dont_has_info>
        <phrase_list>
            <phrase id="0">
                <text>zat_boroda_first_quest_0</text>
                <next>1</next>
            </phrase>
            <phrase id="1">
                <text>zat_boroda_first_quest_1</text>
                <next>2</next>
            </phrase>
            <phrase id="2">    
                <text>zat_boroda_first_quest_2</text>
                <give_info>zat_vodka_quest_started</give_info>
                <action>mod_functions.zat_vodka_quest_start</action>
                <action>dialogs.break_dialog</action>
            </phrase>
    </phrase_list> 
    </dialog>
    <dialog id="first_quest_reward">
        <precondition>mod_functions.zat_vodka_dialog_check</precondition>
        <dont_has_info>zat_vodka_quest_done</dont_has_info>
        <has_info>zat_vodka_quest_started</has_info>
        <phrase_list>
            <phrase id="0">
                <text>zat_boroda_first_quest_3</text>
                <next>1</next>
            </phrase>
            <phrase id="1">    
                <text>zat_boroda_first_quest_4</text>
                <action>mod_functions.complete_vodka_quest</action>
            </phrase>
        </phrase_list>  
    </dialog> 

 


Дополнено 1 минуту спустя

Начинающий модмейкер Грубо говоря, диалог может начинать либо игрок, либо НПС. 99% моих диалогов начинает НПС, а не игрок. Диалог можно прописать либо в логике, либо в профиле НПС. Впрочем, по текстовым фразам и так всё понятно.

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

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн

    • mic900

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек. Оставаясь на сайте, вы подтверждаете свое согласие на их использование. Политика конфиденциальности | Условия использования