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

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

19 минут назад, Kirgudu сказал:

ведь свойства checked_characters нет в оригинальном модуле Артоса

У меня от ОП 2.2, там есть, и работает.

20 минут назад, Kirgudu сказал:

Воспользоваться аналогичным кодом, но поменять свойство character_name.

Не соображу, как именно это провернуть с клиентским объектом? Если можно, поясни в двух словах.

p.s. Я пока пытаюсь схитрить - увожу нпц в оффлайн, меняю имя и снова вывожу в онлайн, но что-то не все хотят уходить в оффлайн, при том, что sobj.can_switch_offline = true. Видимо, есть ещё какой-то ограничитель.

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

@phalcor можно попробовать воспользоваться встроенной в модуль функцией автоматического перевода объекта онлайн-оффлайн-онлайн:

m_netpk.do_switchings(id)

Она в публичный интерфейс автором не выведена, поскольку предназначена в первую очередь для изменения абстрактной части из коллбэка, но дёрнуть её напрямую ничто не мешает.

  • Спасибо 1
  • Нравится 1
  • Полезно 1
Ссылка на комментарий

Здрасьте.

 

При чтении одного и того же текстового файла (что-нибудь вроде "123abc") через getFS():r_open(path):r_stringZ() к видимым знакам добавляются какие-то случайные знаки, часто со сломанной кодировкой.
При обозначении каждой строки как [секции] таких знаков обнаруживается меньше.

Иногда знаки складываются во что-то осмысленное, вроде Vks_aim0, reload_9 или o_7_run_1 – такое впечатление, что ловятся фрагменты загруженных в память конфигов.

 

Вроде попадалось на просторах форума упоминание о такой проблеме, но кто автор и что именно говорилось в том посте, не помню.
Как эти знаки правильно исключить из читаемого текста?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz

Функция r_stringZ читает строку до первого символа с кодом 0.

Поскольку таких символов в "обычном" текстовом файле быть не может, то функция читает из памяти всё, что попадется до первого символа 0.

 

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

  • Нравится 2

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Получается возвращение к вопросу "Как прочитать конфиг построчно, если в нем нет общей секции [l i s t]".

Видимо, для простых текстов остается только жестко ограничивать шаблон поиска…

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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

[ТЧ 1.0006]

Пара вопросов по классу FS:

1. В папке […\STALKER Shadow of Chernobyl\bin\…] читается только "корень" – папки [BattleEye\], [dedicated\] и файлы в них не обнаруживаются ни проверкой fs:exist(…), ни построением списка. Длина пути явно меньше 256 знаков – до папки [bin\] всего 60. Чем вызван "запрет" обработки этих папок? 

2. При построении расширенного списка file_list_open_ex($name$, mask, "folder\\*") часть файлов пропускается. Например, в [config\misc\] не обнаруживаются конфиги инвентарных предметов, квестов, тайников и торговли, а в [config\creatures\] – конфиг ГГ, защитных свойств брони и основной конфиг мутантов. В простом списке с текстовыми путями видны все файлы. В чем может быть причина?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Вопрос по скриптовому управлению перемещением живности. Работаю на ТЧ.

Задаю экшн зверьку - action(obj,move(move.run_fwd,pos))

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

Ссылка на комментарий
2 часа назад, madrazor сказал:

где искать причину?

Возможно на пол-пути находится рестриктор куда монстру нельзя заходить. Или просто дырка в АИ-сетке.

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Давно использую модули @Artos'а для работы с нет-пакетами. Проблем не было, пока не решил использовать таймеры (модуль m_timers) из того же комплекта. Всё отлично работает до загрузки сохранённого таймера. После сейв/лоад с таймера убегает прилично времени - визуально, таймер на худе становится короче на ~2 секунды в чистом ТЧ, на целых ~8 секунд в ТЧ ОГСР.

Прикинул, что дело может быть в сохранении/загрузке данных и подключил хранилище (модуль se_store) оттуда же. Результат аналогичен. Чего я недоглядел такого, чего нет в гайде по подключению? В логе красочно указано, когда чекаю, что каждый подключенный модуль "SUCCESS". Или оставить идею с конкретно этими таймерами? Может, кто сталкивался, пните...

  • Полезно 1

Здесь могла быть ваша реклама.

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

Может, дело в том, что часть времени съедается на загрузку игры? В ЗП когда прикручивал таймеры (простые, не от Артоса) к индикаторам расходников, пришлось вводить проверку значения счетчика до и после загрузки – поправка доходила до 10–12 секунд (в ТЧ на моем ПК теряется 5–6 секунд).

  • Согласен 2
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

[ТЧ 1.0006]

Мод по образцу "Мясника" со сбором трофеев без открывания инвентаря, запись состояния "тушка обыскана" в конец нетпакета мутанта:

packet:w_bool(self.looted)

self.looted = reader:r_bool()

 

Результат: для кабанов, собак и плотей состояние успешно сохраняется и читается после перезагрузки, для псевдособак – нет, хотя состояние точно меняется: тушка становится неактивной после обыска, но после сейва и перезагрузки состояние переменной self.looted сбрасывается на дефолтное значение false.

 

У псевдособак как-то иначе работает биндер?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Подставил единственный скрипт из этого мода: https://ap-pro.ru/forums/topic/1083-tch-butcher/ – состояние тушки псевдособаки не сохраняется.

 

Взял чистый [bind_monster.script], добавил use_callback и одну логическую переменную:

init__ – создать как false

update – скрыть подсказку, если true

use_callback – выдать как есть в сообщение + задать true

save – сохранить

load – прочитать

Результат: тот же сбой на псевдособаке. Кто-нибудь может потестить у себя?

https://drive.google.com/file/d/1vbfO2Y_Uf_a0hyt7Pm5tFlEbIbQ47ujx

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Было дело, очень давно, правда, работал над скриптом с GUI-функциями и пришлось бросить - псевдо-собака! С работающим GUI-скриптом при атаке псевдо-собаки был стабильный безлоговоый вылет. И никаких скриптовых и любых других пересечений с псевдо-собакой ни в чём не было. И это было только если она атаковала. Если просто бродила или не работал скрипт - всё было ОК. Я предполагал, что был конфликт при выводе хитов на экран и какой-то конкретной GUI-функции. Но обойти так и не удалось, а без той функции скрипт не имел смысла.

Хотя вряд-ли Вам это поможет.

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

всё легко

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

@Norman Eisenherz 

Давно кто-то об этом писал, просто сохранил пост как ещё один баг для исправления:

Скрытый текст

Решил я сохранить некие данные в псторе мобов. Всё было хорошо пока я не вышел с уровня. Как только я ушёл и сразу вернулся, то обнаружил, что все мои данные благополучно потерялись. Стал смотреть в чём дело, оказалось что при переходе между уровнями, а так же при загрузке с автосейва, не вызывается функция load для байндереров мобов и неписей. Из-за чего весь их пстор обнуляется. Если учесть, что все параметры активной логики неписей и мобов хранятся именно в псторе, то его обнуление может неожиданным образом сказаться на их поведении. Например, многоэтапная логика сбросится в своё начало.

Последовательность вызова функций binder-ов мобов и неписей.
При загрузке обычного сейва:
reload
reinit
load
xr_logic.pstor_load_all
mob_net_spawn
При смене уровня:
reload
reinit
mob_net_spawn

Просматривая историю правок script_binder.cpp:

Раньше было так:

void CScriptBinder::Load			(LPCSTR section)
{
	inherited::Load			(section);
}

Забавно, но в день дурака (1.04.04) разрабы изменили на это:
void CScriptBinder::Load			(LPCSTR section)
{
}

 

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

Лог действий в биндере обычной собаки и псевдособаки: в первом случае выполняется __init, load и дальше только апдейт, а во втором постоянное пересоздание

! Unknown command:  INIT=false		-- создание
! Unknown command:  READ=true		-- правильное чтение
! Unknown command:  INIT=false
! Unknown command:  READ=false		-- сброс
! Unknown command:  INIT=false
! Unknown command:  READ=false
…

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
12 часов назад, h0N0r сказал:
Раньше было так:

void CScriptBinder::Load			(LPCSTR section)
{
	inherited::Load			(section);
}

Не значит ли это то, что если вернуть такой вид то многоэтапная логика не будет сбрасываться в самое начало при переходе НПС в оффлайн/смены уровня?

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

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

Чем дальше в лес, тем веселее: псевдособака более не имеет вызова _binder:load – даже на чистой геймдате с единственным скриптом, который только сигналит в лог о действиях биндера, у собак и кабанов на Кордоне есть __init и load, у псевдособаки в живом или мертвом виде один __init. Хелп…

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz не подтверждаю.

https://disk.yandex.ru/d/TfcsZSLsZNf9zQ
Здесь скрипт (дополнил логом в функциях init, update, load и save), лог и сейвы - до использования уже мёртвой псевдособаки, после, и после загрузки.

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

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

Возможно, разница в движках; пользуюсь купленной 15 лет назад в Стиме версией игры.

 

@imcrazyhoudini не значит, поскольку для того, чтобы отработало inherited::Load(section), необходимо, чтобы класс CScriptBinder наследовал другой, родительский класс, который в актуальной версии не указан.

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

  • Спасибо 1
Ссылка на комментарий

Тогда такой вопрос, на счёт того, что НПС переходят в секцию логики указанной в active при переходе в оффлайн.

ЧН.

Пытался метод dsh адаптировать, но упёрся в правки движка:
 

Скрытый текст

FATAL ERROR
 
[error]Expression    : assertion failed
[error]Function      : CInifile::w_string
[error]File          : D:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrCore\Xr_ini.cpp
[error]Line          : 632
[error]Description   : !m_flags.test(eReadOnly)
 

stack trace:
 
xrEngine.exe caused an EXCEPTION_BREAKPOINT in module xrCore.dll at 00000000A904F65A, xrDebug::backend()+0346 byte(s), D:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrCore\xrDebugNew.cpp, line 0230


Подумал о варианте попроще - поддержки кондлиста.


Помню переносил давным давно на ТЧ поддержку кондлиста для гулагов, примера нет уже.

В принципе, работало, правда, требовалась обязательный сейв-лоад.

Думаю игроку хоть раз за игру да придётся перезагрузиться и НПС уже подхватит новую логику.

Есть у кого пример как реализовать поддержку кондлиста для одиночной логики?

Если ещё релоад не нужен будет - вообще отлично.

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

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

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

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

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

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

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

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

Войти

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

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

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