注册会员 登录
Project1 返回首页

汪汪的个人空间 https://rpg.blue/?171386 [收藏] [复制] [分享] [RSS]

日志

【胡编】复制事件,离开地图保存事件位置和方向

已有 130 次阅读2015-12-3 21:47 |个人分类:脚本·修改·整合·胡编

[fold=单纯保存位置方向]
[pre lang="javescript" file="baocun_event_xyd.js"]

//=============================================================================
// baocun_event_xyd.js
//=============================================================================
/*:
 * @plugindesc 保存事件位置朝向
 * @author wangwang
 *
 * @param baocunbl
 * @desc 默认保存地图事件的变量号
 * @default 1
 *
 * @help
 * 大概没用........
 * 保存事件的位置 和 朝向,
 * 
 *
 */




(function() {
//====================修改默认部分=================
//对 默认的 $gameMap.prototype.setupEvents 安装事件进行修改
Game_Map.prototype.setupEvents = function() {
    this._events = [];
    for (var i = 0; i < $dataMap.events.length; i++) {
        if ($dataMap.events[i]) {
            this._events[i] = new Game_Event(this._mapId, i);
        }
    }
    this.ww_loadEvents()//添加部分,读取事件记录

    this._commonEvents = this.parallelCommonEvents().map(function(commonEvent) {
        return new Game_CommonEvent(commonEvent.id);
    });
    this.refreshTileEvents();
};


//转换场景时的处理(添加保存事件)
Scene_Map.prototype.stop = function() {    
this.ww_saveEventsXyd()//添加部分,保存事件
    Scene_Base.prototype.stop.call(this);
    $gamePlayer.straighten();
    this._mapNameWindow.close();
    if (this.needsSlowFadeOut()) {
        this.startFadeOut(this.slowFadeSpeed(), false);
    } else if (SceneManager.isNextScene(Scene_Map)) {
        this.fadeOutForTransfer();
    } else if (SceneManager.isNextScene(Scene_Battle)) {
        this.launchBattle();
    }
};



//===================================================================


//====================添加部分====================


//读取事件记录
Game_Map.prototype.ww_loadEvents = function() {
//读取变量
    var blid = parseInt(PluginManager.parameters("baocun_event_xyd")["baocunbl"], 10);
    var value = $gameVariables._data[blid]
    //如果存在
    if (!!value){
   //如果这个地图有保存
   if (!!value[this._mapId]){
   //循环所有地图内的事件记录
   for (var i=0; i <  value[this._mapId].length ;i++){
   //读取一条事件记录的内容
   var  nr = value[this._mapId][i]
   //如果存在内容
if (!!nr){
   //如果  事件x和y 是数字
if (isFinite( nr.x ) && isFinite(nr.y) ){
//设置事件的新位置
this._events[i].setPosition(nr.x,nr.y)
}
//如果 事件方向是数字
if (isFinite( nr.d )){
//设置事件方向
this._events[i].setDirection(nr.d)
}
}
   }
   }
    }
};

//保存事件记录
Scene_Map.prototype.ww_saveEventsXyd= function () {
//读取变量号
var blid = parseInt(PluginManager.parameters("baocun_event_xyd")["baocunbl"], 10);
//如果变量内容不存在,新建一个数组
if (!$gameVariables._data[blid]){$gameVariables._data[blid] = []}
var value = $gameVariables._data[blid]
var mapid = $gameMap._mapId
    //变量中本地图的记录内容情况
value[mapid] = []
//循环在地图中的事件
    for (var i = 0; i < $gameMap._events.length; i++) {
   event = $gameMap._events[i]
   if (!!event){
   //设置保存内容
   nr ={
x:event.x,
  y:event.y,
  d:event._direction
  }
   value[mapid][i] = nr
   }
    }
}




})();










[/pre]



[/fold]






[fold=复制事件,离开地图保存事件位置和方向
修改独立开关使之支持
好像没什么用
然后谁能告诉我为什么操作开关改变事件页后的行走图设置问题.....为什么不能转变成我要的那个方向?
最后求大神教教简单快捷高效的读取某地图数据的方法,
好想制作出跨地图的事件复制啊....]
[pre lang="javescript" file="baocun_event_xyd.js"]
//=============================================================================
// baocun_event_xyd.js
//=============================================================================
/*:
 * @plugindesc 复制事件,保存事件位置朝向
 * @author wangwang
 *
 * @param baocunbl
 * @desc 默认保存地图事件的变量号
 * @default 1
 *
 * @help
 * 大概没什么用........
 * 保存事件的位置 和 朝向,
 * 添加一个基于本地图上事件的 事件(复制)
 * addEvent (eventId,x,y,d) 
 *    eventId  复制的事件id
 *    事件的x,y
 *    d 事件朝向,请在(2468)之中
 *
 */



(function() {
//====================修改默认部分=================
//对 默认的 $gameMap.prototype.setupEvents 安装事件进行修改
Game_Map.prototype.setupEvents = function() {
    this._events = [];
    for (var i = 0; i < $dataMap.events.length; i++) {
        if ($dataMap.events[i]) {
            this._events[i] = new Game_Event(this._mapId, i);
        }
    }
    this.ww_loadEvents()//添加部分,读取事件记录

    this._commonEvents = this.parallelCommonEvents().map(function(commonEvent) {
        return new Game_CommonEvent(commonEvent.id);
    });
    this.refreshTileEvents();
};


//修改事件的初始化
Game_Event.prototype.initialize = function(mapId, eventId , id) {
    Game_Character.prototype.initialize.call(this);
    this._mapId = mapId;
    this._eventId = eventId;
    this._id = id || eventId  //添加部分
    this.locate(this.event().x, this.event().y);
    this.refresh();
};


//转换场景时的处理(添加保存事件)
Scene_Map.prototype.stop = function() {    
this.ww_saveEventsXyd()//添加部分,保存事件
    Scene_Base.prototype.stop.call(this);
    $gamePlayer.straighten();
    this._mapNameWindow.close();
    if (this.needsSlowFadeOut()) {
        this.startFadeOut(this.slowFadeSpeed(), false);
    } else if (SceneManager.isNextScene(Scene_Map)) {
        this.fadeOutForTransfer();
    } else if (SceneManager.isNextScene(Scene_Battle)) {
        this.launchBattle();
    }
};



Game_Interpreter.prototype.setup = function(list, eventId,id) {
    this.clear();
    this._mapId = $gameMap.mapId();
    this._eventId = eventId || 0;
    this._list = list;
    this._id = id || this._eventId
};




Game_Event.prototype.updateParallel = function() {
    if (this._interpreter) {
        if (!this._interpreter.isRunning()) {
            this._interpreter.setup(this.list(), this._eventId,this._id);
        }
        this._interpreter.update();
    }
};

//安装开始地图事件
Game_Map.prototype.setupStartingMapEvent = function() {
    var events = this.events();
    for (var i = 0; i < events.length; i++) {
        var event = events[i];
        if (event.isStarting()) {
            event.clearStartingFlag();
            this._interpreter.setup(event.list(), event.eventId(),event._id);
            return true;
        }
    }
    return false;
};










//满足条件
Game_Event.prototype.meetsConditions = function(page) {
    var c = page.conditions;
    if (c.switch1Valid) {
        if (!$gameSwitches.value(c.switch1Id)) {
            return false;
        }
    }
    if (c.switch2Valid) {
        if (!$gameSwitches.value(c.switch2Id)) {
            return false;
        }
    }
    if (c.variableValid) {
        if ($gameVariables.value(c.variableId) < c.variableValue) {
            return false;
        }
    }
    //修改独立开关的判断条件  
    if (c.selfSwitchValid) {
   // _eventId  ->   _id
        var key = [this._mapId,this._id, c.selfSwitchCh];
        if ($gameSelfSwitches.value(key) !== true) {
            return false;
        }
    }
    if (c.itemValid) {
        var item = $dataItems[c.itemId];
        if (!$gameParty.hasItem(item)) {
            return false;
        }
    }
    if (c.actorValid) {
        var actor = $gameActors.actor(c.actorId);
        if (!$gameParty.members().contains(actor)) {
            return false;
        }
    }
    return true;
};

// Common Event 公共事件
Game_Interpreter.prototype.command117 = function() {
    var commonEvent = $dataCommonEvents[this._params[0]];
    if (commonEvent) {
        var eventId = this.isOnCurrentMap() ? this._eventId : 0;
        var id = this.isOnCurrentMap() ? this._id : 0;
        this.setupChild(commonEvent.list, eventId,id);
    }
    return true;
};
//安装子项
Game_Interpreter.prototype.setupChild = function(list, eventId,id) {
    this._childInterpreter = new Game_Interpreter(this._depth + 1);
    this._childInterpreter.setup(list, eventId,id);
};



//独立开关操作(修改)
Game_Interpreter.prototype.command123 = function() {
    if (this._eventId > 0) {
    // _eventId  ->  事件 _id
        var key = [this._mapId, this._id , this._params[0]];
        $gameSelfSwitches.setValue(key, this._params[1] === 0);
    }
    return true;
};


Game_Interpreter.prototype.command111 = function() {
    var result = false;
    switch (this._params[0]) {
    case 0:  // Switch 开关
        result = ($gameSwitches.value(this._params[1]) === (this._params[2] === 0));
        break;
    case 1:  // Variable 变量
        var value1 = $gameVariables.value(this._params[1]);
        var value2;
        if (this._params[2] === 0) {
            value2 = this._params[3];
        } else {
            value2 = $gameVariables.value(this._params[3]);
        }
        switch (this._params[4]) {
        case 0:  // Equal to 等于
            result = (value1 === value2);
            break;
        case 1:  // Greater than or Equal to  大于等于
            result = (value1 >= value2);
            break;
        case 2:  // Less than or Equal to  小于等于
            result = (value1 <= value2);
            break;
        case 3:  // Greater than  大于
            result = (value1 > value2);
            break;
        case 4:  // Less than  小于
            result = (value1 < value2);
            break;
        case 5:  // Not Equal to  不等于
            result = (value1 !== value2);
            break;
        }
        break;
    case 2:  // Self Switch 独立开关
        if (this._eventId > 0) {
       //修改
       
            var key = [this._mapId, this._id, this._params[1]];
            result = ($gameSelfSwitches.value(key) === (this._params[2] === 0));
        }
        break;
    case 3:  // Timer  计时器
        if ($gameTimer.isWorking()) {
            if (this._params[2] === 0) {
                result = ($gameTimer.seconds() >= this._params[1]);
            } else {
                result = ($gameTimer.seconds() <= this._params[1]);
            }
        }
        break;
    case 4:  // Actor 角色
        var actor = $gameActors.actor(this._params[1]);
        if (actor) {
            var n = this._params[3];
            switch (this._params[2]) {
            case 0:  // In the Party  在队伍
                result = $gameParty.members().contains(actor);
                break;
            case 1:  // Name 名称
                result = (actor.name() === n);
                break;
            case 2:  // Class 职业
                result = actor.isClass($dataClasses[n]);
                break;
            case 3:  // Skill 技能
                result = actor.isLearnedSkill(n);
                break;
            case 4:  // Weapon 武器
                result = actor.hasWeapon($dataWeapons[n]);
                break;
            case 5:  // Armor 防具
                result = actor.hasArmor($dataArmors[n]);
                break;
            case 6:  // State 状态
                result = actor.isStateAffected(n);
                break;
            }
        }
        break;
    case 5:  // Enemy 敌人
        var enemy = $gameTroop.members()[this._params[1]];
        if (enemy) {
            switch (this._params[2]) {
            case 0:  // Appeared 出现
                result = enemy.isAlive();
                break;
            case 1:  // State 状态
                result = enemy.isStateAffected(this._params[3]);
                break;
            }
        }
        break;
    case 6:  // Character 人物
        var character = this.character(this._params[1]);
        if (character) {
            result = (character.direction() === this._params[2]);
        }
        break;
    case 7:  // Gold 金钱
        switch (this._params[2]) {
        case 0:  // Greater than or equal to 大于等于
            result = ($gameParty.gold() >= this._params[1]);
            break;
        case 1:  // Less than or equal to 小于等于
            result = ($gameParty.gold() <= this._params[1]);
            break;
        case 2:  // Less than 小于
            result = ($gameParty.gold() < this._params[1]);
            break;
        }
        break;
    case 8:  // Item 物品
        result = $gameParty.hasItem($dataItems[this._params[1]]);
        break;
    case 9:  // Weapon 武器
        result = $gameParty.hasItem($dataWeapons[this._params[1]], this._params[2]);
        break;
    case 10:  // Armor 防具
        result = $gameParty.hasItem($dataArmors[this._params[1]], this._params[2]);
        break;
    case 11:  // Button 按键
        result = Input.isPressed(this._params[1]);
        break;
    case 12:  // Script 脚本
        result = !!eval(this._params[1]);
        break;
    case 13:  // Vehicle 交通工具
        result = ($gamePlayer.vehicle() === $gameMap.vehicle(this._params[1]));
        break;
    }
    this._branch[this._indent] = result;
    if (this._branch[this._indent] === false) {
        this.skipBranch();
    }
    return true;
};







//===================================================================


//====================添加部分====================
//添加事件
addEvent = function (eventId,x,y,d) {
//如果这个事件id在地图数据中有基础
if ($dataMap.events[eventId]) {
//获取添加的id
   var tjid= $gameMap._events.length
   //地图事件添加一个新的基于 地图数据中id事件内容 的事件
$gameMap._events[tjid]=new Game_Event($gameMap._mapId,eventId,tjid)
//如果x,y是数字 设置事件位置
if (isFinite(x) && isFinite(y) ){$gameMap._events[tjid].setPosition(x,y)}
//如果d是数字 设置事件方向(请输入:2,4,6,8)
if (isFinite(d)) { $gameMap._events[tjid].setDirection(d)} 
//如果当前场景是 地图
   if  (SceneManager._scene.constructor == Scene_Map){
   //地图场景的 精灵组 的 人物精灵 添加 一个新 人物精灵(添加的事件)
   SceneManager._scene._spriteset._characterSprites.push(new Sprite_Character($gameMap._events[tjid]))
   //获取  新添加的精灵的id
   var tjid2 = SceneManager._scene._spriteset._characterSprites.length - 1
   //把   新添加的精灵 添加到 场景 精灵组 地图 的子项
   var tjc=SceneManager._scene._spriteset._characterSprites[tjid2]
   SceneManager._scene._spriteset._tilemap.addChild(tjc);
   }
   $gameMap.requestRefresh()
    }
}



//读取事件记录
Game_Map.prototype.ww_loadEvents = function() {
//读取变量
    var blid = parseInt(PluginManager.parameters("baocun_event_xyd")["baocunbl"], 10);
    var value = $gameVariables._data[blid]
    //如果存在
    if (!!value){
   //如果这个地图有保存
   if (!!value[this._mapId]){
   //循环所有地图内的事件记录
   for (var i=0; i <  value[this._mapId].length ;i++){
   //读取一条事件记录的内容
   var  nr = value[this._mapId][i]
   //如果存在内容
if (!!nr){    
//如果是超出原本地图内事件数量的 
if(i >= $dataMap.events.length ){
//基于原地图数据复制出一个新的事件 
this._events[i]=new Game_Event(this._mapId,nr[0],i)
   }
   //如果  事件x和y 是数字
if (isFinite( nr[1] ) && isFinite(nr[2]) ){
//设置事件的新位置
this._events[i].setPosition(nr[1],nr[2])
}
//如果 事件方向是数字
if (isFinite( nr[3] )){
//设置事件方向
this._events[i].setDirection(nr[3])
}
}
   }
   }
    }
};

//保存事件记录
Scene_Map.prototype.ww_saveEventsXyd= function () {
//读取变量号
var blid = parseInt(PluginManager.parameters("baocun_event_xyd")["baocunbl"], 10);
//如果变量内容不存在,新建一个数组
if (!$gameVariables._data[blid]){$gameVariables._data[blid] = []}
var value = $gameVariables._data[blid]
var mapid = $gameMap._mapId
    //变量中本地图的记录内容情况
value[mapid] = []
//循环在地图中的事件
    for (var i = 0; i < $gameMap._events.length; i++) {
   event = $gameMap._events[i]
   if (!!event){
   //设置保存内容
   nr =[event._eventId ,event.x,event.y,event._direction]
   value[mapid][i] = nr
   }
    }
}




})();

[/pre]















[/fold]



鸡蛋

鲜花

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 20:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部