Можно ли сделать локацию со списком всех предметов, существ?
Можно ли сделать локацию(и) со списком всех предметов, существ и т.п.
И в нужном месте вставлять допустим определённый предмет, неиспользуя остальные, которые будут предназначены для других действий, локаций и т.д.
Нашёл одну штуку
#Монстры
*PL ‘<center><b>Монстры</b></center>’
*PL ‘’
*P ‘Все создания в игре, с которыми предстоит побороться игроку…’
И так же с предметами
Но как вставить монстра в определённом моменте, не трогая остальных.
Nickit:
Но как вставить монстра в определённом моменте, не трогая остальных.
Можно воспользоваться модулем работы с экраном: https://qsp.org/forum/236-qsp-ekran-modul-dla-raboty-s-ekranom
Нужные тебе места помечаешь тегами:
*P '<region id="monsters"></region>'
После чего тебе достаточно вызвать команду
GS 'Экран.Установить', 'monsters', 'Перечень монстров в локации'
В результате чего у тебя изменится только содержимое экрана между тегами region с идентификатором “monsters”, а остальное останется неизменным.
Nickit,
# начало
! Отключаем неиспользуемые окна.
SHOWSTAT 0
SHOWINPUT 0
! Устанавливаем обработчик перехода на новую локацию.
$ONNEWLOC = 'ONNEWLOC'
! Расставляем объекты по локациям.
GS 'Расставить_объекты'
GT 'прихожая'
-
# расставить_объекты
! Объекты перечислены в специальных массивах имён.
! Перечисляем предметы.
$имя_предмета[] = 'нож'
$имя_предмета[] = 'топор'
$имя_предмета[] = 'бритва'
! Перечисляем персонажей.
$имя_персонажа[] = 'жена'
$имя_персонажа[] = 'брат'
! Для расстановки объектов, используем массивы.
! Индексом массива будет имя объекта.
! Значение массива - локация, на которой находится объект.
! Расставляем предметы по комнатам.
$предметы['нож'] = 'кухня'
$предметы['топор'] = 'кладовка'
$предметы['бритва'] = 'ванная'
! Расставляем "существ" по комнатам.
$персонажи['жена'] = 'кухня'
$персонажи['брат'] = 'гостиная'
-
# ONNEWLOC
! При переходе на новую локацию, выводим список здешних объектов.
GS 'Список_объектов'
-
# список_объектов
! Выводим список предметов.
i = 0
:loop1
IF i < ARRSIZE('$имя_предмета'):
$предмет = $имя_предмета[i]
IF $предметы[$предмет] = $CURLOC:
! Выводим предмет на экран.
'Здесь лежит ' + $предмет + '.'
! Предмет находится в одной локации с игроком.
! Значит, игрок может взять предмет с собой.
DYNAMIC "
ACT 'Взять <<$предмет>>':
ADDOBJ '<<$предмет>>'
$предметы['<<$предмет>>'] = 'инвентарь'
GT $CURLOC
END
"
END
i = i + 1
JUMP 'loop1'
END
! Выводим список персонажей.
i = 0
:loop2
IF i < ARRSIZE('$имя_персонажа'):
IF $персонажи[$имя_персонажа[i]] = $CURLOC:
! Выводим персонажа на экран.
'Здесь находится ' + $имя_персонажа[i] + '.'
END
i = i + 1
JUMP 'loop2'
END
-
# кухня
'Это кухня.'
ACT 'Идти в прихожую':
GT 'прихожая'
END
! Жену можно отправить в магазин, если она на кухне.
IF $персонажи['жена'] = 'кухня':
ACT 'Отправить жену за пивом':
*CLR
'- Жена, сгоняй-ка за пивком.'
'- Да, дорогой, уже бегу!'
''
$персонажи['жена'] = 'магазин'
XGT $CURLOC
END
END
-
# прихожая
'Это прихожая.'
ACT 'Идти в кухню':
GT 'кухня'
END
ACT 'Идти в гостиную':
GT 'гостиная'
END
ACT 'Идти в ванную':
GT 'ванная'
END
ACT 'Заглянуть в кладовку':
GT 'кладовка'
END
-
# гостиная
'Это гостиная.'
ACT 'Идти в прихожую':
GT 'прихожая'
END
-
# ванная
'Это ванная.'
ACT 'Идти в прихожую':
GT 'прихожая'
END
-
# кладовка
'Кладовка.'
ACT 'Идти в прихожую':
GT 'прихожая'
END
-
Готовый пример:
moving_objects.qsp
Переместил тему в соответствующий раздел.
Nex:
! Перечисляем предметы. $имя_предмета[] = 'нож' $имя_предмета[] = 'топор' $имя_предмета[] = 'бритва' ! Перечисляем персонажей. $имя_персонажа[] = 'жена' $имя_персонажа[] = 'брат'
Что-то твой пример на хоррор смахивает) “Пособие для начинающего маньяка”
BiK,
это моё правило.
Пример кода должен быть хотя бы капельку интересным и запоминающимся. Тогда он будет лучше усваиваться.
Абстрактное “локация 1, локация 2, предмет 1, предмет 2” - пусть пишет кто-нибудь другой.
Кстати, по тому же принципу и учебник сделан.
Переименовал тему.