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

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


Halford

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

@Карлан, у меня какой-то бред выходит. Да и еще хочу убрать из функции level и game вертексы. Спавн все равно локальный.

Как это модифицировать? Чем задавать direction - градусами или как в all.spawn - радианами?:

 

 

function lab_x7_spawn_light_alarm_switch_green()
local ser_obj = alife():create("lab_x7_light_alarm_switch_green",vector():set(-76.31,-13.80,76.38),1012,2875)
     if ser_obj then
          -- Фиксируем кости
          local pk = m_netpk.get(ser_obj)
          if pk and pk:isOk() then
               local data = pk:get()
               if data then
                    data.fixed_bones = "link" -- любая кость? только link (проверить)
                    pk:set(data)
               end
          end
	end
end 

 

 

 

З.Ы. Вот, к примеру, актера можно без проблем перемещать по левелу локально - без указания вертексов. А для физ. объекта (не юзающего флажок used ai locations) это возможно осуществить родными функциями? Заместо alife():create... (хотя, на крайняк и нет-пакеты подойдут). Уж очень меня достало переписывать спавн через скрипты тех предметов, что появляются на одном с гг левеле, после очередного ковыряния локаций в СДК.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

С какого-то перепуга, отказывается запускаться конвертотор bardak-а. Мол, не могу найти запрашиваемый левел. Еще пару недель назад, все было ок. Что за фигня?

 

Батник (хотя, зачем он?)

 

 

converter -level default: l01_escape -mode le -with_lods
pause 

 

 

 

Кусок с convertor.ini

 

 

; 2947+ (SHOC)
[2947_config]:2945_config
$game_data$			= G:\Games\For games\S.T.A.L.K.E.R - Trilogy\S.T.A.L.K.E.R. mods utilities\X-Ray SDK\gamedata\
$game_levels$			= G:\Games\For games\S.T.A.L.K.E.R - Trilogy\S.T.A.L.K.E.R. mods utilities\X-Ray SDK\levels\
spawn_version			= soc 

 

 

 

fsconvertor.ltx (да, его копия есть в папке с СДК)

 

 

$sdk_root$ 			= false| false| G:\Games\For games\S.T.A.L.K.E.R - Trilogy\S.T.A.L.K.E.R. mods utilities\X-Ray SDK\
$sdk_root_raw$ 		        = false| false| $sdk_root$| rawdata\

$local_root$ 		        = false| false| $sdk_root$
$server_data_root$ 	        = false| false| $sdk_root$| rawdata\
$server_backup$ 	        = true| false| $server_data_root$| backup\
$server_root$ 		        = false| true| \
$app_data_root$ 	        = true| false| $server_root$| _appdata_\
$game_data$ 		        = false| true| $sdk_root$| gamedata\

$game_ai$ 			= true| false| $game_data$| ai\
$game_anims$ 		        = true| true| $game_data$| anims\| *.anm;*.anms| Animation files
$game_config$		        = true| false| $game_data$| config\
$game_dm$ 			= true| true| $game_data$| meshes\| *.dm| Detail Model files
$game_levels$ 		        = true| false| $game_data$| levels\
$game_meshes$ 		        = true| true| $game_data$| meshes\| *.ogf;*.omf| Game Object files
$game_particles$ 	        = true| true| $server_data_root$| particles\
$game_scripts$ 		        = true| false| $game_data$| scripts\| *.script| Game script files
$game_shaders$ 		        = true| true| $game_data$| shaders\
$game_sounds$ 		        = true| true| $game_data$| sounds\
$game_spawn$ 		        = true| false| $game_data$| spawns\
$game_textures$ 	        = true| true| $game_data$| textures\

$game_saves$ 		        = false| true| savedgames\
$screenshots$ 		        = true| false| screenshots\
$logs$ 				= true| false| $sdk_root$| logs\| *.err| Log files
$temp$ 				= true| false| $sdk_root$| temp\

$import$ 			= true| true| $sdk_root$| import\| | *.object;*.lwo;*.txt;*.xr;*.wav;*.obj;*.ltx;*.cpp| Files
$clips$ 			= true| true| $server_data_root$| objects\| *.clip| Object clips
$groups$ 			= true| true| $server_data_root$| groups\| *.group| XRay groups
$level$ 			= false| false| $game_levels$
$maps$ 				= true| true| $server_data_root$| levels\| *.level| XRay levels
$objects$ 			= true| true| $server_data_root$| objects\| *.object;*.lwo| XRay objects
$sounds$ 			= true| true| $server_data_root$| sounds\| *.wav| Wave files
$textures$ 			= true| true| $server_data_root$| textures\
$detail_objects$ 	        = true| true| $import$| | *.dti| Detail indices
$omotion$ 			= true| true| $import$| | *.anm| Object animation files
$omotions$ 			= true| true| $import$| | *.anms| Object animation list files
$sbones$ 			= true| true| $import$| | *.bones| Skeleton bone data files
$smotion$ 			= true| true| $import$| | *.skl;*.skls| Skeleton motion files 

 

 

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@BoBaH_671, так страшно, что аж неделю назад этим же батником все нормально распаковывалось.

 

