您现在看到的是 66RPG.com 的资源列表,若这些对您有帮助,
希望您以充值论坛VIP点数的方式为我们捐款,
您的捐款将用于本站的三台服务器托管费,以及网通100M带宽的租金

66RPG充值页面 66RPG充值页面

最近更新记录

  • 2012-02-14 : 新增两个音乐素材
  • 2012-02-14 : 新增一个游戏资源
  • 2012-02-10 : 新增3个素材资源
  • 2012-02-09 : 新增/更新16个资源

66RPG 站内搜索

精确(推荐) 全文

本站收集内容是为了便于让游戏制作爱好者互相学习与交流,所有内容的版权与著作权均归原作者/公司所有。如进行有可能引起纠纷的使用,建议您先与原作方沟通。
数据包的制作、加密以及解压运行
更新:2012-01-27 12:54:45 | 点击量:1047
数据包的制作、加密以及解压运行
脚本作者:灼眼的夏娜
版本更新:Ver 1.0
适用版本:RPG Maker XP
数据包的制作、加密以及解压运行

Main中的
 $data_package = File.open("data_package.dat","rb")
 $resource_list = load_data("resource_list.inf")
这两行可以放到脚本的最上面去,不然也许会出错呢,具体原因自己理解……

其他具体的用法参考每个部分的说明处~
 
 
脚本内容第1部分:制作数据包部分

#==============================================================================
# ★ 说明部分 ★
#==============================================================================

=begin
 脚本:【制作数据包】
 功能:对图片、音乐资源等进行数据包的制作等。
 说明: 直接用 Data_Package.start 使用。
 作者:灼眼的夏娜
 补充: 在使用此脚本是时请确保所有的音乐图片文件都在游戏目录下。
=end

#==============================================================================
# ★ 脚本部分 ★
#==============================================================================

#==============================================================================
# ■ Data_Package
#------------------------------------------------------------------------------
#  数据包生成的模块。
#==============================================================================

