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

Project1

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

[已经解决] 求RTP精简脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2012-7-19
帖子
39
跳转到指定楼层
1
发表于 2012-8-8 17:28:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
图书馆里的链接打开以后帖子没了,求RTP精简脚本

Lv1.梦旅人

梦石
0
星屑
49
在线时间
491 小时
注册时间
2012-1-27
帖子
421

整合系统大赛RMVA达人

2
发表于 2012-8-11 19:56:40 | 只看该作者
  1. #encoding: utf-8
  2. #==============================================================================
  3. # ■ [PS0]RTP 精简
  4. #        RTP_RIP
  5. #------------------------------------------------------------------------------
  6. #  删除 RTP 中不需要的文件,减小游戏发布时的体积。
  7. #==============================================================================
  8. # [更新记录]
  9. #    - 2012.02.13 By Shy07
  10. #      * 初版(实验版本)
  11. #------------------------------------------------------------------------------
  12. # [使用方法]
  13. #    - 实验版本,适合默认脚本制作的 Ace 游戏。游戏制作完毕以后,将 RTP 文件夹
  14. # 下的 Audio、Graphics 文件夹复制到游戏文件夹,提示文件夹重复选合并,提示文件
  15. # 重复选不要复制。
  16. #    - 完成以上操作后复制这段脚本到游戏脚本中,运行。如果有提示文件无法移除,
  17. # 可以手动删除;移除的文件在游戏文件夹的 BAK 文件夹下。
  18. #   - 运行完这段后记得把这段脚本删除或注释掉最后 RTP_RIP.remove_files 那一行。
  19. # 发布游戏时把 Game.ini 里的 RTP=RPGVXAce 改成 RTP= 再用压缩工具打包(不要用
  20. # Ace 制作发行包)。
  21. #   - 最后,这段脚本还不完善,运行以后一定要完整测试游戏,确认不缺少文件后,
  22. # 再删除 BAK 文件夹。
  23. #==============================================================================

  24. #==============================================================================
  25. # ■ String
  26. #------------------------------------------------------------------------------
  27. #  String 类追加定义。
  28. #==============================================================================

  29. class String
  30.   #----------------------------------------------------------------------------
  31.   # ● API
  32.   #----------------------------------------------------------------------------
  33.   @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  34.   @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  35.   #----------------------------------------------------------------------------
  36.   # ● UTF-8 转系统编码
  37.   #----------------------------------------------------------------------------
  38.   def u2s
  39.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  40.     buffer = "\0" * (i*2)
  41.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  42.     i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
  43.     result = "\0" * i
  44.     @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
  45.     result.chop!
  46.     return result
  47.   end
  48.   #----------------------------------------------------------------------------
  49.   # ● 系统编码转 UTF-8
  50.   #----------------------------------------------------------------------------
  51.   def s2u
  52.     i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
  53.     buffer = "\0" * (i*2)
  54.     @@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
  55.     i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  56.     result = "\0" * i
  57.     @@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  58.     result.chop!
  59.     return result
  60.   end
  61. end

  62. #==============================================================================
  63. # ■ RTP_RIP
  64. #------------------------------------------------------------------------------
  65. #  RTP 精简
  66. #==============================================================================

  67. module RTP_RIP
  68.   #--------------------------------------------------------------------------
  69.   # ● 常量
  70.   #--------------------------------------------------------------------------
  71.   FMs    = ["bmp", "jpg", "png", "wav", "mp3", "ogg", "wma", "mid"]

  72.   PATH   = ["Graphics/Animations/",     "Graphics/Battlebacks1/",
  73.             "Graphics/Battlebacks2/",   "Graphics/Battlers/",
  74.             "Graphics/Characters/",     "Graphics/Faces/",
  75.             "Graphics/Parallaxes/",     "Graphics/Pictures/",
  76.             "Graphics/Titles1/",        "Graphics/Titles2/",
  77.             "Graphics/Tilesets/",
  78.             "Audio/BGM/", "Audio/BGS/", "Audio/ME/", "Audio/SE/"]

  79.   SYSTEM = ["Graphics/System/Balloon",  "Graphics/System/BattleStart",
  80.             "Graphics/System/GameOver", "Graphics/System/IconSet",
  81.             "Graphics/System/Shadow",   "Graphics/System/Window"]
  82.   # 模块函数
  83.   module_function
  84.   #--------------------------------------------------------------------------
  85.   # ● 获取全部文件
  86.   #--------------------------------------------------------------------------
  87.   def get_all_files
  88.     @old_dir = Dir.pwd.s2u
  89.     @resource_type = []
  90.     FMs.each do |fm|
  91.       @resource_type << fm
  92.       @resource_type << fm.upcase
  93.     end
  94.     @all_files = []
  95.     @path = ""
  96.     next_file(@path)
  97.     Dir.chdir(@old_dir)
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 下一个文件
  101.   #--------------------------------------------------------------------------
  102.   def next_file(path)
  103.     Dir.chdir(@old_dir)
  104.     Dir.chdir(path) if path != ""
  105.     Dir["*"].each do |f|
  106.       if FileTest.directory?(f)
  107.         @path = @path + f + "/"
  108.         next_file(@path)
  109.       else
  110.         arr = f.split(/\./)
  111.         if @resource_type.include? arr.pop
  112.           fi = arr.shift
  113.           arr.each {|v| fi += "." + v }
  114.           @all_files << @path + fi
  115.         end
  116.       end
  117.     end
  118.     path_a = path.split(/\//)
  119.     @path = ""
  120.     (0...path_a.size - 1).each {|i| @path += path_a[i] + "/" }
  121.     Dir.chdir(@old_dir)
  122.     Dir.chdir(@path) if @path != ""
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 检测是否空文件名
  126.   #--------------------------------------------------------------------------
  127.   def check_file(arr, filename, path = "")
  128.     arr << path + filename unless filename == ""
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 获取事件列表文件列表
  132.   #--------------------------------------------------------------------------
  133.   def get_list_files(list)
  134.     arr = []
  135.     list.each do |cmd|
  136.       case cmd.code
  137.       when 101
  138.         check_file(arr, cmd.parameters[0], PATH[5])
  139.       when 132
  140.         check_file(arr, cmd.parameters[0].name, PATH[11])
  141.       when 133
  142.         check_file(arr, cmd.parameters[0].name, PATH[13])
  143. #~       when 212 # 显示动画,暂不分析
  144.       when 231
  145.         check_file(arr, cmd.parameters[1], PATH[7])
  146.       when 241
  147.         check_file(arr, cmd.parameters[0].name, PATH[11])
  148.       when 245
  149.         check_file(arr, cmd.parameters[0].name, PATH[12])
  150.       when 249
  151.         check_file(arr, cmd.parameters[0].name, PATH[13])
  152.       when 250
  153.         check_file(arr, cmd.parameters[0].name, PATH[14])
  154. #~       when 282 # 更改图块组,暂不分析
  155.       when 283
  156.         check_file(arr, cmd.parameters[0], PATH[1])
  157.         check_file(arr, cmd.parameters[1], PATH[2])
  158.       when 284
  159.         check_file(arr, cmd.parameters[0], PATH[6])
  160. #~       when 301 # 战斗处理,暂不分析
  161.       when 322
  162.         check_file(arr, cmd.parameters[1], PATH[4])
  163.         check_file(arr, cmd.parameters[3], PATH[5])
  164.       when 323
  165.         check_file(arr, cmd.parameters[1], PATH[4])
  166. #~       when 337 # 显示战斗动画,暂不分析
  167.       end
  168.     end
  169.     return arr
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 获取动画文件列表
  173.   #--------------------------------------------------------------------------
  174.   def get_ani_files
  175.     @ani_files = []
  176.     load_data("Data/Animations.rvdata2").each do |ani|
  177.       if ani.nil?
  178.         @ani_files << []
  179.       else
  180.         arr = []
  181.         check_file(arr, ani.animation1_name, PATH[0])
  182.         check_file(arr, ani.animation2_name, PATH[0])
  183.         ani.timings.each {|timing| check_file(arr, timing.se.name, PATH[14]) }
  184.         @ani_files << arr
  185.       end
  186.     end
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 获取角色文件列表
  190.   #--------------------------------------------------------------------------
  191.   def get_act_files
  192.     @act_files = []
  193.     load_data("Data/Actors.rvdata2").each do |act|
  194.       if act.nil?
  195.         @act_files << []
  196.       else
  197.         arr = []
  198.         check_file(arr, act.character_name, PATH[4])
  199.         check_file(arr, act.face_name, PATH[5])
  200.         @act_files << arr
  201.       end
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 获取敌人文件列表
  206.   #--------------------------------------------------------------------------
  207.   def get_ene_files
  208.     @ene_files = []
  209.     load_data("Data/Enemies.rvdata2").each do |ene|
  210.       if ene.nil?
  211.         @ene_files << []
  212.       else
  213.         arr = []
  214.         check_file(arr, ene.battler_name, PATH[3])
  215.         @ene_files << arr
  216.       end
  217.     end
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 获取敌群文件列表
  221.   #--------------------------------------------------------------------------
  222.   def get_trp_files
  223.     @trp_files = []
  224.     load_data("Data/Troops.rvdata2").each do |trp|
  225.       if trp.nil?
  226.         @trp_files << []
  227.       else
  228.         arr = []
  229.         trp.pages.each {|page| arr += get_list_files(page.list) }
  230.         @trp_files << arr
  231.       end
  232.     end
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 获取图块文件列表
  236.   #--------------------------------------------------------------------------
  237.   def get_til_files
  238.     @til_files = []
  239.     load_data("Data/Tilesets.rvdata2").each do |til|
  240.       if til.nil?
  241.         @til_files << []
  242.       else
  243.         arr = []
  244.         til.tileset_names.each {|ts| check_file(arr, ts, PATH[10]) }
  245.         @til_files << arr
  246.       end
  247.     end
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● 获取公共事件文件列表
  251.   #--------------------------------------------------------------------------
  252.   def get_com_files
  253.     @com_files = []
  254.     load_data("Data/CommonEvents.rvdata2").each do |com|
  255.       if com.nil?
  256.         @com_files << []
  257.       else
  258.         @com_files << get_list_files(com.list)
  259.       end
  260.     end
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 获取系统文件列表
  264.   #--------------------------------------------------------------------------
  265.   def get_sys_files
  266.     arr = []
  267.     data_system = load_data("Data/System.rvdata2")
  268.     check_file(arr, data_system.boat.character_name, PATH[4])
  269.     check_file(arr, data_system.ship.character_name, PATH[4])
  270.     check_file(arr, data_system.airship.character_name, PATH[4])
  271.     check_file(arr, data_system.title1_name, PATH[8])
  272.     check_file(arr, data_system.title2_name, PATH[9])
  273.     check_file(arr, data_system.title_bgm.name, PATH[11])
  274.     check_file(arr, data_system.battle_bgm.name, PATH[11])
  275.     check_file(arr, data_system.battle_end_me.name, PATH[13])
  276.     check_file(arr, data_system.gameover_me.name, PATH[13])
  277.     data_system.sounds.each {|sound| check_file(arr, sound.name, PATH[14]) }
  278.     @sys_files = arr + SYSTEM
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 获取地图文件列表
  282.   #--------------------------------------------------------------------------
  283.   def get_map_files
  284.     map_num = Dir.glob("Data/Map***.rvdata2").size
  285.     @map_files = {}
  286.     (1...map_num).each do |i|
  287.       name = sprintf("Data/Map%03d.rvdata2", i)
  288.       map = load_data(name)
  289.       @map_files[name] = []
  290.       @map_files[name] += @til_files[map.tileset_id]
  291.       check_file(@map_files[name], map.bgm.name, PATH[11])
  292.       check_file(@map_files[name], map.bgs.name, PATH[12])
  293.       check_file(@map_files[name], map.battleback1_name, PATH[1])
  294.       check_file(@map_files[name], map.battleback2_name, PATH[2])
  295.       map.events.each_value do |value|
  296.         value.pages.each do |page|
  297.           check_file(@map_files[name], page.graphic.character_name, PATH[4])
  298.           @map_files[name] += get_list_files(page.list)
  299.         end
  300.       end
  301.     end
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 链接文件列表
  305.   #--------------------------------------------------------------------------
  306.   def link_list
  307.     self.get_all_files
  308.     self.get_ani_files
  309.     self.get_act_files
  310.     self.get_ene_files
  311.     self.get_trp_files
  312.     self.get_til_files
  313.     self.get_com_files
  314.     self.get_sys_files
  315.     self.get_map_files
  316.     @linked_files = []
  317.     @ani_files.each {|arr| @linked_files += arr }
  318.     @act_files.each {|arr| @linked_files += arr }
  319.     @ene_files.each {|arr| @linked_files += arr }
  320.     @trp_files.each {|arr| @linked_files += arr }
  321.     @til_files.each {|arr| @linked_files += arr }
  322.     @com_files.each {|arr| @linked_files += arr }
  323.     @linked_files += @sys_files
  324.     @map_files.each_value {|value| @linked_files += value }
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 移除文件
  328.   #--------------------------------------------------------------------------
  329.   def remove_files
  330.     self.link_list
  331.     arr = @all_files.uniq - @linked_files.uniq
  332.     begin;Dir.mkdir("BAK");rescue;end
  333.     File.open("BAK/list.txt", "wb") {|f| arr.sort.each {|i| f.write i+"\r\n" } }
  334.     arr.each do |f|
  335.       FMs.each do |fm|
  336.         if File.exist?(f + "." + fm)
  337.           from = f + "." + fm
  338.           to = "BAK/" + from.gsub(/\//, "_")
  339.           begin;File.rename(from, to);rescue;p from + "-移除失败";end
  340.           break
  341.         elsif File.exist?(f + "." + fm.upcase)
  342.           from = f + "." + fm.upcase
  343.           to = "BAK/" + from.gsub(/\//, "_")
  344.           begin;File.rename(from, to);rescue;p from + "-移除失败";end
  345.           break
  346.         end
  347.       end
  348.     end
  349.     msgbox_p "Done!"
  350.     exit
  351.   end
  352. end

  353. # 移除文件
  354. #~ RTP_RIP.remove_files
复制代码

点评

谢谢好人,等级不够不能塞糖  发表于 2013-7-15 14:00
我不清楚原作者删除自己帖子的用意……所以暂时不能给认可了,抱歉。  发表于 2012-8-24 07:53

评分

参与人数 2星屑 +66 梦石 +1 收起 理由
迷糊的安安 + 1 认可答案
Shy07 + 66 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1641 小时
注册时间
2011-9-26
帖子
313
3
发表于 2013-3-9 22:34:32 | 只看该作者
@victor0181 ,我居然一搜就搜到了= =
@迷糊的安安 ,能认可就认可吧,我是在后台手误把帖子删了,没什么用意
愿善用者善用之
https://github.com/Shy07/SINRGE2
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 11:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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