WinCap 324 Опубликовано 9 Апреля 2017 @abr Возможно ли его переделать так, чтобы бы после сталкеров определённой фракции оружие было определённого состояния. Попробуй так: Нужно изменить функцию set_weapon_drop_condition следующим образом: local community_condition = { ["stalker"] = {min = 0.1, max = 0.9}, ["dolg"] = {min = 0.1, max = 0.9}, ["freedom"] = {min = 0.1, max = 0.9}, ["bandit"] = {min = 0.1, max = 0.9}, ["army"] = {min = 0.1, max = 0.9}, ["zombied"] = {min = 0.1, max = 0.9}, ["ecolog"] = {min = 0.1, max = 0.9}, ["killer"] = {min = 0.1, max = 0.9}, ["monolith"] = {min = 0.1, max = 0.9} } function set_weapon_drop_condition(item, community) local condition = math.random(community_condition[community].min, community_condition[community].max) item:set_condition(condition) end А после изменить вызов этой функции: if isWeapon(item) and not(get_clsid(item)==clsid.wpn_grenade_rgd5_s or get_clsid(item)==clsid.wpn_grenade_f1_s) then set_weapon_drop_condition(item, character_community(npc)) return end Написано на скорую руку, так что могут быть ошибки. S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 9 Апреля 2017 (изменено) Также меня беспокоит эта секция, не нужно ли её менять тоже? Эти строки закоментированы. Ошибка возникает потому что параметр community=nil. Нужно выяснить почему или обработать это исключение, например так: function set_weapon_drop_condition(item, community) if community == nil then community = "stalker" end local condition = math.random(community_condition[community].min, community_condition[community].max) item:set_condition(condition) end Изменено 9 Апреля 2017 пользователем WinCap S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 9 Апреля 2017 Да, зависает вот лог: Проверил, работает. Вот окончательный вариант: local community_condition = { ["stalker"] = {min = 10, max = 90}, ["dolg"] = {min = 10, max = 90}, ["freedom"] = {min = 10, max = 90}, ["bandit"] = {min = 10, max = 90}, ["army"] = {min = 10, max = 90}, ["zombied"] = {min = 10, max = 90}, ["ecolog"] = {min = 10, max = 90}, ["killer"] = {min = 10, max = 90}, ["monolith"] = {min = 10, max = 90} } function set_weapon_drop_condition(item, community) if community == nil then community = "stalker" end local condition = math.random(community_condition[community].min, community_condition[community].max) / 100 item:set_condition(condition) end S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 9 Апреля 2017 А что совет Bak'а в другой теме не помог? попробуй менять число 400 вот в этих строках cf = cf-(delta/400) cf = cf+(delta/400) S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 10 Апреля 2017 Не раз уже говорил, и всегда недоумевал от столь бесполезного кода Я придерживаюсь другого мнения. Параметр community может принимать ряд заранее известных строковых значений, которые корректно обрабатываются функцией. Если он не определен, т.е. nil, в данном случае, наверное, это допустимо, и я определяю его сам. А если он вдруг благодаря “Аркелийским лучам смерти” станет равен false... То я просто обязан словить вылет и разобраться с этими Аркелийцами. S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 14 Апреля 2017 Благодаря этой фразе: Ну, во-первых, он может принимать "ряд" любых типов значений lua кроме nil. стала понятна причина нашего недопонимания - мы говорим о разных вещах. Со своей точки зрения ты абсолютно прав, спорить не буду. Я расскажу про свой подход, который, надеюсь, тоже имеет право на существование. В Lua существует большое множество A всех типов и их значений. Поскольку этот язык имеет динамическую типизацию, любая переменная действительно может иметь любой тип и значение из множества A. А поскольку параметр функции является обычной переменной для него это тоже в полной мере справедливо. И вот тут начинается самое интересное. Для параметра функции из всего множества A я выделяю два подмножества: это B - все типы и значения, которые функция может принимать и C - все типы и значения, которые могут быть переданы в функцию. Для меня B и C не одно и то же. Подмножество B определяется назначением функции, той задачей, которую она выполняет, тем, зачем вообще этой функции нужен параметр. Подмножество C определяется тем, как и где функция вызывается. Функция может быть локальной, глобальной, методом класса, перегруженной и т.д. и т.п. В каждом месте кода, где происходит вызов функции, подмножество C дополняется новыми типами и значениями. Теперь есть два возможных варианта: 1) B содержит или равно C. В этом случае в функции пишется только обработка значений. Ни в чем не сомневаемся, ничего не проверяем, просто используем параметр и все. 2) B меньше C (т.е. C содержит и НЕ равно B). В этом случае в функции сначала пишется проверка значений, при которой множество C приводится к B, а уже после этого пишется обработка значений. В рассматриваемом примере функция вызывается только в одном месте: set_weapon_drop_condition(item, character_community(npc)) Значит для параметра community множество C определяется возвращаемым значением функции character_community(), а это точно строки и не абы какие, а те, что используются в игре (можно посмотреть в [communities_relations]),а также неопределенное значение nil (куда же без него). И поскольку для данной функции C равно B, в ней нет никаких проверок, только обработка значений. Поэтому такой код кажется "нелепым": if community == nil then community = "stalker" end Но это НЕ проверка, а ОБРАБОТКА одного из допустимых для функции значений. Кстати мне очень интересно, в каких случаях character_community() возвращает nil? Неужели бываю NPC без community, или он в offline'е коньки отбросил? 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 6 Мая 2017 (изменено) @TIGER_VLAD, Я тоже пытался реализовать функцию полета через db.actor:set_actor_position() и получил такой же результат как у Вас. Скорее всего, это происходит из-за того что функция set_actor_position() корректирует передаваемые ей координаты на коллизию с объектами, что при малых значениях delta и дает наблюдаемый нами эффект. В итоге, чтобы добиться малой скорости полета независимой от FPS пришлось перенести функцию полета в движок. Изменено 6 Мая 2017 пользователем WinCap 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 8 Июля 2017 @Dmitriy88kk Если делать без привязки к реально надетой на NPC броне, то проще прописать нужные броники в death_items_by_communities.ltx. 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 9 Июля 2017 @Dmitriy88kk Попробуй следующий код: Скрытый текст В начале файла death_manager.script после всех локальных таблиц (т.е. перед функцией init_drop_settings()) нужно добавить таблицу: local outfit_from_visual = { ["actors\\stalker_bandit\\stalker_bandit_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_1"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_2"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_mask"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_4"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_1_face_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_face_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_3_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_1_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_face_2"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_3"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_3_face_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_cs_heavy"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_dolg_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_dolg_2"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_exo"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_freedom_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_freedom_2"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_military"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_neutral_nauchniy"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_novice_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_specops"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_stalker_1"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_1_face_1"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_4"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_5"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_6"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_7"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_3_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_3"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_1_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_2"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_2_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_3_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_ecolog_face_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_2"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_1"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_1"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_face_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_mask"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_3"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_4"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_mask"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_4"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_stc_strelok"] = "novice_outfit", ["actors\\stalker_lesnik\\stalker_lesnik_1"] = "novice_outfit", ["actors\\stalker_merc\\stalker_merc_2"] = "novice_outfit", ["actors\\stalker_merc\\stalker_merc_4"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_1"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_2"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_3"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_4"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_1"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_2"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_3"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_4"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_mask"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_3"] = "novice_outfit", ["actors\\stalker_nebo_2_face_1_pn_hm"] = "novice_outfit", ["actors\\stalker_nebo_2_face_hm"] = "novice_outfit", ["actors\\stalker_nebo_2_face_pn"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_mask"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_4"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_ecolog_military"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_2"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_2_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_3"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_3_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_4"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_ecolog_face_1"] = "novice_outfit", ["actors\\stalker_trader\\stalker_trader_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_2"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_4"] = "novice_outfit" } только броники нужные прописать. Далее в конце функции drop_manager:create_release_item() добавить код: local outfit = alife():create(outfit_from_visual[self.npc:get_visual_name()], self.npc:position(), self.npc:level_vertex_id(), self.npc:game_vertex_id(), self.npc:id()) level.client_spawn_manager():add(outfit.id, 0, function (id,obj) obj:set_condition((math.random(40)+40)/100) end) В принципе все работает, только на счет способа вызвать set_condition() я не уверен, подсмотрел здесь на форуме. S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 4 Сентября 2017 @BossBoroda Если строка задается непосредственно в Lua скрипте, то нужно писать так: news_manager.send_tip(db.actor, "Привет\\nнегры", 2, "default", 6000) S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 4 Сентября 2017 @BossBoroda В XML файле описывается строка: <string id="st_test"> <text>Привет\nнегры.</text> </string> А в скрипте пишется: news_manager.send_tip(db.actor, "st_test", 2, "default", 6000) S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 21 Марта 2018 @Space.Marine Мне кажется слот проверять совершенно не нужно. Попробуй в варианте от @Graff46 оставить в условии только наличие итема в таблице: if explosive_weapons[section] ~= nil then 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 8 Апреля 2018 13 часов назад, power-cat сказал: В чём может быть причина? В xr_logic.script перед строкой 943 впиши следующий код: if src == nil then abort_syntax_error_in_cond(npc, section, field) end Будет понятно какой конфиг вызывает вылет. 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 8 Апреля 2018 @power-cat Странно, что в лог не выводится имя секции... Не знаю, есть ли в этом моде какой-то вывод в лог, но попробуй вместо предложенного ранее кода добавить этот: local fi = io.open("game_log.lxt", "a") if fi ~= nil then fi:write(string.format("object '%s', section '%s', field '%s' \n", tostring(npc and npc:name()), tostring(section), tostring(field))) fi:close() end В последней строчке будет указана проблемная секция. 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 8 Июня 2018 (изменено) 1 час назад, Metro_Rus сказал: всегда выдает только первый предмет Break прерывает цикл j. 1 час назад, Metro_Rus сказал: нужно, чтобы он выдавал случайно local rnd = math.random(1, #esc_b2_give_random_table[i]) dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, esc_b2_give_random_table[i][rnd].item[1]) Изменено 8 Июня 2018 пользователем WinCap 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 23 Июня 2018 (изменено) @Egor4ikModMaker function andrew_at_map() local obj = alife():object("es_andrew") if obj then level.map_add_object_spot(obj.id, "green_location", "Андрюха") end end Изменено 23 Июня 2018 пользователем WinCap 2 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 27 Июля 2018 @buffy, на первой итерации smart_terrain.exclusives[name] == nil, поэтому сработает or 0, а на второй итерации smart_terrain.exclusives[name] уже будет равен 1. На третей 2 т.д. S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 20 Августа 2018 @vampirnik77, Что бы код стал равносильным нужно второй вариант изменить на: Скрытый текст local IndTbl = {} IndTbl[0] = "00:00:00" IndTbl[1] = xr_statistic.actor_statistic.surges IndTbl[2] = xr_statistic.actor_statistic.completed_quests IndTbl[3] = xr_statistic.actor_statistic.killed_monsters IndTbl[4] = xr_statistic.actor_statistic.killed_stalkers IndTbl[5] = xr_statistic.actor_statistic.artefacts_founded IndTbl[6] = xr_statistic.actor_statistic.founded_secrets function get_stat(index) -- index= int return string if IndTbl[index] then return tostring(IndTbl[index]) end end Как мне кажется, второй вариант не только "читабельнее", но и быстрее. 1 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 31 Октября 2018 (изменено) @Norman Eisenherz, вот ещё один стандартный вариант: Скрытый текст local array = { ["a"] = true, ["b"] = true, ["c"] = true, ["d"] = true} if array["a"] then -- строка в массиве есть else -- строки в массиве нет end Изменено 31 Октября 2018 пользователем WinCap S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение
WinCap 324 Опубликовано 31 Октября 2018 @Norman Eisenherz, -- проверка 2: тип брони для другого/этого мастера if not armor_kuz[sect] then S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Поделиться этим сообщением Ссылка на сообщение