Перейти к содержанию

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

 
 

Neptun Не совсем то. Да, там камеры плавно переключаются друг за другом, но условия отвечают не за включение/выключение, а за появление конкретной камеры в принципе (как в катсцене после путепровода, где выполняется проверка, кто из напарников жив). Очень полезная штука, но отвязаться от таймингов даже с ней не вышло. Если я чего-то не заметил, буду благодарен за пример с разбором.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Добрый день/вечер/утро тем у кого оно доброе, у кого нет тому печенек... У меня возник вопрос по поводу данной функции:
 

function deneg_hren(actor, npc)
local actor = db.actor
all_money_actor = actor:money()
if actor and npc then
dialogs.relocate_money(npc, all_money_actor, "out")
end
end

Вопрос заключается в следующем, а возможно ли данную ф-ию поставить на апдейт и чревато ли последствиями?

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


Ссылка на сообщение
Поделиться на другие сайты
 
3 часа назад, Boomer сказал:

Как сделать функцию, чтобы у актера забрали все имеющиеся предметы в инвентаре?

function relocate_actor_inventory_to_box(actor, npc, p)
	local function transfer_object_item(item)
		if item:section() ~= "wpn_binoc" and item:section() ~= "wpn_knife" and item:section() ~= "device_torch" then
			db.actor:transfer_item(item, inv_box_1)
		end
	end
	inv_box_1 = get_story_object (p[1])
	actor:inventory_for_each(transfer_object_item)
end

Функция есть и в оригинальном скрипте, но там она закомментирована.


Дополнено 2 минуты спустя

Seraph а зачем, собственно, прерывать анимацию, чтобы всё равно переключить на другую анимацию? Просто любопытно. Делай анимации короткими, используй иные методы воспроизведения анимаций, которые можно прерывать в любой момент.


Дополнено 8 минуты спустя
1 час назад, Doctor_Oz сказал:

Вопрос заключается в следующем, а возможно ли данную ф-ию поставить на апдейт и чревато ли последствиями?

А в чем препятствие поставить в апдейт и посмотреть за последствиями? Хотя функция довольно странная. Если ГГ и НПС делают что? Вероятно, должна быть проверка, что они вступили в диалог, потому что результат как раз говорит, что все бабки будут отданы этому НПС, но тут ещё надо добавить проверку, что у ГГ вообще есть деньги.

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


Ссылка на сообщение
Поделиться на другие сайты
 

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

Добрый вечер. Я подключил к Зову Припяти локацию Кордон. Заселил её. Организовал симуляцию.  Сделал, как в оригинале. Чтобы сталкеры утром уходили на прогулку а вечером шли на базу.

