Случайная подборка модов
«В аду… Псы»
3.6
Зимний путь
3.4
ArmSTALKER: Warzone 2.0
3.9
Nature Winter v2.0 «Квантовый скачок»
4.0
MISERY 2.2
4.1
Время Альянса 3. Связь Времен
3.4
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
[CoP] Модострой: вопросница
Российская Федерация  Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

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

Тема посвящена моддингу на платформе Зов Припяти.

Соседние темы: Тень Чернобыля / Чистое небо.


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

  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.

  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).

  • Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
  •   Злобная реклама
    Воскресенье, 31.12.2017, 13:17
    Статус:
    Сообщений: 666
    Регистрация: 11.06.2015
    Российская Федерация  sergej5500
    Суббота, 06.10.2018, 17:38 | Сообщение # 2371
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Всем привет. В ЗП есть функция.

    function npc_has_item(actor, npc, p)
    return p[1] ~= nil and npc:object( p[1] ) ~= nil
    end

    Проверяет, есть ли у непися что-то.

    На основе её сделал функцию для инвентарного ящика.

    -- есть ли в инвентарном ящике некий предмет?
    function inv_box_has_item(actor, obj, p)
    return p[1] ~= nil and obj:object(p[1]) ~= nil
    end


    Сделал ящик. Прописал логику.

    [logic]
    active = ph_idle@spawn

    [ph_idle@spawn]
    tips = st_default_rukzak
    nonscript_usable = true
    on_info = {=inv_box_has_item(wpn_ak74)} ph_idle@no_enable

    [ph_idle@no_enable]
    tips = st_no_default_rukzak
    nonscript_usable = false

    Если в ящик засунуть АК-74, то он станет неюзабельным. Кладу туда АК и ничего не происходит. Ящик юзабелен.
    Если я пишу логику так

    [logic]
    active = ph_idle@spawn

    [ph_idle@spawn]
    tips = st_default_rukzak
    nonscript_usable = true
    on_info = {!inv_box_has_item(wpn_ak74)} ph_idle@no_enable

    [ph_idle@no_enable]
    tips = st_no_default_rukzak
    nonscript_usable = false

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

    Как это исправить?
      Злобная реклама
    Суббота, 06.10.2018, 17:38
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  makdm
    Суббота, 06.10.2018, 18:33 | Сообщение # 2372
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    Как это исправить?


    function inv_box_has_item( actor, inv_box, p )
    if p and p[1] then
    local item_section = p[ 1 ]
    local function relocate( inv_box, item )
    if item_section == item:section() then
    return true
    end
    end
    inv_box:iterate_inventory_box( relocate, inv_box )
    end
    return false
    end

    Насколько я помню вам такая функция мною ранее уже была предоставлена. cool
      Злобная реклама
    Суббота, 06.10.2018, 18:33
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  denis2000
    Суббота, 06.10.2018, 18:46 | Сообщение # 2373
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Цитата svo6o9a ()
    я все предъявил, я кинул сайт, по которому я все делал, в точности

    А я вам сразу и ответил: Все работает - косяк ваш! Хоть десять ссылок на уроки кидайте ошибка в 100% случаев в gamedata.

    Цитата Бессмертный ()
    Как это устранить?

    Устраните ошибки в конфигурации конкретного объекта: level_changer_from_l02_garbage_old_to_l04_darkvalley_old
    Раз на него ссылается программа в своем логе.

    sergej5500, У ГГ есть колбек на взятие предмета из ящика (callback.take_item_from_box) не хотите задействовать его вместо периодической проверки предмета в ящике?
    Сообщение отредактировал denis2000 - Суббота, 06.10.2018, 19:20
      Злобная реклама
    Суббота, 06.10.2018, 18:46
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  sergej5500
    Суббота, 06.10.2018, 19:24 | Сообщение # 2374
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Цитата makdm ()
    Насколько я помню вам такая функция мною ранее уже была предоставлена.


    попробовал. Результата нет. Что ваша функция, что моя - результат один.

    При проверке на отсутствие ящик переключается. Вариант

    on_info = {!inv_box_has_item(wpn_ak74)} ph_idle@no_enable

    При проверке на наличие ящик остается на первой секции.
      Злобная реклама
    Суббота, 06.10.2018, 19:24
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  denis2000
    Суббота, 06.10.2018, 19:30 | Сообщение # 2375
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    sergej5500, Может это и не относиться к данному случаю, но я помню проблему которая возникала с багажником транспорта в некоторых модах ТЧ, она заключалась в том что предмет помещенный в багажник вовсе не сразу подхватывался движком и требовались манипуляции с переводом его в офлайн.

    Возможно суть вашей проблемы кроется в тех же затыках движка и проверка наличия предмета не срабатывает по аналогичным причинам. Что если объект будет сразу при спавне лежать в ящике?

    Или посмотрите в сторону использования колбека.
    Сообщение отредактировал denis2000 - Суббота, 06.10.2018, 19:33
      Злобная реклама
    Суббота, 06.10.2018, 19:30
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  makdm
    Суббота, 06.10.2018, 19:34 | Сообщение # 2376
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    попробовал. Результата нет. Что ваша функция, что моя - результат один.

    Хорошо, пусть будет по вашему.
    Тогда вот такую функцию попробуйте:

    function inv_box_has_item( actor, inv_box, p )
    local count = 0
    if p and p[1] then
    local item_section = p[ 1 ]
    local function relocate( inv_box, item )
    if item_section == item:section() then
    count = 1
    end
    end
    inv_box:iterate_inventory_box( relocate, inv_box )
    end
    return count > 0
    end
      Злобная реклама
    Суббота, 06.10.2018, 19:34
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  sergej5500
    Суббота, 06.10.2018, 19:38 | Сообщение # 2377
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Цитата denis2000 ()
    требовались манипуляции с переводом его в офлайн.


    пробовал бегать на другой конец локации. Бокс при этом точно уходит в оффлайн. Никаких изменений. Проверка на наличие не срабатывает. На отсутствие срабатывает мгновенно после спавна бокса.
      Злобная реклама
    Суббота, 06.10.2018, 19:38
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  makdm
    Суббота, 06.10.2018, 19:43 | Сообщение # 2378
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    пробовал бегать на другой конец локации. Бокс при этом точно уходит в оффлайн.

    Инвентарный ящик НИКОГДА не уходит в оффлайн, пока вы не покинете локацию.
    Он , как и рестриктор, ВСЕГДА онлайн пока вы на локации.
    Сообщение отредактировал makdm - Суббота, 06.10.2018, 20:01
      Злобная реклама
    Суббота, 06.10.2018, 19:43
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  sergej5500
    Суббота, 06.10.2018, 19:53 | Сообщение # 2379
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    makdm,

    Последний вариант функции сработал. Возник еще вопрос. Можно ли принудительно закрыть окно осмотра бокса? Какая функция подойдет?
      Злобная реклама
    Суббота, 06.10.2018, 19:53
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  makdm
    Суббота, 06.10.2018, 20:00 | Сообщение # 2380
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    Последний вариант функции сработал.

    Прошлый вариант был не хуже. biggrin

    Цитата sergej5500 ()
    Можно ли принудительно закрыть окно осмотра бокса?


    get_hud():HideActorMenu()

    не работает?
      Злобная реклама
    Суббота, 06.10.2018, 20:00
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  sergej5500
    Суббота, 06.10.2018, 20:33 | Сообщение # 2381
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Цитата makdm ()
    не работает?


    Работает. Заинтересовался вопросом. Функция от разраблов

    function npc_has_item(actor, npc, p)
    return p[1] ~= nil and npc:object( p[1] ) ~= nil
    end

    для НПС работает отлично. Проверяет присутствие без всякой итерации. Тестировал на неписях. Ту же функцию прописал боксу.

    on_info = {!npc_has_item(wpn_sig550)} ph_idle@no_enable %=disable_hud%

    Вылета не было. Отсутствие предмета проверяется отлично - бокс переключился. А вот присутствие ни в какую. Интересно, почему функция может пересчитать рюкзак непися и не может инвентарный ящик.
      Злобная реклама
    Суббота, 06.10.2018, 20:33
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  makdm
    Суббота, 06.10.2018, 20:43 | Сообщение # 2382
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    Интересно, почему функция может пересчитать рюкзак непися и не может инвентарный ящик.

    Потому что к разным классам объектов применяются различные методы проверки.
    Так закодировано в движке.
      Злобная реклама
    Суббота, 06.10.2018, 20:43
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  Neptun
    Воскресенье, 07.10.2018, 06:00 | Сообщение # 2383
    Связной
    Статус:
    Бывалый:
    Сообщений: 672
    Награды: 9
    Регистрация: 25.03.2012

    Неужели вопрос настолько сложный, что ни у кого нет ответа?
    Цитата mmihaill ()
    Как правильно зарегистрировать разговор НПС через ПДА? То есть есть звук говорения и есть его дубляж типа по ПДА говорит. Регистрировал по стандарту через СДК как для обычного говорения НПС с одинаковыми настройками звука в обоих случаях.
      Злобная реклама
    Воскресенье, 07.10.2018, 06:00
    Статус:
    Сообщений: 666
    Регистрация: 25.03.2012
    Российская Федерация  denis2000
    Воскресенье, 07.10.2018, 10:30 | Сообщение # 2384
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    mmihaill, Вот так регистрировали в оригинале:
    Код
    [zat_b103_merc_hide_weapon_1]
    type = npc
    npc_prefix = false
    path = scenario\zaton\zat_b103_merc_hide_weapon_1
    shuffle = loop
    idle = 0,0,100
      Злобная реклама
    Воскресенье, 07.10.2018, 10:30
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Польша  BL00Der
    Воскресенье, 07.10.2018, 12:48 | Сообщение # 2385
    Статус:
    Гость:
    Сообщений: 33
    Награды: 0
    Регистрация: 26.11.2017

    что делать, чтобы функция выбрала один из нескольких вариантов? Oнa должен выглядеть так:
    Код
    function give_random_equipment(first_speaker, second_speaker)
        dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_abakan")
        or dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_ak74")
        or dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_lr300")
        or dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_groza")
        or dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "vintorez")
            end
    end
    Я сделал то же, что и выше, но онa не работает.
      Злобная реклама
    Воскресенье, 07.10.2018, 12:48
    Статус:
    Сообщений: 666
    Регистрация: 26.11.2017
    Поиск: