Случайная подборка модов
Ночь Перед Рождеством 3
4.4
Clear Sky Complete
4.1
Новое Время. Судьба наемника
2.3
Зона поражения
4.1
NZK MOD 1.3
3.2
Время Перемен 2.5
4.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: 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
    Поиск: