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

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


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

@BoBaH_671, При желании, вообще все и вся в игре можно делать на апдейте, и проверять каждый апдейт кучу условий - почему бы нет?

И утверждать, что все кто делает иначе, "несут ахинею" - вам конечно, никто не запретит. Только не надо потом удивляться, если кто-то ВАМ скажет, что вы делаете и пишете ахинею. Потому что так оно и есть. Для одноразовых действий при появлении актора, кто-то придумал actor_binder:net_spawn. Вам использовать его, религия не позволяет или что?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Zander_driver, я просто показал один из возможных вариантов и показал функцию, которая будет выполнена один раз, хоть и стоит на апдейте. Всё. Закрыли тему.

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

Ранее был известен под ником BoBaH_671.

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

 

 

Может ли кто объяснить что здесь за цифры :? obj=alife():create("test",vector():set(101.435539245605,-8.38547039031982,164.284591674805),3 96523,1643) Это я нпц по уроку Корнеева спавню, здесь его коорд-ы, только что где я понятия не имею, а хочется своё подставить.

Цифры в скобках: координаты по осям соответственно x, y, z. Дальше - level_vertex, game_vertex.

 

 

 

вот такую картинку имею, и кажется здесь нет гейм и левел вертексов, или есть? Есть lvid и gvid, это случаем не они?

Они самые.

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

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

Народ, может кто чего подскажет. Вот логика нпс квестового

