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

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


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

Всем доброго времени суток! на форуме недавно поэтому заранее сорри если пишу не туда у меня такой вопрос:как мне сделать чтобы псевдособака при пси-ударе останавливалась на месте на время атаки? плиз помогите а то сама не разберусь

volazar

Печально, но Ваш пример кода не помог. Все его отличия от того что прописал я - наличие s_flags = 0x23 и секция логики

custom_data = <<END

[collide]

ignore_static

END

При добавлении что первого, что второго ничего не меняется - объект не выходит в он-лайн.

Есть еще какие-то варианты ?

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

Не найдена текстура ui_hud_ammo_info.dds в папке ui ,или где то не полностью прописано ,для точного ответа нужен полный лог

 

Expression : fatal error

Function : CRender::texture_load

File : E:\stalker\patch_1_0004\xr_3da\xrRender\Texture.cpp

Line : 295

Description :

Arguments : Can't find texture 'ui_hud_ammo_info'

Подобный файл переименовал так, вставил в папку ui, не помогло.

AndreySol, как вариант, взять любую уже существующую в игре секцию светильника, скопировать ее изменив только имя и координаты. А затем посмотреть, появится ли объект в игре. Без редактирования level.spawn'а

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

 

kabacho, ну гляньте вы эту текстуру в оригинале и посмотрите, по какому пути она лежала там. Если не ошибаюсь, это та текстура, на которой выводится счетчик патронов при каком то активном оружии.

На крайний случай, сделайте поиск по папке с игрой, на наличие в кодах игры выражения ui_hud_ammo_info.

Описали бы хоть, во что играете, что ковыряли и при каких обстоятельствах вылет происходит. А так выходят одни погадалки.

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

volazar

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

Так я именно так и сделал, я ж описал все в первом посте. Я уже и без level.spawn'а пробовал - результат то-же - объект не выходит в он-лайн !

Expression : fatal error

Function : CRender::texture_load

File : E:\stalker\patch_1_0004\xr_3da\xrRender\Texture.cpp

Line : 295

Description :

Arguments : Can't find texture 'ui_hud_ammo_info'

Подобный файл переименовал так, вставил в папку ui, не помогло.

Значит где то не полностью прописано ,ищи в конфигах или в мешах, может и в скриптах но это врятли

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

AndreySol, а координаты верные? В 1 после написано: "нормально вроде". Нормально или вроде? :)

Я у себя встречался с такой ситуацией, когда путал местами гейм/левел вертексы.

В лог выводятся lv - gv. А я в алл спавне и писал в таком же порядке. А потом гадал, где мой предмет. При проверке и оказывалось, что напортачил.

ЗЫ: А номер секции поставлен новый?

ЗЗЫ: Сразу отвечу на "не дал бы acdc запаковать" - ковыряясь в алл спавне от НС - я встречал там такие чудеса...при этом было запаковано. И работало! Начиная от одинаковых секций и кончая русскими(!) буквами в именах секций.

ЗЗЗЫ: Если все это в норме, возможно где то, что то сбоит/глючит. Например в скриптах.

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

""нормально вроде". Нормально или вроде?"

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

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

"возможно где то, что то сбоит/глючит. Например в скриптах."

Скрипты при чем, все прописано только в all.spawn ?

AndreySol, да запросто. Приведу пример не по теме (встретился с ним на практике): если в файле объявить например более 10-15 переменных, каждая из которых ссылается на ф-ию, которая возвращает таблицу (как пример) - то файл становится полностью не читаемым игрой. У меня из-за этого вылазили вылеты по анимациям оружия, безлоговые вылеты при попытке поговорить с каким нибудь НПС, не появление спавнящихся объектов. Казалось бы, причем тут анимации по оружию, или например вылеты с НПС? Однако вот так вот...

*** *** ***

Я не говорю, что виноваты именно они. Я предположил, в чем может быть проблема.

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

Пытаюсь и дальше с этим разбираться - вообще кошмар полный !

Использую такой код, чтоб определиться с состоянием объекта:

 

local obj_ser = alife():object("light_alarm_glass_0004")
if obj_ser then
level.map_add_object_spot_ser(obj_ser.id, "alife_presentation_monstr", "лампа") -- сталю метку на объект --
alife():set_switch_online(obj_ser.id, true) -- пытаюсь вывести объект в он-лайн --
local text = "объект light_alarm_glass_0004 - "
..string.format("X: %d, Y: %d, Z: %d, gv: %d, lv: %d", obj_ser.position.x, obj_ser.position.y, obj_ser.position.z, obj_ser.m_level_vertex_id, obj_ser.m_game_vertex_id)
news_manager.send_tip(db.actor, text, nil, nil, 30000)
local obj = level.object_by_id(obj_ser.id)
if obj then
	local text = "объект light_alarm_glass_0004 - "
..string.format("X: %d, Y: %d, Z: %d, gv: %d, lv: %d", obj:position().x, obj:position().y, obj:position().z, obj:level_vertex_id(), obj:game_vertex_id())
	news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
end

 

Вижу только первое сообщение, т.е. получается, что проверка "if obj then" не проходит. Меняю в этом коде

light_alarm_glass_0004 на light_alarm_glass_0000

- и опять вижу только первое сообщение. Получается, что для объекта, который явно нормально работает (т.е. светит) не возможно получить его клиентский объект !

Помогайте, кто в этом понимает, а то я уже имею мысль убиться головой об каменную стенку. Сжальтесь !

А может... 'пожалеть' - как раз дать осуществиться мыслям... :dash2: Так сразу все мучения закончатся... :crazy:

 

1. Чтобы говорить про он-лайн или клиентского объекта - нужно понимать что же это такое и делать свои попытки-проверки не а бы где и когда, а как минимум в нужное (подходящее) время.

2.

изменил: имя на light_alarm_glass_0004, координаты, gv и lv, остальное не трогал
- таким образом ты спавнишь объект в ту-же самую точку!

gv и lv - при подобном спавне несут информацию только о локации.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

AndreySol,

local obj_ser = alife():object("light_alarm_glass_0004")
alife():set_switch_online(obj_ser.id, true)
if obj_ser then
  local obj = level.object_by_id(obj_ser.id)
end

Сразу после инициирования выхода в онлайн онлайнового объекта ещё нет, надо ждать несколько апдейтов. Это же основы, такие вещи надо знать.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

В данном случае (про спавл ламны) вообще говорить про оффлайны достаточно бессмысленно

 

Судя по первому посту ("остальное не трогал"), лампа должна иметь флаги object_flags = 0xffffffba:

UseSwitches = 0

SwitchOnline = 1

SwitchOffline = 0

Interactive = 1

VisibleForAI = 1

UsefulForAI = 1

OfflineNoMove = 0

...

т.е. никак не может быть в НЕ в онлайне!

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

- таким образом ты спавнишь объект в ту-же самую точку!

почему ? Я же указал, что координаты изменил на требуемые.

Сразу после инициирования выхода в онлайн онлайнового объекта ещё нет, надо ждать несколько апдейтов. Это же основы, такие вещи надо знать.

Почему Вы решили, что я этот код вызывал в том-же месте что и создание объекта ? Объект создавался в all.spawn, а код, про который Вы указали - уже значительно позже.

Atos

"т.е. никак не может быть в НЕ в онлайне!" - но ведь та и есть - не выходит моя лампа в он-лайн.

 

Пошел еще дальше в экспирементах - убрал вообще исходную секцию этой лампы. Перекомпилировал all.spawn, начал новую игру - до жопы, лампа как была на месте так и осталась !

Я в ауте, что это значит ??????

AndreySol, осмелюсь спросить. А файл то в папку с игрой кинули?

ЗЫ: Для проверки, запакуйте, а затем снова распакуйте all.spawn и гляньте, будет ли секция там или нет.

Может дело в распаковщике...

AndreySol,

Почему Вы решили, что я этот код вызывал в том-же месте что и создание объекта ?

А при чём здесь создание? В одном фрагменте стоит инициирование выхода в онлайн (функцией set_switch_online) и дальнейшее получение онлайнового, что как раз и есть неправильно.

 

Да, кстати, цитатами слабо пользоваться? Совершенно непонятно, кому отвечаешь и на какой вопрос.

 

Artos,

т.е. никак не может быть в НЕ в онлайне!

Ну почему не может? А вдруг объект на другом уровне?

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

1. Был не прав, в том что не заметив в фразе 'изменил ... координаты' - сказал про 'ту же' точку. Если их (координаты) изменить с умом - можно и в другую точку на этой (иль иной) локации. ;-)

2. malandrinus, мы все же говорим по контексту вопроса и о спавне лампочки на текущей локации. И конечно же о том времени, когда лампочка уже должна быть в онлайне, т.е. забиндена соотв.биндером (net_spawn). Иначе можно договориться и до того, что не запустив игру - лампочка тоже не в онлайне...

 

