Advertisement
LeonMMS

VXA-OS:MainRGU

Jun 9th, 2025
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.07 KB | None | 0 0
  1. advapi32 = Fiddle.dlopen('advapi32.dll')
  2.  
  3. # Define the function signatures
  4. RegOpenKeyExA = Fiddle::Function.new(
  5.   advapi32['RegOpenKeyExA'],
  6.   [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_UINT, Fiddle::TYPE_UINT, Fiddle::TYPE_VOIDP],
  7.   Fiddle::TYPE_LONG
  8. )
  9.  
  10. RegQueryValueExA = Fiddle::Function.new(
  11.   advapi32['RegQueryValueExA'],
  12.   [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP],
  13.   Fiddle::TYPE_LONG
  14. )
  15.  
  16. RegCloseKey = Fiddle::Function.new(
  17.   advapi32['RegCloseKey'],
  18.   [Fiddle::TYPE_VOIDP],
  19.   Fiddle::TYPE_LONG
  20. )
  21.  
  22. #ASCII-8BIT
  23. HKEY_LOCAL_MACHINE = 0x80000002
  24. KEY_READ = 0x20019
  25. ERROR_SUCCESS = 0
  26.  
  27. def read_registry_value(key_path, value_name)
  28.   hkey = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP)
  29.   key_path_utf8 = key_path.encode('UTF-8') + "\0"
  30.   value_name_utf8 = value_name.encode('UTF-8') + "\0"
  31.   result = RegOpenKeyExA.call(HKEY_LOCAL_MACHINE, key_path_utf8, 0, KEY_READ, hkey)
  32.   if result != ERROR_SUCCESS
  33.     raise "Failed to open registry key. Error code: #{result}"
  34.   end
  35.   data_type = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT)
  36.   data_size = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT)
  37.   data_size[0, 4] = [260].pack('L')  # Set initial buffer size
  38.   data = Fiddle::Pointer.malloc(260)  # Buffer for the value (260 characters)
  39.   result = RegQueryValueExA.call(hkey.ptr.to_i, value_name_utf8, nil, data_type, data, data_size)
  40.   if result != ERROR_SUCCESS
  41.     RegCloseKey.call(hkey)
  42.     raise "Failed to query registry value. Error code: #{result}"
  43.   end
  44.   value = data.to_s(data_size[0, 4].unpack('L')[0]).strip
  45.   RegCloseKey.call(hkey)
  46.   value
  47. end
  48.  
  49.   key_path = 'SOFTWARE\Enterbrain\RGSS3\RTP'
  50.   value_name = 'RPGVXAce'
  51.   rtp_path = read_registry_value(key_path, value_name)
  52.   if rtp_path
  53.     puts "The path is: #{rtp_path.force_encoding(Encoding.default_external).encode('UTF-8')}"
  54.     Runtime.add_path(rtp_path)
  55.     Runtime.reload_cache
  56.   end
  57. #rgss_main { SceneManager.run }
  58. begin
  59.   rgss_main { SceneManager.run }
  60. rescue Exception => e
  61.   scripts = load_data('Data/Scripts.rvdata2')
  62.   regex = /{(\d+)}/
  63.   #error_message = e.full_message#.gsub(regex) { |match| scripts[$1.to_i] }
  64.   #backtrace = e.backtrace.join("\n").gsub(regex) { |match| scripts[$1.to_i] }
  65.   e_message = e.message#[0, 500]
  66.   error_message = e_message.split('#').first
  67.  
  68.   # Extract the class name where the error occurred
  69.   error_class = e_message.split(':').first.split('<').last
  70.   if e.class.to_s != "SystemExit"
  71.     # Extract the backtrace
  72.     backtrace = e.backtrace.join("\n").gsub(regex) { |match| scripts[$1.to_i][1] }
  73.     log_entry = "Error type: #{e.class}\n" + "Error message: #{error_message}#{error_class}\n" + "Backtrace:\n#{backtrace}\n"
  74.  
  75.     File.open("Logs/#{Time.now.strftime("Log-%Y-%m-%d-%H-%M-%S")}.txt", "w+") do |f|
  76.       f.write(log_entry)
  77.     end
  78.     raise "Error type: #{e.class}\n" + "Error message: #{error_message}#{error_class}\n\n" + "Line: #{e.backtrace[0].gsub(regex) { |match| scripts[$1.to_i][1] }}\n\n"+ "Time: #{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}"#e
  79.   end
  80. end
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement