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

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


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

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

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

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

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

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

Всем привет!

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

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

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

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

volazar, та сам то прочел и понял о чем спрашиваешь?

all.spawn - это бинарный файл-конфиг для начального спавна объектов движком и к скриптовому спавну (нет-пакетами) никакого отношения не имеет.

Если ты имеешь ввиду распаковку all.spawn'а - то формат представляемых данных сильно зависит от самого распаковцика (декомпилятора) и значения типа 0xfffffffa вполне могут быть представлены и иначе, т.е. в десятичном формате.

Ничто тебе не мешает это сделать самостоятельно имея под рукой простенький калькулятор переводящий из HEX в DEC. Для получения "соотв. числу" следует от полученного значения отнять 4294967295 (это десятичное значение для 0xffffffff).

Т.о., например для 0xffffff3a имеешь: 4294967098 - 4294967295 = -197

 

Если же имеешь ввиду смысловые значения для каждого бита флага, то:

а) параметров, которые несут информацию именно в виде битовых флагов, в all.spawn'е не менее десятка, поэтому следует в вопросе конкретно говорить о каком именно параметре тебя интересует информация.

б) на форуме имеется поиск, которым и следует пользоваться...

в) смею предположить, что тебя заинтересовала информация по параметру 'object_flags', о которой уже раз давалась на форумах информация. Сейчас не помню ссылку на первоначальный пост с материалами от KD87 и malandrinus'а, но вот выжимка:

Флажок				 двоичное дес. Функция-аксессор * назначение
======================================================================
flUseSwitches	 0000000000001 1					 используется только редактором level editor из SDK и отвечает за видимость в редакторе флажков flSwitchOnline и flSwitchOffline
flSwitchOnline	 0000000000010 2 can_switch_online возможность перехода в онлайн
flSwitchOffline	 0000000000100 4 can_switch_offline возможность перехода в оффлайн
flInteractive	 0000000001000 8 interactive	 ** Такое ощущение, что ни на что не влияет
flVisibleForAI	 0000000010000 16					 используется на клиентской стороне, в частности для зон  отвечает за возможность реакции на контакт
flUsefulForAI	 0000000100000 32					 кроме участия в interactive имет смысл для инвентарного предмета, в частности, влияет на торговлю
flOfflineNoMove	 0000001000000 64 move_offline		 по идее должен отвечать за отсутствие движения в оффлайне, но не используется
flUsedAI_Locations 0000010000000 128 used_ai_locations*** При спавне будет привязан к сетке, при наличии таковой под объектом Иначе будет создан в воздухе.
flGroupBehaviour 0000100000000 256					 неизвестно
flCanSave		 0001000000000 1024 can_save			 Сохранять ли объект. Если флажок снят, то при перезагрузке объект исчезнет.
flVisibleForMap	 0010000000000 2048 visible_for_map	 Устанавливает видимость на миникарте
flUseSmartTerrains 0100000000000 4096					 неизвестно
flCheckForSeparator 1000000000000 8192					 неизвестно
* Для многих объектов соответствующая функция не связана с флагом, а имеет логику, специфичную для данного объекта.
** Функция interactive также учитывает флажки flVisibleForAI и flUsefulForAI
*** В ЗП имеется функция для установки флажка use_ai_locations(bool). Обратите внимание, имя отличается от функции для чтения флажка.

 

г) если говоришь о нет-пакетах... то стОит заглянуть именно в модуль (функции) работы с нет-пакетами, чтобы не было для тебя же недопоняток в соответствии того, что те видишь в распаковке all.spawn'а и в реальной работе скриптов. Примечание: в модуле m_netpk.script есть достаточная информация по флагам всех параметров.

Изменено пользователем Artos
  • Нравится 1

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

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

Artos, я как раз по модулю m_netpk.script и делаю ф-ию спавна физического объекта с возможностью фиксации.

Копаясь также в amk.script встретился там с функцией спавна вертолета, всю ф-ию приводить не буду, приведу кусочек, который заинтересовал при заполнении параметров cse_alife_object:

 

object_flags = bit_not(5) -- ~5 = 0xfffffffa
packet:w_s32(object_flags)

Получается, что 0xfffffffa = 5. А вот как оно было высчитано?

 

Я пробовал переводить 0xfffffffa в десятичное число - однако получил совершенно другой результат, а не число 5.

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

volazar, раз пользуешься модулем m_netpk.script, тогда чего же спрашиваешь про значения флагов? Там все флаги расписаны, включая семантические имена...

А получается как раз не 5, а -5 (минус пять)!

 

Да и расчитывается просто: Отбрасываем, чтобы не путаться старшие байты и смотрим только последний 'fa' => 250

т.е. имеем десятичное число 250, отняв от которого 255 (ff) получаем -5

Можно иначе: Переводим 'fa' в бинарное значение, т.е. именно в флаги: 'fa' => 11111010

Смотрим что за флаги сброшены: это будут

UseSwitches = 1

SwitchOffline = 4

Т.е. 1+4 = 5

Для сброса флагов требуется от их 'ff' отнять 5 , т.е. 255 - 5 = 250 => 'fa'

 

Ну а суть всех этих значений флагов - сброшен флаг SwitchOffline - который не дает вертолету уходить о оффлайн, т.е. он всегда будет в онлайне (конечно после его спавна и если он на текущей локации).

 

