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

Project1

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

[RMVA发布] [RGSS3] VX Ace RTP 脱离脚本

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

跳转到指定楼层
1
发表于 2016-10-16 16:59:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RaidenInfinity 于 2016-10-31 15:14 编辑

算是我第一次在技术区发帖吧。是应游戏发布大区改版而写的脚本,旨在协助新手发行脱离RTP运行,但不至于容量过大的游戏。
此脚本的原理是遍历数据库和所有地图文件,确认游戏所使用的素材后,从电脑内安装的RTP文件夹复制素材到游戏文件夹。
插件脚本或事件脚本指令使用的素材不被考虑,而且如果有素材的替换,此脚本不会帮忙删除。遇到这种状况请自行解决。
毕竟脱离RTP是游戏制作的最终阶段,已经到了发行的地步了,不是吗?

好,废话说完了,上脚本。



  1. #RTP脱离脚本 by RaidenInfinity
  2. #调用方法:在main上方写:
  3. #RTP_Pack.pack_rtp

  4. module RTP_Pack
  5.   
  6. #RTP的文件夹。请自行寻找。
  7.   RTP_PATH = "C:/Program Files (x86)/RPG Maker VX Ace/RTP"
  8.   
  9.   class << self
  10.    
  11.   def pack_rtp
  12.     $res_list = []
  13.     p "操作开始!"
  14.     perform_select
  15.     p "复制文件中…请稍候…"
  16.     perform_pack
  17.     $res_list = nil
  18.     p "操作完成!请记得将Game.ini里面的RTP=RPGVXAce"
  19.     p "改成RTP="
  20.     p "以真正脱离RTP!"
  21.   end
  22.   
  23.   def g_path(a,b)
  24.     $res_list ||= []
  25.     return if b == ""
  26.     $res_list.push("Graphics/" + a + "/" + b)
  27.   end

  28.   def a_path(a,b)
  29.     $res_list ||= []
  30.     return if b == ""
  31.     $res_list.push("Audio/" + a + "/" + b)
  32.   end
  33.   
  34.   def process_event(event)
  35.     event.pages.each{|p|
  36.       g_path("Characters",p.graphic.character_name)
  37.       process_move_route(p.move_route)
  38.       process_event_list(p.list)
  39.     }
  40.   end

  41.   def process_move_route(route)
  42.     route.list.each{|s|
  43.       g_path("Characters",s.parameters[0]) if  s.code == 41
  44.       a_path("SE",s.parameters[0].name) if  s.code == 44
  45.     }
  46.   end

  47.   def process_event_list(list)
  48.     list.each{|s|
  49.       case s.code
  50.         when 205; process_move_route(s.parameters[1])
  51.         when 231; g_path("Pictures",s.parameters[1])
  52.         when 241; a_path("BGM", s.parameters[0].name)
  53.         when 245; a_path("BGS", s.parameters[0].name)
  54.         when 249; a_path("ME", s.parameters[0].name)
  55.         when 250; a_path("SE", s.parameters[0].name)  
  56.         when 132; a_path("BGM", s.parameters[0].name)
  57.         when 133; a_path("ME", s.parameters[0].name)  
  58.         when 322; g_path("Characters",s.parameters[1])
  59.                   g_path("Faces",s.parameters[3])  
  60.         when 323; g_path("Characters",s.parameters[1])
  61.         when 283; g_path("Battlebacks1",s.parameters[0])  
  62.                   g_path("Battlebacks2",s.parameters[1])
  63.         when 284; g_path("Parallaxes",s.parameters[0])           
  64.       end  
  65.     }
  66.   end

  67.   def perform_select
  68.       DataManager.load_normal_database
  69.       $data_actors.each{|s|   next if !s
  70.         g_path("Characters",s.character_name)
  71.         g_path("Faces",s.face_name)
  72.       }
  73.       $data_enemies.each{|s|  next if !s
  74.         g_path("Battlers",s.battler_name)
  75.       }
  76.       $data_animations.each{|s| next if !s
  77.         g_path("Animations",s.animation1_name)
  78.         g_path("Animations",s.animation2_name)
  79.         s.timings.each{|t| a_path("SE",t.se.name) }
  80.       }
  81.       $data_tilesets.each{|s| next if !s
  82.         s.tileset_names.each{|t| g_path("Tilesets",t) }
  83.       }
  84.       s = $data_system
  85.       g_path("Titles1",s.title1_name)
  86.       g_path("Titles2",s.title2_name)
  87.       g_path("Characters",s.boat.character_name)
  88.       g_path("Characters",s.ship.character_name)
  89.       g_path("Characters",s.airship.character_name)
  90.       a_path("BGM",s.boat.bgm.name)
  91.       a_path("BGM",s.ship.bgm.name)
  92.       a_path("BGM",s.airship.bgm.name)
  93.       a_path("BGM",s.title_bgm.name)
  94.       a_path("BGM",s.battle_bgm.name)
  95.       a_path("ME",s.battle_end_me.name)
  96.       a_path("ME",s.gameover_me.name)
  97.       s.sounds.each{|t| a_path("SE",t.name) }
  98.         
  99.       g_path("System","Window")
  100.       g_path("System","IconSet")
  101.       g_path("System","Shadow")
  102.       g_path("System","Balloon")
  103.       g_path("System","BattleStart")
  104.       g_path("System","GameOver")
  105.       g_path("Battlebacks1","Grassland")
  106.       g_path("Battlebacks2","Grassland")

  107.       $data_mapinfos.each{|k,v|
  108.         map = load_data(sprintf("Data/Map%03d.rvdata2", k))
  109.         g_path("Parallaxes",map.parallax_name)
  110.         g_path("Battlebacks1",map.battleback1_name)
  111.         g_path("Battlebacks2",map.battleback2_name)
  112.         a_path("BGM", map.bgm.name)
  113.         a_path("BGS", map.bgs.name)
  114.         map.events.each{|k,v|
  115.           process_event(v)
  116.         }
  117.       }

  118.       $data_common_events.each{|s| next if !s
  119.         process_event_list(s.list)
  120.       }
  121.       $res_list.uniq!.delete("")
  122.       $res_list = $res_list.sort
  123.       p $res_list  
  124.   end
  125.       
  126.   def perform_pack
  127.     if !(Dir.exists?(RTP_PATH) && Dir.exists?(RTP_PATH + "/Graphics") &&
  128.         Dir.exists?(RTP_PATH + "/Audio"))
  129.       throw "请在RTP_PATH内填入正确的RTP路径!"
  130.     end  
  131.     $res_list.each{|s|
  132.       r = RTP_PATH + "/" + s
  133.       [".png",".jpg",".bmp",".ogg",".mp3",".wma",".wav"].each{|i|
  134.           a = File.exist?(r + i)
  135.           next if !a
  136.           a = File.exist?(s + i)
  137.           break if a
  138.           move_file(r + i,s + i)
  139.           break
  140.       }
  141.     }
  142.   end  
  143.    
  144.   def move_file(r,s)
  145.     File.open(r,"rb"){|f|
  146.       File.open(s,"wb"){|g|
  147.         v = f.readlines
  148.         v.each{|i|
  149.           g.write(i)
  150.         }  
  151.       }
  152.     }
  153.   end  
  154.    
  155.   end
  156. end  
