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

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

NaslednikTutti, а ты не заметил, что четырежды вызывая по сути одну и ту же функцию (меняются только координаты спавна), ты спавнишь одну и ту же секцию непися "military_camp_npc_1"?!

Вообще непонятно как у тебя разные спавнятся ... Или приводи тут точный код, который используешь или гадай самостоятельно.

 

losiara, вопрос не имеет никакого отношения к логике.

Это обычный вопрос из области программирования на Lua.

Имеется объявленная переменная predicate, которая объявлена функцией. Т.к. переменная глобальна - то можешь вставить ее в любое место скрипта (конечно НЕ внутрь другой функции/таблицы) и исползовать как из самого скрипта, так и извне.

Вот только проверь, не дублируется ли имя этой переменной/функции, т.к. уж больно оно не эксклюзивно ...

 

P.S. Поправлюсь. Выше ColR_iT, вероятно дал более правильный ответ, в привяззке именно к логике.

losiara, задавай вопрос более осмысленно, и приводи источник откуда цитата (а не голый отрывок), чтобы твои недомолвки можно было бы уточнить в первоисточнике, и называй все же вещи своими именами.

В том виде, как ты привел кусок кода и обозвал его функцией - это просто иная запись обычной функции. А на самом деле это именно функтор (бызымянная функция), которая объявлена для 'штатного' табличного параметра predicate в логике выдачи работ гулагом, что меняет польностью смысл.

 

P.P.S. И хотел бы обратить внимание, что довольно странный отрывок ты привел. Код: obj:profile_name() == "soldier_commander” - подразумевает в качестве 'obj' клиентский объект НПС, а в выдачу работ для предикатов поступает совершенно иное, т.е табличка объекта из xr_gulag, в которой профиль уже определен и проверки имеют вид: obj.profile_name == "soldier_commander”.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

NaslednikTutti, эхх хотел написать, но товарищ Artos меня опередил... Так что, только повторю его слова:

а ты не заметил, что четырежды вызывая по сути одну и ту же функцию (меняются только координаты спавна), ты спавнишь одну и ту же секцию непися "military_camp_npc_1"?!

Вообще непонятно как у тебя разные спавнятся ... Или приводи тут точный код, который используешь или гадай самомтоятельно.

 

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

Изменено пользователем Viнt@rь
Ссылка на комментарий

Artos

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

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

 

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

Ссылка на комментарий

Artos, Viнt@rь да, я что-то на это подозревал, но таки не смог разобраться. Заспавнил всех через all.spawn, сейчас все в норме :good2:

 

Еще вот вопросы:

Заспавнил я этот отряд сталкеров, нужно написать им логику чтоб они сидели у костра (болтали, играли, ели, пили и тд и тп чем они там занимаются на досуге :beach::-) )

Кто-нибудь может подробно объяснить как это реализовать?

Помочь с написанием логики для нпс, с созданием смарт_террейна и по моему, как-то еще .way файл из all.spawn'а в этом как-то участвует. Буду примного благодарен! :ny_z_1:

 

То что нахожу по этому вопросу, то всё делается на Тени Чернобыля, а в Зове Припяти это походу реализуется немного по иному. Разобраться у меня не получилось.

 

Сначала создаем в алл.спавн smart terrain

Например

[833]

; cse_abstract properties

section_name = smart_terrain

name = lager_new_npc --Название смарта

position = -49.742325,-10.038876,-64.088760

direction = 0.975047,0.000000,-0.221997

 

; cse_alife_object properties

game_vertex_id = 77

distance = 4.19999980926514

level_vertex_id = 229856

object_flags = 0xffffffbe

custom_data = <<END

[smart_terrain]

type = lager_new_npc

capacity = 5 ----- по моему здесь кол-во НПС которое бут сидеть у костра

squad = 1

groups = 3

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 2.0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; se_smart_terrain properties

 

Далее создаем НПС, тоже в алл.спавн

[834]

; cse_abstract properties

section_name = stalker

name = lager_pod_most00

position = -50.338428,-10.038231,-65.516136

direction = -0.327957,0.000000,0.944693

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_stalker_novice

 

; cse_alife_object properties

game_vertex_id = 77

distance = 4.19999980926514

level_vertex_id = 229162

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

lager_new_npc = true --Название созданного мной смарт террейна

END

 

; cse_visual properties

visual_name = actors\novice\green_stalker_2

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 3

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0

upd:creature_flags = 0

upd:position = -50.338428,-10.038231,-65.516136

upd:o_model = 0

upd:o_torso = 0.533530831336975,-0.000744261255022138,0

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 3

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 1,0,0,2,1

