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

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


Svoboда

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

(изменено)

Лёха_тц

А что разве БТР и вертолеты кроме военных еще кому - нибудь принадлежат??? И то военным сказать УСЛОВНО, по сюжету.

А заспавнить их несложно, через скрипт или all.spawn создавая соот секцию.

Пример из оригинала с логикой, у тебя она конечно должна быть своя...

[7095]

; cse_abstract properties

section_name = helicopter

name = aes_helicopter

position = 902.859313964844,-3.61789155006409,-757.310485839844

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 2273

distance = 0

level_vertex_id = 405033

object_flags = 0xffffffb2

custom_data = <<END

[logic]

active = heli_move1

on_hit = hit

 

[heli_move1]

path_move = aes_heli_attack_desant_walk_begin2

on_info = {+aes_desant_go} heli_move2

engine_sound = false

combat_safe_altitude = -100

 

[heli_move2]

path_move = aes_heli_attack_desant_walk2

path_look = aes_heli_attack_desant_look2

invulnerable = true

immortal = true

on_signal = final | %+aes_desant_wave2% heli_move3

combat_ignore = true

mute = true

combat_safe_altitude = -100

 

[heli_move3]

path_move = aes_heli_attack_desant_walk2_2

path_look = aes_heli_attack_desant_look2_2

on_actor_in_zone = aes_actor_heli | %=heli_set_enemy_actor%

mute = true

combat_safe_altitude = -100

on_info = {=heli_health_le(0.3)} heli_move@death

 

[heli_move@death]

path_move = heli_death_way

invulnerable = true

on_signal = arrived | heli_move@silent

combat_ignore = true

 

[heli_move@silent]

path_move = heli_death_way

invulnerable = true

engine_sound = false

combat_ignore = true

 

[hit]

on_info = {+aes_desant_wave2} %+aes_choper_crush_sound =heli_start_flame%

END

 

; cse_visual properties

visual_name = physics\vehicles\mi24\veh_mi24_u_01

 

; cse_motion properties

 

; cse_ph_skeleton properties

skeleton_name = idle

 

; cse_alife_helicopter properties

cse_alife_helicopter__unk1_sz = idle

engine_sound = alexmx\helicopter

 

Изменено пользователем ColR_iT
Не нужно полностью цитировать предыдущий пост!

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Вампир35

А зачем строить логику снайпера на Ремарке???

из тутора:

Схема sniper

 

Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.

NB! Ставить снайперу только 2 точки look

 

В кастом дате кемпера прописать:

sniper = true

Пример:

[smart_terrains]

none = true ;нужно для того что бы НПС не брался гулагом!!!

 

[logic]

active = camper

 

[camper]

path_walk = patrol_walk

path_look = patrol_look

sniper = true

radius = 50

;def_state_campering = assault

Примерно так...

 

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Добрый день!

Прошу помощи относительно работы скрипта.

function prov_npc()
if db.actor then
local armor = db.actor:item_in_slot(6)
if (armor ~= nil and armor:section()== "bandit_outfit")
then
db.actor:set_character_community("bandit", 0, 0)
elseif (armor ~= nil and armor:section()== "specops_outfit")
then 
db.actor:set_character_community("military", 0, 0)
elseif (armor ~= nil and armor:section()== "dolg_outfit")
then 
db.actor:set_character_community("dolg", 0, 0)
else
db.actor:set_character_community("actor", 0, 0)
end
end
end

function prov_npc()
local actor = db.actor
local armor = db.actor:item_in_slot(6)
if actor:alive() == true and armor and (armor:section() == "bandit_outfit" or armor:section() == "bandit_master_outfit" or armor:section() == "bandit_veteran_outfit" or armor:section() == "bandit_antigas_outfit_m1")
then
db.actor:set_character_community("bandit", 0, 0)
elseif (armor ~= nil and armor:section() == "specops_outfit")
then 
db.actor:set_character_community("military", 0, 0)
elseif (armor ~= nil and armor:section() == "dolg_outfit")
then 
db.actor:set_character_community("dolg", 0, 0)
else
db.actor:set_character_community("actor", 0, 0)
end
end

 

Предпологается изменение отношения НПС к ГГ при переодевании в соот. броню. Однако, скрипт не работает, ни в первом ни во втором варианте, вопрос почему???

Изменено пользователем ColR_iT
Не забываем про теги!

Жизнь следует измерять поступками, а не временем...

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


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

Artos

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

Ну пока учимся.

Да, использоваться будет на ТЧ, поэтому номер слота правильный. Попробую ваш вариант!

 

 

Ваш вариант работает. Но я перепроверю и первый, наверняка где то что то упустил, хотя синтаксис и правильный.

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Wik

По второму вопросу смотря что тебя интересует, можно через логику в ремарковской схеме:

