| 赞 | 168 |
| VIP | |
| 好人卡 | |
| 积分 | 229 |
| 经验 | |
| 最后登录 | 2025-4-1 |
| 在线时间 | 8598 小时 |
- 梦石
- 0
- 星屑
- 22879
- 在线时间
- 8598 小时
- 注册时间
- 2011-12-31
- 回帖
- 3270
|
发表于 2017-3-24 22:45:59
|
显示全部楼层
OverpassTile.js[pre lang="javascript"]//=============================================================================
// OverpassTile.js
//=============================================================================
/*:
* @plugindesc 設置角色可以在橋樑下通過。
* @author Yoji Ojima
*
* @param 上層(交差地域) 區域 ID
* @desc The region ID for "overpass" such as bridges.
* @default 255
*
* @param 上層起點 區域 ID
* @desc The region ID for "gateway" such as bridge ends.
* @default 254
*
* @help
*
*插件使用區域ID來判断地板高度.
* 默認情況下,設置255橋;254爲橋的两端.
*圖塊需要設成四方通行
* Note: 注:插件不支持角色在不同的樓層的碰撞判定修改.
*/
/*:ja
* @plugindesc キャラクターが下をくぐり抜けられる橋の設定です。
* @author Yoji Ojima
*
* @param Overpass Region ID
* @desc 橋などの立体交差部分に設定するリージョンIDです。
* @default 255
*面
* @param Gateway Region ID
* @desc 橋の両端など、立体交差の入り口部分に設定するリージョンIDです。
* @default 254
*
* @help
*
* このプラグインは、床の高さを決定するのにリージョンIDを使用します。
* デフォルトでは橋の部分に255、その両端に254を設定してください。
*
* 注意:このプラグインは、異なる階層にいるキャラクター間の衝突判定修正は
* サポートしていません。
*/
(function() {
var parameters = PluginManager.parameters('OverpassTile');
var overpassRegionId = Number(parameters['Overpass Region ID'] || 255);
var gatewayRegionId = Number(parameters['Gateway Region ID'] || 254);
var _Tilemap_isOverpassPosition = Tilemap.prototype._isOverpassPosition;
Tilemap.prototype._isOverpassPosition = function(mx, my) {
var regionId = this._readMapData(mx, my, 5);
if (regionId === overpassRegionId) {
return true;
} else {
return _Tilemap_isOverpassPosition.call(this, mx, my);
}
};
var _Game_CharacterBase_screenZ = Game_CharacterBase.prototype.screenZ;
Game_CharacterBase.prototype.screenZ = function() {
if (this._higherLevel) {
return 5;
} else {
return _Game_CharacterBase_screenZ.call(this);
}
};
var _Game_CharacterBase_isMapPassable =
Game_CharacterBase.prototype.isMapPassable;
Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
if (_Game_CharacterBase_isMapPassable.call(this, x, y, d)) {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
var d2 = this.reverseDir(d);
var regionId1 = $gameMap.regionId(x, y);
var regionId2 = $gameMap.regionId(x2, y2);
if (this._higherLevel && regionId1 !== gatewayRegionId) {
return (regionId2 === gatewayRegionId ||
regionId2 === overpassRegionId);
}
if (!this._higherLevel && regionId1 === overpassRegionId) {
if (regionId2 === overpassRegionId) {
var bit1 = (1 << (d / 2 - 1)) & 0x0f;
var bit2 = (1 << (d2 / 2 - 1)) & 0x0f;
var flags = $gameMap.tilesetFlags();
var tileId1 = $gameMap.tileId(x, y, 0);
var tileId2 = $gameMap.tileId(x, y, 1);
var tileId3 = $gameMap.tileId(x2, y2, 0);
var tileId4 = $gameMap.tileId(x2, y2, 1);
if ((flags[tileId1] | flags[tileId2]) & bit1) {
return false;
}
if ((flags[tileId3] | flags[tileId4]) & bit2) {
return false;
}
}
return regionId2 !== gatewayRegionId;
}
return true;
} else {
return false;
}
};
var _Game_CharacterBase_refreshBushDepth =
Game_CharacterBase.prototype.refreshBushDepth;
Game_CharacterBase.prototype.refreshBushDepth = function() {
_Game_CharacterBase_refreshBushDepth.call(this);
var regionId = this.regionId();
if (regionId === gatewayRegionId) {
this._higherLevel = true;
} else if (regionId !== overpassRegionId) {
this._higherLevel = false;
}
};
})();
[/pre] |
|