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

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


Svoboда

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

Пожалуйста, кто нибудь может сделать тутор, по логике НПС и мобов для ЗП?

Столкнулся с такой проблемой: Прописал в смарт-терайне спавн эксклюзивного НПС-торговца, но помимо него спавнится его дубликат, только бес подгрузки логики, которую прописал для торговца, то есть он ведёт себя как обычный НПС. Где можно было тупонуть что б такое получить, больше нигде кроме торговца, спавна НПС с таким specific_character id не прописывал проверил трижды, в скаваде торговца только он. Помогите если кто сталкивался с такой проблемой, пожалуйста!

К Богу не доходят ваши молитвы, так как, они похожи на спам!

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


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

Темой я не ошибся, так как вопрос касался логики смарта для нпс! А в спавне смарта торговец прописан как эксклюзивный и спавниться пару раз бес определённого условия он не должен, собственно по началу так и было, а потом гдето ещё что-то не дописал и получилась такая х, и фиг знай где и ошибся. А может ли кто хоть логику волкера написать для ЗП, чтоб НПС заспавнился пошел в определённую точку и вмыкал там в опред. сторону. Потому как сам попробывал, но при загрузке локи получаю такой баг:

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

 

Собственно анимпоинты работают нормально, а вот волкер ругается

 

 

 

Изменено пользователем Аномальный

К Богу не доходят ваши молитвы, так как, они похожи на спам!

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


Ссылка на сообщение
Arhara, спасибо за совет, теперь понял от куда проблема двойников! Но собственно не в том основная проблема, что спавнится несколько НПС одной айди, это можно обойти несколькими способами, более серьёзная проблема это вылет из-за логики волкера! А поточнее что такое smart_task, где его прописать или от куда оно берётся? Изменено пользователем Аномальный

К Богу не доходят ваши молитвы, так как, они похожи на спам!

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


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

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

 

 

Изменено пользователем Аномальный

К Богу не доходят ваши молитвы, так как, они похожи на спам!

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


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

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