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

[SoC] Ковыряемся в файлах


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

@UnLoaded,

логика

[logic]
active = walker@varan 
combat_ignore = combat_ignore
on_hit = hit
on_death = death
 
[hit]
 
on_info = {=hit_by_actor}%+lada_mertva%

 
[death]
on_info = %+varan_sdox%
 
[walker@varan]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_actor_dist_le_nvis = 3 | {-varan_sound}remark@varan
 
[remark@varan]
target = actor
snd = varan
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan1  %+varan_sound%   
 
[walker@varan1]
path_walk = varan_walk
path_look = varan_look 
meet = meet
combat_ignore_cond = {-lada_mertva}
on_info = {+kachan_af_okean_start} walker@varan2
 

[walker@varan2]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info = {+kachan_af_okean_have} walker@varan3

[walker@varan3]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_actor_dist_le_nvis = 3 | {-varan2_sound}remark@varan2
danger = danger_condition@varan

[remark@varan2]
target = actor
snd = varan2
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan4  %+varan2_sound%   
 
[walker@varan4]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
 
[meet]
meet_state = 10|guard@wait
meet_state_wpn = 10|backoff@threat_weap
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = false
syndata = backoff@threat_weap
 
[combat_ignore]
combat_ignore_cond = {-lada_mertva}


[danger_condition@varan]
ignore_distance = 0
ignore_distance_corpse = 0

 

Да что тут напутано, всё идет по порядку. Может....сам уже не знаю, что может.

Изменено пользователем Хемуль36рус

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

Короче, я понял одно, логика работает нормально, если Гг рядом с нпс, как только уходишь от него, чтобы он остался в офлайне, все ломается.

 

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

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

Ну, как вариант, добавить в xr_effects.script ф-ции типа:

function logic_test()
local text = "переходим в секцию [какая нужна]"
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
Затем в условиях переключения секций добавить эту ф-цию как эффект %=logic_test%, и смотреть по сообщениям как происходит переключение секций. Когда наглядно будет видно их переключения, проще ошибку отловить.
 
"...выдавал реплику после выполнения квеста" - процесс выполнения квеста(завершение подзаданий любого из активных заданий) не связан никак с логикой неписей. Только твоя работа по этому связыванию, правильной выдачей и-п, и обеспечит нужную синхронизацию.
Изменено пользователем UnLoaded
Ссылка на комментарий

@Хемуль36рус, config\scripts\agr\agr_krot.ltx, смотрим, анализируем, делаем выводы. Логика у тебя вообще забавная, попробуй перепиши опираясь на нормальную человеческую логику, т.е. причина, следствие, причина, следствие и т.д.

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

 

 

Логика у тебя вообще забавная

Это точно.

 

@Хемуль36рус, вот такую логику попробуй ( минимум исправлений ):

 

[logic]
active = walker@varan 
combat_ignore = combat_ignore
on_hit = hit
on_death = death
 
[hit]
 
on_info = {=hit_by_actor}%+lada_mertva%
 
 
[death]
on_info = %+varan_sdox%
 
[walker@varan]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info  = {=dist_to actor_le(4) -varan_sound} remark@varan
on_info2 = {+varan_sound -varan2_sound} walker@varan2
on_info3 = {+varan_sound +varan2_sound} walker@varan4
 
[remark@varan]
target = actor
snd = varan
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan2  %+varan_sound%   
 
[walker@varan2]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info = {+kachan_af_okean_have} walker@varan3
 
[walker@varan3]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info  = {=dist_to actor_le(4)} remark@varan2
danger = danger_condition@varan
 
[remark@varan2]
target = actor
snd = varan2
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan4  %+varan2_sound%   
 
[walker@varan4]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
 
[meet]
meet_state = 10|guard@wait
meet_state_wpn = 10|backoff@threat_weap
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = false
syndata = backoff@threat_weap
 
[combat_ignore]
combat_ignore_cond = {-lada_mertva}
 
 
[danger_condition@varan]
ignore_distance = 0
ignore_distance_corpse = 0

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

@makdm, попробую конечно, но а что забавного то, переходит из секции в секцию. А от Крота Гг не уходит так, чтобы тот остался в офлайне, все происходит рядом.

 

Вот такой вылет с примером этой логикию

! Cannot find saved game ~~~ object 'varan': pick_section_from_condlist: function 'dist_toactor_le' is not defined in xr_conditions.script
* Log file has been saved successfully!
 
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: f:\stalker4\gamedata\scripts\_g.script:1127: bad argument #2 to 'format' (string expected, got no value)
 

stack trace:

Почему-то не определяет функцию.

Изменено пользователем Хемуль36рус

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

