查看: 3870|回复: 2

[已经解决] 【XP脚本改MV】RB的"简易地图记忆功能“ 移植失败

[复制链接]
梦石
0
星屑
1816
在线时间
2527 小时
注册时间
2010-10-12
回帖
1336

开拓者

发表于 2016-3-16 08:12:29 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
[pre lang="ruby"]
#=============================================================================
# 简易地图记忆功能
#-----------------------------------------------------------------------------
# By:RyanBern
#=============================================================================

#=============================================================================
# 说明
#-----------------------------------------------------------------------------
# 切换地图后,重新进入地图会重新装载一遍地图,导致事件还在原位。这里经过简单
# 修改可使得某些地图的事件位置信息会保存下来。
#=============================================================================

class Game_Map
    # 用于储存所记忆地图的变量 ID,这是为了地图信息能保存到下次读档之后,注意,一
  # 旦设置了某变量用于记忆地图,则此变量不可作为他用(即不能出现在事件操作或者
  # 事件出现条件中)。例如,将1号变量用于储存记忆地图,则写 MEMORIZED_POS = 1
  
  MEMORIZED_POS = 1
  alias ryan_setup setup
  def setup(map_id)
    unless $game_variables[MEMORIZED_POS].is_a?(Hash)
      $game_variables[MEMORIZED_POS] = {}
    end
    if $maps_need_memorize.include?($game_map.map_id)
      $game_variables[MEMORIZED_POS][$game_map.map_id] = $game_map.clone
    end
    if $game_variables[MEMORIZED_POS].include?(map_id)
      $game_map = $game_variables[MEMORIZED_POS][map_id]
      return
    end
    @fighters = {}
    @missiles = []
    @bloods = []
    ryan_setup(map_id)

   
  end
  
end[/pre]
ps: $maps_need_memorize 在其他脚本中定义了。是个integer array。存储地图ID





以上是XP脚本 ”简易地图记忆功能 By:RyanBern “

在下尝试着模仿上面写了一个MV的脚本

结果却失败了

你们看看应该怎么改写呢?


我的

[pre lang="javascript"]MBBS_MV.Core.Game_Map_setup = Game_Map.prototype.setup;
Game_Map.prototype.setup = function(mapId) {

    if (typeof $gameVariables.value(Game_Map.MEMORIZED_POS) === 'number'){
      $gameVariables.setValue(Game_Map.MEMORIZED_POS,[]);
      console.log("Created varible for map spot");
    }

    //alert(mapId+" "+this._mapId);
    if (Game_Map.MAPS_NEED_MEMORIZE.indexOf(this._mapId)!==-1){
        console.log("operating the data.");
        var temp = $gameVariables.value(Game_Map.MEMORIZED_POS);
        //var bill = (JSON.parse(JSON.stringify(bob)));
        temp[this._mapId] = (JSON.parse(JSON.stringify($gameMap)));
        $gameVariables.setValue(Game_Map.MEMORIZED_POS,temp);
    }
    //console.log("$gameVariables.value(Game_Map.MEMORIZED_POS)[mapId]: "+$gameVariables.value(Game_Map.MEMORIZED_POS)[mapId]);
    if ($gameVariables.value(Game_Map.MEMORIZED_POS)[mapId]){
        console.log("data over loaded: mapId: " +  mapId);
      $game_map = $gameVariables.value(Game_Map.MEMORIZED_POS)[mapId];
      return;
    }
    $gameMap.requestRefresh();

    this.setupEFSBattlers();
    MBBS_MV.Core.Game_Map_setup.call(this,mapId);
};[/pre]

评分

参与人数 2赞 +2 收起 理由
玛尔斯 + 1
众神与将军 + 1

查看全部评分


梦石
0
星屑
1309
在线时间
904 小时
注册时间
2014-12-4
回帖
349
发表于 2016-3-16 08:40:14 | 显示全部楼层
yep 不是有一个记录事件位置的插件吗?

点评

好高级,少年继续努力,我看好你!  发表于 2016-3-16 08:54
其实在下需要的不仅仅是事件位置的记录 而是完完全全把$gameMap给保存下来,因为里面还包含了其他数据。  发表于 2016-3-16 08:49
回复

使用道具 举报

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2016-3-16 11:56:31 | 显示全部楼层
本帖最后由 汪汪 于 2016-3-16 12:01 编辑

原来的存档不会自动保存吗?


[pre lang="javascript"]
//储存内容的数组
var map = []
//保存
map[id]= JsonEx.stringify($gameMap)
//读取
$gameMap = JsonEx.parse( map[id])
//缺点,把角色那些信息也会保存........... ?
[/pre]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部