Labadal 68 Опубликовано 25 Июля 2021 Поделиться Опубликовано 25 Июля 2021 Подскажите, как добавить новую кнопку в пда? Делаю по аналогии с кнопкой "центр на меченом", но кнопки не появляется. Пробовал удалить секцию кнопки "центр на меченом", но вылета не было, просто кнопка не появилась. Значит - её нигде не требуют. Но моя кнопка даже с готовой секцией не появляется. Неужели это тоже движковая тема? Всем спасибо God save Hatsune Miku! Ссылка на комментарий
naxac 2 447 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 3 часа назад, Labadal сказал: Неужели это тоже движковая тема? Да. 1 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 341 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 (изменено) 6 часов назад, Labadal сказал: Пробовал удалить секцию кнопки "центр на меченом", но вылета не было, просто кнопка не появилась. Значит - её нигде не требуют. Часть элементов движковых интерфейсов строится по принципу if (uiXml.NavigateToNode("какая-то нода xml", 0)) { Т.е. если их удалить из xml-конфига, элемент исчезает без вылета. Вернуть на место - появляется. Другие элементы требуются без проверок и их удаление из конфигов вызовет вылет. Но в любом случае, и те и другие спрашивает движок. Чтобы эта "какая-то нода" была прочитана, движок должен ее запросить. В дефолтном ТЧ, емнип, чтением xml-конфигов любых в принципе, только движок и занимается. Изменено 26 Июля 2021 пользователем Zander_driver 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Подскажите, почему получается вылет при определении переменной ini-файла: local ltx="weapons\\upgrade.ltx" local ini=ini_reader.iniReader(ltx) --вылет local ini=ini_file(ltx) --тоже вылет Скрытый текст [error]Expression : fatal error [error]Function : CInifile::r_section [error]File : Xr_ini.cpp [error]Line : 397 [error]Description : Can't open section '%s' [error]Arguments : wpn_ak74 ... Скрытый текст [wpn_ak74_kalibr]:wpn_ak74 ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap, ammo_5.56x45_gd inv_name = wpn-ak74_kalibr description = enc_kalibr_wpn_ak74 inv_grid_x = 41 inv_grid_y = 9 cost = 3200 silencer_name = wpn_addon_sil_556_ar silencer_x = 225 silencer_y = 15 cheat_item = true Думается, из-за ":wpn_ak74" после имени секции. Но как тогда явно указать такой файл для чтения из него? Ссылка на комментарий
Zander_driver 10 341 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Только что, phalcor сказал: Подскажите, почему получается вылет при определении переменной ini-файла: Потому, что это надо делать как-то так: local kn_ini = ini_file([[weapons\\upgrade.ltx]]) Только что, phalcor сказал: Думается А думается неправильно. Наследовать секции в файлах, подключаемых таким образом, можно так же как и в обычных конфигах. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 @Zander_driver Всё тоже самое - тот же вылет! Пробовал так: local kn_ini = ini_file([[weapons\\upgrade.ltx]]) --так вылета нет, но в log пишет: WARNING: CLocatorAPI::check_for_file file not found file z:\op21-repack\gamedata\config\weapons\\upgrade.ltx in files list (size = 83322) соответственно, так как файл не найден, то и чтения из него не будет... Пробуем убрать один слэш: local kn_ini = ini_file([[weapons\upgrade.ltx]]) --так вылет. Как же сделать присвоение переменной ini?! Ссылка на комментарий
WinCap 316 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 (изменено) @phalcor, может так: local kn_ini = ini_file("weapons\\upgrade.ltx") P.S. Ищи примеры кода в папке "scripts", там всё есть. Изменено 26 Июля 2021 пользователем WinCap S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Ситуация немного проясняется. Дело всё-таки в наследуемой секции. Вот у меня в файле upgrade.ltx такая запись: [wpn_ak74_kalibr]:wpn_ak74 Если добавить наследуемую секцию [wpn_ak74] в ЭТОТ ЖЕ файл, всё работает! Если она в другом файле - вылет, расписанный мною выше. Получается, подключить такой файл через переменную ini = ini_file(имя) невозможно? Ссылка на комментарий
WinCap 316 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 (изменено) @phalcor, нужно выбрать "вышестоящий" файл, тот в котором подключен upgrade.ltx. Рискну предположить, что это: local kn_ini = ini_file("weapons.ltx") Изменено 26 Июля 2021 пользователем WinCap S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 @WinCap, попробовал weapons.ltx - там тоже вылет. В общем, у меня задача стояла такая - определить, является ли запрашиваемый параметр оружия "родным" (прописанным непосредственно под секцией это оружия), или же он наследуемый. Пока решения не вижу. Ссылка на комментарий
Zander_driver 10 341 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Только что, phalcor сказал: Если добавить наследуемую секцию [wpn_ak74] в ЭТОТ ЖЕ файл, всё работает! Естественно, родитель для наследования должен быть виден там, где ты его наследуешь. Если ты хочешь, чтобы все выше-объявленные секции конфига были видны для твоей, то и подключай его к system.ltx, и доступ получай через system_ini(). Файлы, доступ к которым получается через ini_file(), подключаются как отдельная система конфига, независимая и несвязанная с system_ini. К ним может быть тоже что-то подключено через #include, но это все равно будет обособленная система. Только что, phalcor сказал: В общем, у меня задача стояла такая - определить, является ли запрашиваемый параметр оружия "родным" (прописанным непосредственно под секцией это оружия), или же он наследуемый. Есть такая идея... local ltx = system_ini() function found_line(section, line) local lc = ltx:line_count(section) local a = 1 while a < lc do local key = '' local value = '' local r = ltx:r_line(section, a, key, value) if r and key == line then return true end a = a + 1 end return false end Методы line_count и r_line точно есть в OGSR (Это не я добавил). Есть ли они в оригинальном ТЧ, честно говоря не помню. Если есть, то должно сработать. Если же нету, то боюсь, не существует способа узнать то что тебе нужно из скриптов. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 @Zander_driver , спасибо за идею, методы у меня работают (ОП 2.1), вот только функция всегда выдаёт "true", т.е. какой параметр ей в line не укажи, она его всегда найдёт в system_ini() - оно и правильно, ведь это обобщённое, так сказать хранилище всех параметров данной секции. Ну что жеж, констатируем - нет у нас методов против Кости Сапрыкина для решения моей задачи по определению, оригинален или наследуем параметр. Ссылка на комментарий
WinCap 316 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 (изменено) 7 минут назад, phalcor сказал: вот только функция всегда выдаёт "true" Это естественно. После прочтения ini-файла, наследуемые параметры копируются в конечную секцию, и присутствую в ней в полном составе. 7 минут назад, phalcor сказал: нет у нас методов ... по определению, оригинален или наследуем параметр. Здесь возможен только "костыль". Если точно знать имя конечной секции, а также имя наследуемой, то можно прочитать параметр дважды - из одной и из другой секции. Если параметр различается, значит, он был переопределен. По другому никак. Изменено 26 Июля 2021 пользователем WinCap 2 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
phalcor 60 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 8 минут назад, WinCap сказал: Если точно знать имя конечной секции, а также имя наследуемой, то можно прочитать параметр дважды - из одной и из другой секции. А вот это идея. Остаётся узнать, а есть ли способ прочитать в переменную parent-секцию (то, что после двоеточия) - [wpn_ak74_m1]:wpn_ak74 ? Ссылка на комментарий
WinCap 316 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 (изменено) 4 минуты назад, phalcor сказал: есть ли способ прочитать в переменную parent-секцию Нет. Если это действительно необходимо для реализации какой-то мега крутой идеи, то можно вручную составить таблицу наследований секций: local tbl = { ["wpn_ak74_m1"] = "wpn_ak74", и т.д. } Изменено 26 Июля 2021 пользователем WinCap 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Zander_driver 10 341 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Только что, WinCap сказал: можно вручную составить таблицу наследований секций: Или написать некий алгоритм парсера, который просканирует конфиги и составит такую таблицу автоматически. Реализацию можно подсмотреть во всяческих редакторах конфигов сталкера, которых уже множество расплодилось. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Jekyll 92 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 Здравствуйте. Как определить, принадлежит ли определенный гейм-вертекс текущей локации? ЗП. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Ссылка на комментарий
WinCap 316 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 @Jekyll, как-то так: local gvid = определенный_m_game_vertex_id local level_name = alife():level_name(game_graph():vertex(gvid):level_id()) if level_name == level.name() then 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Купер 2 947 Опубликовано 26 Июля 2021 Поделиться Опубликовано 26 Июля 2021 @Norman Eisenherz , честно? Вот шут его знает, что у кого год назад стояло. Сейчас любопытства ради попробовал оригинал - Макрон - обр. 14г. Везде ожидаемый вылет. Впрочем, это уже явно не "скриптовые" вопросы. Ссылка на комментарий
Norman Eisenherz 317 Опубликовано 27 Июля 2021 Поделиться Опубликовано 27 Июля 2021 Здрасьте. ТЧ 1.0006. Задача: действие по нажатию кнопки в инвентаре. Построение: присоединить кнопку к инвентарю при первом обращении, создать скриптовое окно и сохранить в переменной, привязать событие. Проблема: скриптовое окно вызывает безлоговый вылет после перезагрузки и повторного обращения к инвентарю. Обнуление скриптового окна при выходе из инвентаря или через net_destroy не помогает. Как правильно очистить окно при перезагрузке? Spoiler local inv, z, wnd -- инвентарь, кнопка и окно для отслеживания нажатия кнопки -- [bind_stalker.script] actor_binder:info_callback function button(info_id) if info_id == "ui_inventory" then local b_name = "btn" if not inv then inv = level.main_input_receiver() z = CUI3tButton() inv:AttachChild(z) local x, y = 755, 245 local w, h = 157, 48 z:Init("ui_button_main03", x, y, w, h) end if not wnd then wnd = CUIScriptWnd() wnd:Init(0, 0, 1, 1) wnd:Register(z, b_name) wnd:AddCallback(b_name, ui_events.BUTTON_CLICKED, action, wnd) end elseif info_id == "ui_inventory_hide" then wnd = nil end end function action() news_manager.send_tip(db.actor, "TEST") end -- [bind_stalker.script] actor_binder:net_spawn function delete() wnd = nil end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти