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

Project1

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

[已经解决] 5VIP悬赏,工程打包后,开启游戏出现未知错误,help me!

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

跳转到指定楼层
1
发表于 2011-4-30 05:09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


压缩之前无任何错误

工程打包后,无论是加密数据还是不加密数据,运行游戏程序都会报错

  错误的是612行的 type, data = API.QueryValue(@hkey, name)

我用了PRABS2.0的脚本

请帮帮忙吧,真的很急,不知道为什么会发生这样的错误
  1. # 〓〓★〓〓    PA-ABS系统  〓〓★〓〓
  2. # 〓〓★〓〓 汉化 : 柳佳淇 〓〓★〓〓
  3. # 〓〓★〓〓原作者:PRCoders(PHCDO 和 RTH)〓〓★〓〓
  4. # 验证脚本的版本和作者部分
  5. # 无需设置,算作者保护版权吧
  6. # 提示消息100%汉化
  7. #==============================================================================
  8. # PRCoders - Module
  9. #==============================================================================
  10. # RPGVX
  11. #==============================================================================

  12. module PRCoders
  13.   
  14.   SCRIPTS = {}
  15.   LOADED_SCRIPTS = {}
  16.   AUTHORS = {}
  17.   @@scripts_counter = 0
  18.   @@loaded_scripts_counter = 0

  19.   #--------------------------------------------------------------------------
  20.   # Adiciona o script na lista dos scripts
  21.   #--------------------------------------------------------------------------
  22.   
  23.   def self.log_script(script_name, version = 1.0, author = "PRCoders")
  24.     key = [script_name, version]
  25.     SCRIPTS[key] = true
  26.     key = [script_name, nil]
  27.     unless SCRIPTS[key]
  28.       SCRIPTS[key] = true
  29.       @@scripts_counter += 1
  30.     end
  31.     return if author.nil?
  32.     AUTHORS[script_name] ||= []
  33.     AUTHORS[script_name].push(author) unless AUTHORS[script_name].include?(author)
  34.   end
  35.   
  36.   #--------------------------------------------------------------------------
  37.   # Adiciona o script na lista dos scripts carregados
  38.   #--------------------------------------------------------------------------
  39.   
  40.   def self.load_script(script_name, version = 1.0, author = "PRCoders")
  41.     key = [script_name, version]
  42.     if SCRIPTS[key].nil?
  43.       message = "没有找到相关脚本: \n名称: #{script_name} \n版本:#{version}"
  44.       self.call_message(message, "PR Coders", 48)
  45.       exit
  46.     end
  47.     LOADED_SCRIPTS[key] = true
  48.     key = [script_name, nil]
  49.     unless LOADED_SCRIPTS[key]
  50.       LOADED_SCRIPTS[key] = true
  51.       @@loaded_scripts_counter += 1
  52.     end
  53.   end   
  54.   
  55.   #--------------------------------------------------------------------------
  56.   # Verifica se pode carregar o script
  57.   #--------------------------------------------------------------------------
  58.   
  59.   def self.check_enabled?(script_name, version = nil)
  60.     return (self.logged_script?(script_name, version) and (!self.loaded_script?(script_name, version)))
  61.   end
  62.   
  63.   #--------------------------------------------------------------------------
  64.   # Verifica se está carregado e adicionado na lista
  65.   #--------------------------------------------------------------------------
  66.   
  67.   def self.logged_and_loaded?(script_name, version = nil)
  68.     return (self.logged_script?(script_name, version) and self.loaded_script?(script_name, version))
  69.   end
  70.   
  71.   #--------------------------------------------------------------------------
  72.   # Verifica se está carregado
  73.   #--------------------------------------------------------------------------
  74.   
  75.   def self.loaded_script?(script_name, version = nil)
  76.     key = [script_name, version]
  77.     return LOADED_SCRIPTS[key]
  78.   end
  79.   
  80.   #--------------------------------------------------------------------------
  81.   # Verifica se está adicionado na lista
  82.   #--------------------------------------------------------------------------
  83.   
  84.   def self.logged_script?(script_name, version = nil)
  85.     key = [script_name, version]
  86.     return SCRIPTS[key]
  87.   end
  88.   
  89.   #--------------------------------------------------------------------------
  90.   # Pega o Nome do jogo
  91.   #--------------------------------------------------------------------------
  92.   
  93.   def self.game_name
  94.     name = "\0" * 256
  95.     Win32API.new("kernel32", "GetPrivateProfileStringA", "ppppip", "i").call("Game", "Title", "", name, 255, ".\\Game.ini")
  96.     name.delete!("\0")
  97.     return name
  98.   end
  99.   
  100.   #--------------------------------------------------------------------------
  101.   # Pega o Nome da dll do jogo
  102.   #--------------------------------------------------------------------------
  103.   
  104.   def self.game_dll
  105.     library = "\0" * 256
  106.     Win32API.new("kernel32", "GetPrivateProfileStringA", "ppppip", "i").call("Game", "Library", "", library, 255, ".\\Game.ini")
  107.     library.delete!("\0")
  108.     return library
  109.   end
  110.   
  111.   #--------------------------------------------------------------------------
  112.   # Pega o Nome do RTP do jogo
  113.   #--------------------------------------------------------------------------
  114.   
  115.   def self.game_rtp
  116.     rtp = "\0" * 256
  117.     Win32API.new("kernel32", "GetPrivateProfileStringA", "ppppip", "i").call("Game", "RTP", "", rtp, 255, ".\\Game.ini")
  118.     rtp.delete!("\0")
  119.     return rtp
  120.   end
  121.   
  122.   #--------------------------------------------------------------------------
  123.   # Pega a ID da janela do jogo
  124.   #--------------------------------------------------------------------------
  125.   
  126.   def self.handel
  127.     return Win32API.new("user32", "FindWindowA", "pp", "i").call("RGSS Player", self.game_name)
  128.   end
  129.   
  130.   #--------------------------------------------------------------------------
  131.   # Chama uma mensagem
  132.   #--------------------------------------------------------------------------
  133.   
  134.   def self.call_message(message, title, id=0)
  135.     return Win32API.new("user32", "MessageBoxEx", "ippii", "i").call(self.handel, message, title, id, 0)
  136.   end
  137.   
  138.   #--------------------------------------------------------------------------
  139.   # Chama uma mensagem
  140.   #--------------------------------------------------------------------------
  141.   
  142.   def self.data_folder
  143.     return ENV["TEMP"] + "\\PRCoders\\#{self.game_name}"
  144.   end
  145.   
  146.   #--------------------------------------------------------------------------
  147.   # Chama uma mensagem
  148.   #--------------------------------------------------------------------------
  149.   
  150.   def self.data_filename
  151.     return ENV["TEMP"] + "\\PRCoders\\#{self.game_name}\\Data"
  152.   end

  153.   #--------------------------------------------------------------------------
  154.   # Cria os créditos
  155.   #--------------------------------------------------------------------------
  156.   
  157.   def self.create_credits(filename = "PRScripts.txt")
  158.     File.open(filename, "wb") {|file|
  159.       writed = []
  160.       counter = 0
  161.       message =  "============================================\r\n"
  162.       message += " 脚本使用的PRCoders模块\r\n"
  163.       message += " 共计:      #{@@scripts_counter}\r\n"
  164.       message += " 使用: #{@@loaded_scripts_counter}\r\n"
  165.       message += "============================================\r\n"
  166.       file.write(message)
  167.       for name, enabled in SCRIPTS
  168.         next if name[1].nil?
  169.         next if writed.include?(name)
  170.         writed.push(name)
  171.         counter += 1
  172.         message =  "============================================\r\n"
  173.         message += " - 脚本 #{counter}\r\n"
  174.         message += "--------------------------------------------\r\n"
  175.         message += "名称: #{name[0]}\r\n"
  176.         message += "版本: #{name[1]}\r\n"
  177.         authors = AUTHORS[name]
  178.         if authors.nil?
  179.           authors = ["PRCoders"]
  180.         end
  181.         for item in authors
  182.           item.gsub!(/[Pp][Rr][Cc][Oo][Dd][Ee][Rr][Ss]/) {
  183.             "PRCoders (PHCDO e RTH)"
  184.           }
  185.         end
  186.         if authors.size == 1
  187.           message += "制作者: #{authors[0]}\r\n"
  188.         else
  189.           message += "制作团队: "
  190.           for author in authors
  191.             message += "#{author}\r\n         "
  192.           end
  193.         end
  194.         file.write(message)
  195.       end
  196.     }
  197.   end
  198.    
  199. end

  200. #===============================================================================
  201. # - Classe Win32::Registry
  202. # ------------------------------------------------------------------------------
  203. # Retirado do Ruby.
  204. #===============================================================================

  205. module Win32
  206.   class Registry
  207.     module Constants
  208.       HKEY_CLASSES_ROOT = 0x80000000
  209.       HKEY_CURRENT_USER = 0x80000001
  210.       HKEY_LOCAL_MACHINE = 0x80000002
  211.       HKEY_USERS = 0x80000003
  212.       HKEY_PERFORMANCE_DATA = 0x80000004
  213.       HKEY_PERFORMANCE_TEXT = 0x80000050
  214.       HKEY_PERFORMANCE_NLSTEXT = 0x80000060
  215.       HKEY_CURRENT_CONFIG = 0x80000005
  216.       HKEY_DYN_DATA = 0x80000006
  217.       
  218.       REG_NONE = 0
  219.       REG_SZ = 1
  220.       REG_EXPAND_SZ = 2
  221.       REG_BINARY = 3
  222.       REG_DWORD = 4
  223.       REG_DWORD_LITTLE_ENDIAN = 4
  224.       REG_DWORD_BIG_ENDIAN = 5
  225.       REG_LINK = 6
  226.       REG_MULTI_SZ = 7
  227.       REG_RESOURCE_LIST = 8
  228.       REG_FULL_RESOURCE_DESCRIPTOR = 9
  229.       REG_RESOURCE_REQUIREMENTS_LIST = 10
  230.       REG_QWORD = 11
  231.       REG_QWORD_LITTLE_ENDIAN = 11
  232.       
  233.       STANDARD_RIGHTS_READ = 0x00020000
  234.       STANDARD_RIGHTS_WRITE = 0x00020000
  235.       KEY_QUERY_VALUE = 0x0001
  236.       KEY_SET_VALUE = 0x0002
  237.       KEY_CREATE_SUB_KEY = 0x0004
  238.       KEY_ENUMERATE_SUB_KEYS = 0x0008
  239.       KEY_NOTIFY = 0x0010
  240.       KEY_CREATE_LINK = 0x0020
  241.       KEY_READ = STANDARD_RIGHTS_READ |
  242.         KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY
  243.       KEY_WRITE = STANDARD_RIGHTS_WRITE |
  244.         KEY_SET_VALUE | KEY_CREATE_SUB_KEY
  245.       KEY_EXECUTE = KEY_READ
  246.       KEY_ALL_ACCESS = KEY_READ | KEY_WRITE | KEY_CREATE_LINK
  247.       
  248.       REG_OPTION_RESERVED = 0x0000
  249.       REG_OPTION_NON_VOLATILE = 0x0000
  250.       REG_OPTION_VOLATILE = 0x0001
  251.       REG_OPTION_CREATE_LINK = 0x0002
  252.       REG_OPTION_BACKUP_RESTORE = 0x0004
  253.       REG_OPTION_OPEN_LINK = 0x0008
  254.       REG_LEGAL_OPTION = REG_OPTION_RESERVED |
  255.         REG_OPTION_NON_VOLATILE | REG_OPTION_CREATE_LINK |
  256.         REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK
  257.       
  258.       REG_CREATED_NEW_KEY = 1
  259.       REG_OPENED_EXISTING_KEY = 2
  260.       
  261.       REG_WHOLE_HIVE_VOLATILE = 0x0001
  262.       REG_REFRESH_HIVE = 0x0002
  263.       REG_NO_LAZY_FLUSH = 0x0004
  264.       REG_FORCE_RESTORE = 0x0008
  265.       
  266.       MAX_KEY_LENGTH = 514
  267.       MAX_VALUE_LENGTH = 32768
  268.     end
  269.     include Constants
  270.     include Enumerable
  271.    
  272.     #
  273.     # Error
  274.     #
  275.     class Error < ::StandardError
  276.       FormatMessageA = Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L')
  277.       def initialize(code)
  278.         @code = code
  279.         msg = "\0" * 1024
  280.         len = FormatMessageA.call(0x1200, 0, code, 0, msg, 1024, 0)
  281.         super msg[0, len].tr("\r", '').chomp
  282.       end
  283.       attr_reader :code
  284.     end
  285.    
  286.     #
  287.     # Predefined Keys
  288.     #
  289.     class PredefinedKey < Registry
  290.       def initialize(hkey, keyname)
  291.         @hkey = hkey
  292.         @parent = nil
  293.         @keyname = keyname
  294.         @disposition = REG_OPENED_EXISTING_KEY
  295.       end
  296.       
  297.       # Predefined keys cannot be closed
  298.       def close
  299.         raise Error.new(5) ## ERROR_ACCESS_DENIED
  300.       end
  301.       
  302.       # Fake class for Registry#open, Registry#create
  303.       def class
  304.         Registry
  305.       end
  306.       
  307.       # Make all
  308.       Constants.constants.grep(/^HKEY_/) do |c|
  309.         Registry.const_set c, new(Constants.const_get(c), c)
  310.       end
  311.     end
  312.    
  313.     #
  314.     # Win32 APIs
  315.     #
  316.     module API
  317.       [
  318.         %w/RegOpenKeyExA    LPLLP        L/,
  319.         %w/RegCreateKeyExA  LPLLLLPPP    L/,
  320.         %w/RegEnumValueA    LLPPPPPP     L/,
  321.         %w/RegEnumKeyExA    LLPPLLLP     L/,
  322.         %w/RegQueryValueExA LPLPPP       L/,
  323.         %w/RegSetValueExA   LPLLPL       L/,
  324.         %w/RegDeleteValue   LP           L/,
  325.         %w/RegDeleteKey     LP           L/,
  326.         %w/RegFlushKey      L            L/,
  327.         %w/RegCloseKey      L            L/,
  328.         %w/RegQueryInfoKey  LPPPPPPPPPPP L/,
  329.       ].each do |fn|
  330.         const_set fn[0].intern, Win32API.new('advapi32.dll', *fn)
  331.       end
  332.       
  333.       module_function
  334.       
  335.       def check(result)
  336.         raise Error, result, caller(2) if result != 0
  337.       end
  338.       
  339.       def packdw(dw)
  340.         [dw].pack('V')
  341.       end
  342.       
  343.       def unpackdw(dw)
  344.         dw += [0].pack('V')
  345.         dw.unpack('V')[0]
  346.       end
  347.       
  348.       def packqw(qw)
  349.         [ qw & 0xFFFFFFFF, qw >> 32 ].pack('VV')
  350.       end
  351.       
  352.       def unpackqw(qw)
  353.         qw = qw.unpack('VV')
  354.         (qw[1] << 32) | qw[0]
  355.       end
  356.       
  357.       def OpenKey(hkey, name, opt, desired)
  358.         result = packdw(0)
  359.         check RegOpenKeyExA.call(hkey, name, opt, desired, result)
  360.         unpackdw(result)
  361.       end
  362.       
  363.       def CreateKey(hkey, name, opt, desired)
  364.         result = packdw(0)
  365.         disp = packdw(0)
  366.         check RegCreateKeyExA.call(hkey, name, 0, 0, opt, desired,
  367.                                    0, result, disp)
  368.         [ unpackdw(result), unpackdw(disp) ]
  369.       end
  370.       
  371.       def EnumValue(hkey, index)
  372.         name = ' ' * Constants::MAX_KEY_LENGTH
  373.         size = packdw(Constants::MAX_KEY_LENGTH)
  374.         check RegEnumValueA.call(hkey, index, name, size, 0, 0, 0, 0)
  375.         name[0, unpackdw(size)]
  376.       end
  377.       
  378.       def EnumKey(hkey, index)
  379.         name = ' ' * Constants::MAX_KEY_LENGTH
  380.         size = packdw(Constants::MAX_KEY_LENGTH)
  381.         wtime = ' ' * 8
  382.         check RegEnumKeyExA.call(hkey, index, name, size, 0, 0, 0, wtime)
  383.         [ name[0, unpackdw(size)], unpackqw(wtime) ]
  384.       end
  385.       
  386.       def QueryValue(hkey, name)
  387.         type = packdw(0)
  388.         size = packdw(0)
  389.         check RegQueryValueExA.call(hkey, name, 0, type, 0, size)
  390.         data = ' ' * unpackdw(size)
  391.         check RegQueryValueExA.call(hkey, name, 0, type, data, size)
  392.         [ unpackdw(type), data[0, unpackdw(size)] ]
  393.       end
  394.       
  395.       def SetValue(hkey, name, type, data, size)
  396.         check RegSetValueExA.call(hkey, name, 0, type, data, size)
  397.       end
  398.       
  399.       def DeleteValue(hkey, name)
  400.         check RegDeleteValue.call(hkey, name)
  401.       end
  402.       
  403.       def DeleteKey(hkey, name)
  404.         check RegDeleteKey.call(hkey, name)
  405.       end
  406.       
  407.       def FlushKey(hkey)
  408.         check RegFlushKey.call(hkey)
  409.       end
  410.       
  411.       def CloseKey(hkey)
  412.         check RegCloseKey.call(hkey)
  413.       end
  414.       
  415.       def QueryInfoKey(hkey)
  416.         subkeys = packdw(0)
  417.         maxsubkeylen = packdw(0)
  418.         values = packdw(0)
  419.         maxvaluenamelen = packdw(0)
  420.         maxvaluelen = packdw(0)
  421.         secdescs = packdw(0)
  422.         wtime = ' ' * 8
  423.         check RegQueryInfoKey.call(hkey, 0, 0, 0, subkeys, maxsubkeylen, 0,
  424.           values, maxvaluenamelen, maxvaluelen, secdescs, wtime)
  425.         [ unpackdw(subkeys), unpackdw(maxsubkeylen), unpackdw(values),
  426.           unpackdw(maxvaluenamelen), unpackdw(maxvaluelen),
  427.           unpackdw(secdescs), unpackqw(wtime) ]
  428.       end
  429.     end
  430.    
  431.     #
  432.     # utility functions
  433.     #
  434.     def self.expand_environ(str)
  435.       str.gsub(/%([^%]+)%/) { ENV[$1] || $& }
  436.     end
  437.    
  438.     @@type2name = { }
  439.     %w[
  440.       REG_NONE REG_SZ REG_EXPAND_SZ REG_BINARY REG_DWORD
  441.       REG_DWORD_BIG_ENDIAN REG_LINK REG_MULTI_SZ
  442.       REG_RESOURCE_LIST REG_FULL_RESOURCE_DESCRIPTOR
  443.       REG_RESOURCE_REQUIREMENTS_LIST REG_QWORD
  444.     ].each do |type|
  445.       @@type2name[Constants.const_get(type)] = type
  446.     end
  447.    
  448.     def self.type2name(type)
  449.       @@type2name[type] || type.to_s
  450.     end
  451.    
  452.     def self.wtime2time(wtime)
  453.       Time.at((wtime - 116444736000000000) / 10000000)
  454.     end
  455.    
  456.     def self.time2wtime(time)
  457.       time.to_i * 10000000 + 116444736000000000
  458.     end
  459.    
  460.     #
  461.     # constructors
  462.     #
  463.     private_class_method :new
  464.    
  465.     def self.open(hkey, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED)
  466.       subkey = subkey.chomp('\\')
  467.       newkey = API.OpenKey(hkey.hkey, subkey, opt, desired)
  468.       obj = new(newkey, hkey, subkey, REG_OPENED_EXISTING_KEY)
  469.       if block_given?
  470.         begin
  471.           yield obj
  472.         ensure
  473.           obj.close
  474.         end
  475.       else
  476.         obj
  477.       end
  478.     end
  479.    
  480.     def self.create(hkey, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED)
  481.       newkey, disp = API.CreateKey(hkey.hkey, subkey, opt, desired)
  482.       obj = new(newkey, hkey, subkey, disp)
  483.       if block_given?
  484.         begin
  485.           yield obj
  486.         ensure
  487.           obj.close
  488.         end
  489.       else
  490.         obj
  491.       end
  492.     end
  493.    
  494.     #
  495.     # finalizer
  496.     #
  497.     @@final = proc { |hkey| proc { API.CloseKey(hkey[0]) if hkey[0] } }
  498.    
  499.     #
  500.     # initialize
  501.     #
  502.     def initialize(hkey, parent, keyname, disposition)
  503.       @hkey = hkey
  504.       @parent = parent
  505.       @keyname = keyname
  506.       @disposition = disposition
  507.       @hkeyfinal = [ hkey ]
  508.       ObjectSpace.define_finalizer self, @@final.call(@hkeyfinal)
  509.     end
  510.     attr_reader :hkey, :parent, :keyname, :disposition
  511.    
  512.     #
  513.     # attributes
  514.     #
  515.     def created?
  516.       @disposition == REG_CREATED_NEW_KEY
  517.     end
  518.    
  519.     def open?
  520.       [email protected]?
  521.     end
  522.    
  523.     def name
  524.       parent = self
  525.       name = @keyname
  526.       while parent = parent.parent
  527.         name = parent.keyname + '\\' + name
  528.       end
  529.       name
  530.     end
  531.    
  532.     def inspect
  533.       "\#<Win32::Registry key=#{name.inspect}>"
  534.     end
  535.    
  536.     #
  537.     # marshalling
  538.     #
  539.     def _dump(depth)
  540.       raise TypeError, "can't dump Win32::Registry"
  541.     end
  542.    
  543.     #
  544.     # open/close
  545.     #
  546.     def open(subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED, &blk)
  547.       self.class.open(self, subkey, desired, opt, &blk)
  548.     end
  549.    
  550.     def create(subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED, &blk)
  551.       self.class.create(self, subkey, desired, opt, &blk)
  552.     end
  553.    
  554.     def close
  555.       API.CloseKey(@hkey)
  556.       @hkey = @parent = @keyname = nil
  557.       @hkeyfinal[0] = nil
  558.     end
  559.    
  560.     #
  561.     # iterator
  562.     #
  563.     def each_value
  564.       index = 0
  565.       while true
  566.         begin
  567.           subkey = API.EnumValue(@hkey, index)
  568.         rescue Error
  569.           break
  570.         end
  571.         begin
  572.           type, data = read(subkey)
  573.         rescue Error
  574.           next
  575.         end
  576.         yield subkey, type, data
  577.         index += 1
  578.       end
  579.       index
  580.     end
  581.     alias each each_value
  582.    
  583.     def each_key
  584.       index = 0
  585.       while true
  586.         begin
  587.           subkey, wtime = API.EnumKey(@hkey, index)
  588.         rescue Error
  589.           break
  590.         end
  591.         yield subkey, wtime
  592.         index += 1
  593.       end
  594.       index
  595.     end
  596.    
  597.     def keys
  598.       keys_ary = []
  599.       each_key { |key,| keys_ary << key }
  600.       keys_ary
  601.     end
  602.    
  603.     #
  604.     # reader
  605.     #
  606.     def read(name, *rtype)
  607.       type, data = API.QueryValue(@hkey, name)
  608.       unless rtype.empty? or rtype.include?(type)
  609.         raise TypeError, "Type mismatch (expect #{rtype.inspect} but #{type} present)"
  610.       end
  611.       case type
  612.       when REG_SZ, REG_EXPAND_SZ
  613.         [ type, data.chop ]
  614.       when REG_MULTI_SZ
  615.         [ type, data.split(/\0/) ]
  616.       when REG_BINARY
  617.         [ type, data ]
  618.       when REG_DWORD
  619.         [ type, API.unpackdw(data) ]
  620.       when REG_DWORD_BIG_ENDIAN
  621.         [ type, data.unpack('N')[0] ]
  622.       when REG_QWORD
  623.         [ type, API.unpackqw(data) ]
  624.       else
  625.         raise TypeError, "Type #{type} is not supported."
  626.       end
  627.     end
  628.    
  629.     def [](name, *rtype)
  630.       type, data = read(name, *rtype)
  631.       case type
  632.       when REG_SZ, REG_DWORD, REG_QWORD, REG_MULTI_SZ
  633.         data
  634.       when REG_EXPAND_SZ
  635.         Registry.expand_environ(data)
  636.       else
  637.         raise TypeError, "Type #{type} is not supported."
  638.       end
  639.     end
  640.    
  641.     def read_s(name)
  642.       read(name, REG_SZ)[1]
  643.     end
  644.    
  645.     def read_s_expand(name)
  646.       type, data = read(name, REG_SZ, REG_EXPAND_SZ)
  647.       if type == REG_EXPAND_SZ
  648.         Registry.expand_environ(data)
  649.       else
  650.         data
  651.       end
  652.     end
  653.    
  654.     def read_i(name)
  655.       read(name, REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_QWORD)[1]
  656.     end
  657.    
  658.     def read_bin(name)
  659.       read(name, REG_BINARY)[1]
  660.     end
  661.    
  662.     #
  663.     # writer
  664.     #
  665.     def write(name, type, data)
  666.       case type
  667.       when REG_SZ, REG_EXPAND_SZ
  668.         data = data.to_s + "\0"
  669.       when REG_MULTI_SZ
  670.         data = data.to_a.join("\0") + "\0\0"
  671.       when REG_BINARY
  672.         data = data.to_s
  673.       when REG_DWORD
  674.         data = API.packdw(data.to_i)
  675.       when REG_DWORD_BIG_ENDIAN
  676.         data = [data.to_i].pack('N')
  677.       when REG_QWORD
  678.         data = API.packqw(data.to_i)
  679.       else
  680.         raise TypeError, "Unsupported type #{type}"
  681.       end
  682.       API.SetValue(@hkey, name, type, data, data.length)
  683.     end
  684.    
  685.     def []=(name, rtype, value = nil)
  686.       if value
  687.         write name, rtype, value
  688.       else
  689.         case value = rtype
  690.         when Integer
  691.           write name, REG_DWORD, value
  692.         when String
  693.           write name, REG_SZ, value
  694.         when Array
  695.           write name, REG_MULTI_SZ, value
  696.         else
  697.           raise TypeError, "Unexpected type #{value.class}"
  698.         end
  699.       end
  700.       value
  701.     end
  702.    
  703.     def write_s(name, value)
  704.       write name, REG_SZ, value.to_s
  705.     end
  706.    
  707.     def write_i(name, value)
  708.       write name, REG_DWORD, value.to_i
  709.     end
  710.    
  711.     def write_bin(name, value)
  712.       write name, REG_BINARY, value.to_s
  713.     end
  714.    
  715.     #
  716.     # delete
  717.     #
  718.     def delete_value(name)
  719.       API.DeleteValue(@hkey, name)
  720.     end
  721.     alias delete delete_value
  722.    
  723.     def delete_key(name, recursive = false)
  724.       if recursive
  725.         open(name, KEY_ALL_ACCESS) do |reg|
  726.           reg.keys.each do |key|
  727.             begin
  728.               reg.delete_key(key, true)
  729.             rescue Error
  730.               #
  731.             end
  732.           end
  733.         end
  734.         API.DeleteKey(@hkey, name)
  735.       else
  736.         begin
  737.           API.EnumKey @hkey, 0
  738.         rescue Error
  739.           return API.DeleteKey(@hkey, name)
  740.         end
  741.         raise Error.new(5) ## ERROR_ACCESS_DENIED
  742.       end
  743.     end
  744.    
  745.     #
  746.     # flush
  747.     #
  748.     def flush
  749.       API.FlushKey @hkey
  750.     end
  751.    
  752.     #
  753.     # key information
  754.     #
  755.     def info
  756.       API.QueryInfoKey(@hkey)
  757.     end
  758.     %w[
  759.       num_keys max_key_length
  760.       num_values max_value_name_length max_value_length
  761.       descriptor_length wtime
  762.     ].each_with_index do |s, i|
  763.       eval <<-__END__
  764.         def #{s}
  765.           info[#{i}]
  766.         end
  767.       __END__
  768.     end
  769.   end
  770.   
  771. end
  772.   
  773. #==============================================================================
  774. # FileRTPTest - Módulo
  775. #==============================================================================

  776. module RTP
  777.   
  778.   RTP_PATHS = []
  779.   Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE, "SOFTWARE\\Enterbrain\\RGSS2\\RTP") {|key|
  780.     RTP_PATHS.push(key.read_s(PRCoders.game_rtp))
  781.   }
  782.   
  783.   def self.paths
  784.     return RTP_PATHS
  785.   end
  786.   
  787.   def self.exist?(name)
  788.     for rtp in RTP_PATHS
  789.       if FileTest.exist?(rtp + "/" + name)
  790.         return true
  791.       end
  792.     end
  793.     return false
  794.   end
  795.   
  796.   def self.files(diretorio)
  797.     files = []
  798.     for rtp in RTP_PATHS
  799.       files += Dir.dirfiles(rtp + "/" + diretorio)
  800.     end
  801.     return files
  802.   end
  803.   
  804.   def self.all_exist?(name)
  805.     for rtp in RTP_PATHS
  806.       if FileTest.exist?(rtp + "/" + name)
  807.         return true
  808.       end
  809.     end
  810.     return FileTest.exist?(name)
  811.   end
  812.       
  813. end

  814. class Bitmap
  815.   
  816.   def draw_stroked_text(*args)
  817.     case args[0]
  818.     when Rect
  819.       x = args[0].x
  820.       y = args[0].y
  821.       w = args[0].width
  822.       h = args[0].height
  823.       text = args[1]
  824.       align = (args[2].nil? ? 0 : args[2])
  825.     when Numeric
  826.       x, y, w, h = args[0..3]
  827.       text = args[4]
  828.       align = (args[5].nil? ? 0 : args[5])
  829.     else
  830.       return
  831.     end
  832.     color = self.font.color.dup
  833.     self.font.color.set(0, 0, 0)
  834.     draw_text(x, y, w - 2, h - 2, text, align)
  835.     draw_text(x + 2, y, w - 2, h - 2, text, align)
  836.     draw_text(x, y + 2, w - 2, h - 2, text, align)
  837.     draw_text(x + 2, y + 2, w - 2, h - 2, text, align)
  838.     self.font.color = color
  839.     draw_text(x + 1, y + 1, w - 2, h - 2, text, align)
  840.   end
  841.       
  842.   #-------------------------------------------------------------------------
  843.   # Grava o Bitmap em um arquivo
  844.   #-------------------------------------------------------------------------
  845.   
  846.   def save_png(name = "", path = "./", mode = 0)
  847.     File.open(path + name + ".png", "wb") {|f| f.write("\211PNG\r\n\032\n" + png_ihdr + png_idat + png_iend) }
  848.   end
  849.    
  850.   #--------------------------------------------------------------------------
  851.   # - Pega o IHDR do PNG
  852.   #--------------------------------------------------------------------------
  853.    
  854.   def png_ihdr
  855.     string = "IHDR" + [self.width].pack("N") + [self.height].pack("N") + "\010\006\000\000\000"
  856.     ih_crc = [Zlib.crc32(string)].pack("N")
  857.     return "\000\000\000\r" + string + [Zlib.crc32(string)].pack("N")
  858.   end
  859.   
  860.   #--------------------------------------------------------------------------
  861.   # - Pega a Data do PNG
  862.   #--------------------------------------------------------------------------
  863.    
  864.   def png_idat
  865.     data = Zlib::Deflate.deflate(make_png_data, 8)
  866.     return [data.length].pack("N") + "\x49\x44\x41\x54" + data + [Zlib.crc32("\x49\x44\x41\x54" + data)].pack("N")
  867.   end
  868.   
  869.   #--------------------------------------------------------------------------
  870.   # - Pega a Data dos pixels do PNG
  871.   #--------------------------------------------------------------------------
  872.    
  873.   def make_png_data
  874.     w = self.width
  875.     h = self.height
  876.     data = []
  877.     for y in 0...h
  878.       data.push(0)
  879.       for x in 0...w
  880.         color = self.get_pixel(x, y)
  881.         data.push(color.red, color.green, color.blue, color.alpha)
  882.       end
  883.     end
  884.     string = data.pack("C*")
  885.     data.clear
  886.     return string
  887.   end
  888.   
  889.   #--------------------------------------------------------------------------
  890.   # - Pega o Final do PNG
  891.   #--------------------------------------------------------------------------
  892.   
  893.   def png_iend
  894.     return "\000\000\000\000IEND" + [Zlib.crc32("IEND")].pack('N')
  895.   end
  896.    
  897. end

  898. #===============================================================================
  899. # FILETEST_FIX
  900. #===============================================================================

  901. module FILETEST_FIX
  902.   
  903.   FILENAME = "Folders.dll"
  904.   
  905.   FOLDERS_TO_CATCH = ["Data", "Graphics"]
  906.   
  907.   @@data = {}
  908.   
  909.   def self.start_dump
  910.     for folder in FOLDERS_TO_CATCH
  911.       self.catch_files(folder)
  912.     end
  913.     file = File.open(FILENAME, "wb")
  914.     Marshal.dump(@@data, file)
  915.     file.close
  916.   end
  917.   
  918.   def self.load_data
  919.     file = File.open(FILENAME, "rb")
  920.     @@data = Marshal.load(file)
  921.     file.close
  922.   end
  923.    
  924.   def self.catch_files(directory=".")
  925.     unless ["/", "\\"].include?(directory[directory.size-1, 1])
  926.       directory += "/"
  927.     end
  928.     directory.gsub!("/", "\\")
  929.     return [] unless FileTest.directory?(directory)
  930.     @@data[directory] = []
  931.     for file in Dir.entries(directory)
  932.       next if file == "."
  933.       next if file == ".."
  934.       if FileTest.directory?(directory + file)
  935.         self.catch_files(directory + file)
  936.       end
  937.       @@data[directory].push(directory + file)
  938.     end
  939.     @@data[directory].push(directory + ".")
  940.     @@data[directory].push(directory + "..")
  941.   end
  942.   
  943.   def self.entries(directory)
  944.     unless ["/", "\\"].include?(directory[directory.size-1, 1])
  945.       directory += "/"
  946.     end
  947.     directory.gsub!("/", "\\")
  948.     return @@data[directory].dup
  949.   end
  950.   
  951.   def self.data
  952.     return @@data
  953.   end
  954.   
  955. end


  956. if $TEST
  957.   FILETEST_FIX.start_dump
  958. else
  959.   FILETEST_FIX.load_data
  960. end

  961. class Dir
  962.   
  963.   class << self
  964.     unless method_defined?("dir_fix_dir_entries")
  965.       alias dir_fix_dir_entries entries
  966.     end
  967.   end
  968.   
  969.   def self.entries(directory, corrected=true)
  970.     data_entries = []
  971.     unless $TEST
  972.       if corrected
  973.         data_entries = self.encripted_entries(directory)
  974.       end
  975.     end
  976.     data_entries ||= []
  977.     if FileTest.directory?(directory, false)
  978.       data_entries = data_entries + dir_fix_dir_entries(directory)
  979.     end
  980.     return data_entries
  981.   end
  982.   
  983.   def self.encripted_entries(directory)
  984.     if $TEST
  985.       return []
  986.     end
  987.     unless ["/", "\\"].include?(directory[directory.size-1, 1])
  988.       directory += "/"
  989.     end
  990.     if ["/", "\\"].include?(directory[0, 1])
  991.       directory = "." + directory
  992.     elsif !(["./", ".\\"].include?(directory[0, 2]))
  993.       directory = "./" + directory
  994.     end         
  995.     directory.gsub!("/", "\\")
  996.     data_entries = FILETEST_FIX.data[directory]
  997.   end
  998.   
  999. end

  1000. module FileTest
  1001.   
  1002.   class << self
  1003.     unless method_defined?("dir_fix_filetext_exist?")
  1004.       alias dir_fix_filetext_exist? exist?
  1005.       alias dir_fix_filetext_directory? directory?
  1006.     end
  1007.   end
  1008.   
  1009.   def self.exist?(filename, corrected=true)
  1010.     if corrected
  1011.       unless $TEST
  1012.         directory = File.dirname(filename)
  1013.         filebase = File.basename(filename)
  1014.         unless ["/", "\\"].include?(directory[directory.size-1, 1])
  1015.           directory += "/"
  1016.         end
  1017.         if ["/", "\\"].include?(directory[0, 1])
  1018.           directory = "." + directory
  1019.         elsif !(["./", ".\\"].include?(directory[0, 2]))
  1020.           directory = "./" + directory
  1021.         end         
  1022.         directory.gsub!("/", "\\")
  1023.         data_entries = FILETEST_FIX.data[directory]
  1024.         data_entries ||= []
  1025.         for file in data_entries
  1026.           next if file.nil?
  1027.           if File.basename(file) == filebase
  1028.             return true
  1029.           end
  1030.         end
  1031.       end
  1032.     end
  1033.     return self.dir_fix_filetext_exist?(filename)
  1034.   end
  1035.   
  1036.   def self.directory?(directory, corrected=true)
  1037.     if corrected
  1038.       return true if self.encripted_directory?(directory)
  1039.     end
  1040.     return self.dir_fix_filetext_directory?(directory)
  1041.   end
  1042.   
  1043.   def self.encripted_directory?(directory)
  1044.     if $TEST
  1045.       return false
  1046.     end
  1047.     unless ["/", "\\"].include?(directory[directory.size-1, 1])
  1048.       directory += "/"
  1049.     end
  1050.     if ["/", "\\"].include?(directory[0, 1])
  1051.       directory = "." + directory
  1052.     elsif !(["./", ".\\"].include?(directory[0, 2]))
  1053.       directory = "./" + directory
  1054.     end         
  1055.     directory.gsub!("/", "\\")
  1056.     if FILETEST_FIX.data[directory] != nil
  1057.       return true
  1058.     end
  1059.   end
  1060.   
  1061. end

  1062. PRCODERS_MODULE = true
