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

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

Всем привет!

Имею такой код:

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

function actor_on_update(status)
    local tm = task_manager.get_random_task()
    local active = tm.active_task_by_type
    for k, task_id in pairs(active) do
    local task_status = tm.task_info[task_id].status
        if task_status == "completed" then --// Если завершили таск
            ----
        end
    end
end

Хочу сделать что бы при взятии задания на убиство нпс задание завершалось автоматически а не бежать обратно за наградой. Как завершить принудительно выполненый таск?

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

Никто случайно не вникал (и соответственно) не правил работу стейт менеджера?

Проблема в том, что НПС отыгрывает анимации лишь с into, a out и idle прекрасно игнорирует.

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

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

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

Добрый день.

Как у нпц поменять имя? Для серверного объекта способ нашёл:

local sobj = alife():object( id )	
local pk = m_netpk.get(sobj, 1)
local data = pk:get()
local name = data.checked_characters
--ВОТ ТУТ МЕНЯЕМ
data.checked_characters = "Джек Потрошитель"
pk:set(data)

А как тоже самое сделать для клиентского объекта?

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

Для серверного объекта способ нашёл

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

3 часа назад, phalcor сказал:

А как тоже самое сделать для клиентского объекта

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

Это, однако, не поможет, поскольку имя персонажа в журнале, диалогах и при наведении курсора берётся из профиля.

Можно, конечно, и профиль на лету поменять - для этого в нетпакете есть свойства specific_character и character_profile, но и они не охватывают всё, к тому же сие чревато другими последствиями, такими как замена визуала и т. п.

Имхо, без редактирования движка на все 100 задачу не выполнить.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий
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 11.03.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 ядер, 5.7ГГц); 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)
{
}

 

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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