Спойлер


    army = {
            squad = nil,
            smart = {     base     = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b1") end },
                        surge     = { prec = function() return xr_conditions.surge_started() end },
                        territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
                        resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end }
                    },
            actor = nil
    },
    stalker = {
            squad = nil,
            smart = {     base     = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b6") end },
                        surge     = { prec = function() return xr_conditions.surge_started() end },
                        territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
                        resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end }
                    },
            actor = nil
    },
    bandit = {
            squad = {     stalker     = { prec = function(squad, target) return in_time_interval(8,21) and not xr_conditions.surge_started() and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                    },
            smart = {     base     = { prec = function(squad, target) return in_time_interval(21,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b10") end },
                        territory= { prec = function() return in_time_interval(8,21) and not xr_conditions.surge_started() end },
                        surge     = { prec = function() return xr_conditions.surge_started() end }
                    },
            actor = nil
    },

Все работает как нельзя лучше.  НПС утром дружно идут гулять, к ночи возвращаются на базы и ложатся в кроватки.

Воодушевился успехом и решил в этом же скрипте запретить монстрам заходить на базовые смарты.

 

Спойлер


    monster_predatory_day = {
            squad = {     monster_vegetarian            = { prec = function() return in_time_interval(6,19)    end    },
                        stalker                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        bandit                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        dolg                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        freedom                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        killer                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                    },
            smart = {     territory= { prec = function() return  in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },
                        lair     = { prec = function() return in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }
                    },
            actor = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
    },
    monster_predatory_night = {
            squad = {     monster_vegetarian            = { prec = function() return in_time_interval(21,6)    end    },
                        stalker                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        bandit                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        dolg                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        freedom                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                        killer                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                    },
            smart = {     territory= { prec = function() return  in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },
                        lair     = { prec = function() return in_time_interval(6,19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }
                    },
            actor = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
    },

И получил зеленое насекомое.

Спойлер

 

FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : ..\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : ...ishing\Зов Припяти\gamedata\scripts\sim_board.script:107: attempt to index global 'target' (a nil value)
 

stack trace:

 

107 строка -- 

            smart = {     territory= { prec = function() return  in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },

Чем то движку не приглянулось указание смартов.  Вопрос - чем?  Можно ли запретить в sim_board конкретным фракциям лезть на конкретные смарты?

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

Платформа: x-ray 1.6

Скрипты/конфиги

Создаю смарты на локации. Решил, очень грубо говоря, включить debug для лога в скрипте _g.script в функции "printf(fmt,...)"

local con = get_console()
con:execute(string.gsub(string.format(fmt,...), " ", "_"))
con:execute("flush")

При загрузке игры вылет, в логах "Wrong smart name [%s] in start position" - это из функции "sim_board:fill_start_position()", скрипт - sim_board.script. Самый главный вопрос, который меня мучает, что за таблица "smarts_by_names", куда прописывать свои созданные смарты, уже везде прописал, даже в game_graph.ltx и поставил game_graph в Level Editor на локации внутрь смарта, в свойствах в 4 пункте выбрал свой смарт. В файлах по пути ../misc/*.ltx так же везде указал мои смарты, сквады. В скриптах, в принципе, прописал. Остаётся только момент с таблицей в sim_board.script, правильно ли я указал там всё, для объекта "simulation_activities"...но повторил за оригиналом, плюс там скорее настройки поведения смарта, и там не все смарты прописаны. Режим debug (если это можно так назвать) для лога в _g.script убирать не хочу. Что за ошибка то такая - "Wrong smart name [%s] in start position".

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


Ссылка на сообщение
Поделиться на другие сайты
 
10 часов назад, Seraph сказал:

Когда есть один статичный зацикленный кадр

Анимация привязана к конкретному месту на локации, она при всём желании не может быть использована где бы то ни было ещё. Следовательно, ты говоришь об анимации, которая имитирует вид от 1-го лица. Чтобы ими лучше манипулировать, надо запускать их через скрипты, а не через форму sr_cutscene.


Дополнено 2 минуты спустя
6 часов назад, Сергей Шубин сказал:

Чем то движку не приглянулось указание смартов.

По-моему, нужно создать локальную переменную target

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


Ссылка на сообщение
Поделиться на другие сайты
 

Сергей Шубин Уважаемый! Вы заявляете прекондишен-функцию: prec = function(), но параметры в нее не передаете, а внутри нее пытаетесь их проверять: target:name() ~= "esc_b6"
Выход: используете параметры - заявляйте их prec = function(squad, target)


12 часов назад, bad_major сказал:

"Wrong smart name [%s] in start position"

Означает, что в стартовой позиции (конфиг simulation.ltx секции [start_position_***]) заявлен смарт, который фактически отсутствует (не внесен в таблицу smarts_by_names, вноситься в нее смарт автоматически при регистрации объекта данного класса движком). Проверяйте есть ли заявленный смарт в all.spawn.

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Как сделать, чтобы НПС реагировал на выстрел от игрока? 


Истинное счастье невозможно без одиночества. - А. П. Чехов.

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


Ссылка на сообщение
Поделиться на другие сайты
 

del

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
22 часа назад, Neptun сказал:

А в чем препятствие поставить в апдейт и посмотреть за последствиями? Хотя функция довольно странная. Если ГГ и НПС делают что? Вероятно, должна быть проверка, что они вступили в диалог, потому что результат как раз говорит, что все бабки будут отданы этому НПС, но тут ещё надо добавить проверку, что у ГГ вообще есть деньги.

О как... Тогда поставлю вопрос другой... Есть ли такая функция, чтобы игрок лишился ВСЕХ деняг и возможно ли такую функцию поставить в апдейт?

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


Ссылка на сообщение
Поделиться на другие сайты
 

Крим Рекомендую покрутить каллбек на слух НПС. По идее они слышат выстрелы.

40 минут назад, Doctor_Oz сказал:

лишился ВСЕХ деняг

db.actor:give_money(-db.actor:money())

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

6 ГБ ОЗУ DDR3 1152 мГц (Разносорт)

Процессор Intel Xeon E5420 4/4 2.7 ГГц (OC)

Видеокарта Gigabyte GeForce GT 240 512 МБ GDDR5 (Samsung) DirectX v10.1

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


Ссылка на сообщение
Поделиться на другие сайты
 

Была тут такая ошибка никто на нее не ответил,сам столкнулся. Знает кто как лечить? при загрузке уровня в ле. 

FATAL ERROR
 
[error]Expression    : assertion failed
[error]Function      : CEditableObject::UpdateBox
[error]File          : D:\GameDev\Engine\XRayEngine\XRayEngine\Source\Editors\XrECore\Editor\EditObject.cpp
[error]Line          : 162
[error]Description   : !m_Meshes.empty()
 

stack trace:

 
FATAL ERROR
 
[error]Expression    : error handler is invoked!
[error]Function      : invalid_parameter_handler
[error]File          : D:\GameDev\Engine\XRayEngine\XRayEngine\Source\XrCore\xrDebugNew.cpp
[error]Line          : 786
[error]Description   : 
 

stack trace:

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

Какому-то объекту в конфиге не задано значение какого-то параметра.

Например:

ammo_mag_size =

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


EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Я знаю есть функция, которая спавнит динамические объекты, мне она нужна. Единственное, что я помню от неё - это обрывок названия "cond". Нигде не могу отыскать её. Подскажите, прошу вас. 


Истинное счастье невозможно без одиночества. - А. П. Чехов.

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


Ссылка на сообщение
Поделиться на другие сайты
 

del

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
17 часов назад, Крим сказал:

Я знаю есть функция, которая спавнит динамические объекты

=spawn_object(объект:точка_спавна)

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


Ссылка на сообщение
Поделиться на другие сайты
 

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

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

Как запаковать исходный код условного Xray Monolith в dll. Файлы( в "папка с игрой"/bin) для работы с игрой?


973993194_.png.976c126d2bdec0c06760be6027acfaff.png

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


Ссылка на сообщение
Поделиться на другие сайты
 
Только что, Hikki сказал:

Как запаковать исходный код условного Xray Monolith в dll. Файлы( в "папка с игрой"/bin) для работы с игрой?

В Visual Studio 201(7, 9) вроде, других способов нет.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Поставил NPC на карту через smart_cover, прописал логику, респавн, поставил smart_terrain.

При старте новой игры, вылет. ЛОГ СНИЗУ

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   : ...\x-ray_cop_sdk\editors\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil)

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


Ссылка на сообщение
Поделиться на другие сайты
 

У меня комп крашится во время игрового вылета, вот прям зависает и все. Единственное, что выходит делать - это перезагрузка. Однако после неё в логе ничего не написано, просто пусто. Как я могу исправить вылет, если не знаю лога? Никак. Подскажите, как можно исправить краш моей системы во время вылета? 

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

Истинное счастье невозможно без одиночества. - А. П. Чехов.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Крим можно не перезагружать компьютер, а запустить диспетчер задач:
Ctrl + Alt + Delete - потом нажать диспетчер задач
Снять задачу с X-ray 1.6 engine
Может помочь, но лог может не записаться. Лучше всего запускать сталкер через Visual Studio в режиме локального отладчика Windows, тем самым вы 100% узнаете, в чём причина вылета.


Дополнено 2 минуты спустя

most34 может в логике смарта прописано
[logic]
а надо
[smart_terrain]
?


Дополнено 5 минуты спустя

Hikki смотри тутор как настроить OpenXray в Visual Studio. Всё по аналогу сделай, только думаю стоить закинуть ресуры этого движка вместо двигла OpenXray.


Мне 14 лет. Программирую на C++ и Lua. Опытный в моддинге.
Мой мод Clear Sky: Reload

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


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте, товарищи сталкеры! Я тут решился попробовать себя в роли мододела. И вот, хочу мод свой развернуть на оригинальных локациях ЗП, но в зимнем сеттинге. Подскажите мне, пожалуйста, как это можно реализовать? И какой движок использовать (Оригинальный от ЗП или тот же, но модифицированный сообществом)? Заранее благодарю вас!

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


Ссылка на сообщение
Поделиться на другие сайты
 

 Не знаю почему, но когда я делал заселение локации для своей модификации, столкнулся с таким вылетом:

Спойлер

* [win32]: free[312764 K], reserved[186392 K], committed[3695084 K]
* [ D3D ]: textures[2668306 K]
* [x-ray]: crt heap[3410070 K], process heap[3410070 K], game lua[8160 K], render[188 K]
* [x-ray]: economy: strings[22550 K], smem[11048 K]
compiling shader deffer_model_bump_d-hq_1
compiling shader model_env_lq
compiling shader model_env_lq_0
compiling shader accum_emissivel
compiling shader deffer_model_bump_d-hq_0
compiling shader deffer_model_flat_d_0
compiling shader model_def_lplanes_0
compiling shader model_env_lq_1
compiling shader model_def_lplanes_1
! Unknown command:  dump_infos
compiling shader model_scope_lense
compiling shader model_scope_lense_0
intro_start game_loaded
* MEMORY USAGE: 3499174 K
* End of synchronization A[1] R[1]
intro_delete ::update_game_loaded
compiling shader yuv2rgb
stack trace:

 
[error][       8]    : (null)

Не знаю точно, с чем он связан, но как я понял, это связано как-то с точками спавна. Ещё при попытке спавна чего-либо (через Повелитель Зоны, либо при прогрузке НПС в смарте) у меня происходит вылет связанный с недостатком памяти. И происходит он всегда. Я уже писал этот вопрос в тему движка (Advanced X-Ray), и мне ответили, что это с движком не связано. Поэтому я задал этот вопрос сюда.

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

Как ты относишься к людям, так и люди будут относиться к тебе.

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   3 пользователя онлайн