target = Куда смотрит сталкер. Есть следующие варианты

 

 

story_id – числовое значение

actor – без комментариев

nil – позиция вычисленная АИ автоматически

<имя работы>,<имя гулага> смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).

Пример:

target = logic@cit_killers_base_guard, cit_killers

<path_name>, <point_number> - можно указывать смотреть в вершину патрульного пути (<имя пути>, <имя точки>).

Например:

[smart_terrains]
none = true

[logic]
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[remark1]
no_move = true
target = actor; или что тебе необходимо по примеру выше!

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Прошу прощения, что бы у товарища не возникало вопросов, самую малость дополню ответ куратора Artos

Wik

Схема ремарк не используется для постоянной работы НПС, как правило она является переходным этапом от одной к другой схеме.

Вот логика, а точнее ее часть "заезженного бедного Волка" на локации Кордон!

 

[logic@esc_lager_volk]

active = walker@esc_lager_volk_walker1 ;активная в данный момент схема

on_death = death@wolf ;что будет с неписем после его смерт

 

[walker@esc_lager_volk_walker1]

path_walk = wolf_walk ;путь где или куда ходит

path_look = wolf_look ;куда смотрит - если прописывать валкера с несколькими точками, то это поле задавать необязательно!

meet = meet@wolf ;поле для общения, диалога

on_actor_dist_le = 23| {+tutorial_wounded_start -esc_kill_bandits_quest_kill} remark@esc_lager_volk1 ;условия для перехода в другую схему, в данном случае в ремарковскую при приблежении ГГ на расстояние 23 метра и выполнения (невыполнения) "+", ;"-" соответствующих инфопоршней

on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2 ;то же самое, только в схему валкера

danger = danger_condition@shustryi ;поведение НПС в опасности (денжере)

 

[remark@esc_lager_volk1]

anim = hello_wpn ;анимация

snd = esc_wolf_say_thanks ;проигрывающиеся звуковые файлы, конкретно это разговор Волка

target = actor ;напрвление взгляда НПС

on_signal = sound_end| walker@esc_lager_volk_walker2 ;поле для перехода НПС в другую схему по получению сигнала в данном случае окончание проигрывания музыкального (звукового) файла

on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2 ;уже объяснялось выше...

danger = danger_condition@shustryi ;объяснялось...

 

[walker@esc_lager_volk_walker2]

path_walk = wolf_walk

path_look = wolf_look

meet = meet@wolf

on_info = {+esc_kill_bandits_quest_have} remark@esc_lager_volk2 ;поле для перехода в следующую схему ремарк при получении НПС соот. инфопоршня +esc_kill_bandits_quest_have

danger = danger_condition@shustryi

 

Делай по анологии. Если тебе необходимо что бы НПС стоял на месте своего спавна, то пропиши ему одну точку path_walk = твое название, тогда даже в случае получения хита, он все равно вернется на свое место!!! Пути прописываются в all.spawn, way...название локации!

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Добрый день!!!

Возник вопрос относительно логики рестрикторов. По задумке, при входе в рестриктор, проигрывается музыкальная композиция, а через 5 сек. начинается спавн монстров. Вот логика:

[logic]

active = sr_idle

 

[sr_idle]

on_actor_inside = {+new_restriktor} sr_sound %=spawn_zombie_x18% --функция спавна в xr.effects.scripts

 

[sr_sound]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

Инфопоршень также активирует работу рестриктора. Все бы ничего, но вначале появляются монстры, а потом проигрывается композиция, что не совсем то что мне нужно.

Пробовал менять на следующее:

[logic]

active = sr_idle

 

[sr_idle]

on_actor_inside = {+new_restriktor} sr_sound

 

[sr_sound]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

 

on_timer = 10000 | sr_sound2 nil %=spawn_zombie_x18%

 

[sr_sound2]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

on_timer = 10000 | sr_sound3

 

[sr_sound3]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

on_timer = 10000 | sr_sound2

Вылет с ссылкой на 20 строку g_скрипта, видимо связанный с nil значением в логике, поскольку происходит именно после первого звука в игре на переключении секций... Я так думаю.

Еще вариант:

[logic]

active = sr_idle

 

[sr_idle]

on_actor_inside = {+new_restriktor} sr_sound

on_timer = 10000 nil %=spawn_zombie_x18%

 

[sr_sound]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

Спавн происходит, а звуковая схема не срабатывает... :ny_ph34r_1: Были еще несколько вариантов, но все либо нерабочие, либо наполовину,активируют или звуковую схему или спавн. Подскажите где исправить???

Заранее благодарен!

 

 

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

Жизнь следует измерять поступками, а не временем...

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


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

Artos

Всегда не хватает малости -

подсказки!!! Иной раз и коды\описания в подробностях не нужны, а только направить человека в русло...

[logic]

active = sr_idle

 

