PHP код:
	
//===================================================================
// YuryolStealth.js
//===================================================================
/*:ru
 * @plugindesc Стелс (зрение событий)
 * @author Yuryol
 * @help
 * @param circle
 * @desc Включить зрение полукруг?
 * @type Boolean
 * @default false
 * @help
 * ### Информация о плагине ###
 * 
 * Название: YuryolStealth
 * Автор: YuryOl
 * 
 * ### Справка ###
 *
 * Позволяет задать "зрение" событию, т.е. событие будет активировать
 * определенную локальную вкладку (по умолчанию - вкладку 'A') только
 * если герой находится на определенном расстоянии от него и при этом
 * герой стоит не позади события.
  
 * По умолчанию поле зрения события будет прямоугольным.
 * Чтобы поле зрение было полукругом, следует изменить параметр плагина 
 * "circle" в положение "false"
  
 * Чтобы сделать событию "зрение" следует:
     
 * 1) Если требуется вызвать событие из другого события, то в команде 
 * "скрипт" ввести:
 * $gameMap.event(id).YurStealth(distance, switch)
 * , где:
 * id - id события,
 * distance - расстояние от героя до события, на котором 
 * sw - локальный переключатель, который активируется, когда враг "увидит" героя.
 *      если параметр не указан, то включится переключатель 'A'
 *   
 * 2) Также можно ввести скрипт в маршрут события командой "скрипт":
 * $gameMap.event(id).YurStealth(distance, switch)
 * 
 * Если требуется включить "зрение" в том же событии, в маршруте которого и вызван
 * скрипт, ты можем написать просто:
 * this.YurStealth(distance, switch) 
 *
 * ### Лицензии и правила использования плагина ###
 * 
 * Вы можете:
 * -Бесплатно использовать данный плагин в некоммерческих и коммерческих проектах
 * -Переводить плагин на другие языки
 * -Изменять код плагина, но Вы обязаны указать ссылку на оригинальный плагин
 * 
 * Вы не можете:
 * -Убирать или изменять любую информацию о плагине (название, авторство) 
 */
(function(){
    const parameters = PluginManager.parameters('YuryolStealth'),
        circle = parameters['circle'],
        list = []; // хранение событий, которые следят за героем
    //апдейт
    var YuryolStealthUpdate = Scene_Map.prototype.update;
    Scene_Map.prototype.update = function() {
        YuryolStealthUpdate.call(this);
        if (list) this.YuryolStealthCoordinate();
    };
    //добавление события
    Game_Character.prototype.YurStealth = function(dist, sw) {
        list.push({
            id: this._eventId, 
            dist: dist,
            sw: sw
        });
    };
    //рассчеты
    Scene_Map.prototype.YuryolStealthCoordinate = function() {
        
        for(var i = 0; i < list.length; i++){
            
            let id = list[i].id,
                dist = list[i].dist,
                sw = (list[i].sw) ? list[i].sw : 'A';
            let distX = $gameMap.event(id)._x - $gamePlayer.x,
                distY = $gameMap.event(id)._y - $gamePlayer.y;
            
            //проверка расстояния от события до героя
            if (circle) {
                if (Math.abs(distX) > dist || Math.abs(distY) > dist) continue;
            }
            else {
                if (distX*distX + distY*distY > dist*dist) continue;
            };
            
        
            //проверка стоит ли событие спиной к герою
            switch($gameMap.event(id).direction()) {
                case 2:
                    if (distY > 0) continue;
                    break;
                case 4:
                    if (distX < 0) continue;
                    break;
                case 6:
                    if (distX > 0) continue;
                    break;
                case 8:
                    if (distY < 0) continue;
                    break;
            }
            //включение лок. страницы "А"
            $gameSelfSwitches.setValue([$gameMap.mapId(), id, sw], true);
        }
    };
})(); 
 
Социальные закладки