Artos 99 Опубликовано 5 Января 2012 Поделиться Опубликовано 5 Января 2012 (изменено) 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”. Изменено 5 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Viнt@rь 50 Опубликовано 5 Января 2012 Поделиться Опубликовано 5 Января 2012 (изменено) NaslednikTutti, эхх хотел написать, но товарищ Artos меня опередил... Так что, только повторю его слова: а ты не заметил, что четырежды вызывая по сути одну и ту же функцию (меняются только координаты спавна), ты спавнишь одну и ту же секцию непися "military_camp_npc_1"?! Вообще непонятно как у тебя разные спавнятся ... Или приводи тут точный код, который используешь или гадай самомтоятельно. и если ты хочешь, что бы у них логика была разная, то нужно и писать им разную логику... а не спавнить всех с одной и той же логикой... по идее у снайпера ну никак не будет такая же логика, что и у тех трех НПС... Изменено 5 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
losiara 13 Опубликовано 5 Января 2012 Поделиться Опубликовано 5 Января 2012 Artos Отрывок кода\функции из методички похоже что самих разработчиков, (обложку не сфотографировали). Имею ее в электронном варианте потому и привел в неизменном виде! Но суть в общем то стала понятна. Спасибо! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
NaslednikTutti 1 Опубликовано 5 Января 2012 Поделиться Опубликовано 5 Января 2012 Artos, Viнt@rь да, я что-то на это подозревал, но таки не смог разобраться. Заспавнил всех через all.spawn, сейчас все в норме Еще вот вопросы: Заспавнил я этот отряд сталкеров, нужно написать им логику чтоб они сидели у костра (болтали, играли, ели, пили и тд и тп чем они там занимаются на досуге :-) ) Кто-нибудь может подробно объяснить как это реализовать? Помочь с написанием логики для нпс, с созданием смарт_террейна и по моему, как-то еще .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 Не соответствует правилам. Ссылка на комментарий
Mass 5 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 Доброго времени суток, хотел вот спросить в файле 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) -- Думаю, должно быть так !!! Или я ошибаюсь? Ссылка на комментарий
_Призрак_ 11 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 С одной стороны - да, ошибка, т.к. судя по аргументам, action_remark_activity должен принимать имя НПС. С другой стороны - имя НПС ни где не юзается, поэтому первый аргумент может быть любым; Freedom Ссылка на комментарий
StafGlawer 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 Я работаю на ЗП и появился такой вопрос : После спавна НПС он отказывается разговаривать , даже новый диалог ему прописал - бесполезно .Мне кажется это связано с его логикой , ну или с тем что он обычный непись (те он отображается точкой а не звездой) . Помогите пожалуйста нубу . Ссылка на комментарий
losiara 13 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 Добрый вечер! Вопрос относительно настройки логики рестриктора! [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сек. Ломаю голову, ничего не получается!!! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Старлей 88 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 losiara у тебя нет завершенности алгоритма, добавь в [sr_sound2] вот что: on_signal = sound_end | sr_idle И тогда все будет хорошо Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Artos 99 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 StafGlawer, если ты заспавнив нечто в игре, считаешь что всем остальным ясно что же ты заспавнил и с какими параметрами и логикой, то глубоко заблуждаешься. Погадалками тут редко кто занимается и, если хочешь получить ответ, следует приводить информацию - что же ты сделал (коды скриптов/конфигов/... под спойлером). "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
HellStalkerDog 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 вот скрипт спавна с моими координатами в чем проблема. не спавниться всё равно. function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-223.36528015137,-19.629007559478,-132.66230773926),30990,62) end Ссылка на комментарий
Artos 99 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 (изменено) losiara, не стОит пытаться на штатной логике делать все, что накручиваешь. Порой гораздо проще это делать вынесенной своей функцией(ями). Если требуется рандомно по одному - стОит звуковую схему создать и ее использовать. Требуется последовательно - сделать последователыми нужное кол-во секций ... Хочешь рандомно и весь список - тут как раз своя функция сгодится, выбирая из списка и отсеживая его окончание ... Изменено 6 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
HellStalkerDog 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 опять ты тоже самое ... Пойми, собственно строка спавна говорит ТОЛЬКО о некоей секции объекта и коодинатах спавна. О какой тут логике объекта можно говорить? Без конфига этой секции - только гадание. Возможность разговора с неписью обуславливается и его группировкой (не нвая ли она у тебя иль не враг ли?), логикой, которая или берется из секции спавна (тогда укажи ее!) или же дефолтная ... тогда не враг должен болтать да проблема в том что он в указаных координатах не спавниться. говорить и тд я могу с ним. Ссылка на комментарий
Artos 99 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 (изменено) 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 - тогда хоть будешь знать из лог-файла, заспавнился ли вообще Изменено 6 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
StafGlawer 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 (изменено) Artos , я написал , заспавнил непися он отказывается разговваривать , что непонятного ? Стоит короче непись (новый, мой) но отказывается говорить . Изменено 6 Января 2012 пользователем StafGlawer Ссылка на комментарий
Artos 99 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 (изменено) StafGlawer, ну раз тебе все понятно - чего вопрошаешь? Ведь сказал же ранее (ошибившись адресатом): ... О какой тут логике объекта можно говорить? Без конфига этой секции - только гадание. Возможность разговора с неписью обуславливается и его группировкой (не новая ли она у тебя иль не враг ли?), логикой, которая или берется из секции спавна или нет-пакетами прописывается (тогда укажи ее!) или же дефолтная ... но тогда не враг должен болтать ... Предлагаешь нам погадалками заняться? Уволь ... Рождество на носу и утка погорает ... ;-) Изменено 6 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
HellStalkerDog 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 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 Вот все коды посмотрите и помогите пожалуйста. Ссылка на комментарий
StafGlawer 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 Artos я спрашиваю потому что мне не понятно почему он с гг не разговаривает Ссылка на комментарий
Artos 99 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 (изменено) HellStalkerDog, если все приведенные коды подключены к игре (думаю они не в отдельных файлах, а в уже имеющихся), то на первый взгляд все нормально. Но(!) предполагаю твою ошибку в следующем: В логике НЕ определена зависимость твоего НПС от гулагов - значит от не свободный, а должен получить работу в како-либо гулаге. То, что ты прописываешь ему независимую логику от гулагов - это понятно, но спавн в игре (ТЧ) в обязательном порядке проверяет при спавне сталкеров/монстров - если он не свободен от гудагов и не получил работу - удалить заспавненного. Поробуй добавить в логику это: [smart_terrains] none = true Но учти, заспавненный, судя по твоему пути - должен убежать на Склады ... можешь не успеть его заметить, если спавнится далеко от ГГ. Добавлено через 1 мин.: StafGlawer, более уже сказанного мне нечего добавить. Жди более понятливых иль ясновидящих ответчиков. Изменено 6 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
HellStalkerDog 0 Опубликовано 6 Января 2012 Поделиться Опубликовано 6 Января 2012 Но учти, заспавненный, судя по твоему пути - должен убежать на Склады ... можешь не успеть его заметить, если спавнится далеко от ГГ. Artos, А как сделать так чтобы он стоял на мести и не куда не уходил? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти