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

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


Halford

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

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

 

1. Слот, которого нет на худе инвентаря в оригинале игры, добавить невозможно без существенных добавок (скрипты и соответственно xml-ки), что, судя по твоим постам тебе врядли самому на данном этапе осилить. (если все же заинтересовало - смотри, например, в SIMBION-моде или жди LA, в котором слоты добавлены на уровне движка)

2. Даже если скриптами добавить на худ доп.слот - двигать в/из него предметы из рюкзака в слот и обратно - не получится. Т.е. он будет отображать наличие предмета в cлоте и можно из слота выкинуть, но не более.

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

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

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


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

korshyn-3

Строка с параметром artefact_position_offset работает довольно просто, это данные о координатах спавна (смещении от координат). Но сами координаты прописаны в section2.bin инструментария по правке которого по сути нет. Так что хочешь менять координаты спавна аномалией артифакта - делай это в SDK, которые и пишет нужные цифирьки в том числе и в artefact_position_offset.

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

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


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

Капрал Хикс, (просто уточню) все же старайся не путать схему, глобальную функцию/метод для оригинального об'екта игры (ТЧ) написанную кем-то "локальную" функцию.

Различных вариантов самоубийств в модах понаделано немало, в том числе типа "НПС-камикадзе". Но все это не схемы, а по сути "точечтые" вызовы функции или небольшого набота методов ...

Так что на вопрос, "а есть ли в Москве пирамида Хеопса?", то же можно ответить, что мод "конечно, вон сколько строй-материали валяется - и даже порой в пирамидках, сложи все вместе и будет тебе пирамида!". :crazy:

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

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


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

amik, не путай условия и действия.

Скрипт xr_conditions используется в логике для проверки условий и соответственно функции должны возвращать одно из двух логических значений (true/false).

Т.о.твое {!dell_prizrak1} - вроде как (по коду) должно вызывать проверку, но(!) на самом деле удаляет об'ект, не возвращая ничего ...

Тебе, вероятно нужно НЕ проверять "удаление", а просто удалять, т.е. использовать {=dell_prizrak1} и соответственно функцию поместить в xr_effects.script, т.е. скрипт, который обрабатывает действия.

 

Примечание: но я бы сделал удаление не из активной логики самого непися, а ... вначале убил бы его ( npc:kill(npc) ), чтобы снять активные коллбэки и уже немного позже, через таймер иль on_death - удалил бы. Несколько сложнее, но надежнее и безопаснее.

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

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

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


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

Zander_driver, в общем то, несмотря на пысовские ошибки тебе в лог дана достаточная информация.

Анализируем, попутно подправляя ошибки:

1. Строка прерывания имеет ошибку:

abort("object '%s': path_walk '%s', index %d: cannot find corresponding point(s) on path_look '%s'",self.object:name(), tostring(self.path_walk), tostring(index), tostring(self.path_look))

измени ее на:

abort("object '%s': path_walk '%s', index %s: cannot find corresponding point(s) on path_look '%s'",self.object:name(), tostring(self.path_walk), tostring(index), tostring(self.path_look))

- тут разрабы поставив маску для числа (%d) сами переводят аргумент в стринг (tostring(index)) - вот и пишется в логе: index <NOT_arg!>, хотя должен отобразиться номер текущей точки пути ...

В общем лог должен бы выглядеть так:

Reason: object 'random_military_nato_veteran27649': path_walk 'predbannik_nato1_gulag_walker_2_walk', index '0': cannot find corresponding point(s) on path_look 'predbannik_nato1_gulag_walker_2_look'

 

2. Несложно отследить, что прерывание идет из-за невыполнения условия: if pt_chosen_idx then, т.е. не выбрана точка куда смотреть неписю ... Если проанализировать, то можно увидеть, для выбора точки она должна иметь флаг(и), чего нет в твоем конфиге пути.

Т.о. перепроверяй и подправляй конфиги твоих добавленных путей и обрати внимание в них на (отсутствие) строки типа: p0:flags = 0x400

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

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

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


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

По аномалиям:

Исходный вопрос от Marafon6540 имеет два подвопроса (как я понял):

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

2. надо ее полностью удалить из игры

Если по второму варианты решений есть, то по главному вомпросу однозначностей нет.

Во-первых, все методы типа callback.zone_enter или inside() все же дают результат по геометрии, т.е. "есть ли в зоне аномалии некий об'ект или нет", но срабатывание аномалии хотя и завязано тоже на геометрии, но не "как-только попал в зону" - не зря же существует "эффективный радиус", да и вспомним, бросив иной предмет - можно заставить сработать аномалию, не входя в нее ...

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

 

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

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

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


Ссылка на сообщение
KD87, прав malandrinus ... для аномалий в игре (со штатным движком) этот коллбэк не работает.

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

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


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

Marafon6540 (и др.) - настоятельно рекомендую прочитать (если еще не читали) давний мануальчик: "Как правильно задавать вопросы" и в частности про "Описывайте цель, а не отдельный шаг" - тогда пользы будет больше, а времени теряться меньше ...

Описывайте цель, а не отдельный шаг

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

 

Зачастую люди, которым необходима техническая помощь, имеют на уме высокоуровневую цель и привязываются к одному из возможных, по их мнению, путей ее достижения. Они просят помочь выполнить один шаг, не отдавая себе отчета в том, что выбрали неверный путь. Чтобы разобраться в этом, может потребоваться много усилий.

 

Глупо:

Как заставить диалог выбора цвета в программе FooDraw воспринимать шестнадцатеричное RGB-значение?

 

Разумно:

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

 

Вторая версия вопроса - разумна. Она позволяет получить ответ, в котором будет предложено средство, более подходящее для решения задачи.

 

 

В твоем же вопросе вообще нет конкретики ...

В уточнении стало понятно, что имеется ввиду прокерки именно относительно актора, но ... что же ты понимаешь под "сработала ли хоть раз"? Зона в игре существует с момента старта новой игры и хотя аномалии вроде всегда в одном месте, но на протяжении игры мимо них проходят иль в них попадают самые разные об'екты и аномалии "срабатывают" ... Какой же момент проверки тебя интересует и о каком таком срабатывании ты спрашиваешь - понять невозможно, как и цель проверки. По куцему описанию получается ты хочешь чтобы все аномалии были относительно актора одноразовыми ... На кой такое непонятно, но не будем тут о вкусах и странностях оффтопить. Пока не будет описана цель - тебе действительно придется самому придумывать некий путь ее достижения.

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

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

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


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

amik, выдать то любой инфопоршень можно, но совершенно непонятно зачем пытаться использовать инфопоршни в твоем случае? (прочти мой предыдущий пост).

Инфопоршень удобен и востребован тогда, когда наступило некое событие и чтобы при создании сохранения игры факт наступления события восстановился - используется или инфопоршень или, например, запоминание в pstor. Во всех иных случаях вполне достаточно локальных/глабальных переменных.

В твоем же случае наоборот, запоминать НЕ нужно, т.к. атака - это онлайновая схема логики и при рестарте игры (из сэйва) эта схема изначально не активна, т.е. твой атаковавший монстр изначально не атакует. Т.о. ты получишь ситуацию - монстр не атакует, а инфопоршень говорит об "атаке" ...

Да и представь себе сколько инфопоршней может быть из комбинаций всяческий "видов монстров"? Десятки-сотни ... и все их собираешься перебирать?

Как понимаю, тебе просто напросто нужно в биндере монстров иль в их схемах определять факт атаки и передавать информацию об этом в твой сторонний скрипт. Ну так и сделай, вместо проверки кучи строковых проверок на наличие некоего инфопоршня (который может и врать) просто передаваемый флаг, которым может являться, например, игровой идентификатор (ID) атакующего монстра. Ну а получив такой флаг, можно по нему и вид монстра определить и все прочее.

Примеры определения атаки определенного класса/вида монстров в модах достаточно. Вспомни атаки собак, электро-химеры иль контролера из АМК-мода. Вот по аналогии и выбирай своих "некоторых монстров" и пляши от этого, а не от инфопоршней.

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

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


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

boryan67, твои предположения НЕ верны.

В данной таблице критически важно, чтобы сумма всех вероятностей была равна (не менее) 100, а порядок и конкретные значения уже не имеют никаких ограничений.

Чтобы убрать дождливую погоду нужно всего лишь задать 0-ую вероятность для rain и groza, пропорционально увеличив оставшиеся секции, например так:

clear = { clear=80, pasmurno=20, rain=0, groza=0 },

и аналогично в остальных секциях.

Можно еще проще и надежнее, вообще убрать "дождливые" секции и оставить:

dynweathers = { clear = { clear = 80 pasmurno = 20 }, pasmurno = { clear = 80, pasmurno = 20 } }

Кстати, "ошибка" в исходной таблице для секции clear (сумма вероятностей более 100) приводит к тому, что после "ясно" нокогда не наступит сразу "гроза", хотя ... примененный метод pais (а не ipairs) смазывает это.

 

Добавлено через 9 мин.:

Альпинист, постарайся понять алгоритм рандомного выбора - тогда будет ясно что произойдет при "будут равнозначны, например все по 25?"

Генерится рандомное число в диапазоне 0...100 и это число последовательно сравнивается с попаданием в диапазон вероятностей секций, если нет попадания в текущую - переход к следующей.

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

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

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


Ссылка на сообщение
antreg, если в динамической погоде АМК сразу ясно какие секуции дождливые и их достаточно просто исключить из циклов, то для оригинальной погоды тебе придется порыться в конфигах оригинальной погоды и там исключить(заменить) те, в которых есть дождь. Тебе нужно чтобы после текущего цикла погоды не наступал тот, в котором есть дождь. Изменено пользователем Artos

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

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


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

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

Взгляни на функцию, которая применена в погоде от АМК, где там возможна ошибка из-за 0 (нуля)? Как уже сказал выше - критически важно только одно - сумма вероятностей должна быть 100 (или более). Любое(!) численное значение для вероятности, в том числе и 0 - допустимо и ни при каких условиях не может приводить к ошибке.

Ну а чтобы и при сумме вероятностей менее 100 не было вылета - достаточно определять начальное значение для local next_weather = "clear", а не как в оригинале - nil.

 

P.S. файл weather_default_dynamic.ltx и прочее из конфигов тут никаким боком не влияют и не зависимы. Зависимость только одна - есть четыре погодных секции (точнее маски) и рандомная функция по заданным вероятностям выбирает одну. Даже если будут 3 из четырех секций с нулевыми вероятностями, а четвертая - 100, то никакой ошибки не будет ни при каких условиях. Остается только в теории, что рандомное число тоже выпадет =0 (мизерная вероятность), - ну так и в этом случае выпадет одна из этих "забаненых" секций ... но ошибки(вылета) не будет.

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

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

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


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

antreg

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

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

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

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

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


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

antreg,

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

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

 

Ну а как куратор топика - делаю предупреждение: будешь переходить на личности и коверкать ники (даже если тебе не разжевали и в ротик не положили) - получишь конструктивный и адекватный ответ от модератора ...

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

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

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


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

volazar, для вертушек не работают схемы ph_death/xr_death, поэтому и бесполезно ждать, что приписанные параметры в логику будут ими обработаны и выдавать инфопоршни.

Хочешь получать инфопоршень - прикручивай схемы к вертушкам или в bind_heli.script можно для этого доработать функцию bind_heli.heli_die

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

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

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


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

Magnus 1, твой вопрос следует адресовать в топик Universal ACDC и другие perl-скрипты , т.к. относится не к самому файлу all.spawn'у а к отображению его формата распаковки и об этом можно прочитать в указанном топике.

То, что ты назвал "секцией", на самом деле называется идентификатором секции спавна (spawn_id).

В самом файле all.spawn эти идентификаторы начинаются с 0 и следуют строго последовательно до конца (кол-ва) секций - не повторяясь!

Однако, в распакованном виде, например для версии универсального ACDC (by KD87), это ограничение на неповторяемость относится только к каждому отдельному файлу конкретной локации (alife_XXX.ltx), а в разных файлах номера идентификаторов могут дублировать такие же номера из соседних файлов. Также нет обязательного условия последовательности номеров идентификаторов.

Т.о. , если используешь uACDC, то ты сам ответил себе правильно - "повторяться не должны ... только в отдельном, например в alife_l01_escape.ltx"

.

Примечание После компиляции в полученном all.spawn'е все идентификаторы будут переопределены в соотвествии с требованием непрерывности и последовательности, так что чтобы работать с реальными текущими данными следует скомпилировать и обратно декомпилировать - тогда ты полуцчишь реальные номера идентификаторов, т.е. так как они будут в игре.

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

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

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


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

AndreySol, вот когда ты себе ответишь на что такое "серверный объект, созданный ф-цией create уже существует" - тогда и получишь ответ на свой вопрос.

По многострочиям читаем Справочник по функциям и классам, где расписаны оконные классы.

 

Когда же к работе рук ты будешь подключать работу головой (своею) или хотя бы глаз, чтобы читать уже понаписанное?

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

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


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

квадрат 3-х = 9 , поэтому условие проверки можно все же ослабить до:

if npc:position():distance_to_sqr(db.actor:position()) < 9 then

 

Можно также при желании пропатчить ехе-шник (см. X-Ray Extentoins), чтобы снять это ограничение...

 

Если мне не изменяет память, то там не ровно три метра, а немного меньше, поэтому 6 - в самый раз.

ColR_iT

 

Все это идет от параметра take_dist (смотрим секцию [inventory] в system.ltx) и там дефолтно стоИт = 2, так что ты в общем-то прав, хотя в своем же ответе выше поминал 3 метра. ;-) Практика показывает, что 3-х метров вполне достаточно и ниже - это уже перестраховка.

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

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

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


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

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

1. Логика твоего рестриктора предусматривает одностороннее переключение - один раз зайдя в него актор постоянно будет под действием выданного инфопоршня esc_on_talk - и как предполагаю, именно по наличию этого инфопоршня у тебя идет вызов функции on_talk. Тогда ничего удивительного, что актор начинает постоянно "разговаривать".

2. Оружие исчезает из рук актора - ну так при активном разговоре оружие и убирается автоматически.

3. Если не хочешь получать вылеты при отсутствии/смерти Волка - то и наличие его объекта требуется проверять, т.е.:

if npc and npc:position():distance_to_sqr(db.actor:position()) < N then

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

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

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


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

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

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

Врядли многим известен твой funcs.script, поэтому хотя бы функцию с упомянутой строкою стОило бы процитировать.

Ну а пока, попробуй проблемную строку зааменить на:

if a then a:set_condition((math.random(25)+40)/100) end

Ну а вторая твоя проблема связана с тем, что из игры исчез труп бандита с АТП, а в атп'шном гулаге для него есть персональная работа. Тут или твой чистильщик трупов нужно отключать или работы гулага править. Но для этого уже нужны навыки в модмейкерстве (правке конфигов/скриптов).

  • Нравится 1

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

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


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

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