[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@varan
combat_ignore_cond = {-lada_mertva}
on_info = {+kachan_af_okean_start -kachan_af_okean_have} walker@varan2

[walker@varan2]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet@varan
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@varan
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@varan
 
[meet@varan]
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

 

 

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

[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%   

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

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

Ссылка на комментарий
Подскажите как сделать так что бы НПС первый начал диалог? Сделал вот так не работает..

Название моего диалога: gar_dialog_prapor

В all.spawn:



[900]
 
; cse_abstract properties
section_name = stalker
name = gar_dolg_blokpost_4
position = 29.2251853942871,0.488445281982422,233.359680175781
direction = -0.0128737986087799,0.000323313870467246,0.025109501555562
version = 118
script_version = 6
 
; cse_alife_trader_abstract properties
money = 5000
character_profile = gar_dolg_blokpost_commander
 
; cse_alife_object properties
game_vertex_id = 359
distance = 16.1000003814697
level_vertex_id = 203041
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
gar_dolg_blokpost = true
 
[logic]
meet = meet
 
[meet]
use/use_wpn = true
meet_dialog = gar_dialog_prapor
END
story_id = 115
 
; cse_visual properties
visual_name = actors\dolg\stalker_do_balon_4
 
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 2
g_group = 7
health = 2
dynamic_out_restrictions =  
dynamic_in_restrictions =  
upd:health = 2
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 29.2251853942871,0.488445281982422,233.359680175781
upd:o_model = 0
upd:o_torso = 0.000323313870467246,-0.0128737986087799,0
upd:g_team = 0
upd:g_squad = 2
upd:g_group = 7
 
; 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
equipment_preferences = 1,1,2,2,2
main_weapon_preferences = 0,2,2,1
 
; cse_ph_skeleton properties
 
; cse_alife_human_stalker properties
upd:start_dialog =  
 
; se_stalker properties
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


В character_desc_garbage написал:



  <specific_character id="gar_dolg_blokpost_commander" team_default = "1">
   <name>gar_dolg_blokpost_leader_name</name>
   <icon>ui_npc_u_stalker_do_balon_4</icon>
   <map_icon x="4" y="0"></map_icon>
   <bio>gar_dolg_blokpost_leader_bio</bio>
    
   <class>gar_dolg_blokpost_commander</class>
   <community>dolg</community> <terrain_sect>stalker_dolg_terrain</terrain_sect>
    
   <rank>592</rank>
   <reputation>140</reputation>
   <money min="600" max="2000" infinitive="0"/>
 
   <snd_config>characters_voice\human_02\dolg\</snd_config>
   <crouch_type>0</crouch_type>
    
   <visual>actors\dolg\stalker_do_balon_4</visual>
   <supplies>
    [spawn] \n
    wpn_pm \n
    ammo_9x18_fmj \n
    wpn_bm16 \n
    ammo_12x76_dart \n
    device_torch \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"    
   </supplies>
 
#include "gameplay\character_criticals_6.xml"
 
   <start_dialog>gar_dolg_blokpost</start_dialog>
   <start_dialog>dm_hello_dialog</start_dialog>
   <start_dialog>gar_dialog_prapor</start_dialog>
   <actor_dialog>dm_cool_info_dialog</actor_dialog>
   <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
  </specific_character>


 

:russian_ru:

Изменено пользователем NL-Vincenz

NL-Vincenz.gif

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

@NL-Vincenz, логика не может быть

[logic]
meet = meet

Почитай в теме по диалогам, там всё доступно расписано. Или здесь

http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2

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

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

@NL-Vincenz, тебе Карлан выше уже ответил.

Поищи в имеющихся конфигах секцию meet, где есть настройка use = self или use_wpn = self и посмотри, как там это сделано.

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

 

 

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

Что значит "логика зависает" ? В чем это выражается ?

"на некоторое расстояние" - на какое ? Если уйти от непися на расстояние больше alife-радиуса, то он уйдет в офф-лайн(если не прописано ему иное) и естественно не будет логику отрабатывать...

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

Ребята, делал я значит сегодня первые попытки спавна нпц. Спавн нпц через скрипт показался мне не очень функциональным, поэтому решил пойти путём редактирования all.spawn. Ну и вот по этому уроку я заспавнил нпц, вроде как. Всё бы нечего, но при синхронизации клиента игра вылетает с таким логом:

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: ...rsol\s.t.a.l.k.e.r\gamedata\scripts\amk_anoms.script:307: attempt to index local 'sobj' (a nil value)
 

stack trace:
  

 

 

 

Фишка в том, что сделал всё в точности по уроку (Ну для первого раза), только что координаты свои подставил. И вот никак не могу понять, да и многим людям я уже мозг загрузил этой проблемой - тоже в непонятке сидят и листают справочники.

Что я такого неправильно сделал? Где я мог ошибиться, накосячить? Файл amk_anoms.script в жизни не трогал. Нечего больше не добавлял, только вот спавнил нпц и всё.

 

Так же прилагаю все данные о нпц:

Секция нпц в all.spawn с моими координатами (Спавнится возле двери Сидора, типо охранник.): 

[914]
; cse_abstract properties
section_name = stalker
name = noobik
position = -249.616,-24.800,-135.920
direction = 0,0,0

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_noobik

; cse_alife_object properties
game_vertex_id = 7
distance = 0
level_vertex_id = 10132
object_flags = 0xffffffbf
custom_data = <
[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_beret_1

; 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 = -249.616,-24.800,-135.920
upd:o_model = 0
upd:o_torso = 0.028013030067086,0,0.9996075630188
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 

 

 

Вот пути (Ну он стоять должен, поэтому по одной точке.) :

[walker_stay_at_position_walk]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = -233.837997436523,-19.9890003204346,-156.845993041992
p0:game_vertex_id = 7
p0:level_vertex_id = 10132


[walker_stay_at_position_look]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = -234.837997436523,-19.9890003204346,-157.845993041992
p0:game_vertex_id = 7
p0:level_vertex_id = 10132
 

 

 

Секция в character_desc_escape.xml:

<!---------------------------------------esc_noobik----------------------------------------------------->
<specific_character id="esc_noobik" team_default = "1">
<name>Нубик</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_noobik</bio>
 
<class>esc_noobik</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>actors\soldier\soldier_beret_1</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
</specific_character>
  

 

 

В game_story_ids написал:

10000 = "esc_noobik"

В npc_profile.xml добавил:

 
<character id="esc_noobik">
<class>esc_noobik</class>
<specific_character>esc_noobik</specific_character>
</character>
 

В spawn_sections.ltx добавил это:

[esc_noobik]:stalker
$spawn = "respawn\esc_noobik"
character_profile = esc_noobik
spec_rank = novice
community = stalker
 

 

 

Помогите пожалуйста, а то никак уже не могу решить эту проблему 2й день(

 

Вот, если что line 307-й в amk_anoms.script:

--Строчки 306-315

function set_anomaly_status(sobj, status)
	local anom_id=sobj.id      --Она самая
	if status=="del" then
		amk.mylog("Disabling "..sobj:name())
	end
	local tbl = amk.get_anomaly_data(sobj)
	tbl.custom=modify_anomaly_custom_data(tbl.custom,status)
	amk.set_anomaly_data(tbl, sobj)
	set_online_anomaly_status(anom_id, status)
end 

 

 

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

RafMadMan.gif

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

@RafMadMan, откуда у вас в ТЧ взялся скрипт amk_anoms.script ?

Если Вы учитесь, то делайте на оригинальном ТЧ, и тогда таких вылетов у вас не будет.

А уж как начнёте разбираться в скриптах, тогда и подключайте дополнительные скрипты из АМК мода.

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

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

RafMadMan.gif

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

 

 

да скрипты я знаю на достаточном для  меня уровне

Ну если на достаточном, то тогда зачем задавать вопросы про причину вылета? Идёте по скриптам ( от строки вылета )  и находите причину. Всё элементарно.

 

 

спавнить я умею, но другими способами

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

  • Нравится 2
Ссылка на комментарий

@makdm, из других способов: спавн через скрипт или сдк. А насчёт скриптов: акцентирую внимание на словах:  "Достаточном для меня".

RafMadMan.gif

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

@RafMadMan, судя по твоем репорту - недостаточно ;) . А ты пальцы то не растопыривай, тебе дело говорят, назвался груздем лезь в печь или как оно там.

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

@RafMadMan, я уже дал вам совет. Экспериментируйте на оригинальном ТЧ, тогда можно будет, в случае вылета, понять, где у вас ошибка.

В вашем случае объяснить причину вылета невозможно. Могу вам только сказать, что аргумент sobj, переданный  в функцию set_anomaly_status, равен nil.

А вот почему он равен nil, исходя из того, что вы предоставили, только экстрасенсы знают.

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

@UnLoaded, с одной причиной я разобрался, а вот вторая, не пойму из-за чего. Вот эта ремарка

[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%

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

 

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

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

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

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

; cse

[smart_terrains]

none = true

END

story_id = 10000

Никаких "; cse" здесь никогда не было и быть не может. Вообще, секция [smart_terrains] обычно первая после строчки custom_data, потом уже пишут всю остальную логику. Глянь, как это в спавне любой локации ПЫСами сделано.

 

И кстати, если бы ты логику в отдельный файл вынес, не пришлось бы спавн пересобирать и НИ начинать.

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

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

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

@Хемуль36рус,  в секции [remark@varan2] пропиши:

 

on_info   = {+varan2_sound}  walker@varan4

on_info2 = {=dist_to_actor_ge(145)}  walker@varan4 %+varan2_sound%

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

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

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

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

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

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

Войти

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

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

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