Please add LuaConsole example for dumping gif and sounds.
There are two Lua console examples on this repo.
However, could you make Lua console scripts to dump all sounds and animated images as apng format?
Thank you.
I cannot find how to pass C# byte array (from Wz_Sound.ExtractSound()) to File.Write in Lua script... π€
So I know the following is verrrrrrrrrrry slow but just for PoC:
DumpSounds.lua
import 'WzComparerR2.PluginBase'
import 'WzComparerR2.WzLib'
import 'System.IO'
import 'System.Xml'
------------------------------------------------------------
local function enumAllWzNodes(node)
return coroutine.wrap(function()
coroutine.yield(node)
for _,v in each(node.Nodes) do
for child in enumAllWzNodes(v) do
coroutine.yield(child)
end
end
end)
end
local function isSound(value)
if value and type(value) == "userdata" and value:GetType().Name == 'Wz_Sound' then
return true
else
return false
end
end
local p = Path.GetInvalidFileNameChars()
local ivStr = ""
for i, v in each(p) do
if v >= 32 then
ivStr = ivStr .. string.char(v)
end
end
local ivPattern = "["..ivStr.."]"
------------------------------------------------------------
-- all variables
local topWzPath = 'Sound\\Bgm00.img'
local topNode = PluginManager.FindWz(topWzPath)
local outputDir = "D:\\wzDump"
------------------------------------------------------------
-- main function
if not topNode then
env:WriteLine('"{0}" not loaded.', topWzPath)
return
end
-- enum all wz_images
for n in enumAllWzNodes(topNode) do
local img = Wz_NodeExtension.GetNodeWzImage(n)
if img then
--extract wz image
env:WriteLine('(extract)'..(img.Name))
if img:TryExtract() then
local dir = outputDir.."\\"..(n.FullPathToFile)
local dirCreated = false
--find all sound
for n2 in enumAllWzNodes(img.Node) do
local sound = n2.Value
if isSound(sound) then
local fn = n2.FullPath:sub(img.Name:len()+2):gsub("\\", "."):gsub(ivPattern, "")
if not n2.Text:find("\\.") then
if sound.SoundType == Wz_SoundType.Mp3 then
fn = fn .. ".mp3"
end
if sound.SoundType == Wz_SoundType.WavRaw then
fn = fn .. ".wav"
end
end
fn = Path.Combine(dir, fn)
--ensure dir exists
if not dirCreated then
if not Directory.Exists(dir) then
Directory.CreateDirectory(dir)
end
dirCreated = true
end
--save sound
env:WriteLine('(output)'..fn)
local file = io.open(fn, "wb")
local bytes = sound:ExtractSound()
for i = 0, (sound.DataLength - 1) / 4096 do
file:write(string.char(table.unpack(bytes, i * 4096, math.min(i * 4096 + 4095, sound.DataLength - 1))))
end
file:close()
env:WriteLine('(close)'..fn)
end
end
img:Unextract()
else --error
env:WriteLine((img.Name)..' extract failed.')
end --end extract
end -- end type validate
end -- end foreach
env:WriteLine('--------Done.---------')
Passing ByteArray should work years ago but now it doesn't work at all. :(
@KENNYSOFT Thank you. It works! Now I can extract all sounds easily.
File a issue to NLua: https://github.com/NLua/NLua/issues/438
I'm not sure if it is by design but when I remove this line all unit tests still passed.
To unblock the performance issue, I create a branch and build our own NLua library with the fix, so that @KENNYSOFT, you won't have to join bytes to string. π€£
The following code could execute in milliseconds,
import 'System'
import 'System.IO'
local buf = Byte[10000000]
local r = Random()
r:NextBytes(buf)
File.WriteAllBytes("out.bin", buf)
Back to this thread.
The latest implementation of gif dumping has strong dependency with monogame/d3dDevice.
Yes, I admit it is a bad design, but you can still use the old Gif and GifFrame classes for frame animation.
Here's the sample code written in C#, you can feel free to translate to lua code.
var wzs = new Wz_Structure();
try{
wzs.LoadKMST1125DataWz(@"E:\MapleT\Data\Skill\Skill.wz");
var effNode = wzs.WzNode.FindNodeByPath(@"110.img\skill\1101011\effect", true);
var gif = Gif.CreateFromNode(effNode, null);
var rect = gif.GetRect();
using (var enc = new BuildInApngEncoder(@"G:\Temp\out.png", rect.Width, rect.Height)) {
enc.OptimizeEnabled = true;
foreach(var frame in gif.Frames) {
using (var bmp = new Bitmap(rect.Width, rect.Height))
using (var g = Graphics.FromImage(bmp))
{
frame.Draw(g, rect);
enc.AppendFrame(bmp, frame.Delay);
}
}
}
} finally{
wzs.Clear();
}
I don't know how can I detect some directory is an animation. So it does not find all animations but just exports the current path.
I used Gif.SaveGif() because it's more simple! π
For the strange import syntax, reference the issue: NLua/NLua#226
DumpAnimation.lua
import 'WzComparerR2.PluginBase'
import 'WzComparerR2.WzLib'
import 'WzComparerR2.Common'
import 'System.IO'
import 'System.Xml'
import 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
import 'System.Drawing'
------------------------------------------------------------
local p = Path.GetInvalidFileNameChars()
local ivStr = ""
for i, v in each(p) do
if v >= 32 then
ivStr = ivStr .. string.char(v)
end
end
local ivPattern = "["..ivStr.."]"
------------------------------------------------------------
-- all variables
local topWzPath = 'Skill\\110.img\\skill\\1101011\\effect'
local topNode = PluginManager.FindWz(topWzPath)
local outputDir = "D:\\wzDump"
------------------------------------------------------------
-- main function
if not topNode then
env:WriteLine('"{0}" not loaded.', topWzPath)
return
end
local dir = outputDir.."\\"..(topNode.FullPathToFile:gsub("\\[^\\]*$", ""))
local dirCreated = false
local fn = topNode.Text:gsub(ivPattern, "") .. ".png"
fn = Path.Combine(dir, fn)
--ensure dir exists
if not dirCreated then
if not Directory.Exists(dir) then
Directory.CreateDirectory(dir)
end
dirCreated = true
end
--save animation
local gif = Gif.CreateFromNode(topNode, null)
local rect = gif:GetRect()
local enc = BuildInApngEncoder(fn, rect.Width, rect.Height)
enc.OptimizeEnabled = true
gif:SaveGif(enc, fn, Color.Transparent)
env:WriteLine('--------Done.---------')
@KENNYSOFT Thank you!!! π
We can detect animation directory by children Wz_Png has delay value.
So, I tried to make script for extracting all from the top node like Skill base on your DumpAnimation.lua, but the error occurred.. π’
β A .NET exception occured in user-code
How can I figure this out?
DumpAnimations_Failed.lua
import 'WzComparerR2.PluginBase'
import 'WzComparerR2.WzLib'
import 'WzComparerR2.Common'
import 'System.IO'
import 'System.Xml'
import 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
import 'System.Drawing'
------------------------------------------------------------
local function isPng(value)
if value and type(value) == "userdata" and value:GetType().Name == 'Wz_Png' then
return true
else
return false
end
end
local function isDelay(node)
if node.Text == "delay" and node:GetType().Name == 'Wz_Node' then
return true
else
return false
end
end
local function enumAllWzNodes(node)
return coroutine.wrap(function()
coroutine.yield(node)
for _,v in each(node.Nodes) do
for child in enumAllWzNodes(v) do
coroutine.yield(child)
end
end
end)
end
local function isPngWithDelay(node)
if isPng(node.Value) then
for n in enumAllWzNodes(node) do
if isDelay(n) then
return true
end
end
end
return false
end
local function enumAllWzPngNodesWithDelay(node)
return coroutine.wrap(function()
if isPng(node.Value) and isPngWithDelay(node) then
coroutine.yield(node)
end
for _, n in each(node.Nodes) do
for child in enumAllWzPngNodesWithDelay(n) do
coroutine.yield(child)
end
end
end)
end
local function saveAnimatedImage(node, fn)
local gif = Gif.CreateFromNode(node, null)
local rect = gif:GetRect()
local enc = BuildInApngEncoder(fn, rect.Width, rect.Height)
enc.OptimizeEnabled = false
gif:SaveGif(enc, fn, Color.Transparent)
end
local p = Path.GetInvalidFileNameChars()
local ivStr = ""
for i, v in each(p) do
if v >= 32 then
ivStr = ivStr .. string.char(v)
end
end
local ivPattern = "["..ivStr.."]"
------------------------------------------------------------
-- all variables
local topWzPath = 'Skill'
local topNode = PluginManager.FindWz(topWzPath)
local outputDir = "D:\\wzDump"
------------------------------------------------------------
-- main function
if not topNode then
env:WriteLine('"{0}" not loaded.', topWzPath)
return
end
for n in enumAllWzNodes(topNode) do
local img = Wz_NodeExtension.GetNodeWzImage(n)
if img then
--extract wz image
env:WriteLine('(extract) '..(img.Name))
if img:TryExtract() then
local dir = outputDir.."\\"..(n.FullPathToFile)
local dirCreated = false
local fullpaths = {}
for n2 in enumAllWzPngNodesWithDelay(img.Node) do
local parentNode = n2.ParentNode
local fullpath = parentNode.FullPath
-- Skip if 'fullpath' already done
if (not fullpaths[fullpath]) then
local fn = fullpath:sub(img.Name:len()+2):gsub("\\", "."):gsub(ivPattern, "")
fn = Path.Combine(dir, fn .. ".apng")
-- [ERROR Occured] "A .NET exception occured in user-code"
--ensure dir exists
if not dirCreated then
if not Directory.Exists(dir) then
Directory.CreateDirectory(dir)
end
dirCreated = true
end
--save animation
saveAnimatedImage(parentNode, fn)
fullpaths[fullpath] = true
end
end
img:Unextract()
else --error
env:WriteLine((img.Name)..' extract failed.')
end --end extract
end -- end type validate
end -- end foreach
env:WriteLine('--------Done.---------')
It's working well, do you have D: drive? You may adjust outputDir.
I adjust outputDir to "C:\\Nexon\\wzDump", but an error occur right after "(extract) 212.img". π’
local topWzPath = 'Skill'
local topNode = PluginManager.FindWz(topWzPath)
local outputDir = "C:\\Nexon\\wzDump"
Log
(extract) 000.img
(extract) 100.img
(extract) 110.img
(extract) 111.img
(extract) 112.img
(extract) 120.img
(extract) 121.img
(extract) 122.img
(extract) 130.img
(extract) 131.img
(extract) 132.img
(extract) 200.img
(extract) 210.img
(extract) 211.img
(extract) 212.img
A .NET exception occured in user-code <----
I've got success for 212.img. You can see the failing node by adding env:WriteLine(n2.FullPath) in the for n2 block. Please provide more detailed information to ask for debugging.
Expand to see logs
-- λμλ§μ μ»κΈ° μν΄μλ env:Help() ν¨μλ₯Ό μ¬μ©νμΈμ. (extract) 212.img 212.img\skill\2121006\hit\0\0 212.img\skill\2121006\hit\0\1 212.img\skill\2121006\hit\0\2 212.img\skill\2121006\hit\0\3 212.img\skill\2121006\hit\0\4 212.img\skill\2121006\hit\0\5 212.img\skill\2121006\hit\0\6 212.img\skill\2121006\effect\0 212.img\skill\2121006\effect\1 212.img\skill\2121006\effect\2 212.img\skill\2121006\effect\3 212.img\skill\2121006\effect\4 212.img\skill\2121006\effect\5 212.img\skill\2121006\effect\6 212.img\skill\2121006\effect\7 212.img\skill\2121006\effect\8 212.img\skill\2121006\effect\9 212.img\skill\2121006\effect\10 212.img\skill\2121006\effect\11 212.img\skill\2121006\effect\12 212.img\skill\2121006\mob\0 212.img\skill\2121006\mob\1 212.img\skill\2121006\mob\2 212.img\skill\2121006\mob\3 212.img\skill\2121006\mob\4 212.img\skill\2121006\mob\5 212.img\skill\2121003\effect\0 212.img\skill\2121003\effect\1 212.img\skill\2121003\effect\2 212.img\skill\2121003\effect\3 212.img\skill\2121003\effect\4 212.img\skill\2121003\effect\5 212.img\skill\2121003\effect\6 212.img\skill\2121003\effect\7 212.img\skill\2121003\effect\8 212.img\skill\2121003\effect\9 212.img\skill\2121003\effect\10 212.img\skill\2121003\effect\11 212.img\skill\2121003\effect\12 212.img\skill\2121003\effect\13 212.img\skill\2121003\effect\14 212.img\skill\2121003\effect\15 212.img\skill\2121003\effect\16 212.img\skill\2121003\effect2\0 212.img\skill\2121003\effect2\1 212.img\skill\2121003\effect2\2 212.img\skill\2121003\effect2\3 212.img\skill\2121003\effect2\4 212.img\skill\2121003\effect2\5 212.img\skill\2121003\effect2\6 212.img\skill\2121003\effect2\7 212.img\skill\2121003\effect2\8 212.img\skill\2121003\effect2\9 212.img\skill\2121003\effect2\10 212.img\skill\2121003\hit\0\0 212.img\skill\2121003\hit\0\1 212.img\skill\2121003\hit\0\2 212.img\skill\2121003\hit\0\3 212.img\skill\2121003\hit\0\4 212.img\skill\2121007\effect\0 212.img\skill\2121007\effect\1 212.img\skill\2121007\effect\2 212.img\skill\2121007\effect\3 212.img\skill\2121007\effect\4 212.img\skill\2121007\effect\5 212.img\skill\2121007\effect\6 212.img\skill\2121007\effect\7 212.img\skill\2121007\effect\8 212.img\skill\2121007\effect\9 212.img\skill\2121007\effect\10 212.img\skill\2121007\effect\11 212.img\skill\2121007\effect\12 212.img\skill\2121007\effect0\0 212.img\skill\2121007\effect0\1 212.img\skill\2121007\effect0\2 212.img\skill\2121007\effect0\3 212.img\skill\2121007\effect0\4 212.img\skill\2121007\effect0\5 212.img\skill\2121007\effect0\6 212.img\skill\2121007\effect0\7 212.img\skill\2121007\effect0\8 212.img\skill\2121007\effect0\9 212.img\skill\2121007\effect0\10 212.img\skill\2121007\effect0\11 212.img\skill\2121007\effect0\12 212.img\skill\2121007\effect0\13 212.img\skill\2121007\effect0\14 212.img\skill\2121007\effect0\15 212.img\skill\2121007\effect0\16 212.img\skill\2121007\effect0\17 212.img\skill\2121007\effect0\18 212.img\skill\2121007\effect0\19 212.img\skill\2121007\hit\0\0 212.img\skill\2121007\hit\0\1 212.img\skill\2121007\hit\0\2 212.img\skill\2121007\hit\0\3 212.img\skill\2121007\hit\0\4 212.img\skill\2121007\hit\0\5 212.img\skill\2121007\tile\0\0 212.img\skill\2121007\tile\0\1 212.img\skill\2121007\tile\0\2 212.img\skill\2121007\tile\0\3 212.img\skill\2121007\tile\0\4 212.img\skill\2121007\tile\0\5 212.img\skill\2121007\tile\0\6 212.img\skill\2121007\tile\0\7 212.img\skill\2121007\tile\0\8 212.img\skill\2121007\tile\0\9 212.img\skill\2121007\tile\0\10 212.img\skill\2121007\tile\0\11 212.img\skill\2121007\tile\0\12 212.img\skill\2121007\tile\0\13 212.img\skill\2121007\tile\0\14 212.img\skill\2121007\tile\0\15 212.img\skill\2121007\tile\0\16 212.img\skill\2121007\tile\0\17 212.img\skill\2121007\tile\0\18 212.img\skill\2121007\tile\0\19 212.img\skill\2121007\tile\0\20 212.img\skill\2121007\tile\1\0 212.img\skill\2121007\tile\1\1 212.img\skill\2121007\tile\1\2 212.img\skill\2121007\tile\1\3 212.img\skill\2121007\tile\1\4 212.img\skill\2121007\tile\1\5 212.img\skill\2121007\tile\1\6 212.img\skill\2121007\tile\1\7 212.img\skill\2121007\tile\1\8 212.img\skill\2121007\tile\1\9 212.img\skill\2121007\tile\1\10 212.img\skill\2121007\tile\1\11 212.img\skill\2121007\tile\1\12 212.img\skill\2121007\tile\1\13 212.img\skill\2121007\tile\1\14 212.img\skill\2121007\tile\1\15 212.img\skill\2121007\tile\1\16 212.img\skill\2121007\tile\1\17 212.img\skill\2121007\tile\1\18 212.img\skill\2121007\tile\1\19 212.img\skill\2121007\tile\1\20 212.img\skill\2121007\tile\2\0 212.img\skill\2121007\tile\2\1 212.img\skill\2121007\tile\2\2 212.img\skill\2121007\tile\2\3 212.img\skill\2121007\tile\2\4 212.img\skill\2121007\tile\2\5 212.img\skill\2121007\tile\2\6 212.img\skill\2121007\tile\2\7 212.img\skill\2121007\tile\2\8 212.img\skill\2121007\tile\2\9 212.img\skill\2121007\tile\2\10 212.img\skill\2121007\tile\2\11 212.img\skill\2121007\tile\2\12 212.img\skill\2121007\tile\2\13 212.img\skill\2121007\tile\2\14 212.img\skill\2121007\tile\2\15 212.img\skill\2121007\tile\2\16 212.img\skill\2121007\tile\2\17 212.img\skill\2121007\tile\2\18 212.img\skill\2121007\tile\2\19 212.img\skill\2121007\tile\2\20 212.img\skill\2121007\tile\2\21 212.img\skill\2121007\tile\2\22 212.img\skill\2121007\tile\3\0 212.img\skill\2121007\tile\3\1 212.img\skill\2121007\tile\3\2 212.img\skill\2121007\tile\3\3 212.img\skill\2121007\tile\3\4 212.img\skill\2121007\tile\3\5 212.img\skill\2121007\tile\3\6 212.img\skill\2121007\tile\3\7 212.img\skill\2121007\tile\3\8 212.img\skill\2121007\tile\3\9 212.img\skill\2121007\tile\3\10 212.img\skill\2121007\tile\3\11 212.img\skill\2121007\tile\3\12 212.img\skill\2121007\tile\3\13 212.img\skill\2121007\tile\3\14 212.img\skill\2121007\tile\3\15 212.img\skill\2121007\tile\3\16 212.img\skill\2121007\tile\3\17 212.img\skill\2121007\tile\3\18 212.img\skill\2121007\tile\3\19 212.img\skill\2121007\tile\3\20 212.img\skill\2121007\tile\3\21 212.img\skill\2121007\tile\3\22 212.img\skill\2121007\tile\4\0 212.img\skill\2121007\tile\4\1 212.img\skill\2121007\tile\4\2 212.img\skill\2121007\tile\4\3 212.img\skill\2121007\tile\4\4 212.img\skill\2121007\tile\4\5 212.img\skill\2121007\tile\4\6 212.img\skill\2121007\tile\4\7 212.img\skill\2121007\tile\4\8 212.img\skill\2121007\tile\4\9 212.img\skill\2121007\tile\4\10 212.img\skill\2121007\tile\4\11 212.img\skill\2121007\tile\4\12 212.img\skill\2121007\tile\4\13 212.img\skill\2121007\tile\4\14 212.img\skill\2121007\tile\4\15 212.img\skill\2121007\tile\4\16 212.img\skill\2121007\tile\4\17 212.img\skill\2121007\tile\4\18 212.img\skill\2121007\tile\4\19 212.img\skill\2121007\tile\4\20 212.img\skill\2121007\tile\4\21 212.img\skill\2121007\tile\4\22 212.img\skill\2121007\tile\5\0 212.img\skill\2121007\tile\5\1 212.img\skill\2121007\tile\5\2 212.img\skill\2121007\tile\5\3 212.img\skill\2121007\tile\5\4 212.img\skill\2121007\tile\5\5 212.img\skill\2121007\tile\5\6 212.img\skill\2121007\tile\5\7 212.img\skill\2121007\tile\5\8 212.img\skill\2121007\tile\5\9 212.img\skill\2121007\tile\5\10 212.img\skill\2121007\tile\5\11 212.img\skill\2121007\tile\5\12 212.img\skill\2121007\tile\5\13 212.img\skill\2121007\tile\5\14 212.img\skill\2121007\tile\5\15 212.img\skill\2121007\tile\5\16 212.img\skill\2121007\tile\5\17 212.img\skill\2121007\tile\5\18 212.img\skill\2121007\tile\5\19 212.img\skill\2121007\tile\5\20 212.img\skill\2121007\tile\5\21 212.img\skill\2121007\tile\5\22 212.img\skill\2121007\tile\5\23 212.img\skill\2121007\tile\6\0 212.img\skill\2121007\tile\6\1 212.img\skill\2121007\tile\6\2 212.img\skill\2121007\tile\6\3 212.img\skill\2121007\tile\6\4 212.img\skill\2121007\tile\6\5 212.img\skill\2121007\tile\6\6 212.img\skill\2121007\tile\6\7 212.img\skill\2121007\tile\6\8 212.img\skill\2121007\tile\6\9 212.img\skill\2121007\tile\6\10 212.img\skill\2121007\tile\6\11 212.img\skill\2121007\tile\6\12 212.img\skill\2121007\tile\6\13 212.img\skill\2121007\tile\6\14 212.img\skill\2121007\tile\6\15 212.img\skill\2121007\tile\6\16 212.img\skill\2121007\tile\6\17 212.img\skill\2121007\tile\6\18 212.img\skill\2121007\tile\6\19 212.img\skill\2121007\tile\6\20 212.img\skill\2121007\tile\6\21 212.img\skill\2121007\tile\6\22 212.img\skill\2121007\tile\6\23 212.img\skill\2121007\tile\7\0 212.img\skill\2121007\tile\7\1 212.img\skill\2121007\tile\7\2 212.img\skill\2121007\tile\7\3 212.img\skill\2121007\tile\7\4 212.img\skill\2121007\tile\7\5 212.img\skill\2121007\tile\7\6 212.img\skill\2121007\tile\7\7 212.img\skill\2121007\tile\7\8 212.img\skill\2121007\tile\7\9 212.img\skill\2121007\tile\7\10 212.img\skill\2121007\tile\7\11 212.img\skill\2121007\tile\7\12 212.img\skill\2121007\tile\7\13 212.img\skill\2121007\tile\7\14 212.img\skill\2121007\tile\7\15 212.img\skill\2121007\tile\7\16 212.img\skill\2121007\tile\7\17 212.img\skill\2121007\tile\7\18 212.img\skill\2121007\tile\7\19 212.img\skill\2121007\tile\7\20 212.img\skill\2121007\tile\7\21 212.img\skill\2121007\tile\7\22 212.img\skill\2121007\tile\7\23 212.img\skill\2121007\tile\8\0 212.img\skill\2121007\tile\8\1 212.img\skill\2121007\tile\8\2 212.img\skill\2121007\tile\8\3 212.img\skill\2121007\tile\8\4 212.img\skill\2121007\tile\8\5 212.img\skill\2121007\tile\8\6 212.img\skill\2121007\tile\8\7 212.img\skill\2121007\tile\8\8 212.img\skill\2121007\tile\8\9 212.img\skill\2121007\tile\8\10 212.img\skill\2121007\tile\8\11 212.img\skill\2121007\tile\8\12 212.img\skill\2121007\tile\8\13 212.img\skill\2121007\tile\8\14 212.img\skill\2121007\tile\8\15 212.img\skill\2121007\tile\8\16 212.img\skill\2121007\tile\8\17 212.img\skill\2121007\tile\8\18 212.img\skill\2121007\tile\8\19 212.img\skill\2121007\tile\8\20 212.img\skill\2121007\tile\8\21 212.img\skill\2121007\tile\8\22 212.img\skill\2121007\tile\8\23 212.img\skill\2121007\tile\8\24 212.img\skill\2121007\tile\8\25 212.img\skill\2121011\effect\0 212.img\skill\2121011\effect\1 212.img\skill\2121011\effect\2 212.img\skill\2121011\effect\3 212.img\skill\2121011\effect\4 212.img\skill\2121011\effect\5 212.img\skill\2121011\effect\6 212.img\skill\2121011\effect\7 212.img\skill\2121011\effect\8 212.img\skill\2121011\effect\9 212.img\skill\2121011\effect\10 212.img\skill\2121011\effect\11 212.img\skill\2121011\effect\12 212.img\skill\2121011\effect\13 212.img\skill\2121011\effect\14 212.img\skill\2121011\effect\15 212.img\skill\2121011\hit\0\0 212.img\skill\2121011\hit\0\1 212.img\skill\2121011\hit\0\2 212.img\skill\2121011\hit\0\3 212.img\skill\2121011\hit\0\4 212.img\skill\2121011\hit\0\5 212.img\skill\2121011\hit\0\6 212.img\skill\2121011\hit\0\7 212.img\skill\2121011\hit\0\8 212.img\skill\2121011\hit\0\9 212.img\skill\2121011\ball\0 212.img\skill\2121011\ball\1 212.img\skill\2121011\ball\2 212.img\skill\2121011\ball\3 212.img\skill\2121011\ball\4 212.img\skill\2121011\ball\5 212.img\skill\2121011\ball\6 212.img\skill\2121011\special\0\0 212.img\skill\2121011\special\0\1 212.img\skill\2121011\special\0\2 212.img\skill\2121011\special\0\3 212.img\skill\2121011\special\0\4 212.img\skill\2121011\special\0\5 212.img\skill\2121011\special\0\6 212.img\skill\2121011\special\0\7 212.img\skill\2121011\special\1\0 212.img\skill\2121011\special\1\1 212.img\skill\2121011\special\1\2 212.img\skill\2121011\special\1\3 212.img\skill\2121011\special\1\4 212.img\skill\2121011\special\1\5 212.img\skill\2121011\special\1\6 212.img\skill\2121011\special\1\7 212.img\skill\2121011\special\2\0 212.img\skill\2121011\special\2\1 212.img\skill\2121011\special\2\2 212.img\skill\2121011\special\2\3 212.img\skill\2121011\special\2\4 212.img\skill\2121011\special\2\5 212.img\skill\2121011\special\2\6 212.img\skill\2121011\special\2\7 212.img\skill\2121011\special\3\0 212.img\skill\2121011\special\3\1 212.img\skill\2121011\special\3\2 212.img\skill\2121011\special\3\3 212.img\skill\2121011\special\3\4 212.img\skill\2121011\special\3\5 212.img\skill\2121011\special\3\6 212.img\skill\2121011\special\3\7 212.img\skill\2121011\special\4\0 212.img\skill\2121011\special\4\1 212.img\skill\2121011\special\4\2 212.img\skill\2121011\special\4\3 212.img\skill\2121011\special\4\4 212.img\skill\2121011\special\4\5 212.img\skill\2121011\special\4\6 212.img\skill\2121011\special\4\7 212.img\skill\2121004\effect\0 212.img\skill\2121004\effect\1 212.img\skill\2121004\effect\2 212.img\skill\2121004\effect\3 212.img\skill\2121004\effect\4 212.img\skill\2121004\effect\5 212.img\skill\2121004\effect\6 212.img\skill\2121004\effect\7 212.img\skill\2121004\effect\8 212.img\skill\2121004\effect\9 212.img\skill\2121004\effect\10 212.img\skill\2121004\effect\11 212.img\skill\2121004\effect\12 212.img\skill\2121004\effect\13 212.img\skill\2121004\effect\14 212.img\skill\2121004\effect\15 212.img\skill\2121004\effect\16 212.img\skill\2121004\effect\17 212.img\skill\2121004\effect\18 212.img\skill\2121004\effect\19 212.img\skill\2121004\effect\20 212.img\skill\2121004\effect\21 212.img\skill\2121004\effect\22 212.img\skill\2121004\effect0\0 212.img\skill\2121004\effect0\1 212.img\skill\2121004\effect0\2 212.img\skill\2121004\effect0\3 212.img\skill\2121004\effect0\4 212.img\skill\2121004\effect0\5 212.img\skill\2121004\effect0\6 212.img\skill\2121004\effect0\7 212.img\skill\2121004\effect0\8 212.img\skill\2121004\effect0\9 212.img\skill\2121004\effect0\10 212.img\skill\2121004\effect0\11 212.img\skill\2121004\effect0\12 212.img\skill\2121004\effect0\13 212.img\skill\2121004\effect0\14 212.img\skill\2121004\effect0\15 212.img\skill\2121004\effect0\16 212.img\skill\2121004\effect0\17 212.img\skill\2121004\effect0\18 212.img\skill\2121004\effect0\19 212.img\skill\2121004\effect0\20 212.img\skill\2121004\effect0\21 212.img\skill\2121004\effect0\22 212.img\skill\2121004\special\0 212.img\skill\2121004\special\1 212.img\skill\2121004\special\2 212.img\skill\2121004\special\3 212.img\skill\2121004\special\4 212.img\skill\2121005\summon\summoned\0 212.img\skill\2121005\summon\summoned\1 212.img\skill\2121005\summon\summoned\2 212.img\skill\2121005\summon\summoned\3 212.img\skill\2121005\summon\summoned\4 212.img\skill\2121005\summon\summoned\5 212.img\skill\2121005\summon\summoned\6 212.img\skill\2121005\summon\summoned\7 212.img\skill\2121005\summon\move\0 212.img\skill\2121005\summon\move\1 212.img\skill\2121005\summon\move\2 212.img\skill\2121005\summon\move\3 212.img\skill\2121005\summon\move\4 212.img\skill\2121005\summon\move\5 212.img\skill\2121005\summon\stand\0 212.img\skill\2121005\summon\stand\1 212.img\skill\2121005\summon\stand\2 212.img\skill\2121005\summon\stand\3 212.img\skill\2121005\summon\stand\4 212.img\skill\2121005\summon\stand\5 212.img\skill\2121005\summon\attack1\0 212.img\skill\2121005\summon\attack1\1 212.img\skill\2121005\summon\attack1\2 212.img\skill\2121005\summon\attack1\3 212.img\skill\2121005\summon\attack1\4 212.img\skill\2121005\summon\attack1\5 212.img\skill\2121005\summon\attack1\6 212.img\skill\2121005\summon\attack1\7 212.img\skill\2121005\summon\attack1\8 212.img\skill\2121005\summon\attack1\9 212.img\skill\2121005\summon\attack1\10 212.img\skill\2121005\summon\attack1\11 212.img\skill\2121005\summon\attack1\12 212.img\skill\2121005\summon\attack1\13 212.img\skill\2121005\summon\attack1\14 212.img\skill\2121005\summon\attack1\15 212.img\skill\2121005\summon\attack1\16 212.img\skill\2121005\summon\attack1\17 212.img\skill\2121005\summon\die\0 212.img\skill\2121005\summon\die\1 212.img\skill\2121005\summon\die\2 212.img\skill\2121005\summon\die\3 212.img\skill\2121005\summon\die\4 212.img\skill\2121005\summon\die\5 212.img\skill\2121005\summon\die\6 212.img\skill\2121005\summon\die\7 212.img\skill\2121005\summon\die\8 212.img\skill\2121005\summon\die\9 212.img\skill\2121005\summon\attack2\0 212.img\skill\2121005\summon\attack2\1 212.img\skill\2121005\summon\attack2\2 212.img\skill\2121005\summon\attack2\3 212.img\skill\2121005\summon\attack2\4 212.img\skill\2121005\summon\attack2\5 212.img\skill\2121005\summon\attack2\6 212.img\skill\2121005\summon\attack2\7 212.img\skill\2121005\summon\attack2\8 212.img\skill\2121005\summon\attack2\9 212.img\skill\2121005\summon\attack2\10 212.img\skill\2121005\summon\attack2\27 212.img\skill\2121005\summon\attack2\28 212.img\skill\2121005\summon\attack2\29 212.img\skill\2121005\summon\attack2\30 212.img\skill\2121005\summon\attack2\31 212.img\skill\2121005\summon\attack2\32 212.img\skill\2121005\summon\attack2\33 212.img\skill\2121005\summon\attack2\34 212.img\skill\2121005\summon\attack2\35 212.img\skill\2121005\summon\attack2\36 212.img\skill\2121005\summon\attack2\37 212.img\skill\2121005\summon\attack2\38 212.img\skill\2121005\summon\attack2\39 212.img\skill\2121005\summon\attack2\40 212.img\skill\2121005\summon\attack2\41 212.img\skill\2121005\summon\attack2\42 212.img\skill\2121005\summon\attack2\info\hit\0 212.img\skill\2121005\summon\attack2\info\hit\1 212.img\skill\2121005\summon\attack2\info\hit\2 212.img\skill\2121005\summon\attack2\info\hit\3 212.img\skill\2121005\summon\attack2\info\hit\4 212.img\skill\2121005\summon\attack2\info\hit\5 212.img\skill\2121005\summon\attack2\info\hit\6 212.img\skill\2121005\summon\special\1 212.img\skill\2121005\summon\special\2 212.img\skill\2121005\summon\special\3 212.img\skill\2121005\summon\special\4 212.img\skill\2121005\summon\special\5 212.img\skill\2121005\summon\special\6 212.img\skill\2121005\summon\special\7 212.img\skill\2121005\summon\special\8 212.img\skill\2121005\summon\special\9 212.img\skill\2121005\summon\special\10 212.img\skill\2121005\summon\special\11 212.img\skill\2121005\summon\special\12 212.img\skill\2121005\summon\special\13 212.img\skill\2121005\summon\special\14 212.img\skill\2121005\hit\0\0 212.img\skill\2121005\hit\0\1 212.img\skill\2121005\hit\0\2 212.img\skill\2121005\hit\0\3 212.img\skill\2121005\hit\0\4 212.img\skill\2121005\hit\0\5 212.img\skill\2121005\hit\0\6 212.img\skill\2121000\effect\0 212.img\skill\2121000\effect\1 212.img\skill\2121000\effect\2 212.img\skill\2121000\effect\3 212.img\skill\2121000\effect\4 212.img\skill\2121000\effect\5 212.img\skill\2121000\effect\6 212.img\skill\2121000\effect\7 212.img\skill\2121000\effect\8 212.img\skill\2121000\effect\9 212.img\skill\2121000\effect\10 212.img\skill\2121000\effect\11 212.img\skill\2121000\effect\12 212.img\skill\2121000\effect\13 212.img\skill\2121000\effect\14 212.img\skill\2121000\effect\15 212.img\skill\2121000\effect\16 212.img\skill\2121000\effect\17 212.img\skill\2121000\effect\18 212.img\skill\2121000\effect\19 212.img\skill\2121000\effect\20 212.img\skill\2121000\effect\21 212.img\skill\2121000\effect\22 212.img\skill\2121000\affected\0 212.img\skill\2121000\affected\1 212.img\skill\2121000\affected\2 212.img\skill\2121000\affected\3 212.img\skill\2121000\affected\4 212.img\skill\2121000\affected\5 212.img\skill\2121000\affected\6 212.img\skill\2121000\affected\7 212.img\skill\2121000\affected\8 212.img\skill\2121000\affected\9 212.img\skill\2121000\affected\10 212.img\skill\2121000\affected\11 212.img\skill\2121000\affected\12 212.img\skill\2121000\affected\13 212.img\skill\2121000\affected\14 212.img\skill\2121008\effect\0 212.img\skill\2121008\effect\1 212.img\skill\2121008\effect\2 212.img\skill\2121008\effect\3 212.img\skill\2121008\effect\4 212.img\skill\2121008\effect\5 212.img\skill\2121008\effect\6 212.img\skill\2121008\effect\7 212.img\skill\2121008\effect\8 212.img\skill\2121008\effect\9 212.img\skill\2121008\effect\10 212.img\skill\2121008\effect\11 212.img\skill\2121008\effect\12 212.img\skill\2120013\hit\0\0 212.img\skill\2120013\hit\0\1 212.img\skill\2120013\hit\0\2 212.img\skill\2120013\hit\0\3 212.img\skill\2120013\hit\0\4 212.img\skill\2120013\hit\0\5 212.img\skill\2120013\hit\0\6 212.img\skill\2120013\hit\0\7 212.img\skill\2120013\hit\0\8 212.img\skill\2120013\hit\0\9 212.img\skill\2120013\hit\0\10 212.img\skill\2120013\hit\0\11 212.img\skill\2120013\hit\0\12 212.img\skill\2120013\hit\0\13 212.img\skill\2120013\hit\0\14 212.img\skill\2120013\hit\0\15 212.img\skill\2120013\hit\0\16 212.img\skill\2120013\hit\0\17 212.img\skill\2120013\hit\0\18 212.img\skill\2121052\effect\0 212.img\skill\2121052\effect\1 212.img\skill\2121052\effect\2 212.img\skill\2121052\effect\3 212.img\skill\2121052\effect\4 212.img\skill\2121052\effect\5 212.img\skill\2121052\effect\6 212.img\skill\2121052\effect\7 212.img\skill\2121052\effect\8 212.img\skill\2121052\effect\9 212.img\skill\2121052\effect\10 212.img\skill\2121052\effect\11 212.img\skill\2121052\effect\12 212.img\skill\2121052\hit\0\0 212.img\skill\2121052\hit\0\1 212.img\skill\2121052\hit\0\2 212.img\skill\2121052\hit\0\3 212.img\skill\2121052\hit\0\4 212.img\skill\2121052\hit\0\5 212.img\skill\2121053\effect\0 212.img\skill\2121053\effect\1 212.img\skill\2121053\effect\2 212.img\skill\2121053\effect\3 212.img\skill\2121053\effect\4 212.img\skill\2121053\effect\5 212.img\skill\2121053\effect\6 212.img\skill\2121053\effect\7 212.img\skill\2121053\effect\8 212.img\skill\2121053\effect\9 212.img\skill\2121053\effect\10 212.img\skill\2121053\effect\11 212.img\skill\2121053\effect\12 212.img\skill\2121053\effect\13 212.img\skill\2121053\effect\14 212.img\skill\2121053\effect\15 212.img\skill\2121053\effect\16 212.img\skill\2121053\effect\17 212.img\skill\2121053\attected\0 212.img\skill\2121054\effect\0 212.img\skill\2121054\effect\1 212.img\skill\2121054\effect\2 212.img\skill\2121054\effect\3 212.img\skill\2121054\effect\4 212.img\skill\2121054\effect\5 212.img\skill\2121054\effect\6 212.img\skill\2121054\effect\7 212.img\skill\2121054\effect\8 212.img\skill\2121054\effect\9 212.img\skill\2121054\effect\10 212.img\skill\2121054\effect\11 212.img\skill\2121054\effect\12 212.img\skill\2121054\effect\13 212.img\skill\2121054\effect\14 212.img\skill\2121054\effect\15 212.img\skill\2121054\effect\16 212.img\skill\2121054\effect\17 212.img\skill\2121054\effect\18 212.img\skill\2121054\repeat\0 212.img\skill\2121054\repeat\1 212.img\skill\2121054\repeat\2 212.img\skill\2121054\repeat\3 212.img\skill\2121054\repeat\4 212.img\skill\2121054\repeat\5 212.img\skill\2121054\repeat\6 212.img\skill\2121054\repeat\7 212.img\skill\2121054\hit\0\0 212.img\skill\2121054\hit\0\1 212.img\skill\2121054\hit\0\2 212.img\skill\2121054\hit\0\3 212.img\skill\2121054\hit\0\4 212.img\skill\2121054\hit\0\5 212.img\skill\2121054\hit\0\6 --------Done.---------
Update for more detail errors. https://github.com/Kagamia/WzComparerR2/commit/7c5921f4c61d76fa974fc51c038b6fbad7305b18