Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Случайный лут из сундуков [VXAce]

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71292

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1505
  • Спасибо получено: 1395
  • Учитель1 место в Готв3 место ГотвПисатель 2 местоВетеранТестер3 местоРазработчик
Сегодня я расскажу вам как сделать случайный лут из сундуков без использования сторонних скриптов. Система получилась не такой уж и замысловатой, единственное что не очень удобной в настройках по этому в дальнейшем, возможно, будет модифицирована.
И так, собственно что нам понадобится для организации всего действа? Естественно сундук! Тут можно использовать шаблон:

screen-1.png


Однако, его строки придется немного изменить, вот таким вот образом:


screen-2.png


Между прочим, можно оставить и обычный локальный переключатель, не меня его на свитч "open" - это нужно было мне, для демки.
Что же, теперь наверно у вас возникнет вопрос, что же за глобальный ивент "random table #1" и почему #1? Начну по порядку. Для того что бы не прописывать каждый раз таблицу с дропом мы выносим её в отдельный ивент и выглядит она у нас вот так:

screen-3.png


Да, как я уже говорил, это дело будет настраивать тяжело. Как же всё это работает? Намного проще чем выглядит. В самом начале ивента, мы задаём случайное значение переменной, делается это таким образом:

screen-4.png


После чего идут небольшие ветвления, различные лишь числом, которому должна быть равна переменная:


screen-5.png


Ну, а после всего этого, в зависимости от числа мы даём предмет игроку, о чем ему и сообщаем. На этом всё.
Однако, я так и не рассказал почему ивент имеет номер, а так же вы наверно заметили, что их два.
Суть в том, что кроме абсолютно случайной генерации мы можем сделать процентную и вот как это будет выглядеть:

screen-6.png


Различие не такое уж и большое, да. Мы, точно так же как в первом варианте, задаем случайное значение переменной и дальше смотрим чему она равна, однако вот тут наша таблица и подверглась изменениям. Допустим, шанс получить зелье из сундука равен 30%. Тогда, если переменная меньше либо равна трем, мы даём зелье. Но как же быть дальше? Тут уже придется немного поразмыслить и вспомнить базовые знания в математике. 30% мы уже потратили, а значит у нас осталось 70%. И мы хотим, что бы ручной топор выпадал с шансом 10%. Отчет в этот раз придется начинать не с нуля, ведь он уже занят, а с четырех. Почему именно с них? А потому, что тройка тоже уже занята и если мы включим её в диапазон то можно будет получить и топор и зелье(это тоже возможно, но я рассматриваю случай когда из сундука мы можем получить всего один предмет). Но ведь если мы просто создадим ветвление, где будет проверка: "переменная больше либо равна 4", мы получим не 10%, а все 70. Так что, придется вводить ещё одно ветвление, с новой проверкой: "переменная меньше либо равна 5". Таким образом мы как бы делаем отрезок от 4 до 5, в котором у нас падает топор. Дальше мы действуем по такому же принципу, не забывая об уже используемых значениях.
Надеюсь, я объяснил достаточно понятно. Если возникнут вопросы, комментарии всегда открыты, а так же рекомендую самостоятельно изучить демку, которую скачать можно вот тут ----> кликать тут
На этом всё, спасибо за внимание!
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Lekste, DeadElf79

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71293

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1181
  • Писатель 3 место3 местоПроект месяца 1 место2 место Сбитая кодировкаПрограммист JavaScript 2 место Проект месяца 3 местоПобедитель Сбитой кодировки3 место ГотвПроект месяца 2 место
Внесу поправку к последнему скрину. Вместо проверки "переменная больше того-то" можно во все предыдущие ветвления вставлять "конец ивента" - эффект, по идее, будет тот же.
З.Ы. "Херб отчищения" - это, видимо, люффа, из которой мочалки делают :)
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71308

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2645
  • 3 место1 место в ГотвПроект месяца 1 местоУчительПисатель 3 местоПрограммист RubyВетеранПроект месяца 2 местоОрганизатор конкурсов
