设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2660|回复: 2
打印 上一主题 下一主题

[RMVX发布] 游戏存档变大问题解决方案

[复制链接]

Lv2.观梦者

梦石
0
星屑
582
在线时间
917 小时
注册时间
2013-3-13
帖子
557
跳转到指定楼层
1
发表于 2017-5-20 12:33:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 crow2006 于 2017-5-20 12:50 编辑

使用了P叔整合系统的【随机属性】脚本之后,游戏进行过程中得到的装备越多,存档就会越来越大,打开物品栏/装备栏也会越来越卡(特别是以刷装备为主的游戏)。
经过分析,我发现是这几个家伙在作祟。

1.module Game_Equip
    case result
    when RPG::Weapon
      result.inidur
      result.base_id = result.id   
      result.id = $data_weapons.size

    when RPG::Armor
      result.inidur
      result.base_id = result.id   
      result.id = $data_armors.size


$data_weapons与$data_armors会越来越大、越来越长。
但这并不是唯一的地方,还有这里:
2.class Game_Party < Game_Unit
def initialize
    @weapons = {}     # 物品哈希列表(武器ID)
    @armors = {}      # 物品哈希列表(防具ID)
这两个家伙也会越来越大、越来越长。

再一个,如果使用了八云紫大大的物品仓库系统的话,又会带来一个问题:
3.lass Game_Party < Game_Unit
  alias initialize_currency initialize
  def initialize
    initialize_currency
    @warehouse_item = {}                                # 仓库物品
    @warehouse_weapon = {}                              # 仓库武器
    @warehouse_armor = {}                               # 仓库防具
    @warehouse = [@warehouse_item, @warehouse_weapon, @warehouse_armor]
  end



解决方案:


  1. #游戏终极优化系统 作者:crow2006 【屠魔勇士】的游戏作者 from 66RPG
  2. #适用于使用P叔随机属性系统+八云紫物品仓库系统的游戏,能让游戏速度恢复到初始状态
  3. #如果没有使用物品仓库系统,脚本中涉及的部分请自行删改
  4. #如使用了物品仓库系统,使用本功能前玩家需自行将仓库内所有武器与防具取到背包里
  5. #请各位大大优化一下脚本,我技术很渣,只能写成这样很臭的,但确实发挥作用了。。。。
  6. #使用方法:事件脚本:$game_party.cleardata

  7. class Game_Party < Game_Unit
  8.   def warehouses #仓库中的武器装备
  9.     result = []
  10.     for i in $game_party.warehouse[1]
  11.       result.push($data_weapons[i[0]]) if i[0] != nil
  12.     end
  13.     for i in $game_party.warehouse[2]
  14.       result.push($data_armors[i[0]]) if i[0] != nil
  15.     end
  16.     return result   
  17.   end
  18.   
  19.   def equipments #角色身上的武器装备
  20.     result = []
  21.     for i in 1...$data_actors.size
  22.       result += $game_actors[i].equips unless $game_actors[i].nil?
  23.     end
  24.     return result
  25.   end
  26.   
  27. def delete_equipments #平时可用$game_party.delete_equipments来清除所有身上没穿的、包里没放的、仓库中也没存的垃圾数据,但并不治本。
  28.   saved_equips = $game_party.items + $game_party.warehouses + $game_party.equipments
  29.   for i in 0...$data_weapons.size
  30.     $data_weapons[i] = nil unless saved_equips.include?($data_weapons[i]) unless $data_weapons[i].nil?
  31.   end
  32.   for i in 0...$data_armors.size
  33.     $data_armors[i] = nil unless saved_equips.include?($data_armors[i]) unless $data_armors[i].nil?
  34.   end
  35. end   
  36.   
  37.   def cleardate #终极清理大招
  38.     delete_equipments
  39.     for m in 1...$data_actors.size
  40.      for a in 0..11 #卸下装备(注意:如果使用了装备扩张系统,这里的11必须要根据游戏作相应调整)
  41.        $game_actors[m].change_equip(a,nil)
  42.      end
  43.     end
  44.     item1 = [] #武器
  45.     item2 = [] #防具
  46.     @warehouse_weapon = {} #仓库里的武器清空
  47.     @warehouse_armor = {}  #仓库里的防具清空
  48.     $game_party.warehouse[1] = {} #仓库里的武器清空
  49.     $game_party.warehouse[2] = {} #仓库里的防具清空
  50.     $base_weapons  = load_data("Data/Weapons.rvdata") #还原武器
  51.     $base_armors   = load_data("Data/Armors.rvdata")  #还原防具
  52.     saved_equips = $game_party.items
  53.    
  54.     a1 = 1
  55.     for i in $data_weapons
  56.      if i != nil and saved_equips.include?(i)
  57.       i.id = a1
  58.       item1.push(i)
  59.       a1 += 1
  60.      end
  61.     end
  62.     $data_weapons = [nil]
  63.     for i in item1
  64.       $data_weapons.push(i)
  65.     end
  66.     @weapons = {}
  67.     @weapons[0] = 0
  68.     for i in $data_weapons
  69.       if i != nil
  70.        a = i.id
  71.        @weapons[a] = 1
  72.       end
  73.     end
  74.    
  75.     a1 = 1
  76.     for i in $data_armors
  77.      if i != nil and saved_equips.include?(i)
  78.       i.id = a1
  79.       item2.push(i)
  80.       a1 += 1
  81.      end
  82.     end
  83.     $data_armors = [nil]
  84.     for i in item2
  85.       $data_armors.push(i)
  86.     end
  87.     @armors = {}
  88.     @armors[0] = 0
  89.     for i in $data_armors
  90.       if i != nil
  91.        a = i.id
  92.        @armors[a] = 1
  93.       end
  94.     end     
  95.   end  
  96.   
  97. end  
复制代码



Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41497
在线时间
7590 小时
注册时间
2009-7-6
帖子
13502

开拓者贵宾

2
发表于 2017-5-21 09:40:51 | 只看该作者
直接在出售和事件增减道具的方法中清理相应数据就可以了。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2017-7-8 20:15:19 | 只看该作者
就是变成了空吧···如果能移除掉会更好?不过那样的话就要把存在的装备重新调整一下···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-1 09:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表