Предлагаю прекратить предложенную викторину "кто отгадает что же в очередной раз учудил AndreySol", т.к. по представленной им информации (и о спавне и о проверке) можно о чем угодно и сколь угодно гадать.

Начнем с того, что получить объект лампочки по его имени - уже глупая затея! В исходной игре лампочек с именем "light_alarm_glass_0000" - больше дюжины(!), да и лампочек "light_alarm_glass_0004" не меньше(!). Т.о. какую лампочку начинает проверять AndreySol - только ему самому и движку ведомо.

С подобными подходами можно сколь угодно гадать :shok: и бесконечно долго :dash2: ... :fool:

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Artos,

мы все же говорим по контексту вопроса и о спавне лампочки на текущей локации.

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

 

Впрочем, косяков там хватает и без этого. Судя по всему, главный косяк я пропустил. Как ты верно заметил:

В исходной игре лампочек с именем "light_alarm_glass_0000" - больше дюжины(!), да и лампочек "light_alarm_glass_0004" не меньше(!). Т.о. какую лампочку начинает проверять AndreySol - только ему самому и движку ведомо.

С большой вероятностью это и есть причина проблемы. Т.е. попросту лампочка на другом уровне.

 

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

 

Ещё замечу, что это может вызывать проблемы достаточно серьёзного плана. Вот у нас недавно выловили проблему с объектами костров. Наличие на одной локации двух костров с одинаковым именем вызывало вылет. Однако, вылет происходил не сразу, а при переходе на другую локацию, после определённое времени нахождении на проблемной локации. И в логе ничего вменяемого не было. Из-за такого эзотерического характера вылета первое подозрение было, что заканчиваются некие ресурсы. Только долгие и мучительные эксперименты позволили установить истинного виновника.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

malandrinus, зря мы все же продолжаем это обсуждение, но ...

1. В моей фразе подразумевалось, что если лампочка заспавнена правильно в алл.спавне (т.е. и на текущей локации), то она при старте игры (после выхода в онлайн всех соответствующих объектов на карте) - обязана быть в онлайне. Это прописано ей именно флагами.

Т.е. подразумеваю, что заспавненная лампочка на текщей локации после ее инициализации в качестве серверного объекта - обязана быть забинденной и выйти в онлайн.

2. А вот с твоим замечанием по set_switch_online не совсем согласен. Это всего лишь команда движку для перевода объекта в онлайн. Если лампочка уже(!) в онлайне - то эта команда будет просто проигнорирована. Т.е. если свою проверку AndreySol делает, например, в апдейте лампочки иль на апдейтах актора (но не в самом начале игры) - то никакой (пере)инициализации выхода в онлайн у лампочки нет. Она уже должна быть в онлайне, в соответствии с флагами спавна. Ну а этой командой может быть выпихнута в онлайн, если данная команда дана в самом начале, т.е. непосредственно при появлении серверного объекта лампы... хотя это все одно должен сделать сам движек (опять же по флагам).

Т.о. set_switch_online - в данном контескте бессмысленная команда в какое бы время не была бы отдана, т.к. или лампочка должна быть в онлайне "само-собою" или же движек не может ее вывести в онлайн по какой-то причине и повторно его "просить" об этом врядли поможет...

 

P.S. О недопустимости наличия объектов с одинаковыми именами на одной локации мною говорилось пару лет назад и неоднократно. К сожалению возражения типа "А я заспавнил и у меня все нормально" и отсутствие возможности доказать "ненормальность" по исходникам движка иль по логам, делает эту проблему(ошибку) актуальной и сегодня и... завтра. :-(

Ну и опять не согласен полностью со словами:

использование имени в основном стало глупой затеей благодаря модостроителям
- как раз контекст вопроса о лампочках говорит о вине в подобной 'глупости' разработчиков компания-разработчик (признана нежелательной), которые и лампочки и костры и т.п. сами начали добавлять в алл.спавн под одинаковыми именами, а не использовали хотя бы в SDK - 'level_prefix_ ', переводя его при компиляции спавна в соответствующий префикс локации... Кстати, даже это, перевод 'level_prefix_ ' в типа 'esc_','agr_'... и то не делали везде ни разработчики ни, взяв с них "пример", нынешние маперы ... Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Всем привет!

Может кто нибудь поделится значениями флагов из алл спавна, когда объект спавнится через net_packet.

Т.е например, значение 0xfffffffa соотв. числу 5 и т.д

А именно, интересуют значения: 0xffffff3a, 0xffffff3e, 0xffffffba и 0xffffffff

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

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

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

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

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

Войти

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

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

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