Другая версия
В этой версии есть шанс выпадения одного из типов предметов: денег, оружия, итемов или брони.
Шанс выпадения каждого типа предмета одинаков (нет никаких процентов), зато есть установка диапазона выпадающих предметов по ID из БД с помощью изменения диапазона случайных чисел для переменной Random ID. Для того, чтобы выпадала любая вещь из всего, что только есть в БД, измените диапазон вручную.
Также, в качестве фичи сделал выпадение случайного числа предметов (для каждого типа установил свое значение)

Недостатки: пока не придумал, как показывать сообщение с показом названия предмета (стандартными средствами), но это решается любым скриптом вида Custom Message System.

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

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71315

  • Lipton
  • Lipton аватар
  • Вне сайта
  • Просветлённый
  • Ух ты!
  • Сообщений: 375
  • Спасибо получено: 652
  • Программист Ruby2 место Организатор конкурсов
Эльф, а за чем внутри вызова скрипта, борода из eval?
Вызов скрипта это уже и есть вызов eval.

А имя можно брать по id итема сохраняя в game_variables и выводить там же в окошке.

Типа такого.
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71316

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2645
  • 3 место1 место в ГотвПроект месяца 1 местоУчительПисатель 3 местоПрограммист RubyВетеранПроект месяца 2 местоОрганизатор конкурсов
Липтон, потому что в окно вызова скрипт такая строка не вмещается и он, мейкер, дурак эдакий, делит строку с помощью символа возврата каретки (перенос строки, \n, CRLF). А разорванную строку он считает как две совершенно независимые и может выдать ошибку, споткнувшись на этом. Сам попробуй из интереса))

Про этот способ не знал, можно использовать))
Последнее редактирование: 6 года 8 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71317

  • Lipton
  • Lipton аватар
  • Вне сайта
  • Просветлённый
  • Ух ты!
  • Сообщений: 375
  • Спасибо получено: 652
  • Программист Ruby2 место Организатор конкурсов
У тебя видимо старая версия асе. В родной версии после патча по моему еще зимой, такая строка прекрасно влезает.
Собственно пример в скрине выше, он у меня прекрасно работает. =)
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71319

  • JackCL
  • JackCL аватар
  • Вне сайта
  • Светлый дракон
  • Кролик вашей мечты
  • Сообщений: 711
  • Спасибо получено: 996
  • РазработчикПроект года 2 местоПроект месяца 1 местоПроект года 3 место
Lipton пишет:
У тебя видимо старая версия асе. В родной версии после патча по моему еще зимой, такая строка прекрасно влезает.

У меня тоже старая наверное. А у тебя "родная" - в смысле стимовская?

Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71320

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2645
  • 3 место1 место в ГотвПроект месяца 1 местоУчительПисатель 3 местоПрограммист RubyВетеранПроект месяца 2 местоОрганизатор конкурсов
Неужели у кого-то есть стимовская версия? Залей сюда DLL с патчем))
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71321

  • Lipton
  • Lipton аватар
  • Вне сайта
  • Просветлённый
  • Ух ты!
  • Сообщений: 375
  • Спасибо получено: 652
  • Программист Ruby2 место Организатор конкурсов
Ну да стимовская я ее давно уже приобрел. =)))

Кстати неплохо бы еще проверять на существование предмета в бд.
Что нибудь типа
if $data_items[$game_variables[3]] == nil то пропускать присвоение.
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71322

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2645
  • 3 место1 место в ГотвПроект месяца 1 местоУчительПисатель 3 местоПрограммист RubyВетеранПроект месяца 2 местоОрганизатор конкурсов
Требую оригинальный DLL!))

Я не стал усложнять, но это условие можно вставить, если ты не помнишь, что у тебя лежит в БД))
Администратор запретил публиковать записи гостям.

Случайный лут из сундуков [VXAce] 6 года 8 мес. назад #71325

  • Dprizrak1
  • Dprizrak1 аватар
  • Вне сайта
  • Просветлённый
  • Призрак обитающий в стенах Академии
  • Сообщений: 437
  • Спасибо получено: 165
такая проверка хороша, когда у тебя типы предметов разделены "----" такой чёрточкой что-бы персонажу не выпал пустой, ничего не делующий, предмет под названием "----" :)
(^_^)
Этот форум слишком умный для меня
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.759 секунд