Утилиты разработчика
Название: AScripts
Автор: Alexandr_7
Тип: утилита
Версия: 1.3
Версия RPG maker: MV
Дата выхода: 2020
Условия использования/лицензия:
Вы можете:
-Бесплатно использовать данный плагин в некоммерческих и коммерческих проектах
-Переводить на другие языки или полностью поменять текст плагина (сообщите мне, если Вы это сделали)
-Изменять код плагина, но Вы обязаны указать ссылку на оригинальный плагин
Вы не можете:
-Убирать или изменять любую информацию о плагине (Название, авторство, контактная информация, версия и дата релиза) Исключением является вот эти вот поля:
SPProject.gameName = "Снежная царевна. Другая история (Demo).";
SPProject.gameVersion = "Альфа 4";
SPProject.gameNameVersion = SPProject.gameName + " Версия: " + SPProject.gameVersion;
SPProject.versionPlugin = "1.0";
Описание:
Данный плагин создаю исключительно для своего проекта. В нем функционал который может быть полезен для разработчиков.
Так например это скрипт переключения локальных переключателей.
Скрипт для получения рандомного числа (Ибо в MV данный функционал багнутый)
Скрипт для броска монетки так сказать. Вернет рандомно true или false
Скрипт для получения массива с рандомными числами но на 1 меньше. Это иногда полезно если вы хотите заполнить все клетки кроме одной.
Скрипты для Крестиков Ноликов. (Описание их работы также присутствует)
Но рано радуетесь. Чтоб использовать плагин вам нужны хотябы минимальные знания JS так как всеже это скрипты и работать будет в скриптах.
Не знаю зачем выкладываю но пускай будет.
Установка:
Справка: скопировать код в блокнот, назвать AL7_SnowPrincessPlugin.js
Скачать: (нет)
Демо: (нет)
Зависимости: (нет)
Дополнительно:
Требуемая версия движка: 1.5.0 и выше (Тестировано только на 1.6.2 но проблем с версией 1.5.0 быть не должно)
Требуемый язык: Только Русский
Требуемые знания: Основы Java Script
Код:
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Добавлены парочка новых скриптов.
Справка обновлена частично или вообще не обновлена.
Так как этот плагин куча борохла в 1 плагине то врядле кому зайдет. Лично там функционал который мне необходим для моего прооекта. Может кому из скриптоделов будет полезен.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Не проверял еще.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А в чём заключается багнутость этого функционала в MV? Вроде бы ваш код даст на 100% такой же результат, как и стандартный код из MV.Alexandr_7 пишет: Скрипт для получения рандомного числа (Ибо в MV данный функционал багнутый)
В RPG Maker MV код для получения случайного числа хранится в файлах JsExtensions и Game_Interpreter .
Вот как определяется функция Math.randomInt в JsExtensions :
Вот как выглядит код обработки команды «Переменные» (Contol Variable), который отвечает за случайные числа:
Чтобы сравнивать с функцией из плагина, давайте вынесем стандартный код в отдельную функцию defaultRandom(min, max). Заменим this._params[5] и this._params[4] на min, max, уберём operateVariable (эта функция позволяет присваивать, отнимать, умножать и т.п.) и цикл по диапазону переменных, т.к. это к делу не относится:
Если вставить код Math.randomInt в саму функцию, то получим:
Если объединить две строки в одну, то получим:
Учитывая коммутативность сложения и умножения, этот код идентичен этому:
А теперь сравним с кодом из плагина:
То есть стандартный код из MV работает на 100% так же, как и код из этого плагина. В чём багнутость? Стандартный код на 100% такой же, как и ваш.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Dmy пишет:
А в чём заключается багнутость этого функционала в MV? Вроде бы ваш код даст на 100% такой же результат, как и стандартный код из MV.Alexandr_7 пишет: Скрипт для получения рандомного числа (Ибо в MV данный функционал багнутый)
Пояснение
В RPG Maker MV код для получения случайного числа хранится в файлах JsExtensions и Game_Interpreter .
Вот как определяется функция Math.randomInt в JsExtensions :Code:Math.randomInt = function(max) { return Math.floor(max * Math.random()); };
Вот как выглядит код обработки команды «Переменные» (Contol Variable), который отвечает за случайные числа:Code:// Control Variables Game_Interpreter.prototype.command122 = function() { var value = 0; switch (this._params[3]) { // Operand //[тут код, не связанный со случайными числами] case 2: // Random value = this._params[5] - this._params[4] + 1; for (var i = this._params[0]; i <= this._params[1]; i++) { this.operateVariable(i, this._params[2], this._params[4] + Math.randomInt(value)); } return true; break; //[тут код, не связанный со случайными числами] } //[тут код, не связанный со случайными числами] };
Чтобы сравнивать с функцией из плагина, давайте вынесем стандартный код в отдельную функцию defaultRandom(min, max). Заменим this._params[5] и this._params[4] на min, max, уберём operateVariable (эта функция позволяет присваивать, отнимать, умножать и т.п.) и цикл по диапазону переменных, т.к. это к делу не относится:
Code:Math.randomInt = function(max) { return Math.floor(max * Math.random()); }; function defaultRandom(min, max) { var value = max - min + 1; return min + Math.randomInt(value)); }
Если вставить код Math.randomInt в саму функцию, то получим:Code:function defaultRandom(min, max) { var value = max - min + 1; return min + Math.floor(value * Math.random()); }
Если объединить две строки в одну, то получим:Code:function defaultRandom(min, max) { return min + Math.floor((max - min + 1) * Math.random()); }
Учитывая коммутативность сложения и умножения, этот код идентичен этому:Code:function defaultRandom(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
А теперь сравним с кодом из плагина:
Code:static getRandomInRange(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
То есть стандартный код из MV работает на 100% так же, как и код из этого плагина. В чём багнутость? Стандартный код на 100% такой же, как и ваш.
В том что когдато я сталкнулся с тем что мне на протижении 30 раз (просто я 30 тестов и делал) вылетало одно и тоже число. Вот в чем заключается багнутость функционала MV. Если использовать очень мелкие числа то он тебе 1 и тоже будет выдавать и это баг. Мне толи здесь толи на нейтральной полосе подтверждали. это. С тех пор использую скрипт для рандома ну + данный скрипт и в других скриптах плагина используется.
Вроде использовал от 1 до 3 и в итоге постоянно 3 получал.
Я согласен. Баг не у всех но точно писал на форум и мне говорили что это баг MV. Возможно на тот момент использовались файлы старой версии движка. Но вроде 1.6.1 были. Но 100 процентов гдето писал такой вопрос бага и точно был ответ багнотостью движка. Скорее всего баг не у всех но как по мне лучше 100 процентов знать что код сработает а не проверять одно и тоже место по 30 раз. И да я вспомнил. Использовал именно от 1 до 3 чтобы рандомно поставить летящуюю пулю так она из одного тогоже место и летело и это было совсем не круто.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Это не баг, это фича. Math.random() выдаёт математически случайные числа.Alexandr_7 пишет: В том что когдато я сталкнулся с тем что мне на протижении 30 раз (просто я 30 тестов и делал) вылетало одно и тоже число. Вот в чем заключается багнутость функционала MV. Если использовать очень мелкие числа то он тебе 1 и тоже будет выдавать и это баг.
Математически есть вероятность, что я брошу монетку 100 раз и мне всегда выпадет решка. Вероятность такого мала, но такая вероятностьесть. И Math.random() может выдать такие вещи.
И ваш генератор, и генератор MV используют Math.random(), поэтому результат будет одинаковый. То, что вам попалось одно число 30 раз в генераторе MV, и не попалось в вашем коде — это просто случайность. У кого-то, наоборот, 30 раз попадётся одно и то же число в вашем коде, а в генераторе MV не попадётся.
Вероятность получить 30 раз одно число при выборе из трёх — (1/3)30, то есть 4.856935749618858 * 10-15. Это маленькая вероятность, но она есть. И когда-то кому-то она может выпасть.
Ну, возможно те, кто подтверждал, сами не разбирались в вопросе.Alexandr_7 пишет: Мне толи здесь толи на нейтральной полосе подтверждали. это.
Alexandr_7 пишет: Баг не у всех но точно писал на форум и мне говорили что это баг MV.
Работая программистом, я таких «багов» повидал... Однажды клиент отключил галочку «присылать уведомления», а потом написал нам, что у него баг: уведомления не присылаются.Alexandr_7 пишет: Но 100 процентов гдето писал такой вопрос бага и точно был ответ багнотостью движка. Скорее всего баг не у всех но как по мне лучше 100 процентов знать что код сработает а не проверять одно и тоже место по 30 раз. И да я вспомнил. Использовал именно от 1 до 3 чтобы рандомно поставить летящуюю пулю так она из одного тогоже место и летело и это было совсем не круто.
Вот так и здесь: людям не нужны по-настоящему рандомные числа (нужно, чтобы ситуация «пуля всегда летит из одного места» не случалась — при рандомных числах такая вероятность есть!), но они используют рандомный генератор не по назначению. И, естественно, получают не такой результат, какой нужно.
Если верить git blame на Гитхабе, текущий код появился как раз в версии 1.6.1. Код до этого времени косметически отличался, но работал так же.Alexandr_7 пишет: Возможно на тот момент использовались файлы старой версии движка. Но вроде 1.6.1 были.
Если честно, не знаю, зачем они его поменяли. Старый код давал тот же результат.
______
Добавлено: в Википедии есть хорошая статья, Иллюзия кластеризации . «Багованность» генератора случайных чисел в MV — это именно такая иллюзия.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
И да. Встроенный способ я имею в виду присвоить переменной через команды от 1 до 3. А не через встроенные скрипты.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
2. В версии мукера декабря 2015 год рандом такой же, пусть и немного отличается написанием:
соединяем ее в одну, выходит:
переписываем с нашими переменными min и max, получается то же самое, что у тебя, только с переменой мест слагаемых:
Поэтому если ошибка в рандом МВ и была, то в октябре-ноябре 2015-ого, что уже как 4,5 года неактуально
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
1. Я сказал что баг был при использовании команд события а не через скрипты напрямую. Я понимаю что команды событий вызывают встроенные скрипты но так или иначе баг был и баг сейчас я потестировал - не повторяется. Скорее всего какойто файл от старой версии был или не знаю как объяснить но точно помню баг был. И повторюсь. Я присваивал переменной не через стартные скрипты а через команду переменная в событии и сейчас все нормально. Но тогда при использовании от 1 до 3 постоянно выподало 3. С тех пор использую скрипт. Если у кого работает нормально и то флаг вам в руки. Сейчас у меня и у самого нормально работает но я всеже предпочитаю через свой скрипт делать к томуже я в принципе в основном использую скриптинг JS для создиния чего либо ибо чтото реально хорошее встроенными способами создавать ужасно неудобно. Да. Скриптинг в некоторых местах горазду удобнее например для ситуаций когда множество if и else лучше использовать скрипты чем команды плагина ибо в командах ветвление условий сделано очень хреново и когда у тебя условий штук 10 то выглядит уже крайне нечитабельно. Учитывая тот факт что окошки mv маленькие и увеличить их размер нельзя. Короче помимо бага который когдато был у меня были еще 2 причины использовать скрипт вывода рандомного числа.
2. Я также сказал что этот скрипт используется для других скриптов. Скрипт полезен если нужно указать рандомное число в функцию.
Короче. Про баг речь закрыта. Баг был у меня и ктото гдето мне гсказал что причина в баге MV. Также забыл сказать что баг был именно на готовом проекте а не на
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
-Изменять имя, версию и авторов проекта под свой проект.
Вы не можете:
-Убирать или изменять любую информацию о плагине (Название, авторство, контактная информация, версия и дата релиза)
Кхм... Очень знакомый текст...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DK пишет: Почему у тебя условия использования противоречат друг другу ?
-Изменять имя, версию и авторов проекта под свой проект.
Вы не можете:
-Убирать или изменять любую информацию о плагине (Название, авторство, контактная информация, версия и дата релиза)
Кхм... Очень знакомый текст...
Информацию в плагине нет но есть переменные с информацией проекта и автора. Там можно.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
