[CoP] Модострой: вопросница
|
|
|
Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус: |
|
Бывалый: |
|
Сообщений: |
1081 |
Награды: |
19 |
Регистрация: |
11.06.2015 |
|
[CoP] Модострой: вопросница
Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
|
|
Воскресенье, 31.12.2017, 13:17
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
11.06.2015 |
|
|
|
|
|
Статус: |
|
Новичок: |
|
Сообщений: |
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
Насколько я помню вам такая функция мною ранее уже была предоставлена.
|
|
Суббота, 06.10.2018, 18:33
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
22.11.2012 |
|
|
|
|
|
Время Альянса
Статус: |
|
Ветеран: |
|
Сообщений: |
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 |
|
|
|
|
|
Статус: |
|
Новичок: |
|
Сообщений: |
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 |
|
|
|
|
|
Время Альянса
Статус: |
|
Ветеран: |
|
Сообщений: |
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 |
|
|
|
|
|
Статус: |
|
Новичок: |
|
Сообщений: |
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 |
|
|
|
|
|
Статус: |
|
Новичок: |
|
Сообщений: |
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 ( ) Последний вариант функции сработал. Прошлый вариант был не хуже.
Цитата sergej5500 ( ) Можно ли принудительно закрыть окно осмотра бокса?
get_hud():HideActorMenu()
не работает?
|
|
Суббота, 06.10.2018, 20:00
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
22.11.2012 |
|
|
|
|
|
Статус: |
|
Новичок: |
|
Сообщений: |
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 |
|
|
|
|
|
Время Альянса
Статус: |
|
Ветеран: |
|
Сообщений: |
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 |
|
|
|
|