advisor890 1 Опубликовано 26 Февраля 2012 (изменено) Как сделать так чтобы после определенного диалога нпс пошел в определенную точку? Тебе сюда: >>Click Me<< ColR_iT Изменено 26 Февраля 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 15 Апреля 2016 Я использую функцию проверки близости к аномалии вызываемую через bind_anomaly_field.scripts Вот функция: function anom_field_update(anomaly) if db.actor then local act_pos = db.actor:position() local anom_pos = anomaly:position() if act_pos:distance_to_sqr(anom_pos) < 4 then --[[Код который выполняется если ГГ на расстоянии менее 2 метров от аномалии, переменная anomaly содержит объект-аномалию, параметры которой можно считать]] end end end Теперь мне допустим нужно после "< 4 then" вывести на мини карту метку обозначающую аномалию к которой я подхожу. Я так понял мне нужно сделать проверку секции конкретной аномалии, а потом выводить на мини карту через level.map_add_object_spot_ser(obj.id, "blue_location", text)? Или все же как-то по другому? Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 17 Апреля 2016 Возможно ли как-нибудь сделать чтобы в local obj = alife():object("имя_объекта") определялось сразу несколько объектов? Допусти alife():object("имя_объекта") оr alife():object("имя_объекта_2"). Ну или как-то по другому? Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 20 Октября 2016 Есть функция проверки близости ГГ к аномалии.function anomaly_prec:update()local distance = self.object :position():distance_to(db.actor :position())if distance < 10 then"Действие выполняется если игрок подойдет к аномалии на расстояние меньше 10 метров"endendПроблема в том что мне нужно чтобы действие выполнялось когда ГГ подходит к аномалии на определенное расстояние. Допустим действие будет выполнятся если игрок подходит к аномалии на расстояние 10 метров. Не больше не меньше. Именно конкретное число. If distance == не предлагать. Если так поставить, то действие выполнятся не будет. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 21 Октября 2016 Пахас, Kirgudu. Спасибо! Ваши способы работают как надо. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 24 Октября 2016 Есть функция увеличения проигрывания интенсивности звука в зависимости от расстояния до аномалии: function anomaly_detector(anomaly) anomaly.tim_beep = 0 local dist = db.actor:position():distance_to_sqr(anomaly:position()) local snd = xr_sound_soc.get_safe_sound_object("путь_до_звука") if dist < 200 and dist < time_global() - anomaly.tim_beep then if not snd:playing() then anomaly.tim_beep = time_global() snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 1.0) end end end Только вот пиликанье при dist < 200 начинается очень интенсивно и становится ещё более интенсивнее если подходить ближе. Можно ли как-то сделать интенсивность пиликанья при dist <= 200 примерно как у движковых детекторов? Что для этого нужно сделать? Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 24 Октября 2016 пахас, Если так сделать, то звук вообще не воспроизводится. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 19 Июня 2017 Есть функция спавна НПС через нет-пакет. Делал для ЧН. Скрытый текст function create_npc( p_story_id, p_position, p_lvertex_id, p_gvertex_id ) local obj = alife():create("sar_test", p_position, p_lvertex_id, p_gvertex_id) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_h32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local spawn_story_id = packet:r_s32() -- свойства cse_alife_trader_abstract local money = packet:r_u32() local specific_character = packet:r_stringZ() local trader_flags = packet:r_h32() local character_profile = packet:r_stringZ() local community_index = packet:r_h32() local rank = packet:r_h32() local reputation = packet:r_h32() local character_name = packet:r_stringZ() -- свойства cse_visual local visual_name = packet:r_stringZ() -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(distance) packet:w_u32(direct_control) packet:w_u32(level_vertex_id) packet:w_h32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(p_story_id) packet:w_s32(spawn_story_id) -- свойства cse_alife_trader_abstract packet:w_u32(money) packet:w_stringZ(specific_character) packet:w_h32(trader_flags) packet:w_stringZ(character_profile) packet:w_h32(community_index) packet:w_h32(reputation) packet:w_stringZ(character_name) -- свойства cse_visual packet:r_stringZ(visual_name) packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) end function test() this.create_npc(1503, vector():set(55.121288299561,11.802981376648,13.02761554718), 9331, 1655) end Функция работает, но почему-то не хочет присваиваться story_id. Причем если story_id вообще не писать, то нпс просто не заспавнится. Story_id в game_story_ids.ltx я прописал, так что я не могу понять в чем проблема. Хотя если даже и story_id c файле не прописан, нпс заспаунится. Я Вешал метку на нпс методом: function add_mapspot() local obj = alife():story_object("1503") level.map_add_object_spot(obj.id,"green_location","тест") end чтобы проверить работоспособность, но происходит вылет. Тоже самое если делать квест и вписывать в поле target_story_ids мой story_id, вылет. Кстати если в скрипте задать story_id который уже присвоен другому объекту, то тоже вылет. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 20 Июня 2017 @=VENOM= Если пробовать без кавычек, то не вылетает. Но метка все равно не отображается. Save/load пробовал, не влияет. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 20 Июня 2017 @=VENOM= Ну вот ты сам видишь сколько мороки выходит. Я здесь весь форум облазил, но так и не нашел похожих образцов, за исключением функции level_changer и аномалии. Функции эти были под ТЧ, хотя не знаю есть ли разница. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 4 Октября 2017 Кто знает функцию проверки на то что тайник пуст? Буду признателен если кто-то приведет пример. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 5 Октября 2017 @naxacСпасибо. Буду пробовать. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 16 Декабря 2017 Есть ли в ЧН способ отключить автоматическую выдачу заданий на помощь в обороне/атаке вражеских лагерей? Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 21 Января 2018 Добрый день. Допустим у нпс в инвентаре есть предмет. Как можно сделать так, что после того как этого нпс убьют, предмет который у него есть удалялся. Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 21 Января 2018 (изменено) 13 минут назад, _Val_ сказал: Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию [dont_spawn_loot] Нужно чтобы удалился конкретный предмет, а не все. Изменено 21 Января 2018 пользователем advisor890 Поделиться этим сообщением Ссылка на сообщение
advisor890 1 Опубликовано 21 Января 2018 3 минуты назад, _Val_ сказал: Саму функцию удаления не подскажу...ибо пользуюсь отличными от стандартных ТЧ. А так: [logic] on_death = death [death] on_info = %=удалить нафиг предмет% Спасибо. Мне это подойдет. Поделиться этим сообщением Ссылка на сообщение