Norman Eisenherz 355 Опубликовано 17 Июля 2020 @ted.80 Каким тогда образом NPC обходят динамические аномалии в модах? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 18 Июля 2020 @Kirgudu Движок пересобирать – уровень для меня недостижимый. Создать рестриктор на месте ГГ и каким-то образом его двигать (или переспавнивать с интервалом в пару секунд) – еще можно попробовать. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 18 Июля 2020 @Zander_driver Рабочие методы кроме переноса функций движка из ЗП есть? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 18 Июля 2020 (изменено) Здрасьте. [ЧН 1.5.10] Отсортировал список переходов в диалоге проводников по сюжетному порядку обхода локаций: у одних проводников список выводится в прямом порядке (Болота, Кордон, …), у других – в обратном (Военные склады, Рыжий лес, …). Чем можно объяснить такую разницу? Spoiler [scripts\guiders.script] (–) -- point_name for k,v in pairs(guiders_table.teleport_points) do phrase = dialog:AddPhrase("NO TEXT", k, "2", -10000) script = phrase:GetPhraseScript() script:AddPrecondition("guiders.precondition_teleport_to_point_available") script:SetScriptText("guiders.set_phrase_text") script:AddAction("guiders.select_point") -- ready? phrase = dialog:AddPhrase("st_tm_guide_21", "21", k, -10000) end (+) -- point_name local names = {} local gtp = guiders_table.teleport_points local levels = { "marsh", "escape", "garbage", "darkvalley", "agroprom", "yantar", "red_forest", "military" } for i = 1, #levels do for name, v in pairs(gtp) do if v.level == levels[i] then names[#names +1] = name end end end for k, name in ipairs(names) do phrase = dialog:AddPhrase("NO TEXT", name, "2", -10000) script = phrase:GetPhraseScript() script:AddPrecondition("guiders.precondition_teleport_to_point_available") script:SetScriptText("guiders.set_phrase_text") script:AddAction("guiders.select_point") -- ready? phrase = dialog:AddPhrase("st_tm_guide_21", "21", name, -10000) end Изменено 18 Июля 2020 пользователем Norman Eisenherz 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 30 Июля 2020 @_Sk8_AsTeR_ Если функция относится к состоянию инвентаря или HUD и не требует вызова в бою, можно добавить привязку в главное меню [scripts\ui_main_menu.script] – см. описание выхода из игры на [Q]. 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 21 Августа 2020 Здрасьте. Проблема при определении ячейки карты для спавна предмета. Читаю текущие координаты и позицию ячейки вот таким скриптом: Spoiler function sms(text) news_manager.send_tip(db.actor, text) end function coords(cell) local act = db.actor local pos = act:position() pos.x = math.modf(pos.x) pos.y = math.modf(pos.y) pos.z = math.modf(pos.z) sms("xyz = " .. pos.x .. ", " .. pos.y .. ", " .. pos.z) if cell then local lvid = act:level_vertex_id() local gvid = act:game_vertex_id() sms("lvid, gvid = " .. lvid .. ", " .. gvid) end end ТЧ, Кордон, крыша вагона над Кузнецовым: lvid = 359827, gvid = 97. Объект с такими параметрами ячейки спавнится в указанном месте. ЧН, Кордон, крыша элеватора: lvid = 310050, gvid = 571. Объект с такими параметрами ячейки обнаруживается на сервере, но остается невидимым. Если задать lvid = 25 и gvid = 472, как в секции [all.spawn] для Кордона, объект отспавнится правильно. Что изменилось в расчете позиций ячеек в ЧН и как получить действующие значения lvid и gvid? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 24 Августа 2020 Здрасьте. Можно ли прочитать параметры из секции конфига в том порядке, в котором они указаны, или результат перебора for i = 0, ini:line_count(section) -1 всегда выдается в случайном порядке? Задача в том, чтобы вывести полную специализацию механика в заданном порядке (оружие общее, оружие частное, броня): https://drive.google.com/file/d/15OmIOK-H2J2ryp60PAOSUT77FR9fxBmd/view?usp=sharing Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 24 Августа 2020 @AndreySol ЧН 1.5.10, [configs\misc\technics_specialization.ltx]. В оригинале так: [mar_csky_tech] wpn_mp5 novice_outfit В моде так: Spoiler [mar_csky_tech] wpn_mp5 novice_outfit st_tech_pistols_ussr st_wpn_hpsa st_tech_shotguns st_tech_assault_all st_wpn_fn2000 st_wpn_groza st_wpn_rp tech_outfit_jackets stalker_outfit_name tech_outfit_csky Обработка измененной функцией из [scripts\inventory_upgrades.script]: Spoiler local gts = game.translate_string function get_technic_specialization(section) local ini = ini_file("misc\\technics_specialization.ltx") local sys_ini = system_ini() if ini:section_exist(section) then local str = game.translate_string("st_technic_specialization") local n = ini:line_count(section) local main = {} local other_wp = {} local other_am = {} for i = 0, n -1 do local temp1, id, temp2 = ini:r_line(section, i, "", "") if string.find(id, "^st_") then other_wp[#other_wp +1] = id elseif string.find(id, "_outfit_") then other_am[#other_am +1] = id else main[#main +1] = id end end if #main == 0 then -- только обычная прокачка str = str .. "\\n%c[default]" .. gts("st_technic_specialization_none") else table.sort(main) for i = 1, #main do str = str.."%c[default] \\n• "..gts(sys_ini:r_string(main[i], "inv_name")) end end table.sort(other_wp) -- сортировка, потом перевод table.sort(other_am) local other_st = {} for i = 1, #other_wp do other_st[i] = "• " .. gts(other_wp[i]) end for i = 1, #other_am do other_st[#other_wp + i] = "• " .. gts(other_am[i]) end local str_other = table.concat(other_st, "\\n") return str .. "\\n \\n%c[ui_4]" .. gts("st_technic_spec_other") .. "\\n%c[default]" .. str_other else return gts("st_technic_specialization") .. "\\n%c[default]" .. gts("st_technic_specialization_none") end end Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 25 Августа 2020 @AndreySol Ну ведь не это я спрашивал. Хочу сделать так, чтобы оружие было перечислено в порядке возрастания "полезности": пистолеты, ПП, дробовики, автоматы, снайперки. При этом не хочу вручную задавать алфавитный порядок через имена string_id. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 25 Августа 2020 @AndreySol Подозреваю, что как раз правками движка можно добиться нужного порядка чтения, а вот в обычных скриптах возможности ограничены… Разве что список с числовыми ключами в отдельном файле создавать, чтобы читать его по порядку. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 25 Августа 2020 6 hours ago, Zander_driver said: привязка вывода к номеру строки, если таки ее реализовать тем или иным способом, чревата проблемами в будущем Не к номеру – к порядку. Пять строк, десять – главное, чтобы они были выведены в подсказку в том же порядке, в котором перечислены. Про вариант со списком и я сам упоминал. Что касается задач сомнительной полезности, то именно из решения таких задач я получаю больше всего информации. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 29 Августа 2020 (изменено) @AndreySol Объяснить как моддер моддеру, почему у каждого свой набор доработок и изменений относительно оригинальной версии игры? Изменено 29 Августа 2020 пользователем Norman Eisenherz 3 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 30 Августа 2020 @aromatizer Судя по количеству вопросов, оставшихся без ответа, сделано далеко не все. Например, во время адаптации мода "Медикаменты на худе" под ТЧ 1.0006 я спрашивал, как правильно скрывать счетчик при отображении диалоговых окон, при запуске катсцен и снов – хоть бы кто сказал, что можно сделать один пустой статик на худе и всю начинку добавить к нему, а не мудрить с инфо-поршнями для каждого типа окна отдельно. Кроме того, даже мод с ремкомплектами можно создать по-разному: где-то условно расходовать сам РМК, где-то разбирать на запчасти похожие предметы, а где-то требовать для ремонта точно такой же предмет и этим ломать квесты из-за стыренного и побитого неписями редкого оружия. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 6 Сентября 2020 (изменено) Здрасьте. Беру количество денег у ГГ (с виду целое – ни одной цены с копейками нет), делю на 10: исходное число 18'639, после деления 1'863.9000244141. Читаю радиацию из конфига через system_ini():r_float(sect, "radiation_restore_speed"): в конфиге 0.002, в результате 0.002000000949949. Округляю координату до одного знака через math.floor(x*10 + 0.5) / 10: исходное число 269.583…, после округления 269.6000610352. Такие странности с вычислениями наблюдаются, как минимум, в ТЧ и ЧН. Откуда берутся эти дробные части и как с этим бороться? Изменено 6 Сентября 2020 пользователем Norman Eisenherz 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 7 Сентября 2020 On 9/6/2020 at 7:13 PM, abramcumner said: string.format("%.1f", x) Любое следующее вычисление (даже + 0) опять приводит к появлению той же дробной части, и при последовательных вычислениях с выводом промежуточных результатов приходится форматировать строку каждый раз. С трудом верится, что настолько неоптимальный подход – норма для языка Lua. @AndreySol Цитирую: "исходное число 18'639". Может, я что-то упускаю, но в конфигах хранится только начальное количество денег ГГ, а текущая сумма на счету читается через db.actor:money() без опций "float/integer" Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 12 Сентября 2020 (изменено) Здрасьте. Работает ли метод iterate_inventory_box(func, obj) в ЧН? Метод указан в [lua_help.script], упоминается в справочнике на gameru.net как полностью аналогичный методу iterate_inventory(func, obj), но при вызове для существующего и находящегося в онлайне контейнера с несколькими предметами случается вылет с ошибкой "нет такого метода". Изменено 12 Сентября 2020 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 12 Сентября 2020 @AndreySol В таком случае имею вопрос: где найти разобранный на CPP файлы движок Чистого неба (да и Зова Припяти тоже)? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 12 Сентября 2020 Мой косяк: обращался к серверному объекту. По движку ЧН/ЗП какой-то ответ есть? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 3 Октября 2020 Здрасьте. Равнозначны ли указанные ниже способы удаления переменной из pstor? xr_logic.pstor_store(db.actor, name, nil) db.storage[db.actor:id()].pstor[name] = nil Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 355 Опубликовано 16 Октября 2020 Здрасьте. ЧН 1.5.10, расстановка меток NPC в [sim_squad_generic.script]. Задача: скрыть метки отрядов противника при переключении статуса нейтрал/враг. Решение: добавить проверку по имени метки – if not string.find(spot, "enemy") … Результат: метка обстрелянного отряда скрывается, но метки соседних отрядов остаются видимыми (и желтыми), хотя участники этих отрядов уже активно стреляют по ГГ. В указанном скрипте есть проверка "при наличии лидера отряда проверять отношение ГГ к нему". Отряд не был обстрелян, лидер у него точно есть и, судя по метке, остался нейтральным, но атакует как свидетель нападения. Как принудительно сделать такой отряд враждебным, чтобы скрыть метку? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение