RU

Как сделать перемещение НПС персонажей по миру?

doc_ker #2712 20.11.2023 18:51 1 comment 2076 views

Собственно, не могу понять, как сделать перемещения. Нужно менять по времени, и иногда рандомно

doc_ker,
Это ж крайне просто, если понимать базовые концепции Великого Дао Куспа.
Ну например:

!//--- Предположим локация на которой мы инициализируем НПЦ
!//--- В каком виде их хранить, как с ними работать сугубо выбор автора. Можно разными массивами, можно одним массивом и парсить строку, можно хоть на каждго NPC свою переменную прописать. Как заблагорассудится, насколько хватит понимания концепции Великого Дао Куспа.
$НПЦ_Имя[] = "Витя Агроном"
$НПЦ_Имя[] = "Доктор Елена"

!//--- Допустим у нас тут локация заброшенная больница
!//--- Витя Агроном недавно приболел когда делал очередную вылазку за припасами и потому пообщаться с ним можно только между 10 и 18 часами
!//--- В остальное время он на процедурах и врач попросту нас не пустит к нему. Занятой человек, видите ли
if время > 10 and время < 18:
  act "Поговорить с <<$НПЦ_Имя[0]>>":
    *PL "Очень долгая, возможно даже душещипательная, беседа с множеством вариантов ответов и наверняка судьбоносных решений."
  end
end

!//--- А если нам нужно выбрать рандомно какого-то NPC? Или выдать ему рандомное расписание?
!//--- Для такого уже надо продумывать структуру данных, потому что от неё уже зависят алгоритмы реализации.
$НПЦ_Имя[] = "Андрей"
$НПЦ_Расписание[] = "[П][Кушать]10,11|[В][Бегать]05,07"

идентификатор_рандомного_нпц = rand(0, arrsize('$НПЦ_Имя'))
$задачи_нпц_в_понедельник = $func('получить_расписание_нпц', $НПЦ_Расписание[идентификатор_рандомного_нпц], 'П')
$задача_нпц_кушать = $func('получить_время_расписания', $задачи_нпц_в_понедельник, 'Кушать')
время_начало = $Mid($задача_нпц_кушать, 0, 2)
время_конец = $Mid($задача_нпц_кушать, 4, 2)

if время > время_начало and время < время_конец:
  act "Поговорить с <<$НПЦ_Имя[идентификатор_рандомного_нпц]>>":
    *PL "Когда я ем, я глух и нем!"
  end
end

!//--- Я думаю мысль улавливается? Здесь например можно у AleksVersus взять (http://aleksversus.narod.ru/index/vspomogatelnye_funkcii/0-74#em_str_getword) или самому написать функцию, которая парсит строку в расписании и получает от неё временные рамки для конкретного дня недели, для конкретного занятия.
!//--- Не обязательно делать как у меня. Главное понять СУТЬ предлагаемой концепции.

Log in or Register to post comments.