Dennis_Chikin 3 665 Опубликовано 12 Июля 2016 Upd: кстати, вот только в новой соли аналогичную проблему поймал. Правда там вылетает прямо при сохранении. Разбираюсь. Конкретно смотрю, что у кого сохраняется, и где повиснет. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 (изменено) local save_ok = 0 function motivator_binder:save(packet) if save_ok ~= 0 then bind_stalker.error = true; abort( ... ) end object_binder.save(self, packet) save_ok = 1 и т.д. после каждой строчки, save_ok = 0 end В обновлении актора - проверка error и вылет с руганью. Для xr_logic я где-то давал код сохранения/загрузки с контролем по осмысленности прямо по ходу действия. Там вылет более надежен, и не надо проверять конец пакета в биндерах. Изменено 13 Июля 2016 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 Вопрос не столько глупый, сколько непонятный. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 (изменено) Вот теперь понятно. function _G.blabla() ... end Или function blabla() ... end _G.blabla = this.blabla В обоих случах скрипт должен быть сначала хоть раз откуда-нибудь вызван с любой целью. хоть дернуть за function init() end или, для текущего скрипта this.blabla = 123.blabla и далее везде можно писать просто blabla() Изменено 13 Июля 2016 пользователем Dennis_Chikin 1 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 (изменено) Этот файл не является "родительским". Он является запускаемым по умолчанию. http://www.lua.ru/doc/6.html Практическое применение, из модифицированного amk.script: this.parse_custom_data = parse_custom_data -- для идиотов, устраивающих "войны правок" this.gen_custom_data = gen_custom_data local force_offline = _G.force_offline if not force_offline then force_offline = {} _G.force_offline = force_offline end convert_npc = force_offline Изменено 13 Июля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 20 Июля 2016 "Изначально грешил на таблицу" и таки да. Либо крестик снять, либо трусы надеть. "ep\\military\\ml1" или [[ep\military\ml1]] - что-нибудь одно. Неплохо еще проверять, что объект получен, прежде чем пытаться с ним что-нибудь делать. 1 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 20 Июля 2016 (изменено) local s_obj=s_obj[ math.random(#s_obj) ] Вполне законная операция. Хотя без предупреждения так делать не стоит, если не хотим затруднить кому-нибудь вносить свои изменения, и вообще разбираться, как наш код работает. P.S. Ну не правы - так не правы. Успехов. Изменено 20 Июля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 23 Июля 2016 И при чем здесь xr_spawner ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 12 Сентября 2016 "Как правильно" - главное, это ПРИНЦИПИАЛЬНО ничего не читать. Тем более на том форуме, где задается вопрос. А то вдруг там ответ в том же разделе имеется - даже целая тема. Ага, в свете наличия специальных тем - это тоже важно: писать в любую другую, но только не в ту, которой вопрос касается. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 24 Сентября 2016 Выходит вместо db.actor можно писать просто nil ? bind_stalker.script: function actor_binder:net_spawn(data) ... db.add_actor(self.object) db.script: function add_actor( obj ) actor = obj Но, как уже писал, это плохая идея, производить несколько операций с переменной, которая используется 100500 миллионов раз в секунду, вместо одной. Да еще везде и всюду набирать руками это самое db.actor с риском где-то забыть или попутать буковки местами. Так что: bind_stalker.script: function actor_binder:__init( npc ) super( npc ) _G.actor = self.object -- теперь отовсюду будет работать просто actor, без всякого self.object и db. function actor_binder:net_destroy() ... _G.actor = nil object_binder.net_destroy( self ) end 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 23 Января 2017 (изменено) Что это сейчас было ? function determine_section_to_activate(npc, ini, section_logic, actor) if not ini:section_exist(section_logic) then return "nil" end -- Распарсить строку выбора активной секции с учетом команд, заключенных в %% local active_section_cond = cfg_get_condlist(ini, section_logic, "active", npc) local active_section if not active_section_cond then abort("object '%s': section '%s': unable to find field 'active'", npc:name(), section_logic) else active_section = pick_section_from_condlist(actor, npc, active_section_cond.condlist) if not active_section then abort("object '%s': section '%s': section 'active' has no conditionless else clause", npc:name(), section_logic) end end return active_section end- из оригинала. "может патч не тот?" - Ага. Несовместимая версия драйвера /dev/hands Изменено 23 Января 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 25 Января 2017 (изменено) что-то совсем лыжи не едут... local lvid = npc:vertex_in_direction( npc:level_vertex_id(), npc:direction(), 10 ) if npc:accessible( lvid ) then npc:set_dest_level_vertex_id( lvid ) log( "info", "action_anomaly(%s):execute, accessible: %s, current: %s", npc:name(), lvid, self.object:level_vertex_id() ) else ...! Cannot find saved game ~info~ [blowout_scheme] (bar_ecolog_professor)evaluator_anomaly:evaluate, dest reached! Cannot find saved game ~info~ [blowout_scheme] (bar_ecolog_professor)evaluator_anomaly:evaluate, dist: 2.9374704360962 to amk_zone_gravi_zone_strong0777 ! Cannot find saved game ~info~ [blowout_scheme] action_anomaly(bar_ecolog_professor):execute, accessible: 41085, current: 41085 и в такой позе стоит. - это так и должно быть ? Я почему-то думал, что npc:vertex_in_direction() - это не тот вертекс, в котором непись сейчас, а какой-то другой, "в ту сторону". Изменено 25 Января 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 25 Января 2017 То есть, тогда конструкция if npc:accessible( lvid ) получается полностью бессмысленной ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 25 Января 2017 А вылет точно в этой функции ? Или ошибка все-таки в game_relations, line communities ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 1. se_respawn.script: -- Обновление в офлайне function se_respawn:update() cse_alife_smart_zone.update( self ) --'printf("RESPAWN: [%s] se_respawn update_offline", tostring(self:name())) self:execute() end Здесь с этим можно что-нибудь сделать. 2. нет, неправильно. Это заполнение синих ящиков патронами от пм и воткой. 3. недостаточно. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 (изменено) bind_respawn.script - это при заходе на локацию. xr_effects.script - это если вызывается еще откуда-то (из непися, дверей, ворон и прочих лампочек). соответственно, убираешь то, что тебе не нужно, и оставляешь то, что нужно. Что-то я переутомился, что-ли... self.dir1 = npc:direction() local npc_pos = npc:position() local n = 1 local lvid1, pos local dir = self.dir1 for i = r1, r1 + 10, 2 do lvid1 = level.vertex_in_direction( npc_pos, dir, i ) if lvid1 ~= npc_lvid then pos = level.vertex_position( lvid1 ) log( "info", "r1: %s, i: %s, lvid: %s, dist: %s", r1, i, lvid1, pos:distance_to( npc_pos ) ) end endr1: 7.8898077011108, i: 7.8898077011108, lvid: 43, dist: 229.41188049316r1: 7.8898077011108, i: 9.8898077011108, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 11.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 13.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 15.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 17.889808654785, lvid: 43, dist: 229.41188049316 Изменено 26 Января 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 (изменено) Да. А есть разница ? Мне нужно, банально, какой-нибудь вертекс там, куда смотрит непись. Не прямо под носом, и не очень далеко. Любой, блин. Вертекс, который в 300 метрах сзади непися - это что-то явное не то. upd: однако, и вправду переутомился. в vertex_in_direction() должна быть не позиция, а npc_lvid. Изменено 26 Января 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 (изменено) Только сейчас обратил внимание.Ага, видимо, холода на всех действуют... системный респавн если именно регулярный, который в локациях где актора сейчас нет - тогда self:execute() в se_respawn:update() npc:accessible_nearest() в каком случае 1 возвращает ? -1 я уже видел, nil - тоже. Что у него еще припасено ? Изменено 26 Января 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 Гм. Чем дальше в лес, тем толще партизаны... lvid1 = level.vertex_in_direction( npc_lvid, self.dir[1], i ) С разных исходных позиций: targets[1], r1,i: 9.4276762008667,9.4276762008667, lvid: 29341, dist: 0.65685898065567 targets[1], r1,i: 9.0319900512695,9.0319900512695, lvid: 30935, dist: 9.6079540252686 targets[1], r1,i: 9.4302082061768,9.4302082061768, lvid: 31782, dist: 0.99326068162918 Какой смысл задавать ему расстояния ? А есть и другой? Под системным респавном я всегда подразумевал стандартный респ НПС и мобов. Все-таки это погода. Есть и другой. bind_respawn.script Как видно из когда, работает только на текущей локации. Где se_respawn:update() не работает. Делает function respawn_binder:update( delta ) object_binder.update( self, delta ) self.se_respawn:update_online() endЕсть еще xr_effects.script - когда кто-то где-то прописал что-нибудь типа %respawner_spawn(что:попало)% 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 665 Опубликовано 26 Января 2017 Не понятно, что именно тебя удивляет? Насколько я понимаю, vertex_in_direction() возвращает самый ближний, валидный, вертекс к той точке, которая находится на запрашиваемом расстоянии от переданного вертекса Вот так и не понял: ближний к той, или ближний к этой. То одно, то другое. Вот что мне делать, чтобы получить который не ближе 10, но не дальше 20 метров оттуда, откуда смотрим ? С горя уже начал пробовать высчитать координаты "руками", а потом попросить ближайший доступный. Так и там - то -1, то nil, то 1 откуда-то лезет. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение