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

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


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

Ну телепортировать там, что-ли. Заблочить управление, убрать худ, затемнить экран построцессом. И наверх.

local a = vector()
-- Задаем координаты
a.x = -50
a.y = -3
a.z = -488
db.actor:set_actor_position(a)
db.actor:set_actor_direction(0) 

 

 

 

Kondr48, меня интересует приоритет? Это очень важно мне знать, на будущее. Что первично, родная задача или прикреплённый конфиг?

Что значит "родная задача"? Всё, что можно добавить на уровне скриптов/логики работать будет, т.к движок штатно эту возможность поддерживает.. Если нет, и захотите её добавить на уровне движка, то какая строка первой у вас будет написана, такая первай и сработает. Вопрос странный конечно. 

 

Kondr48, нет, скриптовый ЛЧ я не хочу юзать. Он работает через одно известное место...

Нормально он работает.

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

@Kondr48, да я вообще туплю, и не про скриптовой спрашиваю. Я сам проверю на практике.

Добавлено BFG,

Не ФЛУДИМ !!!

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
Может, как-то изменить местоположение гг? Ну телепортировать там, что-ли. Заблочить управление, убрать худ, затемнить экран построцессом.

Просто посмотри как сделан переход в оригинале ТЧ с БУМа на ЧАЭС-2, после разговора с О-Сознанием.

Изменено пользователем BFG
  • Согласен 2

"Кругом зомби.....у меня кончаются патроны...."

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

 

 

Просто посмотри как сделан переход в оригинале ТЧ с БУМа на ЧАЭС-2, после разговора с О-Сознанием.

Собственно, вот эта функция, вот только где координаты места телепортации?

 

 

-- Мы отказываемся вступить в осознание, нас переносит на вторую станцию
function osoznanie_decline(npc, actor)
    db.actor:disable_info_portion("oso_init_dialog")
	npc:stop_talk()
    actor:stop_talk()
	xr_effects.enable_ui(db.actor, nil)	  
	local point = patrol("mon_jump_aes2_walk")
	local look = patrol("mon_jump_aes2_look")
	
	db.actor:set_actor_position(point:point(0))
	local dir = look:point(0):sub(point:point(0))
	db.actor:set_actor_direction(-dir:getH())
	
end 

 

 

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

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

 

 

К ЛЧ нельзя "подкинуть" логику.

В стандартном понимании нельзя. То есть функционал xr_logic, в широком же смысле LC наследуется от рестриктора, соответственно ничто ему не чуждо. И если придумать схему для LC, то и кастом дату ему можно будет не бездумно заполнять. Посмотрите ставится ли игра на паузу при вызове месайдж бокса, если нет, то значит с вероятностью в 99% у НЕ тихих переходов ваши функции успеют отработаться, и тот же sr_idle будет иметь смысл.

 

На оригинале можно сделать псевдо-LC с логикой на основе рестриктора. Это вполне нормальный трюк. Так же можно выставлять таймер до телепорта ГГ, пока нужные функции не отработаются. Хотя я все-таки собираюсь написать нормальную логическую схему.

 

На исходниках я сделал, во-первых, нормальную функцию спавна LC, во-вторых делал функции включения/отключения. И с LC стало работать просто превосходно. Можно не удалять, а просто выключить, еще захомутать его меточным менеджером каким-нибудь и вся эта телега с LC будет управляться однострочным кодом.

 

@Silver Raven, метод point возвращает вектор, это и есть координаты.

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

 

 

И наверх. А там в ЛЧ с переходом без запроса (silent mode).

Все эти извращения упираются в не желание использовать скриптовые LC. Хотя, с учетом наличия нормальных модулей работы с нет-ракетами, создание скриптового LC не представляет ни какой сложности.

Если уж такой напряг с скриптованием, могу дать свою готовую ф-цию для скриптового спавна LC. Тока в ней используется модуль нет-пакетов от Artos.

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

Никак не пойму одно - как правильно распаковать игру и редактировать файлы.

Другие мне писали - нужно распаковать геймдату игры в отдельную папку, например, UNPACK. Потом отредактировать файлы, написать, наприме, пусть будет диалог или квест. Написали. Все. Потом что?

Меня интересуют такие вопросы:

1. Куда деть файлы с папки unpack?

2. Куда деть и поместить отредактированные файлы (написанный квест или диалог)?

Большое спасибо за помощь!

Добавлено Eugen81,

1. Оставить там, где они лежат - пригодятся, чтобы каждый раз заново не распаковывать.

2. Создать в корне игры (напр. c:\Games\S.T.A.L.K.E.R\) папку gamedata и закинуть в нее свои файлы, соблюдая пути (напр., если в распакованных путь c:\распаковка\config\gameplay\мой_файл.xml, то в gamedata кидай config\gameplay\мой_файл.xml)

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

1. Оставить на месте или удалить. По желанию.

2. В папку gamedata (если её нет - создайте).

Но вообще это совсем основы. Неужели туторов нету?

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

Никак не пойму одно - как правильно распаковать игру и редактировать файлы.

Попробуй "stalker universal extractor". Хороший распаковщик, удобный и простой в использовании. Все распакованные файлы будут  в директории игры и в отдельной папке. Название папки будет "UEgamedata". Если хочешь делать с нуля, то создай свою gamedata (в директории) и перекопируй туда все содержимое из папки с распакованными файлами (или те, которые собираешься изменять), ну а там уже и начинай работать. Только бэкапы делай. Опять же, это удобно тем, что у тебя не будет путаницы между разными папками и копиями, а-ля "мои файлы"/"мой_файл.ltx" и т.д., что потом придется переименовывать, вставлять, копировать 200 раз, а если какая-то ошибка, то опять все по новой.

 

 

 

Изменено пользователем Helgi
  • Согласен 2
Ссылка на комментарий

Пытаюсь новому НПС прописать повторяющиеся квесты подай/принеси, делаю другому персу вместо Сахарова на Янтаре. Вроде в task_manager все прописал, story_id указал. Но почему-то такая странная байда получается. Список заданий у перса в диалоге есть, а у ГГ - нету.

https://yadi.sk/i/7QBcTk1cuNP6d

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

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

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

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

Сверься со статьёй - http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%BD%D0%BE%D1%82%D0%B8%D0%BF%D0%BD%D1%8B%D0%B5_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_NPC

Не соответствует правилам.

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

Где-то в этой логике косяк, наглухо ее вешающий.:

 

 

[logic]
active = ph_idle@wait_to_using_lift_called_button

[ph_idle@wait_to_using_lift_called_button]
on_info = {!on_actor_not_in_zone(lab_x7_lift_spase_restrictor)} ph_idle@using_lift_called_button

[ph_idle@using_lift_called_button]
on_use = %=play_snd(alex_mod\devices\lift_called_button)%
tooltip = lab_x7_use_lift_called_button
nonscript_usable = true
on_timer = 5000 | ph_idle@wait_to_using_lift_called_button | 2000 | %+lab_x7_actor_using_lift_called_button%

 

 

(Как должно работать: если ГГ не в зоне lab_x7_lift_spase_restrictor, тогда при юзании объекта на который завязана логика, проиграется звук lift_called_button и спустя 2 сек. будет выдан инфопоршень lab_x7_actor_using_lift_called_button, а спустя пять вся схема возвращается в начальное состояние)

 

З.Ы. Не копайтесть в логике в час ночи.  :wacko2:

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

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

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

@Silver Raven, кто такие логики делает? У тебя что боты кнопки юзают? Две несовместимые вещи: рестриктор фиг знает где, и кнопка, которую фиг включишь, если в зоне.

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

andreyholkin.gif

rod_cccp.gif

 

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

 

 

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

Спасибо за ссылку, дома переделаю. Хотя вопросы уже появились. Например, почему task_manager.ltx в статье не упоминается?

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

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

Так, все что мог поправил и протестировал. Вылетов нет, но вся нижеописанная логика "висит":

 

1. Кнопка вызова лифта:

 

 

[logic]
active = ph_idle@using_lift_call_button

[ph_idle@using_lift_call_button]
on_use = {=on_actor_not_in_zone(lab_x7_lift_teleport_to_level_changer)} %=play_snd(lift_call_button)%
tooltip = lab_x7_use_lift_call_button
nonscript_usable = true
on_timer = 2000 | %+lab_x7_actor_using_lift_call_button% | 5000 | ph_idle@using_lift_call_button 

 

 

 

2. Панель управления внутри лифта:

 

 

[logic]
active = ph_idle@wait_to_using_lift_control_panel

[ph_idle@wait_to_using_lift_control_panel]
on_info = {+actor_arrived_in_lab_x7} ph_idle@set_timer_to_use_lift_control_panel
on_info2 = {=actor_in_zone(lab_x7_lift_teleport_to_level_changer) -actor_arrived_in_lab_x7} ph_idle@using_lift_control_panel

[ph_idle@set_timer_to_use_lift_control_panel]
on_timer = 5000 | %=disable_actor_arrived_in_lab_x7_info_portion% ph_idle@using_lift_control_panel

[ph_idle@using_lift_control_panel]
on_use = %=disable_input =disable_ui =play_snd(lift_control_panel)%
tooltip = lab_x7_use_lift_control_panel
nonscript_usable = true
on_timer = 4000 | %+actor_leaving_lab_x7% | 3000 | %=run_cam_effector("teleport":2006:false)% | 0 | %+lab_x7_change_actor_position_to_level_changer% 

 

 

 

3. Двери лифта:

 

 

[logic]
active = ph_button@lift_doors_closed

[ph_button@lift_doors_closed]
anim_blend = true
anim = idle_close
on_info = {+actor_arrived_in_lab_x7} ph_button@lift_doors_opening %=play_snd(lift_doors_start)%
on_info2 = {+lab_x7_actor_using_lift_call_button} ph_button@lift_doors_opening %=play_snd(lift_doors_start)%

[ph_button@lift_doors_opening]
anim_blend = true
anim = open
on_timer = 3030 | ph_button@lift_doors_opened %=play_snd(lift_doors_stop)%

[ph_button@lift_doors_opened]
anim_blend = true
anim = idle_open
on_timer = 8000 | ph_button@lift_doors_closeing %=play_snd(lift_doors_start)%
on_info = {+actor_leaving_lab_x7} ph_button@lift_doors_closeing %=play_snd(lift_doors_start)%

[ph_button@lift_doors_closeing]
anim_blend = true
anim = close
on_timer = 3030 | ph_button@lift_doors_closed %=play_snd(lift_doors_stop)%

 

 

 

Прочее барахло, завязанное на лифт:

 

 

[logic]
active = sr_idle@check_change_actor_position_to_level_changer

[sr_idle@check_change_actor_position_to_level_changer]
on_info = {+lab_x7_change_actor_position_to_level_changer} sr_teleport@change_actor_position_to_level_changer

[sr_teleport@change_actor_position_to_level_changer]
point1 = lab_x7_actor_teleport_to_level_changer_walk
look1 = lab_x7_actor_teleport_to_level_changer_look
timeout = 0 

 

 

 

В общем, выручайте, кто-как может.

 

З.Ы. Если потребуется, дам более подробное описание того, как в теории должна работать та или иная логика.

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

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

 

 

Например, почему task_manager.ltx в статье не упоминается?

 

Внимательнее надо быть.

Он упоминается внизу, где обсуждается возможность добавления новых квестов. В статье лишь описан метод подключения функционала таких квестов для нового НПЦ.

Не соответствует правилам.

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

Так, все что мог поправил и протестировал. Вылетов нет, но вся нижеописанная логика "висит":

Добавь в эффекты отсылку сообщений - узнаешь, что работает, а что "висит".
Ссылка на комментарий

@abramcumner, прикрутил на каждое действие в логике вывод сообщений в консоль:

 

1. Кнопка вызова лифта:

 

[logic]
active = ph_idle@using_lift_call_button

[ph_idle@using_lift_call_button]
on_use = {=on_actor_not_in_zone(lab_x7_lift_teleport_to_level_changer)} %=play_snd(lift_call_button) =test_call_button%
tooltip = lab_x7_use_lift_call_button
nonscript_usable = true
on_timer = 2000 | %+lab_x7_actor_using_lift_call_button% | 5000 | ph_idle@using_lift_call_button 

 

 

 

2. Панель управления внутри лифта:

 

[logic]
active = ph_idle@wait_to_using_lift_control_panel

[ph_idle@wait_to_using_lift_control_panel]
on_info = {+actor_arrived_in_lab_x7} ph_idle@set_timer_to_use_lift_control_panel %=test_lift_control_panel_start%
on_info2 = {=actor_in_zone(lab_x7_lift_teleport_to_level_changer) -actor_arrived_in_lab_x7} ph_idle@using_lift_control_panel

[ph_idle@set_timer_to_use_lift_control_panel]
on_timer = 5000 | %=disable_actor_arrived_in_lab_x7_info_portion =test_lift_control_panel_start_set_timer_to_use% ph_idle@using_lift_control_panel

