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

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

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


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

  Информация (Показать)

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

 

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

  Читать рекомендуется. (Показать)

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


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
  Romz писал(а):
Только обычно...  

Ты спрашивал об окончании загрузки - тогда  <= 1.

  тык (Показать)
Изменено пользователем UnLoaded
  • Спасибо 1
Ссылка на комментарий
  UnLoaded писал(а):
Ты спрашивал об окончании загрузки - тогда <= 1.

Ну в  той конструкции, что я привёл, как я понял, пока device().precache_frame > 1 функция не выполняется совсем.

 

  UnLoaded писал(а):
Ну так выставь для них соответствующие флаги

Ок, гляну. Этот пост, вообще, читал, но не рассматривал в контексте аномалий.

 

  UnLoaded писал(а):
стандартные(те что через all.spawn созданы ?)

Ну да. В ЗП же одиночных аномалий нет. Все сосредоточены в т.н. аномальных зонах. А динамические я скриптом спавню

Щас проверил. В ЗП все аномалии видны через локу. Отошёл специально от "Котла" к "Соснодубу" - "Котёл" прекрасно видно :(

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

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Вообще в сталкере, будь то ТЧ, ЧН или ЗП, все аномалии на текущей локации - всегда онлайн, если не делать каких либо дополнительных телодвижений. Они игнорируют онлайн-радиус.

 

 

  Romz писал(а):
Блин, ну неужели нет никакой информации по переводу ЛЮБЫХ объектов в онлайн\офлайн? Про неписей понаписано дофига, а вот про остальное...

А зачем? там все то же самое. Методы онлайн/оффлайн операций для всех серверных объектов одни и те же, не важно нпс это или аномалия.

  • Спасибо 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.

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

Блин, чё-та я торможу...

Есть таблица вида

  Показать

Далее по скрипту, в функции, она перебирается

  Показать

Как мне получить в level_name имя локации???

Все мои попытки приводят или к level_name = nil или к тому, что в неё записывается содержимое ячейки...

  Пробовал варианты (Показать)

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Снова вопрошаю к уважаемому сообществу...

Как отследить, что ГГ перешёл на другую локу? В процессе штудирования статей вроде попадалось что-то, но сейчас не могу найти. Поиск "смена уровня" и "смена локации" тоже ничего не даёт...

Пробовал использовать

  вот такую конструкцию (Показать)

Шаман - СисАдмин

Всяко-разно: для ЧН

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

@Romz, можно что-то вроде этого сделать:

local level_changed = false
local last_level = xr_logic.pstor_retrieve(db.actor, "llvl", "")
if last_level ~= level.name() then
  level_changed = true
  xr_logic.pstor_store(db.actor, "llvl", level.name())
end
Изменено пользователем naxac
  • Спасибо 1
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac, А можно ли таким образом хранить свои переменные? Нужно сохранять между загрузками/переходами, был ли выброс и генерировались ли уже аномалии на уровне.

Или лучше для этого использовать модуль @Artos? А как его под ЗП настроить, а то он же, вроде, под ТЧ 1.0006...

Хотя @Artos, написал, что он, вроде, под ЗП и ЧН тоже работает...

 

Собственно, вопрос к знатокам. Я таким образом пытаюсь решить проблему. Аномальки у меня генерируются и складываются в табличку anomaly_queue

  вот такой функцией (Показать)
Изменено пользователем Romz

Шаман - СисАдмин

Всяко-разно: для ЧН

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

@Romz, проще всё это "повесить" на инфопоршни - по одному на каждую локацию (например, "<имя_уровня>_info"). При заходе на локу проверяешь поршень, если его нет, то спавнишь аномалии и выдаёшь поршень. При начале выброса все инфо дисаблишь и удаляешь все аномалии на всех уровнях. По завершении выброса - делаешь как при заходе на локацию.

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@Romz, в ЧН спавн аномалий происходит аналогичным образом. На текущей локации всё путём, а если пытаешься завпавнить на другой локации - возникают проблемы. Найти решение не удалось. Поэтому аномалии я спавню только на текущей локации.
Что касается сохранения дополнительных данных. Настоятельно рекомендую прикрутить таки какое-либо универсальное хранилище, например уже упомянутый тобой модуль Артоса. Дело в том, что пстор обязан уложиться в нет-пакет ГГ, размер которого в ЗП равен 16 килобайтам. Мало того, что туда уже пишутся всяческие данные из оригинала, так ещё и ты будешь добавлять, и не факт, что ограничишься данной задачей. Это в один прекрасный момент может привести к переполнению нет-пакета и, как следствие, к потере данных, вылетам или даже порче сохранений.

Ничего сложного в прикручивании универсального хранилища нет, тот же модуль Артоса прекрасно работает в моде для ЧН, думаю и для ЗП будет то же самое.

  • Согласен 2

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

 

 

  naxac писал(а):
проще всё это "повесить" на инфопоршни - по одному на каждую локацию (например, "<имя_уровня>_info").

Как-то так к примеру.

function start_скрипт()
if level.name()=="predbannik" and not has_alife_info("info_pred") then db.actor:give_info_portion(info_pred")
......
......
elseif level.name()=="hiding_road" and not has_alife_info("info_road") then db.actor:give_info_portion("info_road")
    end
end

Ну может скрипто_гуру что-то и поновей предложат.

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

@naxac, @_Val_, Я бы не хотел обращаться к инфопоршням, потому что их нужно будет раскидывать ещё по другим скриптам. Сейчас у меня всё, связанное с аномальками, крутится в surge_manager и собственно скрипте аномалек. И я бы хотел это так и оставить.

А вот хранилище от @Artos, в принципе, можно использовать. Может, ещё для чего пригодится.

Шаман - СисАдмин

Всяко-разно: для ЧН

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

pstor (кстати, тут это уже разбиралось) имеет смысл только для актора.

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

 

Кстати, совершенно идиотские функции pstor_store()/pstor_retrieve() и, тем более, странные обертки к ним из amk лучше сразу заменить обращения к db.storage[0].pstor.наша_переменная, или где нибудь в net_spawn сразу вынести в хоть тот же db.pstor = db.storage[0].pstor (или сразу _G.pstor).

 

"бездонные хранилища" - они - для сохранения всего подряд в невменяемых количествах (ну, типа, коллекция порнофильмов, полное собрание переписки энгельса с каутским и т.д.). Правда, я так до сих пор и не понял, зачем сохранять в сэйвах порнофильмы. ;) Ибо, как сказал однажды один мудрый человек (и, вроде бы, этим человеком и был сам Артос) - "что можно вычислить - лучше - вычислить).

 

Если надо хранить какие-то уникальные данные для неписей или там предметов - пора таки уже думать в сторону модифицированных движков, либо, если, опять же, это единичные случаи - писать в custom_data.

 

P.S. Инфо о посещениях/уходах с уровня - явный оверкилл.

 

P.P.S. Появление/исчезновение актора в онлайне - это, внезапно, net_spawn()/net_destroy() в биндере. Соответственно, там и ставим _G.actor = объект актора/false, а где надо проверить - пишем тупо и банально if actor ...

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

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

@Dennis_Chikin, Ну, собственно, задача стоит не хранить что-то, а правильно спавнить аномальки на уровнях, на которых ГГ не присутствует. А т.к. это не получается реализовать нормально, то приходим к сохранению переменных между переходами ГГ с уровня на уровень.

 

  Dennis_Chikin писал(а):
P.S. Инфо о посещениях/уходах с уровня - явный оверкилл.

Если рассматривать в плане спавна аномалек - то нормально. Потому что, при спавне аномалек только на текущем уровне, нужно проверить, спавнились ли они тут уже после выброса, чтобы не спавнить их опять.

Кстати, может есть какой-то явный признак начала игры? А то у меня сейчас наверчено проверок... А они, походу, не работают, потому что при загрузке/переходе на другой уровень все переменные переинициализируются...


Вопрос по se_stor

Как его правильно к ЗП прикрутить? А то там bind_stalker от ТЧ лежит, и в нём куча несуществующих уже в ЗП функций и переменных. Чегось запутался малёх...

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

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
Romz, Некоторым спавн-объектам (нпс, смарты, аномалии, пути) нужны точные gv\lv-vertex, что и делает компилятор (xr_ai) при сборке спавна. Но из скрипта видно, что используется начальный gv и рандомный lv, и возможно именно из-за этого возникают проблемы, хотя если создавать аномалии в самом спавне (пакуя его acdc) и используя начальные gv\lv - то никаких проблем. Как пример с ошибкой, добавил с десяток смарт-коверов на янов с gv\lv = 317, 1231404 - так после смены уровня, те кто находился в них - оказывались в правом верхнем углу уровня (район аномалии "плавни"), а при переходе в онлайн - дружно бежали обратно на станцию. В тоже время, различные рестрикторы, секции physic_object и некоторые другие, данным методом нормально создаются. Возможно это зависит (чтобы точно узнать, нужно изучать исходный код игры) от стадий загрузки текущего уровня (в логе это - Сервер: Загрузка симуляции жизни... и т.д), и когда гг на одной локации, а создаёшь на другой, предполагается, что необходимые стадии выполнены (типа - Загрузка ИИ объектов... т.п). Изменено пользователем Dennis_Chikin
  • Нравится 1
Ссылка на комментарий

@h0N0r, Я немного модифицировал скрипт генерации аномалек, чтобы gv/lv подставлялись реальные, а не просто максимальные для уровня или рандомные. Но всё равно аномальки спавнятся в воздухе. Может быть, это ещё от координат зависит, и на онлайновой локе объекты "притягиваются" к террейну, а на офлайновых, вешаются чисто по координатам.

У меня так раз студни заспавнились на опорах ЛЭП, как на ёлках, а другой раз жарка появилась над Гавайцем и била вниз.

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

Шаман - СисАдмин

Всяко-разно: для ЧН

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

 

 

  Romz писал(а):
Как его правильно к ЗП прикрутить? А то там bind_stalker от ТЧ лежит, и в нём куча несуществующих уже в ЗП функций и переменных. Чегось запутался малёх...

bind_stalker от ТЧ в комплекте хранилища - всего лишь пример. Читай readme от автора, там подробно расписан принцип использования, в том числе

  порядок установки (Показать)

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

@Romz, с помощью функции level.vertex_position(lv_id) ты можешь получить позицию левел-вертекса только на текущей локации.

Поэтому на других локациях аномалии оказываются в тех позициях, которые соответствуют позициям левел-вертексов текущей локации. 

  • Согласен 1
  • Полезно 1
Ссылка на комментарий

@Romz, если еще актуально, для отлова переходов между уровнями и соответственно выполнения действий если актор на данном уровне впервые после последнего выброса, у меня такой вот код:

 

  тык (Показать)
  • Спасибо 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.

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

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

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

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

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

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

Войти

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

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

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