//============================================================================= // Yanfly Engine Plugins - Event Encounter Aid // YEP_EventEncounterAid.js //============================================================================= var Imported = Imported || {}; Imported.YEP_EventEncounter = true; var Yanfly = Yanfly || {}; Yanfly.EEA = Yanfly.EEA || {}; //============================================================================= /*: * @plugindesc v1.00 事件遭遇助手 * @author Yanfly Engine Plugins * * @help * ============================================================================ * Introduction * ============================================================================ * * 对于想要设置明雷的玩家,你也许发现很难设置偷袭事件。这个插件通过不同情 * 况的脚步很方便的事件和玩家所处位置 * * ============================================================================ * Notetags * ============================================================================ * * 你可以把这些标签放在任何一个事件页顶部,这些事件将会开启事件遭遇的特殊 * 效果. * * 事件标签: * * * * - 这将让事件不会马上面对玩家,而是检查面对方向 * * * * -这将允许事件被跟随者触发 * * ============================================================================ * Event - Conditional Branch - Script Calls * ============================================================================ * * 你可以使用下面的脚本: * * Script Calls * * this.checkEventFacingPlayerFront() * - 事件在玩家前面 * * this.checkEventFacingPlayerBack() * - 事件在玩家后面 * * this.checkEventFacingPlayerSide() * - 事件在玩家侧面 * * this.checkPlayerFacingEventFront() * - 玩家在事件前面 * * this.checkPlayerFacingEventBack() * - 玩家在事件后面 * * this.checkPlayerFacingEventSide() * - 玩家在事件侧面 * 请确保拼写正确,他们是很严格的语句。 * Make sure these are spelled correctly. They are also case-sensitive. This * means that even if you were to misspell or put a single letter in the wrong * case, the effect will cease to work as this is code we're dealing with. */ //============================================================================= //============================================================================= // DataManager //============================================================================= DataManager.processEEANotetags1 = function(obj) { var notedata = obj.note.split(/[\r\n]+/); obj.encounterDirectionLock = false; obj.encounterFollowerTrigger = false; for (var i = 0; i < notedata.length; i++) { var line = notedata[i]; if (line.match(/<(?:ENCOUNTER LOCK|ENCOUNTER DIRECTION LOCK)>/i)) { obj.encounterDirectionLock = true; } if (line.match(/<(?:FOLLOWER TRIGGER|FOLLOWER TOUCH)>/i)) { obj.encounterFollowerTrigger = true; } } }; //============================================================================= // Game_CharacterBase //============================================================================= Game_CharacterBase.prototype.debugShowDirections = function(ev) { return; console.log(' This X: ' + this.x + ', This Y: ' + this.y); console.log('Event X: ' + ev.x + ', Event Y: ' + ev.y); }; Game_CharacterBase.prototype.isFacingTowards = function(ev) { switch (this.direction()) { case 1: // Down Left return [8, 9, 6].contains(ev.direction()); break; case 2: // Down return [7, 8, 9].contains(ev.direction()); break; case 3: // Down Right return [4, 7, 8].contains(ev.direction()); break; case 4: // Left return [9, 6, 3].contains(ev.direction()); break; case 6: // Right return [7, 4, 1].contains(ev.direction()); break; case 7: // Up Left return [2, 3, 6].contains(ev.direction()); break; case 8: // Up return [1, 2, 3].contains(ev.direction()); break; case 9: // Up Right return [4, 1, 2].contains(ev.direction()); break; } return false; }; Game_CharacterBase.prototype.isFacingAway = function(ev) { switch (this.direction()) { case 1: // Down Left return [4, 1, 2].contains(ev.direction()); break; case 2: // Down return [1, 2, 3].contains(ev.direction()); break; case 3: // Down Right return [2, 3, 6].contains(ev.direction()); break; case 4: // Left return [7, 4, 1].contains(ev.direction()); break; case 6: // Right return [9, 6, 3].contains(ev.direction()); break; case 7: // Up Left return [4, 7, 8].contains(ev.direction()); break; case 8: // Up return [7, 8, 9].contains(ev.direction()); break; case 9: // Up Right return [8, 9, 6].contains(ev.direction()); break; } return false; }; Game_CharacterBase.prototype.isFacingSideways = function(ev) { switch (this.direction()) { case 1: // Down Left return [4, 7, 8, 2, 3, 6].contains(ev.direction()); break; case 2: // Down return [7, 4, 1, 9, 6, 3].contains(ev.direction()); break; case 3: // Down Right return [4, 1, 2, 8, 9, 6].contains(ev.direction()); break; case 4: // Left return [7, 8, 9, 1, 2, 3].contains(ev.direction()); break; case 6: // Right return [7, 8, 9, 1, 2, 3].contains(ev.direction()); break; case 7: // Up Left return [4, 1, 2, 8, 9, 6].contains(ev.direction()); break; case 8: // Up return [7, 4, 1, 9, 6, 3].contains(ev.direction()); break; case 9: // Up Right return [4, 7, 8, 2, 3, 6].contains(ev.direction()); break; } return false; }; Game_CharacterBase.prototype.isPositionFrontOf = function(ev) { this.debugShowDirections(ev); switch (this.direction()) { case 1: // Down Left return ev.y > this.y; break; case 2: // Down return ev.y > this.y; break; case 3: // Down Right return ev.y > this.y; break; case 4: // Left return ev.x < this.x; break; case 6: // Right return ev.x > this.x; break; case 7: // Up Left return ev.y < this.y; break; case 8: // Up return ev.y < this.y; break; case 9: // Up Right return ev.y < this.y; break; } return false; }; Game_CharacterBase.prototype.isPositionBackOf = function(ev) { this.debugShowDirections(ev); switch (this.direction()) { case 1: // Down Left return ev.y < this.y; break; case 2: // Down return ev.y < this.y; break; case 3: // Down Right return ev.y < this.y; break; case 4: // Left return ev.x > this.x; break; case 6: // Right return ev.x < this.x; break; case 7: // Up Left return ev.y > this.y; break; case 8: // Up return ev.y > this.y; break; case 9: // Up Right return ev.y > this.y; break; } return false; }; Game_CharacterBase.prototype.isPositionSideOf = function(ev) { this.debugShowDirections(ev); switch (this.direction()) { case 1: // Down Left return (this.x < ev.x && this.y > ev.y) || (this.x > ev.x && this.y < ev.y) break; case 2: // Down return this.x !== ev.x; break; case 3: // Down Right return (this.x > ev.x && this.y > ev.y) || (this.x < ev.x && this.y < ev.y) break; case 4: // Left return this.y !== ev.y; break; case 6: // Right return this.y !== ev.y; break; case 7: // Up Left return (this.x > ev.x && this.y > ev.y) || (this.x < ev.x && this.y < ev.y) break; case 8: // Up return this.x !== ev.x; break; case 9: // Up Right return (this.x < ev.x && this.y > ev.y) || (this.x > ev.x && this.y < ev.y) break; } return false; }; //============================================================================= // Game_Event //============================================================================= Yanfly.EEA.Game_Event_start = Game_Event.prototype.start; Game_Event.prototype.start = function() { if (this.isEncounterDirectionLocked()) { var list = this.list(); if (list && list.length > 1) { this._starting = true; if (this.isTriggerIn([0,1,2])) this.encounterLock(); } } else { Yanfly.EEA.Game_Event_start.call(this); } }; Game_Event.prototype.encounterLock = function() { this._prelockDirection = this.direction(); this._locked = true; }; Game_Event.prototype.isEncounterDirectionLocked = function() { if (this.event().encounterDirectionLock === undefined) { DataManager.processEEANotetags1(this.event()); } return this.event().encounterDirectionLock; }; Yanfly.EEA.Game_Event_checkEventTriggerTouch = Game_Event.prototype.checkEventTriggerTouch; Game_Event.prototype.checkEventTriggerTouch = function(x, y) { Yanfly.EEA.Game_Event_checkEventTriggerTouch.call(this, x, y); if ($gameMap.isEventRunning()) return; if (this._trigger !== 2) return; if (!this.isFollowerTriggerTouch()) return; if (this.isJumping()) return; if (!this.isNormalPriority()) return; var followers = $gamePlayer.followers().visibleFollowers(); var length = followers.length; for (var i = 0; i < length; ++i) { var follower = followers[i]; if (follower && follower.pos(x, y)) this.start(); } }; Game_Event.prototype.isFollowerTriggerTouch = function() { if (this.event().encounterFollowerTrigger === undefined) { DataManager.processEEANotetags1(this.event()); } return this.event().encounterFollowerTrigger; }; //============================================================================= // Game_Interpreter //============================================================================= Game_Interpreter.prototype.checkEventFacingPlayerFront = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return ev.isFacingTowards(pl) && pl.isPositionFrontOf(ev); }; Game_Interpreter.prototype.checkEventFacingPlayerBack = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return ev.isFacingAway(pl) && pl.isPositionBackOf(ev); }; Game_Interpreter.prototype.checkEventFacingPlayerSide = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return ev.isFacingSideways(pl) && pl.isPositionSideOf(ev); }; Game_Interpreter.prototype.checkPlayerFacingEventFront = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return pl.isFacingTowards(ev) && ev.isPositionFrontOf(pl); }; Game_Interpreter.prototype.checkPlayerFacingEventBack = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return pl.isFacingAway(ev) && ev.isPositionBackOf(pl); }; Game_Interpreter.prototype.checkPlayerFacingEventSide = function() { var ev = $gameMap.event(this.eventId()); if (!ev) return false; var pl = $gamePlayer; return pl.isFacingSideways(ev) && ev.isPositionSideOf(pl); }; //============================================================================= // End of File //=============================================================================