333 lines
13 KiB
JavaScript
333 lines
13 KiB
JavaScript
var Imported = Imported || {};
|
|
Imported.YEP_RegionRestrictions = true;
|
|
var Yanfly = Yanfly || {};
|
|
Yanfly.RR = Yanfly.RR || {};
|
|
Yanfly.RR.version = 1.04
|
|
/*:
|
|
* @plugindesc
|
|
* being able to venture into those spots.
|
|
* @author Yanfly Engine Plugins
|
|
*
|
|
* @param Player Restrict
|
|
* @desc This region ID will restrict the player from entering.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @param Event Restrict
|
|
* @desc This region ID will restrict all events from entering.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @param All Restrict
|
|
* @desc This region ID will restrict players and events.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @param Player Allow
|
|
* @desc This region ID will always allow player passability.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @param Event Allow
|
|
* @desc This region ID will always allow events passability.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @param All Allow
|
|
* @desc This region ID will always allow both passability.
|
|
* To use multiple regions, separate them by spaces.
|
|
* @default 0
|
|
*
|
|
* @help
|
|
*/
|
|
/*:ja
|
|
* @plugindesc
|
|
* @author Yanfly Engine Plugins
|
|
*
|
|
* @param Player Restrict
|
|
* @desc ここで指定したリージョンIDは、プレイヤーの進入を制限します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @param Event Restrict
|
|
* @desc ここで指定したリージョンIDは、全てのイベントの進入を制限します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @param All Restrict
|
|
* @desc ここで指定したリージョンIDは、プレイヤーとイベント両方の進入を制限します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @param Player Allow
|
|
* @desc ここで指定したリージョンIDは、プレイヤーの進入を許可します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @param Event Allow
|
|
* @desc ここで指定したリージョンIDは、常にイベントの進入を許可します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @param All Allow
|
|
* @desc ここで指定したリージョンIDは、常にプレイヤーとイベント両方の進入を許可します。不要な場合は0を入力
|
|
* @default 0
|
|
*
|
|
* @help
|
|
*/
|
|
Yanfly.Param = Yanfly.Param || {};
|
|
Yanfly.SetupParameters = function() {
|
|
var parameters = PluginManager.parameters('JsScript54Set');
|
|
Yanfly.Param.RRAllAllow = String(parameters['All Allow']);
|
|
Yanfly.Param.RRAllAllow = Yanfly.Param.RRAllAllow.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RRAllAllow.length; ++i) {
|
|
Yanfly.Param.RRAllAllow[i] = Number(Yanfly.Param.RRAllAllow[i]);
|
|
}
|
|
Yanfly.Param.RRAllRestrict = String(parameters['All Restrict']);
|
|
Yanfly.Param.RRAllRestrict = Yanfly.Param.RRAllRestrict.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RRAllRestrict.length; ++i) {
|
|
Yanfly.Param.RRAllRestrict[i] = Number(Yanfly.Param.RRAllRestrict[i]);
|
|
}
|
|
Yanfly.Param.RREventAllow = String(parameters['Event Allow']);
|
|
Yanfly.Param.RREventAllow = Yanfly.Param.RREventAllow.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RREventAllow.length; ++i) {
|
|
Yanfly.Param.RREventAllow[i] = Number(Yanfly.Param.RREventAllow[i]);
|
|
}
|
|
Yanfly.Param.RREventRestrict = String(parameters['Event Restrict']);
|
|
Yanfly.Param.RREventRestrict = Yanfly.Param.RREventRestrict.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RREventRestrict.length; ++i) {
|
|
Yanfly.Param.RREventRestrict[i] = Number(Yanfly.Param.RREventRestrict[i]);
|
|
}
|
|
Yanfly.Param.RRPlayerAllow = String(parameters['Player Allow']);
|
|
Yanfly.Param.RRPlayerAllow = Yanfly.Param.RRPlayerAllow.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RRPlayerAllow.length; ++i) {
|
|
Yanfly.Param.RRPlayerAllow[i] = Number(Yanfly.Param.RRPlayerAllow[i]);
|
|
}
|
|
Yanfly.Param.RRPlayerRestrict = String(parameters['Player Restrict']);
|
|
Yanfly.Param.RRPlayerRestrict = Yanfly.Param.RRPlayerRestrict.split(' ');
|
|
for (var i = 0; i < Yanfly.Param.RRPlayerRestrict.length; ++i) {
|
|
Yanfly.Param.RRPlayerRestrict[i] = Number(Yanfly.Param.RRPlayerRestrict[i]);
|
|
}
|
|
};
|
|
Yanfly.SetupParameters();
|
|
DataManager.processRRNotetags = function() {
|
|
if (!$dataMap) return;
|
|
$dataMap.restrictPlayerRegions = Yanfly.Param.RRAllRestrict.concat(
|
|
Yanfly.Param.RRPlayerRestrict);
|
|
$dataMap.restrictEventRegions = Yanfly.Param.RRAllRestrict.concat(
|
|
Yanfly.Param.RREventRestrict);
|
|
$dataMap.allowPlayerRegions = Yanfly.Param.RRAllAllow.concat(
|
|
Yanfly.Param.RRPlayerAllow);
|
|
$dataMap.allowEventRegions = Yanfly.Param.RRAllAllow.concat(
|
|
Yanfly.Param.RREventAllow);
|
|
if (!$dataMap.note) return;
|
|
var note1a = /<(?:PLAYER RESTRICT REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note1b = /<(?:PLAYER RESTRICT REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var note2a = /<(?:EVENT RESTRICT REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note2b = /<(?:EVENT RESTRICT REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var note3a = /<(?:ALL RESTRICT REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note3b = /<(?:ALL RESTRICT REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var note4a = /<(?:PLAYER ALLOW REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note4b = /<(?:PLAYER ALLOW REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var note5a = /<(?:EVENT ALLOW REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note5b = /<(?:EVENT ALLOW REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var note6a = /<(?:ALL ALLOW REGION):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
|
|
var note6b = /<(?:ALL ALLOW REGION):[ ](\d+)[ ](?:TO)[ ](\d+)>/i;
|
|
var notedata = $dataMap.note.split(/[\r\n]+/);
|
|
for (var i = 0; i < notedata.length; i++) {
|
|
var line = notedata[i];
|
|
if (line.match(note1a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.restrictPlayerRegions =
|
|
$dataMap.restrictPlayerRegions.concat(array);
|
|
} else if (line.match(note1b)) {
|
|
var mainArray = $dataMap.restrictPlayerRegions;
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.restrictPlayerRegions =
|
|
$dataMap.restrictPlayerRegions.concat(range);
|
|
} else if (line.match(note2a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.restrictEventRegions =
|
|
$dataMap.restrictEventRegions.concat(array);
|
|
} else if (line.match(note2b)) {
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.restrictEventRegions =
|
|
$dataMap.restrictEventRegions.concat(range);
|
|
} else if (line.match(note3a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.restrictPlayerRegions =
|
|
$dataMap.restrictPlayerRegions.concat(array);
|
|
$dataMap.restrictEventRegions =
|
|
$dataMap.restrictEventRegions.concat(array);
|
|
} else if (line.match(note3b)) {
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.restrictPlayerRegions =
|
|
$dataMap.restrictPlayerRegions.concat(array);
|
|
$dataMap.restrictEventRegions =
|
|
$dataMap.restrictEventRegions.concat(array);
|
|
} else if (line.match(note4a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.allowPlayerRegions =
|
|
$dataMap.allowPlayerRegions.concat(array);
|
|
} else if (line.match(note4b)) {
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.allowPlayerRegions =$dataMap.allowPlayerRegions.concat(range);
|
|
} else if (line.match(note5a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.allowEventRegions = $dataMap.allowEventRegions.concat(array);
|
|
} else if (line.match(note5b)) {
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.allowEventRegions = $dataMap.allowEventRegions.concat(range);
|
|
} else if (line.match(note6a)) {
|
|
array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
|
|
$dataMap.allowPlayerRegions = $dataMap.allowPlayerRegions.concat(array);
|
|
$dataMap.allowEventRegions = $dataMap.allowEventRegions.concat(array);
|
|
} else if (line.match(note6b)) {
|
|
var range = Yanfly.Util.getRange(Number(RegExp.$1),
|
|
Number(RegExp.$2));
|
|
$dataMap.allowPlayerRegions = $dataMap.allowPlayerRegions.concat(array);
|
|
$dataMap.allowEventRegions = $dataMap.allowEventRegions.concat(array);
|
|
}
|
|
}
|
|
};
|
|
Yanfly.RR.Game_Map_setup = Game_Map.prototype.setup;
|
|
Game_Map.prototype.setup = function(mapId) {
|
|
Yanfly.RR.Game_Map_setup.call(this, mapId);
|
|
if ($dataMap) DataManager.processRRNotetags();
|
|
};
|
|
Game_Map.prototype.restrictEventRegions = function() {
|
|
if ($dataMap.restrictEventRegions === undefined) {
|
|
DataManager.processRRNotetags();
|
|
}
|
|
return $dataMap.restrictEventRegions || [];
|
|
};
|
|
Game_Map.prototype.restrictPlayerRegions = function() {
|
|
if ($dataMap.restrictPlayerRegions === undefined) {
|
|
DataManager.processRRNotetags();
|
|
}
|
|
return $dataMap.restrictPlayerRegions || [];
|
|
};
|
|
Game_Map.prototype.allowEventRegions = function() {
|
|
if ($dataMap.allowEventRegions === undefined) {
|
|
DataManager.processRRNotetags();
|
|
}
|
|
return $dataMap.allowEventRegions || [];
|
|
};
|
|
Game_Map.prototype.allowPlayerRegions = function() {
|
|
if ($dataMap.allowPlayerRegions === undefined) {
|
|
DataManager.processRRNotetags();
|
|
}
|
|
return $dataMap.allowPlayerRegions || [];
|
|
};
|
|
Yanfly.RR.Game_CharacterBase_isMapPassable =
|
|
Game_CharacterBase.prototype.isMapPassable;
|
|
Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
|
|
if (this.isEventRegionForbid(x, y, d)) return false;
|
|
if (this.isPlayerRegionForbid(x, y, d)) return false;
|
|
if (this.isEventRegionAllow(x, y, d)) return true;
|
|
if (this.isPlayerRegionAllow(x, y, d)) return true;
|
|
return Yanfly.RR.Game_CharacterBase_isMapPassable.call(this, x, y, d);
|
|
};
|
|
Game_CharacterBase.prototype.isEvent = function() {
|
|
return false;
|
|
};
|
|
Game_CharacterBase.prototype.isPlayer = function() {
|
|
return false;
|
|
};
|
|
Game_CharacterBase.prototype.processRRNotetags = function() {
|
|
DataManager.processRRNotetags();
|
|
};
|
|
Game_CharacterBase.prototype.isEventRegionForbid = function(x, y, d) {
|
|
if (this.isPlayer()) return false;
|
|
if (this.isThrough()) return false;
|
|
var regionId = this.getRegionId(x, y, d);
|
|
if (regionId === 0) return false;
|
|
if ($gameMap.restrictEventRegions().contains(regionId)) return true;
|
|
return false;
|
|
};
|
|
Game_CharacterBase.prototype.isPlayerRegionForbid = function(x, y, d) {
|
|
if (this.isEvent()) return false;
|
|
if (this.isThrough()) return false;
|
|
var regionId = this.getRegionId(x, y, d);
|
|
if (regionId === 0) return false;
|
|
if ($gameMap.restrictPlayerRegions().contains(regionId)) return true;
|
|
return false;
|
|
};
|
|
Game_CharacterBase.prototype.isEventRegionAllow = function(x, y, d) {
|
|
if (this.isPlayer()) return false;
|
|
var regionId = this.getRegionId(x, y, d);
|
|
if (regionId === 0) return false;
|
|
if ($gameMap.allowEventRegions().contains(regionId)) return true;
|
|
return false;
|
|
};
|
|
Game_CharacterBase.prototype.isPlayerRegionAllow = function(x, y, d) {
|
|
if (this.isEvent()) return false;
|
|
var regionId = this.getRegionId(x, y, d);
|
|
if (regionId === 0) return false;
|
|
if ($gameMap.allowPlayerRegions().contains(regionId)) return true;
|
|
return false
|
|
};
|
|
Game_CharacterBase.prototype.getRegionId = function(x, y, d) {
|
|
switch (d) {
|
|
case 1:
|
|
return $gameMap.regionId(x - 1, y + 1);
|
|
break;
|
|
case 2:
|
|
return $gameMap.regionId(x + 0, y + 1);
|
|
break;
|
|
case 3:
|
|
return $gameMap.regionId(x + 1, y + 1);
|
|
break;
|
|
case 4:
|
|
return $gameMap.regionId(x - 1, y + 0);
|
|
break;
|
|
case 5:
|
|
return $gameMap.regionId(x + 0, y + 0);
|
|
break;
|
|
case 6:
|
|
return $gameMap.regionId(x + 1, y + 0);
|
|
break;
|
|
case 7:
|
|
return $gameMap.regionId(x - 1, y - 1);
|
|
break;
|
|
case 8:
|
|
return $gameMap.regionId(x + 0, y - 1);
|
|
break;
|
|
case 9:
|
|
return $gameMap.regionId(x + 1, y - 1);
|
|
break;
|
|
default:
|
|
return $gameMap.regionId(x, y);
|
|
break;
|
|
}
|
|
};
|
|
Game_Event.prototype.isEvent = function() {
|
|
return true;
|
|
};
|
|
Game_Player.prototype.isPlayer = function() {
|
|
return true;
|
|
};
|
|
Yanfly.RR.Game_Vehicle_isLandOk = Game_Vehicle.prototype.isLandOk;
|
|
Game_Vehicle.prototype.isLandOk = function(x, y, d) {
|
|
var value = Yanfly.RR.Game_Vehicle_isLandOk.call(this, x, y, d);
|
|
if (!value) return false;
|
|
if (this.isAirship()) {
|
|
d = 5;
|
|
$gamePlayer._through = false;
|
|
}
|
|
if ($gamePlayer.isPlayerRegionForbid(x, y, d)) {
|
|
if (this.isAirship()) $gamePlayer._through = true;
|
|
return false;
|
|
}
|
|
if ($gamePlayer.isPlayerRegionAllow(x, y, d)) {
|
|
if (this.isAirship()) $gamePlayer._through = true;
|
|
return true;
|
|
}
|
|
return true;
|
|
};
|
|
Yanfly.Util = Yanfly.Util || {};
|
|
Yanfly.Util.getRange = function(n, m) {
|
|
var result = [];
|
|
for (var i = n; i <= m; ++i) result.push(i);
|
|
return result;
|
|
};
|