Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Как сделать так чтобы после определенного диалога нпс пошел в определенную точку?

 

Тебе сюда: >>Click Me<<

ColR_iT

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение
Я использую функцию проверки близости к аномалии вызываемую через 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)? Или все же как-то по другому?

Поделиться этим сообщением


Ссылка на сообщение

Возможно ли как-нибудь сделать чтобы в local obj = alife():object("имя_объекта") определялось сразу несколько объектов? Допусти alife():object("имя_объекта") оr alife():object("имя_объекта_2"). Ну или как-то по другому?

Поделиться этим сообщением


Ссылка на сообщение

Есть функция проверки близости ГГ к аномалии.

function anomaly_prec:update()
local distance = self.object :position():distance_to(db.actor :position())
if distance < 10 then
"Действие выполняется если игрок подойдет к аномалии на расстояние меньше 10 метров"
end
end

Проблема в том что мне нужно чтобы действие выполнялось когда ГГ подходит к аномалии на определенное расстояние. Допустим действие будет выполнятся если игрок подходит к аномалии на расстояние 10 метров. Не больше не меньше. Именно конкретное число.

If distance == не предлагать. Если так поставить, то действие выполнятся не будет.

Поделиться этим сообщением


Ссылка на сообщение

Есть функция увеличения проигрывания интенсивности звука в зависимости от расстояния до аномалии:

 

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 примерно как у движковых детекторов? Что для этого нужно сделать?

Поделиться этим сообщением


Ссылка на сообщение

Есть функция спавна НПС через нет-пакет. Делал для ЧН.

 

Скрытый текст

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 который уже присвоен другому объекту, то тоже вылет.

Поделиться этим сообщением


Ссылка на сообщение

@=VENOM= Если пробовать без кавычек, то не вылетает. Но метка все равно не отображается. Save/load пробовал, не влияет.

Поделиться этим сообщением


Ссылка на сообщение

@=VENOM= Ну вот ты сам видишь сколько мороки выходит. Я здесь весь форум облазил, но так и не нашел похожих образцов, за исключением функции level_changer и аномалии. Функции эти были под ТЧ, хотя не знаю есть ли разница.

 

Поделиться этим сообщением


Ссылка на сообщение

Кто знает функцию проверки на то что тайник пуст? Буду признателен если кто-то приведет пример.

Поделиться этим сообщением


Ссылка на сообщение

Есть ли в ЧН способ отключить автоматическую выдачу заданий на помощь в обороне/атаке вражеских лагерей?

Поделиться этим сообщением


Ссылка на сообщение

Добрый день. Допустим у нпс в инвентаре есть предмет. Как можно сделать так, что после того как этого нпс убьют, предмет который у него есть удалялся.

Поделиться этим сообщением


Ссылка на сообщение
13 минут назад, _Val_ сказал:

Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию [dont_spawn_loot]

Нужно чтобы удалился конкретный предмет, а не все.

Изменено пользователем advisor890

Поделиться этим сообщением


Ссылка на сообщение
3 минуты назад, _Val_ сказал:

Саму функцию удаления не подскажу...ибо пользуюсь отличными от стандартных ТЧ.

А так:


[logic]

on_death = death

[death]
on_info =  %=удалить нафиг предмет%

 

Спасибо. Мне это подойдет.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...