Войти на сайт

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

ТЕМА: Кодовые команды для управления локальными перекл..

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125164

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
Здравствуйте.
В моем плагине реализована вещь как управления локальными переключателями через команды плагинов. В mz это расширена до невероятных возможностей например такие.
ИД Карты: Там где находится игрок, По значению переменной, По ID Карты
ИД события Там где находится игрок, По значению переменной, По ID События
Можно также поставить галочку на отключение остальных локальных переключателей.

Так вот. Хочу попросить помощи какие кодовые команды подобрать чтобы перенести эту систему в полной рабочей схеме на MV

Сразу скажу что я не умею работать с регулярными выражениями в JS но эта и не понадобится вроде.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125165

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1139
  • Спасибо получено: 2159
  • 3 местоПроект года 3 место3 место в Обучающем конкурсеОраторУчительПроект года 1 местоПаладинПроект месяца 1 место1 место в Обучающем конкурсеРазработчик
Мне кажется, для плагина это избыточная функция при том, что в JS это делается одной строчкой:
$gameSelfSwitches.setValue([номер карты, номер события, 'A'], true/false)

При необходимости в качестве номеров можно подставлять переменные, или this._mapId - для текущей карты и this._eventId - для текущего события.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Посос

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125166

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
Alx_Yago пишет:
Мне кажется, для плагина это избыточная функция при том, что в JS это делается одной строчкой:
$gameSelfSwitches.setValue([номер карты, номер события, 'A'], true/false)

При необходимости в качестве номеров можно подставлять переменные, или this._mapId - для текущей карты и this._eventId - для текущего события.
Я знаю нопри этом эта функция разростается если например вместо числа ид карты нужно указать число переменной тогда уже функция будет такой:
$gameSelfSwitches.setValue([&gameVariables.value(1), &gameVariables.value(2), 'A'], true/false)
Но а если нужно прям в нескольких событий отключать которые идут по порядку то тут еще добавлять цикл for
for(var i = 0; i < 10; i++)$gameSelfSwitches.setValue([&gameVariables.value(1), i, 'A'], true/false)
Как уже сказал в MZ я сделал так чтобы можно было в любых условиях управлять локальными переключателями. Можно вместо ид карты указать что оно равно тому где стоит игрок. Тоже можно сделать и для события. Также можно сделать для нескольких событий которые идут по порядку. Например полезно в создании Крестиков ноликов на событиях чтобы не использовать 18 переключателей.
Так вот. В MV через их команды плагинов тоже хочу сделать такую вариативность.

2021-11-03215705.png


К томуже человеку не знающего JS сомневаюсь что ему будет легко разобраться как это устроено и как сделать. Так вот сама суть облегчить это для mv чтобы не приходилось лезть в JS
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 2 года 6 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125167

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1139
  • Спасибо получено: 2159
  • 3 местоПроект года 3 место3 место в Обучающем конкурсеОраторУчительПроект года 1 местоПаладинПроект месяца 1 место1 место в Обучающем конкурсеРазработчик
Ну в МЗ в этом смысле проще работа с плагинами реализована. А в МВ всё равно придётся строчку вводить. Разве что сократить её как-нибудь, типа:
SSwitch(this, v[10], A, true)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125168

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
Alx_Yago пишет:
Ну в МЗ в этом смысле проще работа с плагинами реализована. А в МВ всё равно придётся строчку вводить. Разве что сократить её как-нибудь, типа:
SSwitch(this, v[10], A, true)
Да. Это можно правда для v[10] и подобных знания в регулярных выражениях будут нужны а в этом мне уже понадобится помощь.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125169

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
Могу сделать так:
SSSwitch V[1] V[2] A On
SSSwitch Player V[2] A On
SSSwitch P V[2] A On
SSSwitch P P A ON ON
Ну и т.д т.п.

Устроит ли такой вариант?

Также скобки вместо круглых могут быть и квадратные и их вообще можно будет не ставить тоесть просто писать V1 или ID1 или просто 1 тогда автоматически будет считаться ИД
В случае если указывается по месту игрока то THIS или PLAYER или P
Последнюю команду можно и не указывать а если указана ON то остальные локальные переключатели будут отключены

Делюсь кодом реализации всего этого:
if (Utils.RPGMAKER_NAME === "MV") {
    AL7.pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        AL7.pluginCommand.call(this, command, args);
        getID = function (arg) {
            if (
                arg.toUpperCase() === "THIS" ||
                arg.toUpperCase() === "PLAYER" ||
                arg.toUpperCase() === "P"
            )
                return $gameMap.mapId();
            else {
                if (st.toUpperCase()[0] === "V")
                    return $gameVariables.value(
                        AL7.JSONParse(arg.match(/\d+/g))
                    );
                else return AL7.JSONParse(arg.match(/\d+/g));
            }
        };
        getBool = function (arg) {
            if (arg.toUpperCase() === "ON") return true;
            else if (arg.toUpperCase() === "OFF") return false;
            else return AL7.JSONParse(arg);
        };
        if (
            (command.toUpperCase() === "SETSELFSWITCH" ||
                command.toUpperCase() === "SSSWITCH") &&
            args.length >= 4
        ) {
            let mapID = getID(String(args[0]));
            let eventID = getID(String(args[1]));
            let selfSwitch = AL7.JSONParse(args[2]);
            let enabled = getBool(args[3]);
            $gameSelfSwitches.setValue([mapID, eventID, selfSwitch], enabled);
            if (args.length === 5) {
                let enabled2 = getBool(args[4]);
                if (enabled2 === true) {
                    let selfSwitches = ["A", "B", "C", "D"];
                    selfSwitches.forEach((x) => {
                        if (x != selfSwitch)
                            $gameSelfSwitches.setValue(
                                [mapID, eventID, x],
                                false
                            );
                    });
                }
            }
        } else if (
            (command.toUpperCase() === "SETARRAYSELFSWITCH" ||
                command.toUpperCase() === "SASSWITCH") &&
            args.length >= 5
        ) {
            let mapID = getID(String(args[0]));
            let eventID1 = getID(String(args[1]));
            let eventID2 = getID(String(args[2]));
            let selfSwitch = AL7.JSONParse(args[3]);
            let enabled = getBool(args[4]);
 
            if (eventID2 >= eventID1)
                for (let i = eventID1; i <= eventID2; i++) {
                    $gameSelfSwitches.setValue([mapID, i, selfSwitch], enabled);
                    if (args.length === 6) {
                        let enabled2 = getBool(args[5]);
                        if (enabled2 === true) {
                            let selfSwitches = ["A", "B", "C", "D"];
                            selfSwitches.forEach((x) => {
                                if (x != selfSwitch)
                                    $gameSelfSwitches.setValue(
                                        [mapID, i, x],
                                        false
                                    );
                            });
                        }
                    }
                }
            else if (eventID2 < eventID1)
                for (let i = eventID1; i > eventID2; i--) {
                    $gameSelfSwitches.setValue([mapID, i, selfSwitch], enabled);
                    if (args.length === 6) {
                        let enabled2 = getBool(args[5]);
                        if (enabled2 === true) {
                            let selfSwitches = ["A", "B", "C", "D"];
                            selfSwitches.forEach((x) => {
                                if (x != selfSwitch)
                                    $gameSelfSwitches.setValue(
                                        [mapID, i, x],
                                        false
                                    );
                            });
                        }
                    }
                }
        }
    };
} else \\... Реализация в MZ
Просьба не кидаться тапками ибо JS не шибко хорошо знаю.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 2 года 6 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125170

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • 3 место Готв1 место в ГотвОрганизатор конкурсовПобедитель конкурсаУчительКомпозиторОратор2 место
как обычно в теме алекса_7 ничего не понял.

яго подумал что спрашивается про вызов скрипта и логично предложил "SSwitch(this, v[10], A, true)". ты в ответ предложил "SSSwitch V[1] V[2] A On", которое вообще хз как вызывается и что это за формат такой. какое-то ненужное усложнение с незнакомым синтаксисом.

обычно как делается:

