_Sk8_AsTeR_ 117 Опубликовано 20 Апреля 2019 Поделиться Опубликовано 20 Апреля 2019 Как можно получить значение переменной из другого скрипта? Ссылка на комментарий
Overfirst 630 Опубликовано 20 Апреля 2019 Поделиться Опубликовано 20 Апреля 2019 (изменено) @_Sk8_AsTeR_, объявить таковую в одном скрипте и обратиться в другом. Объявлять без служебного слова local. Пример - db.script с известным множеством таблиц, которые много откуда читаются и используются в некоторых целях. Объявление: zone_by_name = {} А в каком-нибудь xr_conditions.script: function actor_in_zone(actor, npc, p) local zone = db.zone_by_name[p[1]] return utils.npc_in_zone(db.actor, zone) end Изменено 20 Апреля 2019 пользователем Overfirst 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Graff46 598 Опубликовано 20 Апреля 2019 Поделиться Опубликовано 20 Апреля 2019 @_Sk8_AsTeR_, можно ещё написать ф-цию которая возвращает значение нужной переменной, в другом скрипте создаете переменную с приравниванием к вызову ф-ции. Скрытый текст -- файл скрипта, например my_script.script -- local a = 5 -- переменная function get_a() return a end -------------------------------- --- файл скрипта 2 "не важно имя файла" -- local a = my_script.get_a() -- теперь у нас в этом скрипте есть переменная "а" такая же как в "my_script.script" ----------------------------------------- 1 Ссылка на комментарий
Fenrir02 199 Опубликовано 20 Апреля 2019 Поделиться Опубликовано 20 Апреля 2019 @mole venomous, Закрыть инвентарь при использовании чего-либо можно так: Скрытый текст local objects = { [ "medkit" ] = true, } function on_use( obj ) if objects[ obj:section() ] then local input = level.main_input_receiver() if input then level.start_stop_menu( input, true ) -- Закрываем инвентарь end end end -- Только такой способ знаю function on_block_inventory() cmd( "unbind inventory" ) end function cmd( scmd, ... ) local args = { ... } if #args > 0 then scmd = scmd .. ' ' .. table.concat( args, ' ' ) end get_console():execute( scmd ) end 1 Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Назир Мухаметханов 0 Опубликовано 25 Апреля 2019 Поделиться Опубликовано 25 Апреля 2019 Всем привет, вот такой словил ЛОГ вылета на Сталкер ЧН, думаю что из-за "не найденных анимаций" в HD Моделе NPC Expression : motion_ID.valid() Function : CKinematicsAnimated::ID_Cycle File : E:\priquel\sources\engine\Layers\xrRender\SkeletonAnimated.cpp Line : 208 Description : ! MODEL: can't find cycle: Arguments : idle Нужна помощь как можно решить, или в чем проблема Ссылка на комментарий
blackburn1489 0 Опубликовано 1 Мая 2019 Поделиться Опубликовано 1 Мая 2019 (изменено) Подскажите пожалуйста, возможно ли такое реализовать на движке COP/COC, и если да, то какие могут быть подводные камни? У меня появилась идея усложнить систему фаст тревала, когда ГГ может попросить НПС-проводника провести его к определенной точке. А именно: ГГ с проводником могут попасть в засаду реальных НПС и мутантов, которые находились "по маршруту" фаст тревела. В теории это выглядит так: когда игрок выбирает точку для фастревела, скрипт берет текущую позицию ГГ и начинает "чертить маршут" от смарт террейна к смарт террейну - пока не дойдет до точки выбранной игроком. Но если на одном из этих смарт терейнов будет враждебный НПС или мутант - то ГГ и проводник телепортятся недалеко от этого смарт терейна и все враги находящиеся там- атакуюют ГГ. Пример: ГГ в деревне новичков просит НПС сопроводить его до определенного места в темной долине. В это время на АТП находятся бандиты, которые враждебны ГГ. ГГ и проводник телепортятся возле АТП и вступают в бой с бандитами -- зы: язык Lua для меня новый и я только собираюсь его начать изучать, чтобы реализовать подобный скрипт Изменено 1 Мая 2019 пользователем blackburn1489 Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 Здрасьте. Слепил уборщик бесхозного оружия: • вызов из [scripts\bind_stalker.script] actor_binder:net_spawn(data); • удалять все, кроме списка исключений; • на текущей локации удалять, если рядом нет трупов; • на других локациях удалять просто так. Проблема: если вызывать скрипт каким-нибудь триггером (сброс бинта, например) в уже прогруженной локации, то ближайшие трупы учитываются и пушки, соответственно, лежат на месте. При вызове из "net_spawn" трупы в процессе прогрузки не обнаруживаются. Вариант 1: https://drive.google.com/open?id=1-K5gPW3q3AUPN1bGXfEjBZ1Uj8kecjwh Добавил задержку запуска через level.client_spawn_manager: трупы обнаруживаются и при вызове из "net_spawn", хотя задержка всего ничего. Вариант 2: https://drive.google.com/open?id=1eEcuoF9Daw150FPWxpsAkXodliqAE2x1 Выходит, трупы на текущей локации загружаются чуть позже ГГ. Как это обойти без костылей? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 Ребят, вопрос - загадка. С вашей помощью огромной наваял скриптец, благодаря которому через нетпакеты будут перебираться реально существующие НПС, их имена записаться в таблицу, и в итоге от их имени будут сообщения в чат приходить. И так случилось, что практически в начале игры (успел только АТП зачистить вначале) мне отписался Фанат. Официально он появляется после х-18, но он у меня отписался намного раньше. Скрытый текст function table_update_pda() tab = {"пусто"} -- обнуляем таблицу всех НПС tab_newbIes = {"new"} -- обнуляем таблицу новичков for i = 1, 65535 do local sobj = alife():object(i) if (sobj) and IsNpcStalker(sobj) then -- проверка на фракцию (только сталкер, долг, фридум, грин) local pk = get_netpk(sobj) if pk and pk:isOk() then local data = pk:get() local charname = data.character_name table.insert(tab, charname) if (sobj) and is_npc_newbie(sobj) then -- проверка на новичка table.insert(tab_newbIes, charname) end end end end end Так вот вопрос, игра где-то спавнит Фаната намного раньше, или я не понимаю как работает моя ф-ция? Помогите разобраться, ибо интрига! Ссылка на комментарий
AndreySol 215 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 8 часов назад, Norman Eisenherz сказал: Как это обойти без костылей? Попробуй в апдейте биндера: if device().precache_frame <= 1 then ....тут вызывай свой уборщик.... end 2 часа назад, _Sk8_AsTeR_ сказал: Официально он появляется после х-18, но он у меня отписался намного раньше. Фанат прописан в all.spawn, по этому спавнится с самого начала НИ, но до момента "Х" сидит в офф-лайне. А в чем проблема? Типа, до появления в качестве замены Волку в ДН, Фанат лежит в анабиозе в секретной лаборатории? И по тому не может писать сообщения, как любой другой сталкер? Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 @AndreySol Теперь на текущей локации вообще пушки не удаляются (вариант скрипта 1). Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 445 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 @Norman Eisenherz, делай проверку не по клиентским объектам, а по серверным. Я смотрю, у тебя получается в цикле на 65535 ещё один цикл на 65535, это же аццкий ад какой-то. Не лучше будет пройтись один раз по всем объектам, разложив их по таблицам, а потом по этим таблицам уже проверять расстояния, паренты и т.д.?.. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 3 Мая 2019 Поделиться Опубликовано 3 Мая 2019 @naxac Старый уборщик всего и вся от мифического Сяка так и сделан, и я тоже планирую добраться до такой схемы. Но вопрос с загрузкой трупов остается. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 (изменено) Проблема: к серверному объекту невозможно применить проверку if not obj:alive(), хотя такая проверка есть в коде от Сяка. Код оригинального уборщика (солянка 2010): Spoiler for a=1,65534,1 do local obj = alife():object(a) if obj and game_graph():valid_vertex_id(obj.m_game_vertex_id)then local obj_clsid = obj:clsid() local obj_level = game_graph():vertex(obj.m_game_vertex_id):level_id() if IAmAStalker[obj_clsid] and obj_level~=actor_level then if not obj:alive() then Мой код: Spoiler local act_lv = game_graph():vertex( act:game_vertex_id() ):level_id() local bodies = {} for i = 0, 65535 do local obj = alife():object(i) if obj and game_graph():valid_vertex_id( obj.m_game_vertex_id ) then local obj_lv = game_graph():vertex( obj.m_game_vertex_id ):level_id() if IsStalker(obj) and obj_lv == act_lv then if not obj:alive() then table.insert(bodies, obj) end end Изменено 4 Мая 2019 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 Попробовал проверку через свойство вместо метода: if IsStalker(obj) and not obj.alive and obj_lv == act_lv Обнаруживается единственный труп – сам Меченый. Настоящие трупы и еще живые NPC в список не попадают. Меченый – вампир? 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 445 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 (изменено) Цитата к серверному объекту невозможно применить проверку if not obj:alive() Почему это? Она вполне работает. Например переделанном уборщике для ОП-2: https://github.com/naxac/CP2_AddOn/blob/master/gamedata/scripts/sak_off_corpses.script Изменено 4 Мая 2019 пользователем naxac 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Капрал Хикс 524 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 21 час назад, Norman Eisenherz сказал: от мифического Сяка С чего это "мифический" вдруг? Вполне реальный человек. Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 Доброго дня! Подскажите пожалуйста вот с чем... Имеем мод на динамический костер "dynamic campfire". Так вот, там многих, так сказать, бочек с кострами нету. Каким образом можно получить название лагеря? Надеюсь правильно вопрос задал. Скрытый текст ["esc2_st_fabric_kamp_1"] = {flame = "zone_flame_small_0001", light = "lights_camp_fire_omni_r1_r2_0001"}, ["esc_bridge_kamp_point"] = {flame = "zone_flame_small_0002", light = "lights_camp_fire_omni_r1_r2_0002"}, ["esc_lager_camp_center"] = {flame = "zone_flame_small_0004", light = "lights_camp_fire_omni_r1_r2_0004"}, ["esc_killers_kamp"] = {flame = "zone_flame_small_0004", light = "lights_camp_fire_omni_r1_r2_0004"}, ["esc_blokpost_kamp"] = {flame = "zone_flame_small_0005", light = "lights_camp_fire_omni_r1_r2_0005"}, ["esc2_most_kamp_1"] = {flame = "zone_flame_small_0006", light = "lights_camp_fire_omni_r1_r2_0006"}, ["esc_assault_kamp_center1"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"}, ["esc_fabrika_bandit_camp_center"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"}, ["esc2_st_fabric_kamp_2"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"}, ["esc2_bandit_les_kamp_1"] = {flame = "zone_flame_small_0008", light = "lights_camp_fire_omni_r1_r2_0008"}, ["esc_stalker_camp_esc_fox_kamp"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"}, ["esc2_st_fox_place_kamp_1"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"}, ["esc_stalker_camp_camp_point"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"}, Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 4 Мая 2019 Поделиться Опубликовано 4 Мая 2019 @naxac То, что в другом коде работает, я знаю, но я ловлю вылет с ошибкой "attempt to call method 'alive' (a nil value)". Может, вообще не в этой проверке ошибка? Вот последняя версия (пока что "not obj.alive"): https://drive.google.com/open?id=1-K5gPW3q3AUPN1bGXfEjBZ1Uj8kecjwh Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Fenrir02 199 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @Norman Eisenherz, Попробуйте заменить for i = 0, 65535 do на for i = 1, 65535, 1 do 2 Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Norman Eisenherz 312 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @Fenrir02 Это шаг обхода, и по умолчанию он как раз равен 1. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти