rmxp_extractor 1.5 → 1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +74 -74
- data/Gemfile +13 -13
- data/Gemfile.lock +2 -1
- data/LICENSE.txt +21 -21
- data/README.md +35 -35
- data/Rakefile +6 -6
- data/Scripts/_scripts.txt +1 -1
- data/bin/rmxp_extractor +13 -13
- data/bin/setup +8 -8
- data/diff_check.rb +13 -13
- data/lib/rmxp_extractor/classnames.rb +244 -238
- data/lib/rmxp_extractor/data_export.rb +82 -80
- data/lib/rmxp_extractor/data_import.rb +69 -69
- data/lib/rmxp_extractor/ron.rb +144 -146
- data/lib/rmxp_extractor/script_handler.rb +85 -85
- data/lib/rmxp_extractor/version.rb +3 -3
- data/lib/rmxp_extractor.rb +46 -46
- data/rmxp_extractor.gemspec +30 -30
- data/spec/spec_helper.rb +100 -100
- metadata +2 -2
@@ -1,69 +1,69 @@
|
|
1
|
-
module RMXPExtractor
|
2
|
-
def self.import(format)
|
3
|
-
STDERR.puts "No Data_JSON Directory!" unless Dir.exists? "./Data_#{format.upcase}"
|
4
|
-
exit 1 unless Dir.exists? "./Data_#{format.upcase}"
|
5
|
-
|
6
|
-
require "oj"
|
7
|
-
require "yaml"
|
8
|
-
require "ruby-progressbar"
|
9
|
-
require "fileutils"
|
10
|
-
require "pathname"
|
11
|
-
require "readline"
|
12
|
-
require_relative "classnames"
|
13
|
-
require_relative "script_handler"
|
14
|
-
|
15
|
-
if format == "ron"
|
16
|
-
puts "RON not supported for importing yet"
|
17
|
-
exit 1
|
18
|
-
end
|
19
|
-
|
20
|
-
window_size = 120
|
21
|
-
progress_format = "%a /%e |%B| %p%% %c/%C %r files/sec %t, currently processing: "
|
22
|
-
progress = ProgressBar.create(
|
23
|
-
format: progress_format,
|
24
|
-
starting_at: 0,
|
25
|
-
total: nil,
|
26
|
-
output: $stderr,
|
27
|
-
length: window_size,
|
28
|
-
title: "imported",
|
29
|
-
remainder_mark: "\e[0;30m█\e[0m",
|
30
|
-
progress_mark: "█",
|
31
|
-
unknown_progress_animation_steps: ["==>", ">==", "=>="],
|
32
|
-
)
|
33
|
-
Dir.mkdir "./Data" unless Dir.exists? "./Data"
|
34
|
-
paths = Pathname.glob(("./Data_#{format.upcase}/" + ("*" + ".#{format}")))
|
35
|
-
count = paths.size
|
36
|
-
progress.total = count
|
37
|
-
paths.each_with_index do |path, i|
|
38
|
-
name = path.basename(".#{format}")
|
39
|
-
progress.format = progress_format + name.to_s
|
40
|
-
file_contents = path.read(mode: "rb")
|
41
|
-
hash = case format
|
42
|
-
when "json"
|
43
|
-
Oj.load file_contents
|
44
|
-
when "yaml"
|
45
|
-
YAML.load file_contents
|
46
|
-
when "toml"
|
47
|
-
TomlRB.parse file_contents
|
48
|
-
when "rb"
|
49
|
-
eval file_contents # Yes, this SHOULD work. Is it bad? Yes.
|
50
|
-
end
|
51
|
-
|
52
|
-
warn "\n\e[33;1mWARNING: Incompatible version format in #{name.to_s}!\e[0m\n" if hash["version"] != VERSION
|
53
|
-
|
54
|
-
case name.to_s
|
55
|
-
when "xScripts", "Scripts"
|
56
|
-
RMXPExtractor.rpgscript("./", "./Scripts", "#{name.to_s}")
|
57
|
-
progress.increment
|
58
|
-
return
|
59
|
-
else
|
60
|
-
content = create_from_rmxp_serialize(hash["data"])
|
61
|
-
end
|
62
|
-
|
63
|
-
rxdata = File.open("./Data/" + name.sub_ext(".rxdata").to_s, "wb")
|
64
|
-
rxdata.puts Marshal.dump(content)
|
65
|
-
|
66
|
-
progress.increment
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
1
|
+
module RMXPExtractor
|
2
|
+
def self.import(format)
|
3
|
+
STDERR.puts "No Data_JSON Directory!" unless Dir.exists? "./Data_#{format.upcase}"
|
4
|
+
exit 1 unless Dir.exists? "./Data_#{format.upcase}"
|
5
|
+
|
6
|
+
require "oj"
|
7
|
+
require "yaml"
|
8
|
+
require "ruby-progressbar"
|
9
|
+
require "fileutils"
|
10
|
+
require "pathname"
|
11
|
+
require "readline"
|
12
|
+
require_relative "classnames"
|
13
|
+
require_relative "script_handler"
|
14
|
+
|
15
|
+
if format == "ron"
|
16
|
+
puts "RON not supported for importing yet"
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
|
20
|
+
window_size = 120
|
21
|
+
progress_format = "%a /%e |%B| %p%% %c/%C %r files/sec %t, currently processing: "
|
22
|
+
progress = ProgressBar.create(
|
23
|
+
format: progress_format,
|
24
|
+
starting_at: 0,
|
25
|
+
total: nil,
|
26
|
+
output: $stderr,
|
27
|
+
length: window_size,
|
28
|
+
title: "imported",
|
29
|
+
remainder_mark: "\e[0;30m█\e[0m",
|
30
|
+
progress_mark: "█",
|
31
|
+
unknown_progress_animation_steps: ["==>", ">==", "=>="],
|
32
|
+
)
|
33
|
+
Dir.mkdir "./Data" unless Dir.exists? "./Data"
|
34
|
+
paths = Pathname.glob(("./Data_#{format.upcase}/" + ("*" + ".#{format}")))
|
35
|
+
count = paths.size
|
36
|
+
progress.total = count
|
37
|
+
paths.each_with_index do |path, i|
|
38
|
+
name = path.basename(".#{format}")
|
39
|
+
progress.format = progress_format + name.to_s
|
40
|
+
file_contents = path.read(mode: "rb")
|
41
|
+
hash = case format
|
42
|
+
when "json"
|
43
|
+
Oj.load file_contents
|
44
|
+
when "yaml"
|
45
|
+
YAML.load file_contents
|
46
|
+
when "toml"
|
47
|
+
TomlRB.parse file_contents
|
48
|
+
when "rb"
|
49
|
+
eval file_contents # Yes, this SHOULD work. Is it bad? Yes.
|
50
|
+
end
|
51
|
+
|
52
|
+
warn "\n\e[33;1mWARNING: Incompatible version format in #{name.to_s}!\e[0m\n" if hash["version"] != VERSION
|
53
|
+
|
54
|
+
case name.to_s
|
55
|
+
when "xScripts", "Scripts"
|
56
|
+
RMXPExtractor.rpgscript("./", "./Scripts", "#{name.to_s}")
|
57
|
+
progress.increment
|
58
|
+
return
|
59
|
+
else
|
60
|
+
content = create_from_rmxp_serialize(hash["data"])
|
61
|
+
end
|
62
|
+
|
63
|
+
rxdata = File.open("./Data/" + name.sub_ext(".rxdata").to_s, "wb")
|
64
|
+
rxdata.puts Marshal.dump(content)
|
65
|
+
|
66
|
+
progress.increment
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/rmxp_extractor/ron.rb
CHANGED
@@ -1,146 +1,144 @@
|
|
1
|
-
# This file handles rusty object notation.
|
2
|
-
require_relative "classnames"
|
3
|
-
|
4
|
-
$indent = 0
|
5
|
-
|
6
|
-
class Object
|
7
|
-
def rmxp_serialize
|
8
|
-
$indent += 2
|
9
|
-
str = "#{self.class.name.split("::").last}(\n"
|
10
|
-
self.instance_variables.each { |var| str += "#{" " * $indent}#{var.to_s.delete("@")}: #{self.instance_variable_get(var).rmxp_serialize},\n" }
|
11
|
-
$indent -= 2
|
12
|
-
str += "#{" " * $indent})"
|
13
|
-
str
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class Table
|
18
|
-
def rmxp_serialize
|
19
|
-
str = "
|
20
|
-
$indent += 2
|
21
|
-
str += "#{" " * $indent}
|
22
|
-
str +=
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
str += "
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
str += "
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
$indent -= 2
|
59
|
-
str += "#{" " * $indent}
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
str
|
69
|
-
$indent
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
str
|
94
|
-
$indent
|
95
|
-
|
96
|
-
|
97
|
-
str
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
str
|
109
|
-
$indent
|
110
|
-
str += "#{" " * $indent}
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
str
|
132
|
-
$indent
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
$indent -= 2
|
140
|
-
str += "
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
end
|
1
|
+
# This file handles rusty object notation.
|
2
|
+
require_relative "classnames"
|
3
|
+
|
4
|
+
$indent = 0
|
5
|
+
|
6
|
+
class Object
|
7
|
+
def rmxp_serialize
|
8
|
+
$indent += 2
|
9
|
+
str = "#{self.class.name.split("::").last}(\n"
|
10
|
+
self.instance_variables.each { |var| str += "#{" " * $indent}#{var.to_s.delete("@")}: #{self.instance_variable_get(var).rmxp_serialize},\n" }
|
11
|
+
$indent -= 2
|
12
|
+
str += "#{" " * $indent})"
|
13
|
+
str
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Table
|
18
|
+
def rmxp_serialize
|
19
|
+
str = "Table#{@num_of_dimensions}(\n"
|
20
|
+
$indent += 2
|
21
|
+
str += "#{" " * $indent}"
|
22
|
+
str += case @num_of_dimensions
|
23
|
+
when 1
|
24
|
+
"xsize: #{@xsize},\n"
|
25
|
+
when 2
|
26
|
+
"xsize: #{@xsize}, ysize: #{@ysize},\n"
|
27
|
+
when 3
|
28
|
+
"xsize: #{@xsize}, ysize: #{@ysize}, zsize: #{@zsize},\n"
|
29
|
+
end
|
30
|
+
str += "#{" " * $indent}data: [\n"
|
31
|
+
$indent += 2
|
32
|
+
case @num_of_dimensions
|
33
|
+
when 1
|
34
|
+
str += "#{" " * $indent}"
|
35
|
+
@elements.each_with_index do |e, index|
|
36
|
+
str += "#{e}, "
|
37
|
+
str += "\n#{" " * $indent}" if (index + 1) % 8 == 0
|
38
|
+
end
|
39
|
+
str += "\n"
|
40
|
+
when 2
|
41
|
+
@elements.each do |y|
|
42
|
+
str += " " * $indent
|
43
|
+
y.each { |e| str += "#{e}, " }
|
44
|
+
str += "\n"
|
45
|
+
end
|
46
|
+
when 3
|
47
|
+
@elements.each do |z|
|
48
|
+
z.each do |y|
|
49
|
+
str += " " * $indent
|
50
|
+
y.each { |e| str += "#{e}, " }
|
51
|
+
str += "\n"
|
52
|
+
end
|
53
|
+
str += "\n"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
$indent -= 2
|
57
|
+
str += "#{" " * $indent}]\n"
|
58
|
+
$indent -= 2
|
59
|
+
str += "#{" " * $indent})"
|
60
|
+
str
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class Hash
|
65
|
+
def rmxp_serialize
|
66
|
+
str = "{\n"
|
67
|
+
$indent += 2
|
68
|
+
self.each { |key, value| str += "#{" " * $indent}#{key.rmxp_serialize}: #{value.rmxp_serialize},\n" }
|
69
|
+
$indent -= 2
|
70
|
+
str += "#{" " * $indent}}"
|
71
|
+
str
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# BAD BAD
|
76
|
+
class NilClass
|
77
|
+
def rmxp_serialize
|
78
|
+
"None"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class String
|
83
|
+
def rmxp_serialize
|
84
|
+
self.inspect
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class Array
|
89
|
+
def rmxp_serialize
|
90
|
+
unless self.empty?
|
91
|
+
str = "[\n"
|
92
|
+
$indent += 2
|
93
|
+
self.each { |e| next unless e; str += "#{" " * $indent}#{e.rmxp_serialize},\n" }
|
94
|
+
$indent -= 2
|
95
|
+
str += "#{" " * $indent}]"
|
96
|
+
else
|
97
|
+
str = "[]"
|
98
|
+
end
|
99
|
+
str
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
module RPG
|
104
|
+
class EventCommand
|
105
|
+
def rmxp_serialize
|
106
|
+
str = "EventCommand(\n"
|
107
|
+
$indent += 2
|
108
|
+
str += "#{" " * $indent}indent: #{@indent},\n"
|
109
|
+
str += "#{" " * $indent}code: #{@code},\n"
|
110
|
+
str += "#{" " * $indent}parameters: ["
|
111
|
+
if @parameters.empty?
|
112
|
+
str += "],\n"
|
113
|
+
else
|
114
|
+
$indent += 2
|
115
|
+
@parameters.each do |param|
|
116
|
+
str += "\n#{" " * $indent}#{param.class.name.split("::").last}(#{param.rmxp_serialize}),"
|
117
|
+
end
|
118
|
+
$indent -= 2
|
119
|
+
str += "\n#{" " * $indent}],\n"
|
120
|
+
end
|
121
|
+
$indent -= 2
|
122
|
+
str += "#{" " * $indent})"
|
123
|
+
str
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
class MoveCommand
|
128
|
+
def rmxp_serialize
|
129
|
+
str = "MoveCommand(\n"
|
130
|
+
$indent += 2
|
131
|
+
str += "#{" " * $indent}code: #{@code},\n"
|
132
|
+
str += "#{" " * $indent}parameters: ["
|
133
|
+
$indent += 2
|
134
|
+
@parameters.each do |param|
|
135
|
+
str += "\n#{" " * $indent}#{param.class.name.split("::").last}(#{param.rmxp_serialize}),"
|
136
|
+
end
|
137
|
+
$indent -= 2
|
138
|
+
str += "\n#{" " * $indent}],\n"
|
139
|
+
$indent -= 2
|
140
|
+
str += "#{" " * $indent})"
|
141
|
+
str
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -1,85 +1,85 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
require "zlib"
|
3
|
-
|
4
|
-
module RMXPExtractor
|
5
|
-
def self.rpgscript(game_dir, scripts_dir, script_name, extract = false)
|
6
|
-
# Determine version of game engine
|
7
|
-
game_data_dir = File.join(game_dir, "Data")
|
8
|
-
unless Dir.exist? game_data_dir
|
9
|
-
STDERR.puts "error: #{game_dir} does not have a Data subdirectory"
|
10
|
-
exit 1
|
11
|
-
end
|
12
|
-
|
13
|
-
target_path = File.join(game_data_dir, script_name)
|
14
|
-
|
15
|
-
# Generate path of script list
|
16
|
-
list_path = File.join(scripts_dir, "_scripts.txt")
|
17
|
-
|
18
|
-
if extract
|
19
|
-
# Make sure the script directory exists
|
20
|
-
Dir.mkdir(scripts_dir) unless Dir.exists? scripts_dir
|
21
|
-
|
22
|
-
# Keep track of names of scripts extracted so we can warn about duplicates
|
23
|
-
names = Hash.new(0)
|
24
|
-
|
25
|
-
# Read scripts
|
26
|
-
File.open(target_path, "rb") do |fin|
|
27
|
-
File.open(list_path, "w") do |flist|
|
28
|
-
Marshal.load(fin).each_with_index do |script, index|
|
29
|
-
name = script[1].strip
|
30
|
-
data = Zlib::Inflate.inflate(script[2]).rstrip
|
31
|
-
.gsub(/[ \t]*(?:$|\r\n?)/, "\n")
|
32
|
-
|
33
|
-
# Make sure this file doesn't already exist
|
34
|
-
if name.empty?
|
35
|
-
if data.empty? || data == "\n"
|
36
|
-
flist.puts
|
37
|
-
next
|
38
|
-
else
|
39
|
-
name = "UNTITLED"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
names[name] += 1
|
44
|
-
if names[name] > 1
|
45
|
-
name << " (#{names[name]})"
|
46
|
-
end
|
47
|
-
|
48
|
-
if data.empty? || data == "\n"
|
49
|
-
# Treat this like a comment
|
50
|
-
flist.puts("# " + name)
|
51
|
-
else
|
52
|
-
# Write to file order list
|
53
|
-
flist.puts(name)
|
54
|
-
|
55
|
-
# Write script file
|
56
|
-
File.open(File.join(scripts_dir, name + ".rb"), "wb") do |fout|
|
57
|
-
fout.write(data)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
#puts "#{target_path} extracted."
|
64
|
-
else
|
65
|
-
# Write scripts
|
66
|
-
scripts = []
|
67
|
-
|
68
|
-
IO.foreach(list_path) do |name|
|
69
|
-
name.strip!
|
70
|
-
next if name.empty? || name.start_with?("#")
|
71
|
-
|
72
|
-
data = File.read(File.join(scripts_dir, name + ".rb")).rstrip.gsub("\n", "\r\n")
|
73
|
-
|
74
|
-
script = Array.new(3)
|
75
|
-
script[0] = 0
|
76
|
-
script[1] = name
|
77
|
-
script[2] = Zlib.deflate(data)
|
78
|
-
scripts << script
|
79
|
-
end
|
80
|
-
|
81
|
-
File.open(target_path, "wb") { |f| f.write(Marshal.dump(scripts)) }
|
82
|
-
#puts "#{target_path} written."
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require "zlib"
|
3
|
+
|
4
|
+
module RMXPExtractor
|
5
|
+
def self.rpgscript(game_dir, scripts_dir, script_name, extract = false)
|
6
|
+
# Determine version of game engine
|
7
|
+
game_data_dir = File.join(game_dir, "Data")
|
8
|
+
unless Dir.exist? game_data_dir
|
9
|
+
STDERR.puts "error: #{game_dir} does not have a Data subdirectory"
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
|
13
|
+
target_path = File.join(game_data_dir, script_name)
|
14
|
+
|
15
|
+
# Generate path of script list
|
16
|
+
list_path = File.join(scripts_dir, "_scripts.txt")
|
17
|
+
|
18
|
+
if extract
|
19
|
+
# Make sure the script directory exists
|
20
|
+
Dir.mkdir(scripts_dir) unless Dir.exists? scripts_dir
|
21
|
+
|
22
|
+
# Keep track of names of scripts extracted so we can warn about duplicates
|
23
|
+
names = Hash.new(0)
|
24
|
+
|
25
|
+
# Read scripts
|
26
|
+
File.open(target_path, "rb") do |fin|
|
27
|
+
File.open(list_path, "w") do |flist|
|
28
|
+
Marshal.load(fin).each_with_index do |script, index|
|
29
|
+
name = script[1].strip
|
30
|
+
data = Zlib::Inflate.inflate(script[2]).rstrip
|
31
|
+
.gsub(/[ \t]*(?:$|\r\n?)/, "\n")
|
32
|
+
|
33
|
+
# Make sure this file doesn't already exist
|
34
|
+
if name.empty?
|
35
|
+
if data.empty? || data == "\n"
|
36
|
+
flist.puts
|
37
|
+
next
|
38
|
+
else
|
39
|
+
name = "UNTITLED"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
names[name] += 1
|
44
|
+
if names[name] > 1
|
45
|
+
name << " (#{names[name]})"
|
46
|
+
end
|
47
|
+
|
48
|
+
if data.empty? || data == "\n"
|
49
|
+
# Treat this like a comment
|
50
|
+
flist.puts("# " + name)
|
51
|
+
else
|
52
|
+
# Write to file order list
|
53
|
+
flist.puts(name)
|
54
|
+
|
55
|
+
# Write script file
|
56
|
+
File.open(File.join(scripts_dir, name + ".rb"), "wb") do |fout|
|
57
|
+
fout.write(data)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
#puts "#{target_path} extracted."
|
64
|
+
else
|
65
|
+
# Write scripts
|
66
|
+
scripts = []
|
67
|
+
|
68
|
+
IO.foreach(list_path) do |name|
|
69
|
+
name.strip!
|
70
|
+
next if name.empty? || name.start_with?("#")
|
71
|
+
|
72
|
+
data = File.read(File.join(scripts_dir, name + ".rb")).rstrip.gsub("\n", "\r\n")
|
73
|
+
|
74
|
+
script = Array.new(3)
|
75
|
+
script[0] = 0
|
76
|
+
script[1] = name
|
77
|
+
script[2] = Zlib.deflate(data)
|
78
|
+
scripts << script
|
79
|
+
end
|
80
|
+
|
81
|
+
File.open(target_path, "wb") { |f| f.write(Marshal.dump(scripts)) }
|
82
|
+
#puts "#{target_path} written."
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module RMXPExtractor
|
2
|
-
VERSION = "1.
|
3
|
-
end
|
1
|
+
module RMXPExtractor
|
2
|
+
VERSION = "1.7"
|
3
|
+
end
|