1) создается класс,который назван по имени разработчика,чтобы с другими не путался, и при этом короткий. например
_A7

2) фигачим туда статичные методы, которые названы коротко (в первую же очередь твой плагин служит для сокращения длинных сложнхы команд), поэтмоу всякие там "SSSwitch" пусть идут лесом
v() - переменные
s() - переключатели
sl() - локальные переключатели (свитч локал)
ge() - общие события(glogal event)
e() - событие 
p() - игрок (плеер)
и т.д.

3) для вызова пишем название класса и через тчоку метод,например
// чтобы получить значение переключателя то передаем один параметр
_A7.s(_A7.v(1))
// чтобы изменить значение переключателя то передаем два параметра
_A7.s(_A7.v(1), _A7.v(2))
// чтобы получить значение локального то передаем один параметр
_A7.sl(_A7.v(1), _A7.v(2))
// если изменить то вот (вместо "тру" быстрее 1 написать)
_A7.sw(_A7.v(1), _A7.v(2), 'a', 1)
// если на текущей карте то передаем ноль
_A7.sl(0, _A7.v(2), 'a', 1)
и т.д.
Последнее редактирование: 2 года 6 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125171

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
yuryol пишет:
как обычно в теме алекса_7 ничего не понял.

яго подумал что спрашивается про вызов скрипта и логично предложил "SSwitch(this, v[10], A, true)". ты в ответ предложил "SSSwitch V[1] V[2] A On", которое вообще хз как вызывается и что это за формат такой. какое-то ненужное усложнение с незнакомым синтаксисом.

обычно как делается:

1) создается класс,который назван по имени разработчика,чтобы с другими не путался, и при этом короткий. например
_A7

2) фигачим туда статичные методы, которые названы коротко (в первую же очередь твой плагин служит для сокращения длинных сложнхы команд), поэтмоу всякие там "SSSwitch" пусть идут лесом
v() - переменные
s() - переключатели
sl() - локальные переключатели (свитч локал)
ge() - общие события(glogal event)
e() - событие 
p() - игрок (плеер)
и т.д.

3) для вызова пишем название класса и через тчоку метод,например
// чтобы получить значение переключателя то передаем один параметр
_A7.s(v(1))
// чтобы изменить значение переключателя то передаем два параметра
_A7.s(v(1), v(2))
// чтобы получить значение локального то передаем один параметр
_A7.sl(v(1), v(2))
// если изменить то вот (вместо "тру" быстрее 1 написать)
_A7.sw(v(1), v(2), 'a', 1)
// если на текущей карте то передаем ноль
_A7.sl(0, v(2), 'a', 1)
и т.д.

Ну на счет создания скрипта особо и не думал, но если и сделаю, то по принципу работы MV команд плагинов.
Понимаешь. Речь не просто о сокращение оригинальной $gameSelfSwitches.setValue но и увеличении ее функционала путем добавления возможности без лишних вызова функций вставлять другие значения. Например, номер переменной или определения по месту нахождения игрока и т.д. т.п
Я не любитель делать кучу функций что в итоге их получается с десяток. Люблю одной функций, но различные аргументы в ней. А вообще мне проще через MZ'шные команды плагинов.
И повторюсь. Я не силен в JS и предпочитаю не работать с классами. Так что не думаю, что кому-то захочется разбираться в моих плагинах, но по большей части я это делаю для себя хотя конечно то, что написал в этой теме это не для себя так как я MV больше не использую. Разве что только для конкурсов, в которых свои плагины добавлять нельзя.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 2 года 6 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

Кодовые команды для управления локальными перекл.. 2 года 6 мес. назад #125172

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1185
  • Спасибо получено: 539
  • Проект месяца 2 местоПроект месяца 3 местоПроект месяца 1 местоПроект года 3 местоВетеранУчитель
Вот немного переработал код под скрипты.
AL7.selfSwitches = class {
    static getMapEventID(arg, isMapID = true) {
        var realARG = AL7.JSONParse(arg);
        var typeRealARG = typeof realARG;
        if (
            typeof arg == "object" &&
            (arg.constructor.name === "Game_Interpreter" ||
                arg.constructor.name === "Game_Event")
        ) {
            if (isMapID === true) return arg._mapId;
            else return arg._eventId;
        } else if (typeRealARG === "number") {
            return realARG;
        } else if (typeRealARG === "string") {
            realARG = realARG.toUpperCase();
            if (realARG === "PLAYER" || realARG === "P")
                if (isMapID === true) return $gameMap.mapId();
                else return $gameMap.eventIdXy($gamePlayer.x, $gamePlayer.y);
            else if (realARG[0] === "V")
                return $gameVariables.value(realARG.match(/\d+/g));
            else return realARG.match(/\d+/g);
        } else return undefined;
    }
    static getBool(arg) {
        var realARG = AL7.JSONParse(arg);
        var typeARG = typeof realARG;
        if (typeARG === "boolean") return realARG;
        else if (typeARG === "string") {
            realARG = realARG.toUpperCase();
            if (realARG === "ON") return true;
            else if (realARG === "TRUE") return true;
            else if (realARG === "OFF") return false;
            else if (realARG === "FALSE") return false;
            else return undefined;
        } else if (typeARG === "number") {
            if (realARG > 0) return true;
            else return false;
        }
        return undefined;
    }
    static SetSelfSwitch(mapID, eventID, ss, enabled, otherDisabled = false) {
        var _mapID = this.getMapEventID(mapID);
        var _eventID = this.getMapEventID(eventID, false);
        var _selfSwitch = AL7.JSONParse(ss).toUpperCase();
        var _enabled = this.getBool(enabled);
        var _otherDisabled = this.getBool(otherDisabled);
        if (
            typeof _mapID !== "number" ||
            _mapID <= 0 ||
            typeof _eventID !== "number" ||
            _eventID <= 0 ||
            typeof _selfSwitch != "string" ||
            typeof _otherDisabled !== "boolean"
        )
            return;
 
        $gameSelfSwitches.setValue([_mapID, _eventID, _selfSwitch], _enabled);
        if (_otherDisabled === true) {
            var selfSwitches = ["A", "B", "C", "D"];
            selfSwitches.forEach((x) => {
                if (x != _selfSwitch)
                    $gameSelfSwitches.setValue([_mapID, _eventID, x], false);
            });
        }
    }
    static SetArraySelfSwitch(
        mapID,
        eventIDStart,
        eventIDStop,
        ss,
        enabled,
        otherDisabled = false
    ) {
        var _eventIDStart = this.getMapEventID(eventIDStart, false);
        var _eventIDStop = this.getMapEventID(eventIDStop, false);
        if (
            _eventIDStart === undefined ||
            _eventIDStart <= 0 ||
            _eventIDStop === undefined ||
            _eventIDStop <= 0
        )
            return;
        if (_eventIDStart <= _eventIDStop)
            for (var i = _eventIDStart; i <= _eventIDStop; i++)
                this.SetSelfSwitch(mapID, i, ss, enabled, otherDisabled);
        else if (_eventIDStart > _eventIDStop)
            for (var i = _eventIDStart; i >= _eventIDStop; i--)
                this.SetSelfSwitch(mapID, i, ss, enabled, otherDisabled);
    }
};
 
//#region Команды плагинов
 