predicate4 = 1,1,0,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

дальше идем в gulag_escape.script можнои свой создать но пока сойдет и стандарт

нужно прописать

работу НПС в трёх местах

1:)function load_job(sj, gname, type, squad, groups)

наш

if type == "lager_new_npc" then

t = { section = "logic@lager_new_npc_men_kamp1",

idle = 0,

prior = 5, state = {0, 1},

online = true,

in_rest = "", out_rest = "",

}

table.insert(sj, t)

end

Ещё один "end" в конце скрипта

 

2:)function load_states(gname, type)

 

if type == "lager_new_npc" then

return function (gulag)

return 0

end

end

Третий "end" в конце скрипта.И в третьем месте указываем группировку непися:

 

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

 

if gulag_type == "lager_new_npc" then

return npc_community == "stalker" ---Здесь ставим группировку НПС которую будет принимать гулаг

end

 

Потом прописываем логику в файле:config\misc\gulag_escape

здесь НПС будут сидеть у костра

[logic@lager_new_npc_men_kamp1]

active = kamp@lager_new_npc_men_kamp1

 

[kamp@lager_new_npc_men_kamp1]

center_point = kamp

 

Ипоследнее,снова алл.спавн way escape

[lager_new_npc_kamp]

points = p0

p0:name = wp00|s=state

p0:position = -49.742325,-10.038876,-64.088760

p0:game_vertex_id = 77

p0:level_vertex_id = 229856

 

lager_new_npc - название смарта.Оно у нас везде.В скриптах:

if type == "lager_new_npc" then --здесь

t = { section = "logic@lager_new_npc_men_kamp1", --здесь

в логике и в путях:

[lager_new_npc_kamp] --название смарта + логика "kamp"

 

Ну все вроде.

 

 

 

 

 

И есть еще вопрос, заспавнил я вот всё тот же отряд. Вот, в этом так сказать коде есть пункт

direction = 0,0,0 -// направление взгляда

Направление это я узнал с помощью скрипта определения координат ГГ. Прописал его, но нпс один * смотрит строго на север.

Как это исправить?

 

Выражаемся? Cyclone

Не соответствует правилам.

Ссылка на комментарий

Доброго времени суток, хотел вот спросить в файле xr_remark, по моему мнению, есть ошибка?!

 

local new_action = this.action_remark_activity(npc, "action_remark_activity", storage) -- Вот здесь выделенно жирным

 

local new_action = this.action_remark_activity(npc:name(), "action_remark_activity", storage) -- Думаю, должно быть так !!!

 

Или я ошибаюсь?

Ссылка на комментарий

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

Freedom

Ссылка на комментарий

Я работаю на ЗП и появился такой вопрос : После спавна НПС он отказывается разговаривать , даже новый диалог ему прописал - бесполезно .Мне кажется это связано с его логикой , ну или с тем что он обычный непись (те он отображается точкой а не звездой) . Помогите пожалуйста нубу .

Ссылка на комментарий

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

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

[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сек. Ломаю голову, ничего не получается!!!

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

Ссылка на комментарий

losiara у тебя нет завершенности алгоритма, добавь в [sr_sound2] вот что:

 

on_signal = sound_end | sr_idle

 

И тогда все будет хорошо

Ссылка на комментарий
StafGlawer, если ты заспавнив нечто в игре, считаешь что всем остальным ясно что же ты заспавнил и с какими параметрами и логикой, то глубоко заблуждаешься. Погадалками тут редко кто занимается и, если хочешь получить ответ, следует приводить информацию - что же ты сделал (коды скриптов/конфигов/... под спойлером).

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

вот скрипт спавна с моими координатами в чем проблема. не спавниться всё равно.

function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-223.36528015137,-19.629007559478,-132.66230773926),30990,62) end

Ссылка на комментарий

losiara, не стОит пытаться на штатной логике делать все, что накручиваешь. Порой гораздо проще это делать вынесенной своей функцией(ями).

Если требуется рандомно по одному - стОит звуковую схему создать и ее использовать.

Требуется последовательно - сделать последователыми нужное кол-во секций ...

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

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
опять ты тоже самое ... Пойми, собственно строка спавна говорит ТОЛЬКО о некоей секции объекта и коодинатах спавна.

О какой тут логике объекта можно говорить? Без конфига этой секции - только гадание.

Возможность разговора с неписью обуславливается и его группировкой (не нвая ли она у тебя иль не враг ли?), логикой, которая или берется из секции спавна (тогда укажи ее!) или же дефолтная ... тогда не враг должен болтать

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

Ссылка на комментарий

