168 lines
5.6 KiB
JavaScript
168 lines
5.6 KiB
JavaScript
//=============================================================================
|
||
// 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 page’s 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
|
||
//=============================================================================
|