module Data_Package
 #--------------------------------------------------------------------------
 # ● 开始制作数据包
 #--------------------------------------------------------------------------
 def self.start
   @old_dir = Dir.pwd
   @resource_type = ["bmp","jpg","png","wav","mp3","ogg","wma","mid"]
   @dump_filenames = []
   @path = ""
   self.next_file(@path)
   Dir.chdir(@old_dir)
   self.make(@dump_filenames)
 end
 #--------------------------------------------------------------------------
 # ● 搜索全部资源文件
 #--------------------------------------------------------------------------
 def self.next_file(path)
   Dir.chdir(@old_dir)
   Dir.chdir(path) if path != ""
   for f in Dir["*"]
     if FileTest.directory?(f)
       @path = @path + f + "/"
       self.next_file(@path)
     else
       if @resource_type.include? f.split(/\./)[1]
         @dump_filenames.push @path + f
       end
     end
   end
   path_a = path.split(/\//)
   @path = ""
   for i in 0...path_a.size - 1
     @path += path_a[i] + "/"
   end
   Dir.chdir(@old_dir)
   Dir.chdir(@path) if @path != ""
 end
 #--------------------------------------------------------------------------
 # ● 包的生成
 #--------------------------------------------------------------------------
 def self.make(filenames)
   database = File.open("data_package.dat","wb")
   resource_list = "resource_list = {\n"
   begin
     for name in filenames
       begin
         fr = File.open(name,"rb")
         code = fr.read
         posop = database.pos
         database.write Zlib::Deflate.deflate(code,9)
         posed = database.pos
         resource_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",posop,posed)
       rescue
         print "\"#{name}\" can't open"
       ensure
         fr.close
       end
     end
   ensure
     resource_list.slice!(resource_list.size-2,1)
     resource_list += "}\n"
     eval resource_list
     save_data(resource_list,"resource_list.inf")
     database.close
     p 'make done'
     exit
   end
 end
end

#==============================================================================
# ★ 结束 ★
#==============================================================================


脚本内容第2部分:解压缩运行部分

#==============================================================================
# ★ 说明部分 ★
#==============================================================================

=begin
 脚本:【解压数据包以及运行】
 功能:对生成的数据包进行解压以及运行。
 说明: 程序中的$resource_list和$data_package的名字可以更改,
       但要和Main中的名字相同。
 作者:灼眼的夏娜
 补充: 1、用此脚本替换原来的Main脚本即可。
       2、$resource_list 和 $data_package 这两个变量最好在脚本的最上面就载入。
=end

#==============================================================================
# ★ 脚本部分 ★
#==============================================================================

#==============================================================================
# ■ File
#------------------------------------------------------------------------------
#  处理文件的类。
#==============================================================================

class File < IO
 #--------------------------------------------------------------------------
 # ● 解码代码
 #--------------------------------------------------------------------------
 def self.inflate(filename)
   pos = $resource_list[filename]
   $data_package.pos = pos[0]
   code = $data_package.read(pos[1] - pos[0])
   code = Zlib::Inflate.inflate(code)
   return code
 end
end

#==============================================================================
# ■ Bitmap
#------------------------------------------------------------------------------
#  处理位图的类。
#==============================================================================

class Bitmap < Object
 
 #--------------------------------------------------------------------------
 # ● 类变量
 #--------------------------------------------------------------------------
 @@resource_type = [nil,"bmp","jpg","png","wav","mp3","ogg","wma","mid"]
 #--------------------------------------------------------------------------
 # ● 重定义new方法
 #--------------------------------------------------------------------------
 def self.new(*str)
   @p = *str
   filetype = @p.split(/\./)[1] if @p.is_a?(String)
   if @p.is_a?(String) and @@resource_type.include? filetype
     filename = @p.split(/\./)[0]
     @fe_code = File.inflate(filename)
     filename = filename.split(/\//)[-1]
     f = File.open(filename+".tem","wb")
     f.write @fe_code
     f.close
     return Bitmap_W17.new(filename+".tem")
   end
   super
 end
end

#==============================================================================
# ■ Bitmap_W17
#------------------------------------------------------------------------------
#  Bitmap的子类。
#==============================================================================

class Bitmap_W17 < Bitmap
 
 #--------------------------------------------------------------------------
 # ● 重定义initialize方法
 #--------------------------------------------------------------------------
 def initialize(*str)
   @p = *str
   super(*str)
   File.delete(@p) if @p.is_a?(String) and File.exist?(@p)
 end
 
end

#==============================================================================
# ■ Audio
#------------------------------------------------------------------------------
#  处理声音相关的模块。
#==============================================================================

module Audio
 #--------------------------------------------------------------------------
 # ● 重载
 #--------------------------------------------------------------------------
 @w17_bgm = method("bgm_play") if @w17_bgm.nil?
 @w17_bgs = method("bgs_play") if @w17_bgs.nil?
 @w17_me = method("me_play") if @w17_me.nil?
 @w17_se = method("se_play") if @w17_se.nil?
 #--------------------------------------------------------------------------
 # ● 重载 bgm_play
 #--------------------------------------------------------------------------
 def self.bgm_play(filename, volume = 100, pitch = 100)
   self.decode(filename, volume, pitch, "@w17_bgm")
 end
 #--------------------------------------------------------------------------
 # ● 重载 bgs_play
 #--------------------------------------------------------------------------
 def self.bgs_play(filename, volume = 80, pitch = 100)
   self.decode(filename, volume, pitch, "@w17_bgs")
 end
 #--------------------------------------------------------------------------
 # ● 重载 me_play
 #--------------------------------------------------------------------------
 def self.me_play(filename, volume = 100, pitch = 100)
   self.decode(filename, volume, pitch, "@w17_me")
 end
 #--------------------------------------------------------------------------
 # ● 重载 se_play
 #--------------------------------------------------------------------------
 def self.se_play(filename, volume = 80, pitch = 100)
   self.decode(filename, volume, pitch, "@w17_se")
 end
 #--------------------------------------------------------------------------
 # ● 解码
 #--------------------------------------------------------------------------
 def self.decode(filename,volume,pitch,w17_str)
   filename = filename.split(/\./)[0]
   code = File.inflate(filename)
   filename = filename.split(/\//)[-1]
   fw = File.open(filename+".tem","wb")
   fw.write code
   fw.close
   eval("#{w17_str}.call(filename+\".tem\", volume, pitch)")
   File.delete(filename+".tem")
 end
end
#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
#  各定义结束后、从这里开始实际处理。
#==============================================================================

begin
 #--------------------------------------------------------------------------
 # ● 载入数据包和资源列表
 #--------------------------------------------------------------------------
 $data_package = File.open("data_package.dat","rb")
 $resource_list = load_data("resource_list.inf")
 # 准备过渡
 # 设置系统默认字体
 Font.default_name = (["黑体"])
 Graphics.freeze
 # 生成场景对像 (标题画面)
 $scene = Scene_Title.new
 # $scene 为有效的情况下调用 main 过程
 while $scene != nil
   $scene.main
 end
 # 淡入淡出
 Graphics.transition(20)
rescue Errno::ENOENT
 # 补充 Errno::ENOENT 以外错误
 # 无法打开文件的情况下、显示信息后结束
 filename = $!.message.sub("No such file or directory - ", "")
 print("找不到文件 #{filename}。 ")
ensure
 $data_package.close
end

#==============================================================================
# ★ 结束 ★
#==============================================================================

搜到一些相关内容,看看有没有有用的:

教程 : 物品颜色描绘脚本教程 : 浅谈动态菜单背景的制作教程 : 个性化商店教程 : RMVX升级提示教程 : 自定义多货币脚本教程 : VX呼出对话框教程 : 战斗AI脚本教程 : VX地图名自动显示教程 : VX双远景图系统(XP移植)教程 : 武器决定技能教程 : 得失物品金钱提示(云版)教程 : 美化战斗时候的角色选项窗口教程 : 华丽镜头移动脚本 VX化教程 : vx新菜单样式教程 : 跟隨光标自修正位置的详细帮助窗..教程 : 一些RGSS默认方法的简单扩展教程 : 叶子的详尽任务显示界面 vx版教程 : 游戏窗口中显示金钱教程 : VX用八方向走(可加速)教程 : rmvx时钟教程 : 去掉"逃跑" 将逃跑加入菜单选..教程 : VX版商店的价格变动教程 : 给装备附加多个自动状态教程 : 卡拉OK形式显示歌词教程 : VX开头画面特效教程 : VX使用单张头像图档教程 : 滚动字幕(从XP移植)教程 : 统一定义对话关键词颜色教程 : 敌人能力值自动设定教程 : 脚本小讲堂[4]

没找到你想要的?可以使用搜索功能 ↓

66RPG 站内搜索

精确(推荐) 全文

评论啦