赞 | 0 |
VIP | 230 |
好人卡 | 0 |
积分 | 1 |
经验 | 7916 |
最后登录 | 2019-1-21 |
在线时间 | 352 小时 |
Lv1.梦旅人 万物创造者
- 梦石
- 0
- 星屑
- 54
- 在线时间
- 352 小时
- 注册时间
- 2008-2-15
- 帖子
- 2432
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
啥都不说了,就是理论篇的实践部分。使用了轮回者的输出图片脚本,参考了Is****雪某个脚本的思路。
调用方法:Hackproject.hack
以下仅为脚本,具体使用方法请参考理论篇……
除了速度rp外没啥大问题。
注意:本脚本仅能提取使用过的图片素材。对于游戏里没有使用过的素材无能为力。也就是说,你完全可以把它当素材提取器用= =
接下来一星期没空上了,有问题可能会过一段时间才能看到,见谅- -
- #==============================================================================
- # ■ Hackproject
- #------------------------------------------------------------------------------
- # 破解RPG Maker VX 的加密文件。
- #==============================================================================
- module Hackproject
- #--------------------------------------------------------------------------
- # ● 破解加密文件
- #--------------------------------------------------------------------------
- def self.hack
- p '破解速度很慢,默认rtp工程需15分钟,大型游戏可能需1-3小时,需要足够的耐心哦~'
- p '注意:只有当游戏窗口处于活动状态时才进行破解哦~您可以随时切换至其他程序,不过破解会暂停。'
- p '按下确定后正式开始破解。破解时会产生长时间的画面卡住不动,FPS降为0或1,这是正常现象,您可以随时到游戏文件夹下察看破解进度。'
- make_dir("break/Data")
- save_data(load_data("Data/Scripts.rvdata"),"break/Data/Scripts.rvdata")
- save_data(load_data("Data/Actors.rvdata"),"break/Data/Actors.rvdata")
- save_data(load_data("Data/Classes.rvdata"),"break/Data/Classes.rvdata")
- save_data(load_data("Data/Skills.rvdata"),"break/Data/Skills.rvdata")
- save_data(load_data("Data/Items.rvdata"),"break/Data/Items.rvdata")
- save_data(load_data("Data/Weapons.rvdata"),"break/Data/Weapons.rvdata")
- save_data(load_data("Data/Armors.rvdata"),"break/Data/Armors.rvdata")
- save_data(load_data("Data/Enemies.rvdata"),"break/Data/Enemies.rvdata")
- save_data(load_data("Data/Troops.rvdata"),"break/Data/Troops.rvdata")
- save_data(load_data("Data/States.rvdata"),"break/Data/States.rvdata")
- save_data(load_data("Data/Animations.rvdata"),"break/Data/Animations.rvdata")
- save_data(load_data("Data/CommonEvents.rvdata"),"break/Data/CommonEvents.rvdata")
- save_data(load_data("Data/System.rvdata"),"break/Data/System.rvdata")
- save_data(load_data("Data/Areas.rvdata"),"break/Data/Areas.rvdata")
- save_data(load_data("Data/MapInfos.rvdata"),"break/Data/MapInfos.rvdata")
- for i in load_data("Data/MapInfos.rvdata").keys
- map = sprintf("Map%03d.rvdata", i)
- save_data(load_data("Data/#{map}"),"break/Data/#{map}")
- unless File.exist?("break/Graphics/Parallaxes/#{load_data("Data/#{map}").parallax_name}")
- if load_data("Data/#{map}").parallax_name != ""
- a = Cache.parallax(load_data("Data/#{map}").parallax_name)
- a.make_png(load_data("Data/#{map}").parallax_name,"break/Graphics/Parallaxes/")
- end
- end
- for k in load_data("Data/#{map}").events.values
- for j in k.pages
- unless File.exist?("break/Graphics/Characters/#{j.graphic.character_name}")
- a = Cache.character(j.graphic.character_name)
- a.make_png(j.graphic.character_name,"break/Graphics/Characters/") if !["",nil].include?(a)
- end
- for event_command in j.list
- parameters = event_command.parameters
- case event_command.code
- when 101
- unless parameters[0].empty?
- unless File.exist?("break/Graphics/Faces/#{parameters[0]}")
- a = Cache.face(parameters[0])
- a.make_png(parameters[0],"break/Graphics/Faces/")
- end
- end
- when 231
- a = Cache.picture(parameters[1])
- unless File.exist?("break/Graphics/Pictures/#{parameters[1]}")
- a.make_png(parameters[1],"break/Graphics/Pictures/")
- end
- when 322
- a = Cache.character(parameters[1])
- unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
- a.make_png(parameters[1],"break/Graphics/Characters/")
- end
- a = Cache.face(parameters[3])
- unless File.exist?("break/Graphics/Faces/#{parameters[3]}")
- a.make_png(parameters[3],"break/Graphics/Faces/")
- end
- when 323
- a = Cache.character(parameters[1])
- unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
- a.make_png(parameters[1],"break/Graphics/Characters/")
- end
- end
- end
- end
- end
- end
- for i in 1...$data_actors.size
- a = Cache.face($game_actors[i].face_name)
- a.make_png($game_actors[i].face_name,"break/Graphics/Faces/")
- b = Cache.character($game_actors[i].character_name)
- b.make_png($game_actors[i].character_name,"break/Graphics/Characters/")
- end
- for i in 1...$data_animations.size
- a = Cache.animation($data_animations[i].animation1_name, 0)
- unless $data_animations[i].animation1_name == ""
- unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation1_name}")
- a.make_png($data_animations[i].animation1_name,"break/Graphics/Anitmations/")
- end
- end
- a = Cache.animation($data_animations[i].animation2_name, 0)
- unless $data_animations[i].animation2_name == ""
- unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation2_name}")
- a.make_png($data_animations[i].animation2_name,"break/Graphics/Anitmations/")
- end
- end
- end
- for i in 1...$data_enemies.size
- a = Cache.battler($data_enemies[i].battler_name,0)
- unless File.exist?("break/Graphics/Battlers/#{$data_enemies[i].battler_name}")
- a.make_png($data_enemies[i].battler_name,"break/Graphics/Battlers/")
- end
- end
- a = Cache.character($data_system.boat.character_name)
- if a != nil
- a.make_png($data_system.boat.character_name,"break/Graphics/Characters/")
- end
- a = Cache.character($data_system.ship.character_name)
- if a != nil
- a.make_png($data_system.ship.character_name,"break/Graphics/Characters/")
- end
- a = Cache.character($data_system.airship.character_name)
- if a != nil
- a.make_png($data_system.airship.character_name,"break/Graphics/Characters/")
- end
- a = Cache.system("Balloon")
- a.make_png("Balloon","break/Graphics/System/")
- a = Cache.system("BattleFloor")
- a.make_png("BattleFloor","break/Graphics/System/")
- a = Cache.system("BattleStart")
- a.make_png("BattleStart","break/Graphics/System/")
- a = Cache.system("GameOver")
- a.make_png("GameOver","break/Graphics/System/")
- a = Cache.system("IconSet")
- a.make_png("IconSet","break/Graphics/System/")
- a = Cache.system("MessageBack")
- a.make_png("MessageBack","break/Graphics/System/")
- a = Cache.system("Shadow")
- a.make_png("Shadow","break/Graphics/System/")
- a = Cache.system("TileA1")
- a.make_png("TileA1","break/Graphics/System/")
- a = Cache.system("TileA2")
- a.make_png("TileA2","break/Graphics/System/")
- a = Cache.system("TileA3")
- a.make_png("TileA3","break/Graphics/System/")
- a = Cache.system("TileA4")
- a.make_png("TileA4","break/Graphics/System/")
- a = Cache.system("TileA5")
- a.make_png("TileA5","break/Graphics/System/")
- a = Cache.system("TileB")
- a.make_png("TileB","break/Graphics/System/")
- a = Cache.system("TileC")
- a.make_png("TileC","break/Graphics/System/")
- a = Cache.system("TileD")
- a.make_png("TileD","break/Graphics/System/")
- a = Cache.system("TileE")
- a.make_png("TileE","break/Graphics/System/")
- a = Cache.system("Title")
- a.make_png("Title","break/Graphics/System/")
- a = Cache.system("Window")
- a.make_png("Window","break/Graphics/System/")
- p '破解完成'
- end
- #--------------------------------------------------------------------------
- # ● 生成保存路径
- #--------------------------------------------------------------------------
- def self.make_dir(path)
- dir = path.split("/")
- for i in 0...dir.size
- unless dir == "."
- add_dir = dir[0..i].join("/")
- begin
- Dir.mkdir(add_dir)
- rescue
- end
- end
- end
- end
- end
- #==============================================================================
- # 本脚本出自www.66rpg.com,转载请注明。
- #==============================================================================
- =begin
- ==============================================================================
- Bitmap to PNG By 轮回者
- ==============================================================================
- 对Bitmap对象直接使用
-
- bitmap_obj.make_png(name[, path])
-
- name:保存文件名
- path:保存路径
- 感谢66、夏娜、金圭子的提醒和帮助!
-
- ==============================================================================
- =end
- module Zlib
- class Png_File < GzipWriter
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def make_png(bitmap_Fx,mode)
- @mode = mode
- @bitmap_Fx = bitmap_Fx
- self.write(make_header)
- self.write(make_ihdr)
- self.write(make_idat)
- self.write(make_iend)
- end
- #--------------------------------------------------------------------------
- # ● PNG文件头数据块
- #--------------------------------------------------------------------------
- def make_header
- return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
- end
- #--------------------------------------------------------------------------
- # ● PNG文件情报头数据块(IHDR)
- #--------------------------------------------------------------------------
- def make_ihdr
- ih_size = [13].pack("N")
- ih_sign = "IHDR"
- ih_width = [@bitmap_Fx.width].pack("N")
- ih_height = [@bitmap_Fx.height].pack("N")
- ih_bit_depth = [8].pack("C")
- ih_color_type = [6].pack("C")
- ih_compression_method = [0].pack("C")
- ih_filter_method = [0].pack("C")
- ih_interlace_method = [0].pack("C")
- string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
- ih_compression_method + ih_filter_method + ih_interlace_method
- ih_crc = [Zlib.crc32(string)].pack("N")
- return ih_size + string + ih_crc
- end
- #--------------------------------------------------------------------------
- # ● 生成图像数据(IDAT)
- #--------------------------------------------------------------------------
- def make_idat
- header = "\x49\x44\x41\x54"
- case @mode # 请54~
- when 1
- data = make_bitmap_data#1
- else
- data = make_bitmap_data
- end
- data = Zlib::Deflate.deflate(data, 8)
- crc = [Zlib.crc32(header + data)].pack("N")
- size = [data.length].pack("N")
- return size + header + data + crc
- end
- #--------------------------------------------------------------------------
- # ● 从Bitmap对象中生成图像数据 mode 1(请54~)
- #--------------------------------------------------------------------------
- def make_bitmap_data1
- w = @bitmap_Fx.width
- h = @bitmap_Fx.height
- data = []
- for y in 0...h
- data.push(0)
- for x in 0...w
- color = @bitmap_Fx.get_pixel(x, y)
- red = color.red
- green = color.green
- blue = color.blue
- alpha = color.alpha
- data.push(red)
- data.push(green)
- data.push(blue)
- data.push(alpha)
- end
- end
- return data.pack("C*")
- end
- #--------------------------------------------------------------------------
- # ● 从Bitmap对象中生成图像数据 mode 0
- #--------------------------------------------------------------------------
- def make_bitmap_data
- gz = Zlib::GzipWriter.open('hoge.gz')
- t_Fx = 0
- w = @bitmap_Fx.width
- h = @bitmap_Fx.height
- data = []
- for y in 0...h
- data.push(0)
- for x in 0...w
- t_Fx += 1
- if t_Fx % 10000 == 0
- Graphics.update
- end
- if t_Fx % 100000 == 0
- s = data.pack("C*")
- gz.write(s)
- data.clear
- #GC.start
- end
- color = @bitmap_Fx.get_pixel(x, y)
- red = color.red
- green = color.green
- blue = color.blue
- alpha = color.alpha
- data.push(red)
- data.push(green)
- data.push(blue)
- data.push(alpha)
- end
- end
- s = data.pack("C*")
- gz.write(s)
- gz.close
- data.clear
- gz = Zlib::GzipReader.open('hoge.gz')
- data = gz.read
- gz.close
- File.delete('hoge.gz')
- return data
- end
- #--------------------------------------------------------------------------
- # ● PNG文件尾数据块(IEND)
- #--------------------------------------------------------------------------
- def make_iend
- ie_size = [0].pack("N")
- ie_sign = "IEND"
- ie_crc = [Zlib.crc32(ie_sign)].pack("N")
- return ie_size + ie_sign + ie_crc
- end
- end
- end
- #==============================================================================
- # ■ Bitmap
- #------------------------------------------------------------------------------
- # 关联到Bitmap。
- #==============================================================================
- class Bitmap
- #--------------------------------------------------------------------------
- # ● 关联
- #--------------------------------------------------------------------------
- def make_png(name="like", path="",mode=0)
- make_dir(path) if path != ""
- Zlib::Png_File.open("temp.gz") {|gz|
- gz.make_png(self,mode)
- }
- Zlib::GzipReader.open("temp.gz") {|gz|
- $read = gz.read
- }
- f = File.open(path + name + ".png","wb")
- f.write($read)
- f.close
- File.delete('temp.gz')
- end
- #--------------------------------------------------------------------------
- # ● 生成保存路径
- #--------------------------------------------------------------------------
- def make_dir(path)
- dir = path.split("/")
- for i in 0...dir.size
- unless dir == "."
- add_dir = dir[0..i].join("/")
- begin
- Dir.mkdir(add_dir)
- rescue
- end
- end
- end
- end
- end
复制代码 |
|