[sr_idle]

on_actor_inside = {+new_restriktor} sr_sound

 

[sr_sound]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

on_signal = sound_end | sr_idle@odin ;переключение схемы... ;)

 

[sr_idle@odin]

on_timer = 1500 | sr_sound2 %=spawn_zombie_x18% ;спавн... Ок!

 

[sr_sound2]

snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

idle = 5

delay = 1

Не совсем оптимально, но именно то что и требовалось.

Вошел в рестриктор, проигрался звук, в данном случае устрашающий, через 1,5сек. по окончании звука - спавн зомби. При повторном входе в рестриктор, звуковая схема отрабатывает, но уже без спавна.

 

Жизнь следует измерять поступками, а не временем...

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


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

TASTAN

Расскажи поподробнее, что ты имеешь ввиду "в диалоге проверить"??? Суть задумки в чем?

 

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Добрый вечер!

Возник вопрос относительно скрипта logic переключение схем!

В файле xr_conditions есть 2 функции:

 

-- проверка того что дистанция до обьекта <= заданной
-- параметры: [sid,dist]
function distance_to_obj_le(actor, npc, p)
    local npc1 = level_object_by_sid(p[1])
    if npc1 then
        local res = npc:position():distance_to_sqr(npc1:position()) <= p[2]*p[2]
        --printf("xr_cond<distance_to_obj_le>: %s", if_then_else(res, "TRUE", "FALSE"))
        return res
    end
    return false
end

-- проверка того что дистанция до обьекта >= заданной
-- параметры: [sid,dist]
function distance_to_obj_ge(actor, npc, p)
    local npc1 = level_object_by_sid(p[1])
    if npc1 then
        local res = npc:position():distance_to_sqr(npc1:position()) >= p[2]*p[2]
        --printf("xr_cond<distance_to_obj_ge>: %s", if_then_else(res, "TRUE", "FALSE"))
        return res
    end
    return false
end

 

Возможно ли использовать при переключении схем в логике НПС данные функции???

Пример:

[smart_terrains]
none = true


[logic]
active=walker
danger = danger_ignore

[walker]
path_walk = yan_stalker_walk_8
path_look = yan_stalker_look_8
on_actor_dist_le_nvis = 10 | walker1;--переключение по сигналу проверки нахождения ГГ на определенном расстоянии...

[walker1]
path_walk = yan_stalker_walk_88
path_look = yan_stalker_look_88
????? = 10 | walker2;--переключение при приближении НПС с определенным sidом к другому НПС с этой схемой...
.....
[danger_ignore]
ignore_distance = 0

Просьба использовать тэги [соde] при публикации кодов в сообщении,

дабы и форматирование сохранить и избежать искажений спец.символов парсингом форума. --/Artos

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

TASTAN

can_select_items = off 
can_select_items = on

помойму так, тогда не будет выкидывать.

 

И в файле m_stalker, также прописываем:

 

use_single_item_rule = off 
can_select_items = on

что бы НПС не выбрасывали купленное оружие!!!

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

Жизнь следует измерять поступками, а не временем...

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


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

S.T.A.L.K.E.R-DOLG

 

Никаких проблем!!!

Схема kamp

Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.

 

Вариантов много, например:

[smart_terrains]
none = true


[logic]
active = kamp

[kamp]
center_point = kamp_center ;имя точки вокруг которой NPC будет усаживаться. 
radius = 2;насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию
def_state_moving = run ;дефолтное состояние, в котором сталкер будет идети к точке кампа

Обычно прописывают под гулагом...

 

Жизнь следует измерять поступками, а не временем...

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


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

HellStalkerDog

 

Отчасти ты и сам ответил на свой вопрос!!!

Либо координаты неправильно снял, либо в функцию вставил неверно...

function esc_bandit ()
         alife():create("esc_bandit_1",vector():set(89.167,-7.47,-26.069),385326,114)
         end

Первые три цифры означают X,Y,Z, четвертая за скобкой - (l.vertex) левел_вертекс и пятая (g.vertex)гаме_вертекс.

Жизнь следует измерять поступками, а не временем...

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


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

ColR_iT

Даже и не думал сбивать с толку!

Ведь он попросил ЛОГИКУ, я ее и описал, это kamp. НПС созданный скриптом или через all.spawn, без разницы будет при любой логике кроме ремарка иметь точку(точки) прописанные через all.spawn, way...название локации, как вы и показали в своем "код". Саму же логику мы как обычно пропишем в gamedata\config\scripts, -- файл логики название любое.ltx. Я сомневаюсь, что S.T.A.L.K.E.R-DOLG будет задавать логику через функцию\скрипт... хотя кто знает... :)

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

S.T.A.L.K.E.R-DOLG