Примечание: В модуле m_netpk.script при изменении любых параметров вертушек (да и машин/ящиков) биты вышеупомянутых флагов сбрасываются автоматически. Да и значение параметра 'skeleton_name' изменяется с '$editor' на 'idle', если не задано иное.

Изменено пользователем Artos
  • Нравится 1

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

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

Знатоки,подскажите как в ТЧ изменить погоду на солнечную? Играю в RMA shadows addon, постоянно дождь и пасмурно, с дождём вроде справился, во всех файлах weather_ххххх.ltx поставил значение rain_density = 0.0, а вот как облачность убрать, хотелось бы чистого неба)

 

Ссылка: "Настройка погоды и освещения".

ColR_iT

 

ColR_iT, спасибо, но ничего из написанного по ссылке не помогло, судя по описанию нужно в параметре clouds_color менять четвёртое число на 0, однако это не работает--изменений никаких.

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

всё идёт по плану...

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

Подскажите, пожалуйста, кто "в теме". Как избежать вот такого "нырка вертолета" под текстуры при взлете -

Замучился я уже по 80 раз переписывать пути отлета в алл.спавн. Какие бы пути не выставлял (в основном, играл с координатами высоты), вертолет перед взлетом обязательно уходит под террейн!

Неужели высоты 86.5072298 для первого вэйпойнта мало?! На уровне земли значение - "26.00"

[upi_heli_baty_otlet_move]
points = p0,p1,p2
p0:name = wp00
p0:position = -153.445114,86.5072298,-459.451752
p0:game_vertex_id = 3714
p0:level_vertex_id = 459501
p0:links = p1(1)

p1:name = wp01
p1:position = -116.552254,102.800180,-477.721039
p1:game_vertex_id = 3714
p1:level_vertex_id = 523484
p1:links = p2(1)

p2:name = wp02
p2:position = -34.024799,264.659878,-778.659119
p2:game_vertex_id = 3714
p2:level_vertex_id = 470337

===

П.С. Прилет идеален - вертушка зависает в полуметре над землей, выход непися, разговор, сдача квеста, уход непися/посадка в вертушку, все нормально. А вот с отлетом такая трабла. Может и не в путях совсем дело, а я их перебрал около 3х десятков различных вариантов. Возможо ли сделать отлет вертолета корректным?

 

Пользуемся тегами!

ColR_iT

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

Buusty​, когда то тоже намучился с путями вертушек. Спавним - летит нормально. Спавним в другой раз - летит абы как. Возможно иногда схема обрабатывается немного криво. А может и еще что.

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

Так например сделано с вертушкой Бати на Янтаре - единственный минус там - там не взяли в расчет высоту забора вокруг территории бункера.

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

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

 

Так например сделано с вертушкой Бати на Янтаре

Именно оттуда вся логика и взята, как основа для моего прилета/отлета.

===

Переносить место квеста не буду. Если не найду решение этой траблы - так и оставлю, все остальное прекрасно работает /и слишком много завязано именно на данной площадке/.

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

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

Изначально в схеме стоИт дефолтная скорость =30, что даже для свободного полета несколько многовато. При взлете, стартующая схема (heli_move) заставляет вертушку "бросаться с места в карьер"... причем движек еще не просчитал нормально высоту (GetRealAltitude).

Совет:

1. Задавать начальную точку взлета непосредственно над текущей точкой (над вертушкой) - метров ~5, чтобы вертушка взлетала вертикально, а не "вперед". При наличии горизонтальной составляющей (т.е. "вперед") движение по путям просчитывается не от точки к точке, а с вариациями, которые порой и "проваливают" вертушку под уровень.

2. Задавать или в самой логике схемы и/или в точках пути ограниченные скорости. Например у меня ранее было задано для "взлетной" точки так: p0:name = pm00|v=8|dv=15 - т.е. при взлете стартовая скорость 8 (можно и поменьше), ауже в точке взлета 15. Т.о. вертушка плавно с ускорением вертикально взлетает на высоту 2-5 метров и уже далее устремляется в полет (к следующей точке).

3. Ну и ... можно отказаться от полета "по путям" и переделать схему полностью для полетов по задаваемым точкам (по координатам), контролируя скриптами, а не движком и высоту и скорость и прочее...

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

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

Struck, не засоряй топик банальными вопросами! Открой статью по логике и по нужной схеме (ссылки в шапке) - и почитай.

Можешь открыть саму схему (скрипт) и посмотреть какие параметры она (не)использует:

--/ Функция чтения настроек. В нее передается секция, откуда их нужно читатью

function init_meet(npc, ini, section, st, scheme)

 

]snork[, а взять и посмотреть самому как это уже сделано в модах (хотя бы в том же AMK) - лень? Ждешь когда тебе готовые строки выложат?

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

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

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

Ссылка на комментарий
а взять и посмотреть самому как это уже сделано в модах (хотя бы в том же AMK) - лень? Ждешь когда тебе готовые строки выложат?

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

Я уже искал в АМК 1.4.1 там нету.я нашел логику сирен на базах,посмотрел и ничего не понял

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

]snork[, распакуй all.spawn и найди в alife_l01_escape.ltx объект name = esc_matugalnik - это и есть сирена на блокпосте.

В этой секции объекта и смотри его логику, в которой по получению соотв.инфопоршня (+esc_blockpost_alarm) активируется соответствующая секция логики ([ph_sound@alarm]) и проигрывается snd = alarm1.

По аналогии - делай и для других баз...

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

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

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

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

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

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

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

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

Войти

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

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

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