OMORI_Android/www.eng/js/plugins/YEP_CallEvent.js
2024-01-15 18:44:53 +03:00

168 lines
5.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// Yanfly Engine Plugins - Call Event
// YEP_CallEvent.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_CallEvent = true;
var Yanfly = Yanfly || {};
Yanfly.CallEvent = Yanfly.CallEvent || {};
Yanfly.CallEvent.version = 1.01;
//=============================================================================
/*:
* @plugindesc v1.01 A lost utility command from RPG Maker 2000 and
* RPG Maker 2003 has been remade for RPG Maker MV!
* @author Yanfly Engine Plugins
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* This is a reproduced method from RPG Maker 2000 and RPG Maker 2003. It
* allows the game to call a pages events as if it were a common event. These
* events can be drawn from any event on any map within the game.
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* To call upon events from the current map or a different map, use the plugin
* commands found below:
*
* Plugin Commands:
*
* CallEvent x
* - This will call upon event x from the current map and use the event list
* from the first page of the event.
*
* CallEvent x, Page y
* - This will call upon event x from the current map and use the event list
* from page y of the event.
*
* CallEvent x, Map y
* - This will call upon event x from map y and use the event list from the
* first page of the event.
*
* CallEvent x, Page y, Map z
* - This will call upon event x from map z and use the event list from
* page y of the event.
*
* CallEvent x, Map y, Page z
* - This will call upon event x from map y and use the event list from
* page z of the event.
*
* *Note1: Because of the programming structure of RPG Maker MV's source, the
* called event data may or may not be instantaneous depending on the size of
* the map file that is needed to be loaded. At best, it will take a couple of
* frames of loading time depending on the size.
*
* *Note2: If any of the events, pages, and/or maps do not exist, then no
* events will be called and the plugin will skip forward as if nothing has
* happened. Be cautious about how you call these call events.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.01:
* - Updated for RPG Maker MV version 1.5.0.
*
* Version 1.00:
* - Finished Plugin!
*/
//=============================================================================
//=============================================================================
// DataManager
//=============================================================================
var $callEventMap;
DataManager.loadCallMapData = function(mapId) {
if (mapId > 0) {
var filename = 'Map%1.json'.format(mapId.padZero(3));
this.loadDataFile('$callEventMap', filename);
} else {
$callEventMap = {};
$callEventMap.data = [];
$callEventMap.events = [];
$callEventMap.width = 100;
$callEventMap.height = 100;
$callEventMap.scrollType = 3;
}
};
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.CallEvent.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
Yanfly.CallEvent.Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'CallEvent') this.callEvent(this.argsToString(args));
};
Game_Interpreter.prototype.argsToString = function(args) {
var str = '';
var length = args.length;
for (var i = 0; i < length; ++i) {
str += args[i] + ' ';
}
return str.trim();
};
Game_Interpreter.prototype.callEvent = function(line) {
if (this._callEvent_Running) return this.processCallEvent();
if (line.match(/(\d+),[ ](.*)/i)) {
var eventId = parseInt(RegExp.$1);
var line = String(RegExp.$2);
if (line.match(/PAGE[ ](\d+)/i)) {
var pageId = parseInt(RegExp.$1);
} else {
var pageId = 1;
}
if (line.match(/MAP[ ](\d+)/i)) {
var mapId = parseInt(RegExp.$1);
} else {
var mapId = $gameMap.mapId();
}
} else {
var eventId = parseInt(line);
if (!eventId) return;
var pageId = 1;
var mapId = $gameMap.mapId();
}
$callEventMap = undefined;
DataManager.loadCallMapData(mapId);
this._callEvent_EventId = eventId;
this._callEvent_PageId = pageId;
this._callEvent_Running = true;
this.processCallEvent();
};
Game_Interpreter.prototype.processCallEvent = function() {
if ($callEventMap) {
this.insertCallEventData(this._callEvent_EventId, this._callEvent_PageId);
} else {
this.wait(1);
this._index--;
}
};
Game_Interpreter.prototype.insertCallEventData = function(eventId, pageId) {
this._callEvent_Running = false;
var ev = $callEventMap.events[eventId];
if (!ev) return;
var page = ev.pages[pageId - 1];
if (!page) return;
var list = page.list;
this.setupChild(list, this.eventId());
};
//=============================================================================
// End of File
//=============================================================================