Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
arrakis_29, Благодарю, подключил хранилище от Artos для системы навыков и нового респавна артов, написал биндер под перевод аномалий в оффлайн/онлайн, но тут проблема: не могу сделать переход в онлайн, нужна функция проверки состояния аномалии (enabled/disabled), без неё все аномалии "барахлят", и некорректно работают. Есть идеи?
Сообщение отредактировал Etil - Воскресенье, 22.09.2019, 20:54
Etil, то есть,хочешь постоянно дергать в онлайн-оффлайн все аномалии?Думал,надо просто в оффлайн отправлять,биндеры только у онлайновых объектов работают.А точно с партиклами нельзя ничего сделать вместо такого извращения?Уменьшить количество?Проверить,в онлайне ли объект, можно так if obj.online then
Сообщение отредактировал arrakis_29 - Понедельник, 23.09.2019, 08:16
arrakis_29, уменьшить кол-во партиклов = уменьшить кол-во аномалий, а это противоречит моей концепции аномальных полей как некого подобия лабиринтов ( хоть минимального ). Просто увеличивать размер каждой аномалии - не наилучший вариант, да и в целом он меня ещё с оригинала не устраивал. Имхо, большинство аномалий не должны быть 10-15 метров в диаметре ( исключение - одиночные, или несколько в центре аномальных зон ). Я и так по - минимуму поставил. Кстати, заметил что после загрузки сохранения, аномалии возвращаются в своё изначальное состояние, и те, которые должны быть переведены в оффлайн, "отключаются". Есть ли вариант вызывать подобную загрузку ( только аномалий ) раз в 3-5 секунд, чтобы форсировать перевод в онлайн ( если другие методы не помогут, сейчас все равно проверять не могу )? Проверку по времени повешу на таймер + 1 инфопоршень (как вариант ).
Сообщение отредактировал Etil - Понедельник, 23.09.2019, 10:47
Etil, можно отправлять в оффлайн-онлайн аномалии из биндера актора (bind_stalker.script), но тогда придется постоянно создавать таблицу всех аномалий на локации и постоянно в апдейте актора перебирать всю таблицу (по несколько раз в секунду),ища ближайшие аномалии.Если мод загруженный,это может сказаться на стабильности и оптимизации .Еще есть вариант вообще убрать из конфигов аномалий партикл спокойного состояния,а потом из биндера аномалий включать через particles_object("anomaly2\\bold_idle"):play_at_pos(obj:position()), и отключать particles_object("anomaly2\\bold_idle"):stop(). Больше вариантов не знаю,вряд ли есть еще какие-то,удобной функции нету для этого
Сообщение отредактировал arrakis_29 - Понедельник, 23.09.2019, 18:10
arrakis_29, извиняюсь за чрезмерную настойчивость, но можно пример подобного скрипта ( вариант 1 с таблицей ), я не особо силён в скриптах, так что пока мои старания тщетны, а времени и так уходит сверх допустимого ( нет желания завалить сессию из-за моддинга ). Мод не сильно нагружен. В любом случае, проще будет иметь рабочих мод, требующих оптимизации, чем вылетающий через раз.
Etil, как-нибудь так попробуй.Это пример просто,если что-под себя отредактируешь.Не пробовал мод движки?ogsr например,может там без извращений нормально всё будет
В bind_stalker.script в "function actor_binder:net_spawn(data)" в конец,но ДО "return true" добавь "anoms.anoms_list()" в "function actor_binder:update(delta)" в конец "anoms.en_dis_anoms()"
и создай скрипт anoms.script
Код
local anoms = {} --таблица с аномалиями local anoms_cls = { [clsid.zone_bfuzz_s] = true, -- здесь вписываешь clsid аномалий.Может список неполный,просто для примера,добавишь отсутствующие.Или на секции потом поменяешь,как удобнее будет [clsid.zone_mbald_s] = true, [clsid.zone_galant_s] = true, [clsid.zone_mincer_s] = true, }
function anoms_list() -- добавить в net_spawn актора,при каждой загрузке будет составляться список local lv_actor = level.name() -- название локи,на которой находится актор for i = 1,65535 do --перебор всех объектов, в цикле будет к каждой цифре до 65634 применяться действия ниже local obj = alife():object(i) --i тут вместо id объекта, ниже проверка,есть ли в игре объект с таким id if obj and is_anom(obj) then --проверка,существует ли объект и является ли аномалией (сама функция ниже) local lv_anom = alife():level_name(game_graph():vertex(obj.m_game_vertex_id):level_id()) -- название локи аномалии if lv_anom == lv_actor then -- если аномалия находится на локе с актором table.insert(anoms,obj.id, "enabled") --добавляем id аномалии в таблицу,enabled и disable - так будет помечаться,включена или отключена аномалия.Таблица будет выглядеть так : {[id аномалии] = enabled} end end end end
function is_anom(obj) --проверка по таблице с clsid,является ли аномалией объект if anoms_cls[obj:clsid()] then return true end return false end
function en_dis_anoms() -- добавить в update актора,вкл-откл аномалии for i,v in pairs(anoms) do --перебор аномалий в таблице local obj = level.object_by_id(i) local dist = db.actor:position():distance_to(obj:position()) --дистанция между актором и аномалией local radius = 50 --радиус,в котором надо держать аномалии включенными if dist < radius and anoms[obj:id()] == "disabled" then --если дистанция меньше радиуса и аномалия откл obj:enable_anomaly() --вкл anoms[obj:id()] = "enabled" -- пометить как включенную в таблице news_manager.send_tip(db.actor, "ON "..obj:name(), 0, "default", 8000) --просто тестовое сообщение,потом уберешь elseif dist > radius and anoms[obj:id()] == "enabled" then --если дистанция больше радиуса и аномалия вкл obj:disable_anomaly() --откл anoms[obj:id()] = "disabled" -- пометить как отключенную в таблице news_manager.send_tip(db.actor, "OFF "..obj:name(), 0, "default", 8000) end end end
Сообщение отредактировал arrakis_29 - Воскресенье, 29.09.2019, 13:12
Интересует вопрос навигации НПС в оффлайне и на другие локации. Для того чтобы отправить куда-то НПС (он может уходить в оффлайн и переходить на другие локации) используется метод что-то вроде :set_move_path(). Я писал схемы логики без патч и лук поинтов, НПС передвигаются/стоят на основе данных левел вертексов, по сути задаем НПС поворот и заставляем идти пока дистанция до левел вертекса будет достаточно мала, это всё работает на онлайновском НПС и в пределах локации. Меня интересует вопрос можно ли скриптово без использования патч поинтов заставить НПС ходить в оффлайне и на другие локации?