Не морочь голову, скачай программу ACDC menu2.2 для ТЧ и работай без батников и всего остального, проще будет, там менюшка есть ничего сложного...

Предвижу появление у тебя еще кучи вопросов, поэтому заранее скажу, схема ремарк не используется полноценно в игре во время боевых сценок например или нападения мутантов, и т. д. по сути она является переходным этапом между др. схемами например в квестах!!! Ну торговца можно на ее основе создать, не более того. Сама схема нужная и необходимая, но не основная!!! Чаще других используется walker и надо сказать оправданно.

 

walker
...
remark -- подошел ГГ поговорил послушал чего нибудь...
...
camper
... и т. д.

Не стоит рассматривать туторы как руководство к действию, раз уж ты захотел что то замутить, то почитай внимательно о том что ты хочешь сделать, например о тех же файлах логики!!!

 

 

Добавлено через 18 мин.:

Wik

А через рестриктор не подойдет???

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {+new_restriktor} sr_idle@gigi %=play_snd(characters_voice\путь к звуковому файлу)%

[sr_idle@gigi]
on_timer = 5000 | nil  %=название_файла%

В данном случае, при входе актора в рестриктор, и наличии инфопоршня "new_restriktor" что в принципе необязательно, включается проигрыш музыкального фрагмента, а через 5 сек. происходит спавн кого тебе надо.

Единственное замечание, функция спавна должна находиться в файле xr.effects.scripts. После всего этого рестриктор отключается, т. е. срабатывает одноразово!!! Можно и другое что нибудь придумать, например переключать секции по другим событиям, по необходимости...

Если совсем просто, то выглядеть будет так:

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = nil %=название функции%

В этом случае, при входе в рестриктор сработает функция %=...%, а затем рестриктор отключится.

 

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Всем добрый вечер!

Возник вопрос относительно логики гулагов

 

Также в описании работы может быть указаны дополнительные условия, при которых сталкер

может занять данную работу. Например:

predicate = function(obj) 
         return obj:profile_name() == "soldier_commander”            
end

то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.

 

Куда конкретно надо вставить данную функцию. Файл gulag_название_локации.scripts -... А в самом файле в какое место???

Заранее благодарю!!!

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

Жизнь следует измерять поступками, а не временем...

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


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

Artos

Отрывок кода\функции из методички похоже что самих разработчиков, (обложку не сфотографировали). Имею ее в электронном варианте потому и привел в неизменном виде!

Но суть в общем то стала понятна. Спасибо!

 

Жизнь следует измерять поступками, а не временем...

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


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

Добрый вечер!

Вопрос относительно настройки логики рестриктора!

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {+new_restriktor} sr_sound 

[sr_sound]
snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant
idle = 5
delay = 1
on_signal = sound_end | sr_idle@odin

[sr_idle@odin]
on_timer = 1500 | sr_sound2 %=spawn_zombie_x18%

[sr_sound2]
snd = characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant
idle = 5
delay = 1

 

В данном виде, при входе в рестриктор, проигрывается одна из композиций, а через 1,5 сек происходит спавн монстров. В дальнейшем, при входе в этот рестриктор проигрываются только звуки. Вопрос: как правильно настроить, что бы проигрывались ВСЕ звуковые файлы при входе в рестриктор, последовательно или рандомно не имеет значения, но один за другим, с задержкой 1-2сек. Ломаю голову, ничего не получается!!!

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

Старлей

Можно конечно и зациклить, но суть не в этом, тогда и спавн повторяться будет, можно конечно и его обойти, но звук при этом только из одного файла воспроизводиться будет, вот в чем проблема, а надо что бы все поочередно или рандомно без разницы с задержкой 1-3 сек. одна от другой!!!

characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

Artos

Хочешь рандомно и весь список - тут как раз своя функция сгодится, выбирая из списка и отсеживая его окончание ...

Именно так и хочу, однако штатных функций не обнаружил.

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

Жизнь следует измерять поступками, а не временем...

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


Ссылка на сообщение
(изменено)

NaslednikTutti

Так ты все таки для ЗП или ТЧ делаешь???

 

Если непись под гулагом, это одно, если он со своей логикой, то необходимо в файле с логикой дописать:

[smart_terrains]
none = true; что бы не брался смартом
[logic] 
active = walker 

[walker] 
path_walk = esc_blokpost_sniper1; путь НПС

Относительно путей в all.spawn, это зачем у тебя? На что они стоят???

p0:flags = 0x1

p1:flags = 0x2

Ты полем look пользуешься, исходя из представленной логики нет, тогда к чему флаги, на что они указывают?

 

 

А вообще поскольку НПС через all.spawn рожден, то и логику можно там же и прописать, прямо в секции НПС тобою созданного!

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

Жизнь следует измерять поступками, а не временем...

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


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

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

AMK-Team.ru

×
×
  • Создать...