HellStalkerDog, сорри, это я по невнимательности с вопросом отStafGlawer перепутал.

Тогда как минимум не хватает информации: а куда же ты спавнишь? Что за игра/локации? Валидны ли (корректны ли) вертексы для спавна. Может ты на другую куда локацию спавнишь, перепутав гейм0вертекс? А имеется ли собственно секция, которую пытаешься зааспавнить? и т.п.

Попробуй вывести в лог-файл результат спавна, изенив свою секцию на это:

function esc_unik_npc ()
  local se_obj = alife():create("esc_unik_npc",vector():set(-223.36528015137,-19.629007559478,-132.66230773926),30990,62)
  if se_obj then
    get_concole():execute( "load ~~~:Create:" .. se_obj:name() )
  else
    get_concole():execute( "load ~~~:Wrong_spawn!")
  end
end

- тогда хоть будешь знать из лог-файла, заспавнился ли вообще

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos , я написал , заспавнил непися он отказывается разговваривать , что непонятного ? Стоит короче непись (новый, мой) но отказывается говорить .

Изменено пользователем StafGlawer
Ссылка на комментарий

StafGlawer, ну раз тебе все понятно - чего вопрошаешь?

Ведь сказал же ранее (ошибившись адресатом):

... О какой тут логике объекта можно говорить? Без конфига этой секции - только гадание.

Возможность разговора с неписью обуславливается и его группировкой (не новая ли она у тебя иль не враг ли?), логикой, которая или берется из секции спавна или нет-пакетами прописывается (тогда укажи ее!) или же дефолтная ... но тогда не враг должен болтать ...

Предлагаешь нам погадалками заняться? Уволь ... Рождество на носу и утка погорает ... ;-) Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-223.36528015137,-19.629007559478,-132.66230773926),30990,62) end

это код самого спавна нпс.

esc_unik_npc----------------------------------------------------->

<specific_character id="esc_unik_npc" team_default = "1">

<name>esc_unik_npc</name>

<icon>ui_npc_u_stalker_neytral_rukzak_3</icon>

<bio>esc_wolf_bio</bio>

 

<class>esc_otbrosi_1</class>

<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>

 

<rank>367</rank>

<reputation>-60</reputation>

<money min="60000" max="200000" infinitive="0"/>

 

<snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type>

 

<visual>actors\neytral\stalker_neytral_rukzak_3</visual>

<supplies> [spawn] \n

wpn_vintorez \n

ammo_9x39_pab9 \n

wpn_groza \n

ammo_9x39_pab9 \n

#include "gameplay\character_food.xml"

</supplies>

#include "gameplay\character_criticals_3.xml"

<actor_dialog>esc_unik_npc_qest</actor_dialog>

<actor_dialog>esc_unik_npc_completed</actor_dialog>

<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>

</specific_character>

 

<!-- Escape -->

<character id="escape_trader">

<class>Trader</class>

<specific_character>escape_trader</specific_character>

</character>

 

<character id="esc_unik_npc">

<class>esc_unik_npc</class>

<specific_character>esc_unik_npc</specific_character>

</character>

 

 

[logic]

active = camper

combat_ignore = combat_ignore

 

[camper]

sniper = false

radius = 5

no_move = true

def_state_campering = threat_na

path_walk = mil_zomb_stalker_walk1

path_look = mil_zomb_stalker_look1

 

Вот все коды посмотрите и помогите пожалуйста.

Ссылка на комментарий

HellStalkerDog, если все приведенные коды подключены к игре (думаю они не в отдельных файлах, а в уже имеющихся), то на первый взгляд все нормально.

Но(!) предполагаю твою ошибку в следующем:

В логике НЕ определена зависимость твоего НПС от гулагов - значит от не свободный, а должен получить работу в како-либо гулаге.

То, что ты прописываешь ему независимую логику от гулагов - это понятно, но спавн в игре (ТЧ) в обязательном порядке проверяет при спавне сталкеров/монстров - если он не свободен от гудагов и не получил работу - удалить заспавненного.

Поробуй добавить в логику это:

[smart_terrains]
none = true

Но учти, заспавненный, судя по твоему пути - должен убежать на Склады ... можешь не успеть его заметить, если спавнится далеко от ГГ.

 

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

StafGlawer, более уже сказанного мне нечего добавить. Жди более понятливых иль ясновидящих ответчиков.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Но учти, заспавненный, судя по твоему пути - должен убежать на Склады ... можешь не успеть его заметить, если спавнится далеко от ГГ.
Artos, А как сделать так чтобы он стоял на мести и не куда не уходил?
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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