复制代码

评分

参与人数 1星屑 +1000 收起 理由
eve592370698 + 1000 鼓励高悬赏!您真是个好人啊!.

查看全部评分

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

2
 楼主| 发表于 2011-4-30 05:29:43 | 只看该作者
事实证明,可能在压缩的时候出了一点问题,自己解决了
虚惊一场,刚才差点被吓死

一个笨办法:不要压缩,只要把工程文件夹复制出来,然后游戏里面用过什么
素材就导入进去

这样就减少了“压缩”的一个过程,就不会发生错误了

不过既然已经发了帖子了,。。。回收VIP让我情何以堪啊
悬赏降为3VIP
童鞋们可以试着找找到底是什么问题?什么原因?

难不成又是我本身电脑的问题?(之前也发生过我有问题,同样的工程在其他人电脑里
完全没问题的情况,汗)

点评

您还是很大方啊!奖励出去的VIP我会通过给您别的帖子加分的方式补贴回来的。去我的DQ素材看看吧,特鲁尼克做出来一套了。下一步打怪截图,支持我  发表于 2011-5-2 20:05

评分

参与人数 1星屑 +1000 收起 理由
eve592370698 + 1000 算我欠您的分,给您补上。

查看全部评分

回复

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

3
发表于 2011-4-30 09:45:34 | 只看该作者
请注意素材提取,压缩包大小控制到128M以下
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
5 小时
注册时间
2011-4-24
帖子
27
4
发表于 2011-4-30 10:44:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1357
在线时间
677 小时
注册时间
2009-11-11
帖子
2790
5
发表于 2011-4-30 14:35:50 | 只看该作者
本帖最后由 summer92 于 2011-4-30 20:48 编辑