З.Ы. Если есть желающие помочь и поковыряться в этом безобразии вот ссылка: http://rgho.st/6P5fdBHmc

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

Как это понимать:

 

 

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CObjectList::Destroy
[error]File          : E:\stalker\sources\trunk\xr_3da\xr_object_list.cpp
[error]Line          : 363
[error]Description   : <no expression>
[error]Arguments     : ! Unregistered object being destroyed 

 

 

 

Происходит при попытке завершить игру.

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

function lab_x7_delete_light_alarm_switch_red()
local se_obj = alife():object("light_alarm_switch_red") 
       if se_obj then 
         alife():release(se_obj, true) 
       end      
end

Может повесить ей story_id?

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@Hadzirim Hajad, судя по скриншоту, после вылета игры ты нажал кнопку отправки архива с логами игры ПЫС (естественно, вся эта фигня уже давно не работает, если и работала вообще), а поскольку никакой почтовой программы с активным адресом не привязанно - выводится это уведомление. Короче, не жми всякие малопонятные кнопки.

 

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

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

Есть способ заставить главное меню игры отображать номер сборки модификации из внешнего файла? Например, по его имени внутри папки gamedata: build 170916 и без зависимости от расширения. Что-то вроде поиска по ключевому слову build + все то, что написано в названии файла кроме него.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

Можно как-то сгладить анимации непися в логике, ибо между переходом от hello к guard - он "втыкает" в идловом состоянии:

[walker@wait_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
meet = meet@alex_squad_need_help
danger = danger_condition@alex
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[meet@alex_squad_need_help]
meet_state = 30| hello| 20| guard
meet_state_wpn = 30| hello| 20| threat@threat_weap
victim = 30| actor
victim_wpn = 30| actor
use = true
use_wpn = false
syndata = hello
meet_dialog = {-generators_save_taurus} generators_alex_start_dialog 
Изменено пользователем Silver Raven

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, тогда, я так понимаю, придется вешать переходы между анимациями из walker-а по сигналу? И разбивать схему на несколько частей. Несколько геморойно.

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@CRAZY_STALKER666, время, серьезно? Вы бы хоть вики почитали, прежде чем это писать. Это дистанция в метрах до гг, при которой проигрывается указанная анимация. А если он слишком быстро "пролетит" указанный промежуток - она уродливо оборвется.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, а как бы мне с walker-а дистанцию до гг вычислить? 

[walker@wait_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[remark@1]
anim = hello
target = actor
on_signal = anim_end | remark@2 -- А может тут дать переход к meet, с постоянной анимкой?

[remark@2]
anim = guard
target = actor
on_signal = anim_end | meet@alex_squad_need_help

Как-то так? Но нужно то, что я писал выше, on_actor_dist_le - сработает?


Вот так:

[walker@wait_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
on_actor_dist_le = 20 | remark@hello_actor
meet = meet@alex_squad_need_help
danger = danger_condition@alex
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[remark@hello_actor]
anim = hello
target = actor
on_signal = anim_end | meet@alex_squad_need_help

[meet@alex_squad_need_help]
meet_state = 20| guard
meet_state_wpn = 20| threat@threat_weap
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = false
syndata = hello
meet_dialog = {-generators_save_taurus} generators_alex_start_dialog

З.Ы. Секция спавна содержимого в инвентарный ящик по условию (spawner), доступна в ТЧ? Или это только для мобов и нпс?

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, а возврат к изначальной логике сделать так?:

 

on_actor_dist_ge_iviz = 20 | walker@wait_actor

 

Чтобы непись приветствовал гг каждый раз, пока тот не поговорил с ним.

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, что-то не так. Непись лишь слегка дергается на нужной дистанции, затем, судя по всему, переходит во второй walker:

[logic]
active = walker@wait_actor
on_death = death

[walker@wait_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
on_actor_dist_le_inviz = 20 | remark@hello_actor
danger = danger_condition@alex
meet = no_meet
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[remark@hello_actor]
anim = hello
target = actor
on_signal = anim_end | walker@wait_talk_to_actor

[walker@wait_talk_to_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@alex_squad_need_help
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[meet@alex_squad_need_help]
meet_state = 10| guard
meet_state_wpn = 10| threat@threat_weap
victim = 10| actor
victim_wpn = 10| actor
use = true
use_wpn = false
meet_dialog = {-generators_save_taurus} generators_alex_start_dialog
Изменено пользователем Silver Raven

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, судя по логу (вывод дебаг сообщения в консоль), переход в секцию remark@hello_actor выполняется успешно.

По таймеру, анимка проигралась нормально (я правда не знаю ее длину в сек. взял с запасом). Бред какой-то... on_signal всегда отрабатывал нормально.

Жаль, что еще остается анимка guard со своей озвучкой из секции meet, со своим "кривым" переключением. Но в walker-е не сделать проверку на наличие у гг ствола в руках.

 

Кто подскажет продолжительность анимации hello?

 

upd.

Я тут полностью перекинул озвучку монолитовцев из ЗП (все, кроме лишних для ТЧ папок). Проверил каждый звук в подпапках -  их имена и количество полностью соответствует аналогам из ТЧ. Но в игре, иногда, проскакивает старая озвучка. Это невозможно! За годы работы с игрой, запоминаешь все фразы наизусть - они точно заменены. Пробовал править конфиг m_stalker_monolith, - перечислял все звуки по порядку и просто, задавал общий путь (например: sound_death = fight\death\death_), чтобы игра считывала все доступные файлы. Никакой разницы. Как такое происходит?

Изменено пользователем Silver Raven
  • Согласен 1

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


Ссылка на сообщение
Кстати. Вот такое дело мне никогда не нравилось.
meet_state = 10| guard
meet_state_wpn = 10| threat@threat_weap
victim = 10|actor
victim_wpn = 10| actor 

Поясню. Предположительно в 10 метрах от ГГ непись обязан произвести одновременно кучу действий. 1. Посмотреть на ГГ. 2. Взять оружие на изготовку.(Произнести свою эпическую фразу). Мне иногда кажется, что неокрепшая психика неписей этого не выдерживает. Я бы так делал: meet_state = 10| guard victim = 20| actor

Допустим. А как же неписю реагировать на гг со стволом в руках (meet_state = 10| guard этого не учитывает), если meet_state_wpn = 10| threat@threat_weap - отсутствует? И куда ему смотреть, если victim_wpn = 10| actor - отсутствует?

 

def_state_standing = guard - сейчас попробую.

 

upd.

Похоже, def_state_standing = guard конфликтует с анимкой, заданной в вей-поинте непися (binocular). Пытаясь заменить ее. Он то достает бинокль, то убирает его.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


Ссылка на сообщение
Пф... Здесь все элементарно: https://dl.dropboxus.../xr_meet.script

Я так понимаю, тут набор различных правок + рефракторинг с комментариями?

 

А еще подобное есть? А то я как раз собираю по всему инету переработанные скрипты оригинала.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@Dennis_Chikin,  я сейчас подсунул этот xr_meet заместо своего. Игра ругается на:

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...e.r. - trilogy\shoc\gamedata\scripts\xr_logic.script:279: attempt to call field 'set_meet' (a nil value)

функцию set_meet. Чего ему надо то?

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@_Val_, ну изначально предполагалось, что этот непись будет все время глазеть в бинокль, изредка прерываясь на другие анимации. Этим и обусловлен выбор метода ее места прописывания.

 

Да и я не очень представляю себе, как в одном walker-е "подружить" анимку бинокля с анимкой guard? Еще один remark? Большая выходит логика (учитывая, что тут писалась лишь ее малая часть).

 

"Починил" бы кто meet, гемороя было бы меньше.

 

З.Ы.

on_actor_dist_le = 20 | remark@hello_actor
on_actor_dist_le_nviz = 10 | walker@wait_talk_to_actor

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

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

Тем не менее. Оригинал - логика Волка:

[walker@esc_lager_volk_walker1]
path_walk = wolf_walk
path_look = wolf_look
meet = meet@wolf
on_actor_dist_le = 23| {+tutorial_wounded_start -esc_kill_bandits_quest_kill} remark@esc_lager_volk1 
on_actor_dist_le_nvis = 5| walker@esc_lager_volk_walker2
danger = danger_condition@shustryi

@Карлан, мне посоветовал брать ее за образец для моего непися.

 

@_Val_, подробнее об этом неписе:

 

 

[logic]
active = walker@wait_actor
on_death = death

[walker@wait_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
on_actor_dist_le = 20 | remark@hello_actor
on_actor_dist_le_nvis = 10 | walker@wait_talk_to_actor
danger = danger_condition@alex
meet = no_meet

[remark@hello_actor]
anim = hello
target = actor
meet = no_meet
on_timer = 4000 | walker@wait_talk_to_actor

[walker@wait_talk_to_actor]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@alex_squad_need_help
on_info  = {+generators_save_taurus} walker@after_start_task
on_info2 = {+generators_save_taurus_alternative} walker@after_start_alternative_task
on_info3 = {+generators_taurus_dead} walker@after_taurus_dead

[meet@alex_squad_need_help]
meet_state = 20| guard
meet_state_wpn = 20| threat@threat_weap
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = false
meet_dialog = {-generators_save_taurus} generators_alex_start_dialog


[walker@after_start_task]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@after_start_task
on_info = {+generators_taurus_back_to_alex_squad_complite} walker@after_complite_task
on_info2 = {+generators_taurus_dead} walker@after_fail_task

[meet@after_start_task]
meet_state = 20| guard
meet_state_wpn = 20| threat@threat_weap
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = false
meet_dialog = {+generators_save_taurus -generators_taurus_back_to_alex_squad_complite} generators_alex_taurus_save_in_progress_dialog 
 

[walker@after_start_alternative_task]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@after_start_alternative_task
on_info = {+generators_taurus_back_to_alex_squad_complite} walker@after_complite_task

[meet@after_start_alternative_task]
meet_state = 20| guard
meet_state_wpn = 20| guard
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = true
meet_dialog = {+generators_save_taurus_alternative -generators_taurus_back_to_alex_squad_complite} generators_alex_taurus_dead_hello_dialog


[walker@after_complite_task]
path_walk = generators_alex_walk_2
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@after_complite_task

[meet@after_complite_task]
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = true
meet_dialog = {+generators_taurus_back_to_alex_squad_complite -generators_save_taurus_task_talk_to_alex_complite} generators_alex_taurus_safety_dialog 


[walker@after_fail_task]
path_walk = generators_alex_walk_2
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@after_fail_task

[meet@after_fail_task]
meet_state = 20| guard
meet_state_wpn = 20| threat@threat_weap
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = false
meet_dialog = {+generators_taurus_dead +generators_save_taurus -generators_taurus_dead_talk_to_alex_complite} generators_alex_taurus_dead_dialog, {+generators_taurus_dead_talk_to_alex_complite} generators_alex_taurus_dead_hello_dialog


[walker@after_taurus_dead]
path_walk = generators_alex_walk_1
path_look = generators_alex_look
danger = danger_condition@alex
meet = meet@after_taurus_dead

[meet@after_taurus_dead]
meet_state = 20| guard
meet_state_wpn = 20| threat@threat_weap
victim = 20| actor
victim_wpn = 20| actor
use = true
use_wpn = false
meet_dialog = {+generators_taurus_dead -generators_save_taurus -generators_taurus_dead_talk_to_alex_alternative_complite} generators_alex_taurus_dead_alternative_dialog, {+generators_taurus_dead_talk_to_alex_alternative_complite} generators_alex_taurus_dead_hello_dialog

[danger_condition@alex]
ignore_distance            = 30
ignore_distance_grenade    = 30
ignore_distance_sound      = 30

[death]
on_info = %+generators_alex_squad_dead%

[smart_terrains]
none = true 

 

 

 

Со старта он втыкает в бинокль. Если гг находится в радиусе обзора и ближе 20-ти метров от него - машет рукой, переходит к анимке guard (если гг с оружием, просим стволом в нас не тыкать). Если гг не в радиусе обзора и находится в менее чем 10-ти метрах от непися - сразу переходит к guard, без приветствия.

Разговариваем с неписем, берем квест - он переходит к walker@after_start_task. Он опять пялится в бинокль. При приближении гг переходит к анимке guard.

Если мы взяли квест не у него: walker@after_start_alternative_task - проделываем то же самое, что и в самом начале. Разве что диалоги другие. (надо будет добавить приветствие и туда)

Ну а дальше, по аналогии с прошлыми секциями: если выполнили задание: walker@after_complite_task, если провалили задание - walker@after_fail_task. Только в бинокль уже не пялимся.
Если важный для квеста персонаж погиб, во время его выполнения (он же альтернативный квестодатель): walker@after_taurus_dead.

Как-то так...

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

@Fagot., возможно та анимка, заточена под конкретный класс оружия (?). И поскольку у обреза и Тоз-а они одинаковые - все ок. А вот если сунуть ему автомат...

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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


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

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