boryan67 38 Опубликовано 30 Июля 2012 Доброго времени суток всем! Artos, вопрос для меня актуальный по "отработавшим" свою логику рестрикторам. зачем оставлять по всей Зоне, хотя и невидимые, но никомму не нужные и по сути рудиментарные уже об'екты? Нельзя с этим не согласиться. Есть ли соображения куда взоры и стопы свои направить в поисках решения этой задачи? Другими словами, возможно ли установить, что данный конкретный рестриктор уже отработал и может быть удален? В принципе, даже проверял и где-то применяю - в самой логике рестриктора по окончании активной секции переключая на 'nil' - вызываю функцию удаления "самого себя". Идея понятна сама по себе. Если можно, подробнее о принципе определения "самого себя". Последующее удаление не представляется проблематичным. Заранее благодарен. Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 1 Августа 2012 Artos, провел эксперимент по самоудалению рестриктора. Логика: [logic] active = sr_idle@one [sr_idle@one] on_actor_inside = | nil %=debug.del_restr% Функция: function del_restr(actor, obj, p) if obj then alife():release(obj) end end Функция получает правильный объект. Отрабатывает, объект не удаляется, биндер виснет (часы останавливаются). В чем моя ошибка? Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 10 Августа 2012 (изменено) Руководствуясь информацией из сообщения №3989 Для актора нужно проверять параметр нет-пакета: torch_flags (что даст информацию и по активности ПНВ) и если нужно изменять (управлять вкл/выкл) провел серию экспериментов и выяснил следующее. Чтение происходит без проблем, а вот изменение битов с последующей записью пакета ни к чему не приводит. Ничего не включается и не выключается. Установленные/сброшенные биты возвращаются в исходное состояние. Подскажите, пожалуйста, в чем тонкость этого девайса? function Torch() local obj_torch = db.actor:item_in_slot(9) if obj_torch==nil then return end local se_obj = alife():object(obj_torch:id()) if se_obj then local pk = m_netpk.get(se_obj) if pk:isOk() then local data = pk:get() if data and data.upd and data.upd.torch_flags then local msg = string.format("%d", data.upd.torch_flags) news_manager.send_tip(db.actor, msg, nil, nil, 30000) data.upd.torch_flags=7 -- попытка включить принудительно pk:set(data) end end end end Заранее благодарен. Изменено 10 Августа 2012 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 13 Сентября 2012 Всем доброго дня и здоровья. В целях отработки навыков работы с модулем m_netpk, поставил себе учебно-тренировочную задачу заспавнить полупустую пачку патронов. По событию спавню патроны и сохраняю в переменной их ID. local sobj = sim:create(ammo, vector():set(temp.position.x,temp.position.y,temp.position.z), temp.lv, temp.gv) if sobj then SobjID2 = sobj.id -- сохраняем id end Из биндера вызывается процедура перевода объекта в оффлайн/онлайн и внесения изменений в количество патронов в пачке. function update2() if not SobjID2 then return end if not State2 then State2=0 end local sobj = alife():object(SobjID2) -- получаем серверный объект if sobj then local obj = level.object_by_id(sobj.id) -- получаем клиентский объект -- ждем появления в онлайне if State2==0 then if obj then State2=1 local sim = alife () if sim ~= nil then sim:set_switch_online (obj:id (), false) sim:set_switch_offline (obj:id (), true) end end -- ждем появления в оффлайне elseif State2==1 then if not obj then set_params2() --прописываем данные State2=2 end -- проверяем данные elseif State2==2 then local ver = ver_params2() if ver then State2=3 -- проверка успешна else State2=1 -- ошибка, перезапись end -- переводим в онлайн elseif State2==3 then local sim = alife () if sim ~= nil then sim:set_switch_online (sobj.id, true) sim:set_switch_offline (sobj.id, false) end -- удаляем переменные SobjID2=nil State2=nil end end end Процедура записи параметров. -- установка параметров function set_params2() if not SobjID2 then return end local sobj = alife():object(SobjID2) if sobj then pk = get_netpk(sobj) if pk:isOk() then -- читаем пакет local data = pk:get() -- устанавливаем данные ammo_num=15 -- записываем данные data.upd.ammo_left = ammo_num data.ammo_left = ammo_num -- записываем пакет pk:set(data) end end end Процедура проверки не представляет особого интереса, обычное чтение и сравнение. Вроде работает, пачка появляется, "исчезает" и появляется вновь с заданными параметрами. Но, эпизодически объект не возвращается в онлайн. Объект существует, на него можно установить метку, но онлайнового объекта нет. Всем, кто может проконсультировать по данному вопросу заранее благодарен. Дополнительная проверка показала, что грубейшая ошибка была допущена как раз в процедуре проверки факта установки желаемых значений количества патронов в пачке и перезапуска установки оных. Как обычно, то, что считаешь несущественным, оказывается главенствующим. Сейчас проблемка устранена, но остается открытым вопрос - почему не всегда данные, прописанные нет-пакетом, нормально применяются и приходится их перезадавать повторно? Где тут "собака порылась"? В неправильном использовании модуля? Некорректной подачи данных в него? Особенности Сталкера? Хотелось бы разобраться (насколько возможно) в подоплеке этого дела. Ведь пример чисто академический и простейший. При более сложных операциях, подозреваю, можно устроиться в еще более замысловатые ситуации. Информация: ТЧ 1.0004, объект спавнится в непосредственной близости от ГГ. Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 27 Августа 2013 Reisen, попробуй так сделать: local group_1= { ["soldier_outfit_grey"] = true, ["soldier_outfit_brown"] = true, ... etc. } Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 8 Сентября 2013 Всем доброго дня. Установил на чистый ТЧ 1.0004 сборку "Внешнее хранилище" всеми уважаемого Artos. Лежит у меня давно, не вспомню откуда скачал - вот ссылка на нее http://rghost.ru/48630478. Выполнил все шаги установки по вложенной инструкции: Использование:1. Добавить в конфиги (например в system.ltx) секцию [custom_storage];2. Добавить в конфиги файл-конфиг модуля нет-пакетов (m_netpk.ltx):3. Скопировать se_stor.script m_netpk.script и m_helpers.script в папку скриптов игры.4. Добавить новый класс CUST_ST <-> clsid.custom_storage в файл class_registrator.script;5. Добавить в биндер актора коды вызова события "сохранение игры" или функцию сохранения хранилища;6. Внести изменения в алгоритм сохранения и чтения данных в биндере актора (bind_stalker.script); Кроме того, пунктом 7 добавил инициализацию модулей в _g.script о чем, кстати, в инструкции умалчивается. function start_game_callback() printf ("start_game_callback called") task_manager.clear_task_manager() treasure_manager.clear_treasure_manager() xr_sound.clear_all_sound_object() dialog_manager.fill_phrase_table() m_netpk.init() -- этот сразу подключил, есть инструкция к нему отдельная se_stor.init() -- этот уже позже, по безнадёге, но не помогло end Сохранение с НИ рядом с Сидоровичем благополучно происходит и загружается, но стоит с ним перетереть и выйти за дверь, так при попытке сохраниться получаю вылет: [error]Arguments : LUA error: ...ograms\s.t.a.l.k.e.r\gamedata\scripts\se_stor.script:143: attempt to call field 'size' (a nil value) Прошу поддержки как у автора, так и у всех, кто может пролить свет на правила пользования этим инструментом. Заранее благодарен. Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 8 Сентября 2013 @Kirgudu, добавил приведенный фрагмент, стало заметно лучше. Сохранения/загрузки происходят, но только пока что-либо в хранилище не поместили. После записи в хранилище сохранение происходит, но при загрузке вылет: Arguments : LUA error: ...ograms\s.t.a.l.k.e.r\gamedata\scripts\se_stor.script:184: attempt to call field 'size' (a nil value) Та же хреновина, но теперь при загрузке. Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 8 Сентября 2013 (изменено) @Artos, был бы премного благодарен за обновленный полнофункциональный комплект. Да, и не я один, думаю. Особенно важным для меня является сохранение во внешнем хранилище простых таблиц, о чем я уже в ЛС писал. Хотелось бы иметь правильно построенный и отрегулированный надежный инструмент, а не запатченный на коленках. Ибо, это очень важная составляющая мода и от надежности ее работы будет зависеть успешность трудов многих людей за несколько лет. Более того, хотелось бы услышать рекомендации автора по правилам и ограничениям применения данного инструмента. Изменено 8 Сентября 2013 пользователем boryan67 Поделиться этим сообщением Ссылка на сообщение
boryan67 38 Опубликовано 20 Марта 2015 @stalker8509, возможно. Подобная схема боя для БТР уже реализована и включена в мод "Terra Incognita". Удалось довольно просто реализовать этот режим, не внося глобальных изменений в исходную схему логики БТР. Но простота реализации схемы достигнута благодаря ее взаимодействию с другими компонентами мода. Поэтому, рассматривать ее в отрыве от остальных компонентов мода нельзя. Поделиться этим сообщением Ссылка на сообщение