分就这样没了,我滴天

嘿。嘿。嘿
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

6
 楼主| 发表于 2011-4-30 15:06:25 | 只看该作者
本帖最后由 一瞬间的幻觉 于 2011-4-30 15:21 编辑
精灵使者 发表于 2011-4-30 09:45
请注意素材提取,压缩包大小控制到128M以下


不是压缩包容量的问题,即使是不带素材库的700多K的纯净工程也会报错

给你看看原版的工程吧,如果不带素材库,连打包都不能,会提示无法新建文件夹


PRABS2.rar (1.37 MB, 下载次数: 276)
回复

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

7
发表于 2011-4-30 16:20:15 | 只看该作者
电脑问题不解释……(其实也解释不了……)
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
8
发表于 2011-5-1 22:02:20 | 只看该作者

杀毒看看吧,也可能是语言编码不兼容

本帖最后由 eve592370698 于 2011-5-1 22:17 编辑

因为您是在意大利啊!不知道您的电脑操作系统是什么版本,最好告诉我支持什么语言,还有您的winrar版本。
实在不行试着压缩成ZIP格式或者使用RM自带的压缩游戏数据(CAB格式)看看吧。
不过您的那个工程做得真好,可以用来做塞尔达传说,也可以做犆鲁尼克大冒险。

点评

我用的就是SP3,大家都用这个的啊  发表于 2011-5-2 02:26
潜水,专心忙活三次元工作了……
回复

使用道具 举报

Lv1.梦旅人

雨狸

梦石
0
星屑
48
在线时间
625 小时
注册时间
2011-3-19
帖子
1296
9
发表于 2011-5-1 22:28:47 | 只看该作者
BUG:防御的时候能打人,而且连击五下······
明夕,何夕
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

10
 楼主| 发表于 2011-5-2 02:27:07 | 只看该作者
絀神入化 发表于 2011-5-1 22:28
BUG:防御的时候能打人,而且连击五下······

我早把盾牌功能取消了
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 20:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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