Аномальный 5 Опубликовано 24 Сентября 2010 Пожалуйста, кто нибудь может сделать тутор, по логике НПС и мобов для ЗП? Столкнулся с такой проблемой: Прописал в смарт-терайне спавн эксклюзивного НПС-торговца, но помимо него спавнится его дубликат, только бес подгрузки логики, которую прописал для торговца, то есть он ведёт себя как обычный НПС. Где можно было тупонуть что б такое получить, больше нигде кроме торговца, спавна НПС с таким specific_character id не прописывал проверил трижды, в скаваде торговца только он. Помогите если кто сталкивался с такой проблемой, пожалуйста! К Богу не доходят ваши молитвы, так как, они похожи на спам! Поделиться этим сообщением Ссылка на сообщение
Аномальный 5 Опубликовано 27 Сентября 2010 (изменено) Темой я не ошибся, так как вопрос касался логики смарта для нпс! А в спавне смарта торговец прописан как эксклюзивный и спавниться пару раз бес определённого условия он не должен, собственно по началу так и было, а потом гдето ещё что-то не дописал и получилась такая х, и фиг знай где и ошибся. А может ли кто хоть логику волкера написать для ЗП, чтоб НПС заспавнился пошел в определённую точку и вмыкал там в опред. сторону. Потому как сам попробывал, но при загрузке локи получаю такой баг: FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : .... - Зов Припяти\gamedata\scripts\xr_motivator.script:161: attempt to index local 'smart_task' (a nil value) stack trace: Часть скрипта на которую ссылается лог: --******************************* Телепорт на первую точку пути работы смарттеррейна...***************************** local se_obj = alife():object(self.object:id()) if se_obj ~= nil then if db.spawned_vertex_by_id[se_obj.id] ~= nil then self.object:set_npc_position(level.vertex_position(db.spawned_vertex_by_id[se_ob j.id])) db.spawned_vertex_by_id[se_obj.id] = nil elseif db.offline_objects[se_obj.id] ~= nil and db.offline_objects[se_obj.id].level_vertex_id ~= nil then printf("changing position for object[%s] from %s to %s : level vertex [%s] to [%s]", se_obj:name(), vec_to_str(se_obj.position), vec_to_str(level.vertex_position(db.offline_objects[se_obj.id].level_vertex_id)) , tostring(se_obj.m_level_vertex_id), tostring(db.offline_objects[se_obj.id].level_vertex_id)) self.object:set_npc_position(level.vertex_position(db.offline_objects[se_obj.id] .level_vertex_id)) elseif se_obj.m_smart_terrain_id ~= 65535 then local smart_terrain = alife():object(se_obj.m_smart_terrain_id) if smart_terrain.arriving_npc[se_obj.id] == nil then local smart_task = smart_terrain.job_data[smart_terrain.npc_info[se_obj.id].job_id].alife_task self.object:set_npc_position(smart_task:position()) end end end Жирным выделана 161 строка. Собственно лока и группировка нпс новая может где-то и там ошибся. Вот собственно настройка смарта и его логика, там кстати в ней и спавниться торговец и механик в двойном количестве. [smart_terrain] squad_id = 13 respawn_radius = 35 spawn_point = gen_bestilia_baza_spawn_point respawn_params = respawn@gen_bestilia_baza max_population = 4 arrive_dist = 50 [respawn@gen_bestilia_baza] spawn_stalker@gen_bestilia_baza1 spawn_stalker@gen_bestilia_baza2 [spawn_stalker@gen_bestilia_baza1] spawn_squads = default_csky_squad_0, default_csky_squad_3, default_csky_squad_2 spawn_num = 2, 1 [spawn_stalker@gen_bestilia_baza2] spawn_squads = default_csky_squad_1, default_csky_squad_4 spawn_num = 2, 0 [exclusive] ;uniq gen_bestilia_barman = generators\gen_bestilia_barman_logic.ltx ;+surge gen_bestilia_remontnik = generators\gen_bestilia_remontnik_logic.ltx ;+surge gen_bestilia_anim1 = generators\gen_bestilia_baza_logic.ltx ;+surge gen_bestilia_anim2 = generators\gen_bestilia_baza_logic.ltx ;+surge gen_bestilia_kamp4 = generators\gen_bestilia_baza_logic.ltx ;Это уже пошла логика для нпс на данном смарте [animpoint@gen_bestilia] reach_movement = walk_noweap use_camp = true meet = meet@gen_bestilia [meet@gen_bestilia] close_anim = nil close_victim = nil far_anim = nil far_victim = nil close_distance = 0 far_distance = 0 use = {=actor_enemy} false, {=dist_to_actor_le(3)} true, false snd_on_use = {!dist_to_actor_le(3)} nil meet_on_talking = false ;Анимпоинты [logic@gen_bestilia_anim1] suitable = {=npc_community(csky)} true prior = 100 post_combat_time = 0, 0 active = animpoint@gen_bestilia_anim1 [animpoint@gen_bestilia_anim1]:animpoint@gen_bestilia cover_name = gen_bestilia_anim_rest_1 use_camp = false on_info1 = {=surge_started} animpoint@gen_bestilia_surge_hide1 [animpoint@gen_bestilia_surge_hide1]:animpoint@gen_bestilia cover_name = gen_bestilia_anim_surge_1 use_camp = false on_info1 = {=surge_complete} animpoint@gen_bestilia_anim1 [logic@gen_bestilia_anim2] suitable = {=npc_community(csky)} true prior = 100 post_combat_time = 0, 0 active = animpoint@gen_bestilia_anim2 [animpoint@gen_bestilia_anim2]:animpoint@gen_bestilia cover_name = gen_bestilia_anim_rest_2 [logic@gen_bestilia_kamp4] suitable = {=npc_community(csky)} true prior = 100 post_combat_time = 0, 0 active = walker@gen_bestilia_kamp4 [walker@gen_bestilia_kamp4] path_walk = gen_bestilia_kamp4_walk path_look = gen_bestilia_kamp4_look use_camp = true meet = meet@gen_bestilia Собственно анимпоинты работают нормально, а вот волкер ругается Изменено 27 Сентября 2010 пользователем Аномальный К Богу не доходят ваши молитвы, так как, они похожи на спам! Поделиться этим сообщением Ссылка на сообщение
Аномальный 5 Опубликовано 27 Сентября 2010 (изменено) Arhara, спасибо за совет, теперь понял от куда проблема двойников! Но собственно не в том основная проблема, что спавнится несколько НПС одной айди, это можно обойти несколькими способами, более серьёзная проблема это вылет из-за логики волкера! А поточнее что такое smart_task, где его прописать или от куда оно берётся? Изменено 27 Сентября 2010 пользователем Аномальный К Богу не доходят ваши молитвы, так как, они похожи на спам! Поделиться этим сообщением Ссылка на сообщение
Аномальный 5 Опубликовано 28 Сентября 2010 (изменено) Arhara, дело в том что может! Собственно если отключить логику волкера то всё нормально работает, спавнятся 3-и бойца и 2-а торговца и 2-ремонтника, количество респавненых у меня 5-ь повидимо недостаток бойцов восполняется эксклюзивными, по твоей теории выше! Анимпоинты пашут нормально, к тому же группировка торговца и ремонтника отличительная от бойцов и они не берут участь в общей логике, так как она написана только для группировки csky. Если надо могу сделать скрины клонов! Нажаль, Arhara, твой совет по поводу уменьшения жителей не помог, попробывал заспавнить торговца не через логику смарта, а через аллспавн и всё равно есть клон! Можешь глянуть логику торговца может в ней "собака зарыта" [logic@gen_bestilia_barman] suitable = {=check_npc_name(gen_bestilia_barman)} true trade = misc\trade\trade_gen_bestilia_barman.ltx prior = 100 active = animpoint@gen_bestilia_barman can_select_weapon = false level_spot = trader [animpoint@gen_bestilia_barman] cover_name = gen_bestilia_baza_animpoint_gen_bestilia_barman look = true look_x = -66.38061523438 look_z = 66.3476363420486 look_y = 66.94204711914 avail_animations = animpoint_stay_table_no_rnd use_camp = false meet = meet combat_ignore_cond = true combat_ignore_keep_when_attacked = true invulnerable = true gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false [meet] close_anim = nil close_victim = nil far_anim = nil far_victim = nil close_distance = 0 far_distance = 0 close_snd_distance = 3 abuse = false use = {=actor_enemy} false, true allow_break = false meet_on_talking = false Изменено 28 Сентября 2010 пользователем Аномальный К Богу не доходят ваши молитвы, так как, они похожи на спам! Поделиться этим сообщением Ссылка на сообщение