Сейчас постараюсь рассказать, как в RPG Maker MV можно работать с полем «Примечание», которое имеется в настройках персонажей, классов, предметов, навыков, врагов и так далее. Складывается ощущение, что это поле предназначено исключительно для личных записей автора, чтобы он, бедолага, случайно чего не забыл в процессе разработки игры. Однако у него есть и другие применения. Можно, например, добавлять туда какие-нибудь лично придуманные характеристики.
В этом уроке будем добавлять предметам такую характеристику, как шанс найти этот предмет в сундуке, и сделаем сундук, где эта возможность будет реализована.
Для начала, о синтаксисе.
Характеристика должна быть заключена в треугольные скобки, а её значение стоять после двоеточия. Вот так:
<характеристика: значение>
Многие плагины используют подобные теги, поэтому название характеристики лучше взять позаковыристей, чтобы оно случайно не совпало с названием из какого-нибудь плагина.
Добавляем предметам новую характеристику.
Итак, я сделал в базе четыре предмета с вероятностями выпадения: 50%, 20%, 10% и 0. Последний — это предмет, который в принципе не должен появляться в сундуках (квестовый, например). И записал каждому в примечание примерно следующее:
lessondrop – это название характеристики, а 50 — шанс выпадения этой вещи.
Создаём общее событие для выпадения случайных предметов.
Переходим на вкладку общих событий и создаём новое событие.
Мы сделаем цикл с перебором всех предметов, поэтому первым делом устанавливаем для цикла переменную «счётчик» в значение =1.
Далее запускаем цикл и следующие действия выполняем внутри цикла:
«Бросаем» 100-гранник. То есть, приравниваем переменную «вероятность» к случайному числу от 1 до 100.
Переменную «шанс выпадения» приравниваем к созданной нами характеристике предмета. Делаем это так:
После сравниваем эти две переменные и, если «шанс выпадения» больше или равен «вероятности», то даём нашему герою одну штуку этого предмета. Делаем это строчкой скрипта:
◆Скрипт:$gameParty.gainItem($dataItems[$gameVariables.value(6)], 1)
Также хорошо бы сообщить герою, что же он получил. Для этого в переменную «название» заносим название полученного предмета:
◆Переменная:#0014 название = $dataItems[$gameVariables.value(6)].name
И пишем радостное сообщение, не забыв выделить название предмета цветом:
◆Сообщение:Нет, Окно, Низ
: :Вы нашли \C[1]\V[14]
После чего увеличиваем «счётчик» на 1 и проверяем, если он уже стал больше или равен 5 (в нашей базе было 4 предмета, так что пятый — уже лишний), то прерываем цикл, а если нет, то повторяем цикл сначала уже со следующим предметом.
В итоге получилось следующее общее событие:
◆Переменная:#0006 счётчик = 1
◆Цикл
◆Переменная:#0007 вероятность = Случайно 1..100
◆Переменная:#0013 шанс выпадения = $dataItems[$gameVariables.value(6)].meta.lessondrop
◆Если:шанс выпадения ≥ вероятность
◆Скрипт:$gameParty.gainItem($dataItems[$gameVariables.value(6)], 1)
◆Переменная:#0014 название = $dataItems[$gameVariables.value(6)].name
◆Сообщение:Нет, Окно, Низ
: :Вы нашли \C[1]\V[14]
◆
:Конец
◆Переменная:#0006 счётчик += 1
◆Если:счётчик ≥ 5
◆Прервать цикл
◆
:Конец
◆
:Повторить цикл
Немножко улучшаем общее событие.
Сделаем событие чуточку получше, а то иногда может случиться такое, что игрок ничего не найдёт в сундуке. В этом случае не происходит вообще ничего, а ведь так хочется обратить его внимание на то, какой же он неудачник. Так что делаем следующее:
В самом начале выполнения события создаём триггер «находка» и переводим его в положение ВЫКЛ.
Затем во время выполнения цикла, если игрок получает какой-либо предмет, переводим триггер «находка» в положение ВКЛ.
Ну и в самом конце, когда цикл уже закончил выполняться, делаем проверку и, если триггер «находка» по-прежнему выключен, пишем наше издевательское сообщение.
Улучшенное общее событие будет выглядеть так:
◆Переключатель:#0004 находка = ВЫКЛ
◆Переменная:#0006 счётчик = 1
◆Цикл
◆Переменная:#0007 вероятность = Случайно 1..100
◆Переменная:#0013 шанс выпадения = $dataItems[$gameVariables.value(6)].meta.lessondrop
◆Если:шанс выпадения ≥ вероятность
◆Скрипт:$gameParty.gainItem($dataItems[$gameVariables.value(6)], 1)
◆Переменная:#0014 название = $dataItems[$gameVariables.value(6)].name
◆Сообщение:Нет, Окно, Низ
: :Вы нашли \C[1]\V[14]
◆Переключатель:#0004 находка = ВКЛ
◆
:Конец
◆Переменная:#0006 счётчик += 1
◆Если:счётчик ≥ 5
◆Прервать цикл
◆
:Конец
◆
:Повторить цикл
◆Если:находка теперь ВЫКЛ
◆Сообщение:Нет, Окно, Низ
: :Вы ничего не нашли.
◆
:Конец
Ставим на карте сундук со случайным лутом.
Как обычный сундук, только вместо заранее определённого предмета «кладём» туда наше общее событие:
Делаем случайную броню и оружие.
Теперь, когда принцип ясен, можно добавить такие же характеристики броне и оружию и создать общие события для них. Всё то же самое, только вместо “dataItems” пишем везде “dataArmors” и “dataWeapons”, а вместо “gainItem” — “gainArmor” и “gainWeapon”.