if (Utils.RPGMAKER_NAME === "MV") {
    AL7.pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        AL7.pluginCommand.call(this, command, args);
        if (
            command.toUpperCase() === "SETSELFSWITCH" ||
            command.toUpperCase() === "SSSWITCH"
        ) {
            if (args.length === 4)
                AL7.selfSwitches.SetSelfSwitch(
                    args[0],
                    args[1],
                    args[2],
                    args[3]
                );
            else if (args.length > 4)
                AL7.selfSwitches.SetSelfSwitch(
                    args[0],
                    args[1],
                    args[2],
                    args[3],
                    args[3]
                );
        } else if (
            command.toUpperCase() === "SETARRAYSELFSWITCH" ||
            command.toUpperCase() === "SASSWITCH"
        ) {
            if (args.length === 5)
                AL7.selfSwitches.SetArraySelfSwitch(
                    args[0],
                    args[1],
                    args[2],
                    args[3],
                    args[4]
                );
            else if (args.length > 5)
                AL7.selfSwitches.SetArraySelfSwitch(
                    args[0],
                    args[1],
                    args[2],
                    args[3],
                    args[4],
                    args[5]
                );
        }
    };
} else {
    PluginManager.registerCommand("AL7_Core", "setSelfSwitch", (args) => {
        var typeGetMap = AL7.JSONParse(args.getMapID).typeIDMap;
        var mapID = 0;
        if (typeGetMap === "playerMap") mapID = $gameMap.mapId();
        else if (typeGetMap === "varValue")
            mapID = $gameVariables.value(AL7.JSONParse(args.getMapID).varID);
        else if (typeGetMap === "idMap")
            mapID = AL7.JSONParse(args.getMapID).mapID;
 
        var typeGetEvent = AL7.JSONParse(args.getEventID).typeIDEvent;
        var eventID = 0;
        if (typeGetEvent === "playerEvent")
            eventID = $gameMap.eventIdXy($gamePlayer.x, $gamePlayer.y);
        else if (typeGetEvent === "varValue")
            eventID = $gameVariables.value(
                AL7.JSONParse(args.getEventID).varID
            );
        else if (typeGetEvent === "idEvent")
            eventID = AL7.JSONParse(args.getEventID).eventID;
 
        AL7.selfSwitches.SetSelfSwitch(
            mapID,
            eventID,
            AL7.JSONParse(args.selfSwitch),
            AL7.JSONParse(args.enabled),
            AL7.JSONParse(args.disableOtherSelfSwitches)
        );
    });
 
    PluginManager.registerCommand("AL7_Core", "setArraySelfSwitch", (args) => {
        var typeGetMap = AL7.JSONParse(args.getMapID).typeIDMap;
        var mapID = 0;
        if (typeGetMap === "playerMap") mapID = $gameMap.mapId();
        else if (typeGetMap === "varValue")
            mapID = $gameVariables.value(AL7.JSONParse(args.getMapID).varID);
        else if (typeGetMap === "idMap")
            mapID = AL7.JSONParse(args.getMapID).mapID;
 
        var typeGetEvent1 = AL7.JSONParse(args.getEventID1).typeIDEvent;
        var eventID1 = 0;
        if (typeGetEvent1 === "playerEvent")
            eventID1 = $gameMap.eventIdXy($gamePlayer.x, $gamePlayer.y);
        else if (typeGetEvent1 === "varValue")
            eventID1 = $gameVariables.value(
                AL7.JSONParse(args.getEventID1).varID
            );
        else if (typeGetEvent1 === "idEvent")
            eventID1 = AL7.JSONParse(args.getEventID1).eventID;
 
        var typeGetEvent2 = AL7.JSONParse(args.getEventID2).typeIDEvent;
        var eventID2 = 0;
        if (typeGetEvent2 === "playerEvent")
            eventID2 = $gameMap.eventIdXy($gamePlayer.x, $gamePlayer.y);
        else if (typeGetEvent2 === "varValue")
            eventID2 = $gameVariables.value(
                AL7.JSONParse(args.getEventID2).varID
            );
        else if (typeGetEvent2 === "idEvent")
            eventID2 = AL7.JSONParse(args.getEventID2).eventID;
 
        AL7.selfSwitches.SetArraySelfSwitch(
            mapID,
            eventID1,
            eventID2,
            AL7.JSONParse(args.selfSwitch),
            AL7.JSONParse(args.enabled),
            AL7.JSONParse(args.disableOtherSelfSwitches)
        );
    });
}
По идеи вызов будет так:
AL7.SetSelfSwitch(this, "V1", "A", true)
Конечно не только так. Куча вариантов вызова.

Эти скрипты в я использую в командах плагинах. Так что скрипты сразу учитывают введено скриптами или командами плагинов.

Обновил. Теперь вроде все верно и более надежно.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 2 года 6 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.466 секунд