ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker MVУлучшающие или добавляющие новое плагины[MV, MZ] GRB_ Region Event Triggers (соб.для рег.)
Войти на сайт
×
ТЕМА: [MV, MZ] GRB_ Region Event Triggers (соб.для рег.)
[MV, MZ] GRB_ Region Event Triggers (соб.для рег.) 6 года 2 мес. назад #105876
|
Плагин GRB_RegionEventTriggers для RPG Maker MV и MZ позволяет создать события, которые активируются при шагах в каких-то регионах.
Плагин можно скачать здесь: GRB_RegionEventTriggers.js Полный код плагина [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] Внимание! Если вы копируете плагин отсюда, убедитесь, что в текстовом редакторе выбрана кодировка «UTF-8 без BOM». (Блокнот стал её поддерживать только с обновления Windows 10 Build 1903 (19H1). UTF-8 из большинства версий Блокнота не будет работать, т.к. она с BOM!) Если вы скопируете в других кодировках, возможны проблемы с кириллицей (если в ANSI-кодировке), а то и вообще плагин не запустится (если в кодировках UTF-8 с BOM, UTF-16/двухбайтовый Юникод и т.д.). Рекомендуемый способ скачивания плагина: щёлкните по ссылке GRB_RegionEventTriggers.js правой кнопкой мыши и выберите «Сохранить по ссылке как...» (или похожий вариант, зависит от перевода браузера). Код ниже — для быстрого ознакомления и на случай, если ссылки перестанут работать. //===========================
// GRB_RegionEventTriggers.js
//===========================
/*:
* @target MV MZ
* @plugindesc Allows to make events triggered by entering/leaving regions
* @author Garbata team https://garbata.net/
* @url https://rpgukr.one/GRB_RegionEventTriggers
*
* @help To make an event that is triggered when the player enters regions, add
* a plugin command
* trigger: region 1 entered
* trigger: regions 1, 2 entered
* in the beginning of the event page contents.
* (Replace 1 or 1, 2 with region(s) you need. You can use as much regions as
* you need. The event will be triggered when entering ANY of them. It won’t be
* triggered when moving from one of the comma-separated region to another)
*
* To make an event that is triggered when player leaves the region, use the
* following plugin command:
* trigger: region 1 left
* trigger: regions 1, 2 left
*
* To make an event that is triggered when player takes a step on a region, use
* the following plugin command:
* trigger: step in region 1
* trigger: step in regions 1, 2
*
* The region triggers REPLACE the normal triggers (so events won’t be triggered
* by, e.g., pressing a key on them).
*
* This plugin is distributed according to the terms of the MIT license.
* Basically, it means that you can freely use this plugin it in both commercial
* and non-commercial projects, as long as you keep the license notice in the
* source code and don’t sue us for this plugin not working.
*
* If the code of your project can be opened by end users, then crediting
* Garbata team is appreciated but not required: we’re credited in the code so
* this is enough. But if you use some obfuscation technique that makes the code
* unreadable, you must credit us somewhere where people can actually read the
* attribution.
*
* @command regionEntered
* @text Trigger: Region(s) entered
* @desc Makes the event (on map) activate when the player enters any
* of the regions. The standard trigger is ignored.
*
* @arg regions
* @text Regions
* @type number[]
* @min 1
* @max 255
* @desc IDs of the regions. When the player enters any of
* the regions, the event will be triggered.
*
* @command regionLeft
* @text Trigger: Region(s) left
* @desc Makes the event (on map) activate when the leaves enters any
* of the regions. The standard trigger is ignored.
*
* @arg regions
* @text Regions
* @type number[]
* @min 1
* @max 255
* @desc IDs of the regions. When the player leaves all of
* the regions, the event will be triggered.
*
* @command regionStep
* @text Trigger: Step in region(s)
* @desc Makes the event (on map) activate when the player takes
* a step in any of the regions. The standard trigger is ignored.
*
* @arg regions
* @text Regions
* @type number[]
* @min 1
* @max 255
* @desc IDs of the regions. When the player takes a step in
* any of the regions, the event will be triggered.
*/
/*:ru
* @target MV MZ
* @plugindesc Позволяет создать событие, активирующееся по шагам в регионе
* @author Команда Гарбата http://garbata.net/
* @url https://rpgukr.one/GRB_RegionEventTriggers
*
* @help Чтобы создать событие, которое активируется при входе в регион,
* добавьте такую команду плагина:
* триггер: вход в регион 1
* триггер: вход в регионы 1, 2
* в начале содержимого страницы события.
* (Замените 1 или 1, 2 на регион(ы), которые вам нужны. Можно перечислить
* сколько угодно регионов через запятую. Событие будет вызываться при входе в
* ЛЮБОЙ из них. Событие не будет вызываться при переходе из одного в другой,
* если оба перечислены через запятую.)
*
* Чтобы создать событие, которое активируется, когда игрок уходит из региона,
* используйте такую команду события:
* триггер: выход из региона 1
* триггер: выход из регионов 1, 2
*
* Чтобы создать событие, которое активируется, когда игрок делает один шаг
* внутри региона, используйте такую команду плагина:
* триггер: шаг в регионе 1
* триггер: шаг в регионах 1, 2
*
* Региональные триггеры ЗАМЕНЯЮТ обычные триггеры (поэтому события нельзя будет
* активировать, например, нажав клавишу).
*
* Этот плагин распространяется по лицензии MIT. Вкратце, это значит, что плагин
* можно свободно использовать и в коммерческих и некоммерческих проектах, если
* вы сохраняете информациию о лицензии в коде и не будете подавать на нас
* в суд, если плагин не будет работать.
*
* Если код вашего проекта можно прочитать, то указывать нас в титрах
* не обязательно, достаточно того, что мы упомянуты в коде плагина (хотя мы
* будем рады, если упомянёте нас где-то ещё). Но если вы используете какой-то
* механизм обфускации, из-за которого код нельзя прочитать, то информацию
* об авторстве плагина нужно указать где-то, где её можно будет прочитать.
*
* @command regionEntered
* @text Триггер: Вход в регион(ы)
* @desc Делает, чтобы событие (на карте) активировалось, когда игрок
* входит заданные регионы. Отменяет стандартный триггер.
*
* @arg regions
* @text Регионы
* @type number[]
* @min 1
* @max 255
* @desc Номера регионов. Когда игрок войдёт в любой из них,
* событие активируется.
*
* @command regionLeft
* @text Триггер: Выход из регионов
* @desc Делает, чтобы событие (на карте) активировалось, когда игрок
* выходит из заданных регионов. Отменяет стандартный триггер.
*
* @arg regions
* @text Регионы
* @type number[]
* @min 1
* @max 255
* @desc Номера регионов. Когда игрок выйдет из их всех,
* событие активируется.
*
* @command regionStep
* @text Триггер: Шаг в регионе/-ах
* @desc Делает, чтобы событие (на карте) активировалось, когда игрок
* шагает в заданных регионах. Отменяет стандартный триггер.
*
* @arg regions
* @text Регионы
* @type number[]
* @min 1
* @max 255
* @desc Номера регионов. Когда игрок сделает шаг в любом из них,
* событие активируется.
*/
/*:uk
* @target MV MZ
* @plugindesc Дозволяє створити подію, яка активується від кроків в регіоні
* @author Команда Гарбата http://garbata.net/
* @url https://рпг.укр/GRB_RegionEventTriggers
*
* @help Щоб створити подію, яка активується, коли гравець заходить в регіон,
* додайте таку команду плагіна:
* тригер: вхід в регіон 1
* тригер: вхід в регіони 1, 2
* у початок змісту події.
* (Замініть 1 чи 1, 2 на регіон(и), які вам потрібні. Можна перелічити скільки
* завгодно регіонів через кому. Подія викликатиметься, колі гравець заходить
* на БУДЬ-ЯКИЙ з них. Подія не викликатиметься, коли перелічено декільки
* регіонів і гравець переходить з одного на інший з них.)
*
* Щоб створити подію, яка активується, коли гравець виходить з регіону,
* використовуйте таку команду плагіна:
* тригер: вихід з регіону 1
* тригер: вихід з регіонів 1, 2
*
* Щоб створити подію, яка активується, коли гравець робить один крок регіоном,
* використовуйте таку команду плагіна:
* тригер: крок у регіоні 1
* тригер: крок у регіонах 1, 2
*
* Регіональні тригери ЗАМІНЯЮТЬ звичайні тригери (тому події не можна буде
* активувати, наприклад, натиснувши клавішу).
*
* Цей плагін вільно розповсюджується за ліцензією MIT. Коротко кажучи, це
* значить, що плагін можна вільно використовувати в комерційних та
* некомерційних проектах, якщо ви залишите інформацію про ліцензію в коді
* та не будете подавати на нас в суд, якщо плагін не працюватиме.
*
* Якщо код вашого проекта можна прочитати, то вказувати нас в титрах
* не обовʼязково, достатньо того, що нас згадано в коді плагіна (але ми будемо
* раді, якщо ви згадаєте нас десь ще). Але якщо ви використовуєте якийсь
* механізм обфускації, через який код неможливо прочитати, то інформацію
* про авторство використаного плагіна треба вказати десь, де її можна буде
* прочитати.
*
* @command regionEntered
* @text Тригер: Вхід в регіон(и)
* @desc Робить, щоб подія (на карті) активувалася, коли гравець
* заходить у вказані регіони. Відміняє стандартний тригер.
*
* @arg regions
* @text Регіони
* @type number[]
* @min 1
* @max 255
* @desc Номери регіонів. Коли гравець зайде в будь-який з них,
* подія активується.
*
* @command regionLeft
* @text Тригер: Вихід з регіонів
* @desc Робить, щоб подія (на карті) активувалася, коли гравець
* виходить із указаних регіонів. Відміняє стандартний тригер.
*
* @arg regions
* @text Регіони
* @type number[]
* @min 1
* @max 255
* @desc Номери регіонів. Коли гравець вийде на регіон
* не зі списку, подія активується.
*
* @command regionStep
* @text Тригер: Крок у регіоні/-ах
* @desc Робить, щоб подія (на карті) активувалася, коли гравець
* крочить у вказаних регіонах. Відміняє стандартний тригер.
*
* @arg regions
* @text Регіони
* @type number[]
* @min 1
* @max 255
* @desc Номери регіонів. Коли гравець зробить крок у будь-якому
* з них, подія активується.
*/
/*:be
* @target MV MZ
* @plugindesc Дазваляе стварыць падзею, якая актывуецца ад крокаў у рэгіёне
* @author Каманда Гарбата http://garbata.net/
* @url https://рпг.укр/GRB_RegionEventTriggers
*
* @help Щоб створити подію, яка активується, коли гравець заходить в регіон,
* додайте таку команду плагіна:
* трыгер: уваход у рэгіён 1
* трыгер: уваход у рэгіёны 1, 2
* у пачатак зместу падзеі.
* (Замяніце 1 ці 1, 2 на рэгіён(ы), якія вас патрэбныя. Можна пералічыць колькі
* хочаце рэгіёнаў праз коску. Падзея будзе выклікацца, калі гулец заходзіць на
* ЛЮБЫ з іх. Падзея не будзе выклікацца, калі гулец пераходзіць з аднаго
* з пералічаных рэгіёнаў на іншы з іх.)
*
* Каб стварыць падзею, якая актывуецца, калі гулец выходзіць з рэгіёна,
* выкарыстоўвайце такую каманду плагіна:
* трыгер: выхад з рэгіёну 1
* трыгер: выхад з рэгіёнаў 1, 2
*
* Каб стварыць падзею, якая актывуецца, калі гулец робіць адзін крок
* па рэгіёне, выкарыстоўвайце такую каманду плагіна:
* трыгер: крок у рэгіёнё 1
* трыгер: крок у рэгіёнах 1, 2
*
* Рэгіянальныя трыгеры ЗАМЯНЯЮЦЬ звычайныя трыгеры (таму падзеі нельга будзе
* актываваць, напрыклад, нацснуўшы клавішу).
*
* Гэты плагін вольна распаўсюджваецца па ліцэнзіі MIT. Карацей кажучы, гэта
* значыць, што плагін можна свабодна выкарыстоўваць у камерцыйных і
* некамерцыйных праектах, калі вы пакінеце інфармацыю пра ліцэнзію ў кодзе
* і не будзеце падаваць на нас у суд, калі плагін не будзе працаваць.
*
* Калі код вашага праекта можна прачытаць, то называць нас у тытрах
* не абавязкова; дастаткова таго, што мы згаданыя ў кодзе плагіна (але мы
* будзем радыя, калі вы згадаеце нас недзе яшчэ). Але калі вы выкарыстоўваеце
* нейкі механізм абфускацыі, праз які код немагчыма прачытаць, то інфармацыю
* пра аўтарства выкарыстанага плагіна трэба напісаць недзе, дзе яе можна будзе
* прачытаць.
*
* @command regionEntered
* @text Трыгер: Уваход у рэгіён(ы)
* @desc Робіць, каб падзея (на карце) актывавалася, калі гулец
* заходзіць ва ўказаныя рэгіёны. Адмяняе стандартны трыгер.
*
* @arg regions
* @text Рэгіёны
* @type number[]
* @min 1
* @max 255
* @desc Нумары рэгіёнаў. Калі гулец зойдзе у любы з іх, падзея
* актывуецца.
*
* @command regionLeft
* @text Трыгер: Выхад з рэгіёнаў
* @desc Робіць, каб падзея (на карце) актывавалася, калі гулец
* выходзіць з указаных рэгіёнаў. Адмяняе стандартны трыгер.
*
* @arg regions
* @text Рэгіёны
* @type number[]
* @min 1
* @max 255
* @desc Нумары рэгіёнаў. Калі гулец выйдзе з іх на рэгіён
* не са спісу, падзея актывуецца.
*
* @command regionStep
* @text Трыгер: Крок у рэгіёнах
* @desc Робіць, каб падзея (на карце) актывавалася, калі гулец
* робіць крок ва ўказаных рэгіёнах. Адмяняе стандартны трыгер.
*
* @arg regions
* @text Рэгіёны
* @type number[]
* @min 1
* @max 255
* @desc Нумары рэгіёнаў. Калі гулец зробіць крок у любым з іх,
* падзея актывуецца.
*/
/*
* Copyright (c) 2018-2020 Garbata team http://garbata.net/
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
(function () {
/**
* Receives a command like ‘trigger: regions 1, 2 left’
*
* Returns plugin command string. Returns a trigger subtype ('regionEntered',
* 'regionLeft', 'regionStep') or null, if this is not a valid string.
*
* @param {String} s Plugin command string
* @return {String|null} Either one of the predefined type strings
* ('regionEntered', 'regionLeft', 'regionStep') or null
*/
function getTriggerSubtypeMv(s) {
var triggerCommandRe = /^\s*(?:trigger|триггер|трыгер|тригер|активатор|актыватар|активатор)\s*:\s*(.*?)\s*$/i;
var triggerCommandMatch = s.match(triggerCommandRe);
if (!triggerCommandMatch) {
return null;
}
var command = triggerCommandMatch[1].trim();
if (command.match(/regions? .* entered|вход в регион(ы)? .*|уваход у рэгіён(ы)? .*|вхід в регіон(и)?/i)) {
return 'regionEntered';
}
else if (command.match(/regions? .* left|выход из регион(а|ов) .*|выхад з рэгіён(а|у|аў) .*|вихід з регіон(а|у|ів)/i)) {
return 'regionLeft';
}
else if (command.match(/step in regions? .*|шаг в регион(е|ах) .*|крок у рэгіён(е|ах) .*|крок (у|в) регіон(і|ах)/i)) {
return 'regionStep';
}
return null;
}
/**
* Receives a command like ‘trigger: regions 1, 2 left’, and returns the
* array of region IDs (like [1, 2]) as numbers
*
* @param {String} s Plugin command string
* @return {Array|null} Array of region IDs, or null if there are no region
* IDs
*/
function getTriggerRegionIdsMv(s) {
var numbersRe = /([0-9][0-9 ,]*)/;
var numbersMatches = s.match(numbersRe);
if (!numbersMatches) {
return null;
}
var numbers = numbersMatches[1].split(',').map(function (x) {
return parseInt(x.trim());
}).filter(function (x) {
return !isNaN(x)
});
if (numbers.length > 0) {
return numbers;
}
else {
return null;
}
}
/**
* Postprocesses the map, changing triggers for the event pages if they have
* the ‘Plugin Commands’ event command with the relevant code.
*/
function postprocessEventTriggers() {
var hasRegionStepEvents = false;
if ($dataMap.events && $dataMap.events.length) {
for (var evIndex = 1; evIndex < $dataMap.events.length; evIndex++) {
var event = $dataMap.events[evIndex];
var isRegionTriggerable = false;
event.pages.forEach(function (page) {
page.list.forEach(function (cmd) {
var triggerSubtype, regionIds;
if (cmd.code === 356 && cmd.parameters.length >= 1) { //MV
triggerSubtype = getTriggerSubtypeMv(cmd.parameters[0]);
if (triggerSubtype !== null) {
regionIds = getTriggerRegionIdsMv(cmd.parameters[0]);
}
} else if (cmd.code === 357 && cmd.parameters.length >= 3
&& cmd.parameters[0] == 'GRB_RegionEventTriggers') { //MZ
triggerSubtype = cmd.parameters[1];
regionIds = JSON.parse(cmd.parameters[3].regions)
.map((x) => parseInt(x))
.filter((x) => !isNaN(x));
if (!regionIds.length) {
regionIds = null;
}
}
if (triggerSubtype && regionIds) {
page.trigger = triggerSubtype;
page.triggerRegionIds = regionIds;
if (triggerSubtype === 'regionStep') {
hasRegionStepEvents = true;
}
}
});
});
}
}
$dataMap.hasRegionStepEvents = hasRegionStepEvents;
}
/**
* Triggers region events on the current map.
*
* @param {Number} newRegion The region ID of the tile the character enters.
* @param {Number} oldRegion The region ID of the tile the character leaves.
*/
function triggerRegionEvents(newRegion, oldRegion) {
if (oldRegion == newRegion && !$dataMap.hasRegionStepEvents) {
return;
}
var regionEvents = $gameMap.events().filter(function(event) {
return event && event.page().triggerRegionIds;
});
if (newRegion != oldRegion) {
startRegionLeftEvents(regionEvents, newRegion, oldRegion);
startRegionEnteredEvents(regionEvents, newRegion, oldRegion);
}
if ($dataMap.hasRegionStepEvents) {
startRegionStepEvents(regionEvents, newRegion);
}
}
/**
* Start events that are triggered when a region is leaved.
*
* @param {Array} Array of events (preferable filtered to be region events)
* @param {Number} newRegion The region ID of the tile the character enters.
* @param {Number} oldRegion The region ID of the tile the character leaves.
*/
function startRegionLeftEvents(events, newRegion, oldRegion) {
events.filter(function (event) {
var page = event.page();
return page.trigger === 'regionLeft'
&& page.triggerRegionIds.indexOf(newRegion) === -1
&& page.triggerRegionIds.indexOf(oldRegion) >= 0;
return isLeaving;
}).forEach(function (event) {
event.start();
});
}
/**
* Start events that are triggered when a region is entered.
*
* @param {Array} Array of events (preferable filtered to be region events)
* @param {Number} newRegion The region ID of the tile the character enters.
* @param {Number} oldRegion The region ID of the tile the character leaves.
*/
function startRegionEnteredEvents(events, newRegion, oldRegion) {
events.filter(function (event) {
var page = event.page();
return page.trigger === 'regionEntered'
&& page.triggerRegionIds.indexOf(newRegion) >= 0
&& page.triggerRegionIds.indexOf(oldRegion) === -1;
}).forEach(function (event) {
event.start();
});
}
/**
* Start events that are triggered when a a player makes a step on the region.
*
* @param {Array} Array of events (preferable filtered to be region events)
* @param {Number} region The region ID of the tile the character takes a step
*/
function startRegionStepEvents(events, region) {
events.filter(function (event) {
var page = event.page();
return page.trigger === 'regionStep'
&& page.triggerRegionIds.indexOf(region) != -1;
}).forEach(function (event) {
event.start();
});
}
var Scene_Map_onMapLoaded = Scene_Map.prototype.onMapLoaded;
Scene_Map.prototype.onMapLoaded = function () {
postprocessEventTriggers();
Scene_Map_onMapLoaded.call(this);
};
var Scene_Map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function () {
Scene_Map_start.call(this);
};
var Game_Map_initialize = Game_Map.prototype.initialize;
Game_Map.prototype.initialize = function () {
Game_Map_initialize.call(this);
this._garbataSavedRegionId = 0;
}
var Game_Player_startMapEvent = Game_Player.prototype.startMapEvent;
Game_Player.prototype.startMapEvent = function(x, y, triggers, normal) {
if (!normal) {
var newRegionId = $gameMap.regionId(x, y);
triggerRegionEvents(newRegionId, $gameMap._garbataSavedRegionId);
$gameMap._garbataSavedRegionId = newRegionId;
}
Game_Player_startMapEvent.call(this, x, y, triggers, normal);
};
})(); Так как редактор не позволяет добавлять новые триггеры, для их указания используется команда «Команда плагина» (третья страница, в самом конце списка). Просто разместите команду, начинающуюся «триггер:», в начале команд события, и она будет использоваться вместо стандартного триггера. Вот иллюстрация: Итак, можно добавить такие триггеры:
Доступны также версии команд на других языках:
Пробелы в кодах важны: между словами должен быть один пробел, или не сработает. Я сделал небольшой пример использования плагина в MV: RegionTriggers.zip (5,5 Мб) (запустить пример онлайн) Плагин доступен по лицензии MIT: им можно пользоваться и в коммерческих, и некоммерческих проектах, но нельзя говорить, что сами его написали. Идею плагина подсказала Alisa в чате — спасибо ей! |
Последнее редактирование: 3 года 7 мес. назад от Dmy. Причина: поменял предупреждение про Блокнот, т.к. новые версии Блокнота поддерживают нужную кодировку
Администратор запретил публиковать записи гостям.
|
[MV, MZ] GRB_ Region Event Triggers (соб.для рег.) 4 года 2 мес. назад #119032
|
|
Администратор запретил публиковать записи гостям.
|
Модераторы: NeKotZima
Время создания страницы: 0.471 секунд