Ребята, спавню значит уже нпц через all.spawn по уроку (http://stalkerin.gameru.net/wiki/index.php?title=All.spawn._Создание_NPC), и прописываю ему почти всё свое, включая координаты. С логикой так же. Нпц спавнится где надо, но потом бежит и прибегает к точке, где он спавнится по уроку. Как такое возможно? 

Логика: 

[walker_stay_at_position_walk]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = -178.327,-19.932,-160.786
p0:game_vertex_id = 52
p0:level_vertex_id = 72102

[walker_stay_at_position_look]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = -181.047,-19.932,-158.252
p0:game_vertex_id = 52
p0:level_vertex_id = 72147 

 

 

 

Секция:

[914]
; cse_abstract properties
section_name = stalker
name = soldafon
position = -178.327,-19.932,-160.786
direction = 0,0,0

; cse_alife_trader_abstract properties
money = 12724
character_profile = soldafon

; cse_alife_object properties
game_vertex_id = 52
distance = 0
level_vertex_id = 72102
object_flags = 0xffffffbf
custom_data = <<END
 
[logic]
active = walker@stay_at_position
combat_ignore = combat_ignore
danger = danger_condition
 
[walker@stay_at_position]
path_walk = walker_stay_at_position_walk
path_look = walker_stay_at_position_look
 
[combat_ignore]
combat_ignore_cond = always
 
[danger_condition]
ignore_distance = 0
ignore_distance_corpse = 0
 
; cse
[smart_terrains]
none = true
END
story_id = 10000

; cse_visual properties
visual_name = actors\soldier\soldier_spetsnaz

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 2
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -178.327,-19.932,-160.786
upd:o_model = 0
upd:o_torso = 0.0280130300670862,0,0.999607563018799
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 2

; 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,2,2,1,2
predicate4 = 0,1,1,1

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties
 

 

 

RafMadMan.gif

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

@makdm, Я тоже не заметил, переписал вот так

[logic]
active = walker@varan 
combat_ignore = combat_ignore
on_hit = hit
on_death = death
 
[hit]
 
on_info = {=hit_by_actor}%+lada_mertva%
 
 
[death]
on_info = %+varan_sdox%
 
[walker@varan]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_actor_dist_le_nvis = 3 | {-varan_sound} remark@varan
on_info = {+varan_sound -varan2_sound} walker@varan2
on_info2 = {+varan_sound +varan2_sound} walker@varan4
 
[remark@varan]
target = actor
snd = varan
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan2  %+varan_sound%   
 
[walker@varan2]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info = {+kachan_af_okean_have} walker@varan3
 
[walker@varan3]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_actor_dist_le_nvis = 3 | {-varan2_sound} remark@varan2
danger = danger_condition@varan
 
[remark@varan2]
target = actor
snd = varan2
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan4  %+varan2_sound%   
 
[walker@varan4]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
 
[meet]
meet_state = 10|guard@wait
meet_state_wpn = 10|backoff@threat_weap
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = false
syndata = backoff@threat_weap
 
[combat_ignore]
combat_ignore_cond = {-lada_mertva}
 
 
[danger_condition@varan]
ignore_distance = 0
ignore_distance_corpse = 0

 

тьфу, тьфу, сработало, первый раз за два дня, но проверю ещё разок.

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

 

 

но проверю ещё разок.

Можешь не проверять. Будет работать на все 146%. Просто я знаю причину. Года так три или четыре назад, сам решал такую же проблему.

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

@makdm, ну так расскажи для всех, что за причина.

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

 

 

у так расскажи для всех, что за причина.

Причина в том, что каждый раз при переходе в он-лайн в логике запускается active секция.

Ты первый раз подошёл к НПС. Условие on_actor_dist_le_nvis = 3 | {-varan_sound} remark@varan возвращает true.

Переключение на секцию remark и выдаётся поршень varan_sound.

Затем ты ушёл от НПС и НПС перешёл в офф-лайн.

Ты вернулся и при переходе НПС в он-лайн снова запускается active секция.

В этом случае условие on_actor_dist_le_nvis = 3 | {-varan_sound} remark@varan возвращает false ( поршень varan_sound уже был выдан ранее ).

Вот НПС и тупит у тебя в active секции и не переключается на другие.

Я добавил тебе в active секцию эти переключения.

 

Всё очень просто.  :)

  • Спасибо 1
Ссылка на комментарий

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

Ссылка на комментарий
все равно простыня, у него пути одинаковые везде,

Согласен. Поэтому и написал, что исправил только минимум ( затык в логике ), а уж править саму структуру логики я не стал.

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

Логика вещь муторная, делал так как видел в других модах. Да так и проще вроде.

  • Согласен 1

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

Ссылка на комментарий
Причина в том, что каждый раз при переходе в он-лайн в логике запускается active секция.

Не уверен.

Может я и не прав, те кто лучше знают - поправят, но если непись работает в каком-то гулаге, то при переходах он\офф-лайн секция logic(т.е. перезапуск всей логики) активируется только при переключении работ, т.е. обычно это смена состояний гулага;

А вот если непись отрабатывает собственную логику(т.е. единственную работу) - вот тут при переходах он\офф-лайн видимо происходит перезапуск всей логики. Это не утверждаю, т.к. не тестировал, в отличии от работ под гулагами.

 

Кстати, Хемуль36рус, а этот непослушный непись у Вас под гулагом или собственная логика ?

Изменено пользователем UnLoaded
  • Нравится 1
Ссылка на комментарий

 

 

Может я и не прав, те кто лучше знают - поправят

Абсолютно прав.

В данном случае НПС не в гулаге. Поэтому и произошёл такой "затык" в логике.

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

Такая трабла возникла. Есть автомат АК-12 калибра 7.62. Хотелось бы его (модельку) под калибр 5,45 переделать, но вся беда в том, что сам я в этом полнейший дуб. Может, найдется кто-нибудь, кто сможет переделать модельку?

Сталкер - наше всё!

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

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

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

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

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

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

Войти

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

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

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