Случайный лут из сундуков [VXAce]

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



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




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



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



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




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



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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 9 мес. назад #71293 от Cerberus
Внесу поправку к последнему скрину. Вместо проверки "переменная больше того-то" можно во все предыдущие ветвления вставлять "конец ивента" - эффект, по идее, будет тот же.
З.Ы. "Херб отчищения" - это, видимо, люффа, из которой мочалки делают :)

Жуть болотная, на лапках, в тапках и с пулемётом...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

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

Скачать демо

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Организатор конкурсов 2 место
Больше
11 года 9 мес. назад #71315 от Lipton
Эльф, а за чем внутри вызова скрипта, борода из eval?
Вызов скрипта это уже и есть вызов eval.

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

Типа такого.
[img

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

Про этот способ не знал, можно использовать))
Последнее редактирование: 11 года 9 мес. назад пользователем DeadElf79.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Организатор конкурсов 2 место
Больше
11 года 9 мес. назад #71317 от Lipton
У тебя видимо старая версия асе. В родной версии после патча по моему еще зимой, такая строка прекрасно влезает.
Собственно пример в скрине выше, он у меня прекрасно работает. =)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект года 3 место Проект года 2 место Разработчик Проект месяца 1 место
Больше
11 года 9 мес. назад #71319 от JackCL

Lipton пишет: У тебя видимо старая версия асе. В родной версии после патча по моему еще зимой, такая строка прекрасно влезает.


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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 9 мес. назад #71320 от DeadElf79
Неужели у кого-то есть стимовская версия? Залей сюда DLL с патчем))

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Организатор конкурсов 2 место
Больше
11 года 9 мес. назад #71321 от Lipton
Ну да стимовская я ее давно уже приобрел. =)))

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 9 мес. назад #71322 от DeadElf79
Требую оригинальный DLL!))

Я не стал усложнять, но это условие можно вставить, если ты не помнишь, что у тебя лежит в БД))

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 9 мес. назад #71325 от Dprizrak1
такая проверка хороша, когда у тебя типы предметов разделены "----" такой чёрточкой что-бы персонажу не выпал пустой, ничего не делующий, предмет под названием "----" :)

(^_^)
Этот форум слишком умный для меня

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.116 секунд
Работает на Kunena форум