[ph_idle@using_lift_control_panel]
on_use = %=disable_input =disable_ui =play_snd(lift_control_panel) =test_lift_control_panel_using%
tooltip = lab_x7_use_lift_control_panel
nonscript_usable = true
on_timer = 4000 | %+actor_leaving_lab_x7% | 3000 | %=run_cam_effector("teleport":2006:false)% | 0 | %+lab_x7_change_actor_position_to_level_changer%

 

 

 

3. Двери лифта:

 

[logic]
active = ph_button@lift_doors_closed

[ph_button@lift_doors_closed]
anim_blend = true
anim = idle_close
on_info = {+actor_arrived_in_lab_x7} ph_button@lift_doors_opening %=play_snd(lift_doors_start) =test_lift_doors_idle_close%
on_info2 = {+lab_x7_actor_using_lift_call_button} ph_button@lift_doors_opening %=play_snd(lift_doors_start)%

[ph_button@lift_doors_opening]
anim_blend = true
anim = open
on_timer = 3030 | ph_button@lift_doors_opened %=play_snd(lift_doors_stop) =test_lift_doors_onening%

[ph_button@lift_doors_opened]
anim_blend = true
anim = idle_open
on_timer = 8000 | ph_button@lift_doors_closeing %=play_snd(lift_doors_start) =test_lift_doors_idle_open%
on_info = {+actor_leaving_lab_x7} ph_button@lift_doors_closing %=play_snd(lift_doors_start)%

[ph_button@lift_doors_closing]
anim_blend = true
anim = close
on_timer = 3030 | ph_button@lift_doors_closed %=play_snd(lift_doors_stop) =test_lift_doors_closing% 

 

 

 

Прочее барахло, завязанное на лифт:

 

[logic]
active = sr_idle@check_change_actor_position_to_level_changer

[sr_idle@check_change_actor_position_to_level_changer]
on_info = {+lab_x7_change_actor_position_to_level_changer} sr_teleport@change_actor_position_to_level_changer %=test_lift_teleport_to_level_changer%

[sr_teleport@change_actor_position_to_level_changer]
point1 = lab_x7_actor_teleport_to_level_changer_walk
look1 = lab_x7_actor_teleport_to_level_changer_look
timeout = 0 

 

 

 

xr_effects:

 

 

function test_call_button()
  local c = get_console()
  c:execute("test_call_button. done!")
end

function test_lift_control_panel()
  local c = get_console()
  c:execute("test_lift_control_panel. done!")
end

function test_lift_control_panel_start()
  local c = get_console()
  c:execute("test_lift_control_panel_start. done!")
end

function test_lift_control_panel_set_timer_to_use()
  local c = get_console()
  c:execute("test_lift_control_panel_set_timer_to_use. done!")
end

function test_lift_control_panel_using()
  local c = get_console()
  c:execute("test_lift_control_panel_using. done!")
end

function test_lift_doors_idle_close()
  local c = get_console()
  c:execute("test_lift_doors_idle_close. done!")
end

function test_lift_doors_close()
  local c = get_console()
  c:execute("test_lift_doors_close. done!")
end

function test_lift_doors_opening()
  local c = get_console()
  c:execute("test_lift_doors_opening. done!")
end

function test_lift_doors_idle_open()
  local c = get_console()
  c:execute("test_lift_doors_idle_open. done!")
end

function test_lift_teleport_to_level_changer()
  local c = get_console()
  c:execute("test_lift_teleport_to_level_changer. done!") 

 

 

 

Теперь лог изобилует ошибками:

 

 

! Unknown command:  test_lift_doors_idle_close.
! Unknown command:  test_lift_control_panel_start.
! Unknown command:  test_lift_doors_idle_close.
* MEMORY USAGE: 272793 K
 
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: ...a.l.k.e.r. - trilogy\shoc\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
 

stack trace:

Scheduler tried to update object lab_x7_doors_lift
 
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: ...a.l.k.e.r. - trilogy\shoc\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
 

stack trace:

Scheduler tried to update object lab_x7_doors_lift_0000
 
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: ...a.l.k.e.r. - trilogy\shoc\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
 

stack trace:

Scheduler tried to update object lab_x7_lift_control_panel 

 

 

 

Из всего, кажись, пытаются работать только двери лифта.

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

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

Ссылка на комментарий
@Silver Raven, одна ошибка из-за описки =test_lift_doors_onening. Другие сходу не нашел. Изменено пользователем abramcumner
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

×
×
  • Создать...