复制代码


附截图的详细使用方法有时间再写。
文字叙述的话,基本使用方法是:
1. 将这个插件脚本安装到Main以上
2. 填写RTP_PATH,请自行寻找。汉化版的RMVA大概安装位置在C:/Program Files/RPG Maker VX Ace/RTP,如果是64位电脑的话,就如脚本内所写的那样。
3. 在Main脚本里面,rgss_main { SceneManager.run }的上方写:RTP_Pack.pack_rtp
4. 等待运行结束,标题画面出来就是成功了。如果有开控制台的话,会看到游戏使用素材的详细列表。
5. 这还没结束呢!打开Game.ini,把RTP=RPGVXACE 改成 RTP= 以完全脱离RTP的使用。
6. 删除本脚本和在Main的调用。因为你已经不需要这个脚本了。怕留着会出事。
7. 现在你可以打包游戏了。请不要勾选附带RTP数据,因为你刚已经弄完了!

使用上有什么问题,或者有建议的,可以留个回复。以上。



-

评分

参与人数 4星屑 +470 梦石 +1 +1 收起 理由
Kim_Shyuen + 1 精品文章
怪蜀黍 + 225 + 1 发布奖励。
御曹司 + 45 塞糖
鑫晴 + 200 塞糖

查看全部评分

Lv1.梦旅人

梦石
0
星屑
70
在线时间
38 小时
注册时间
2016-9-14
帖子
33
2
发表于 2016-10-16 20:08:11 | 只看该作者
很不错的东西,之前在黑科技那看到XP有一个还挺想要。
今天随便转转就找到VA的了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
77 小时
注册时间
2016-7-12
帖子
34
3
发表于 2016-10-31 13:45:11 | 只看该作者
115行错误啥的

点评

已更新。  发表于 2016-10-31 15:15
已解决  发表于 2016-10-31 14:39
Encoding::UndefinedConversionError 。 "/xE5" from ASCII-8BIT to UTF-8  发表于 2016-10-31 14:32
他们说是中文路径的锅,但是全改英文还是不行  发表于 2016-10-31 14:29
另外,此脚本只在默认工程测试过并成功。如果有任何与它冲突的脚本存在,请联系脚本的作者,或自己解决。  发表于 2016-10-31 14:13
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 01:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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