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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
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.
кто может помочь - пишите в ЛС.

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...