diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..764f3b3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+/target
+/sdkserver.toml
+/dispatch.toml
+/gateserver.toml
+/dbgate.toml
+/gameserver.toml
+
+/hk4e_proto/bin.server.proto
+/hk4e_proto/redis_data.proto
+/hk4e_proto/packet_head.proto
+/hk4e_proto/server_only.proto
+/hk4e_proto/cmd.proto
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..aa6973d
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,3097 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+
+[[package]]
+name = "async-trait"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "asynchronous-codec"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233"
+dependencies = [
+ "bytes",
+ "futures-sink",
+ "futures-util",
+ "memchr",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "atoi"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "axum"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sync_wrapper 1.0.1",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "mime",
+ "pin-project-lite",
+ "rustversion",
+ "sync_wrapper 0.1.2",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-server"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ad46c3ec4e12f4a4b6835e173ba21c25e484c9d02b49770bf006ce5367c036"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tower",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422"
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "common"
+version = "0.1.0"
+dependencies = [
+ "ansi_term",
+ "bytes",
+ "dashmap 6.0.1",
+ "env_logger",
+ "mhy-kcp",
+ "prost",
+ "proto",
+ "rand",
+ "rand_mt",
+ "rbase64",
+ "redis",
+ "rsa",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "thiserror",
+ "tokio",
+ "toml",
+ "tracing",
+ "zeromq",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csv"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dashmap"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data"
+version = "0.1.0"
+dependencies = [
+ "csv",
+ "paste",
+ "proto",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "dbgate"
+version = "0.1.0"
+dependencies = [
+ "common",
+ "env_logger",
+ "hex",
+ "paste",
+ "prost",
+ "proto",
+ "rbase64",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-futures",
+ "tracing-log 0.2.0",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "der"
+version = "0.7.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.1.0"
+dependencies = [
+ "axum",
+ "axum-server",
+ "common",
+ "dashmap 6.0.1",
+ "env_logger",
+ "hex",
+ "paste",
+ "prost",
+ "proto",
+ "rbase64",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-futures",
+ "tracing-log 0.2.0",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
+name = "either"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "env_filter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "env_filter",
+ "humantime",
+ "log",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "etcetera"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
+dependencies = [
+ "cfg-if",
+ "home",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-intrusive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gameserver"
+version = "0.1.0"
+dependencies = [
+ "common",
+ "dashmap 6.0.1",
+ "data",
+ "env_logger",
+ "hex",
+ "num_enum",
+ "parking_lot",
+ "paste",
+ "prost",
+ "proto",
+ "rand",
+ "rbase64",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-futures",
+ "tracing-log 0.2.0",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "gateserver"
+version = "0.1.0"
+dependencies = [
+ "common",
+ "env_logger",
+ "hex",
+ "mhy-kcp",
+ "paste",
+ "prost",
+ "proto",
+ "rand",
+ "rbase64",
+ "redis",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-futures",
+ "tracing-log 0.2.0",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
+
+[[package]]
+name = "h2"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "http"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800"
+
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7bb23d733dfcc8af652a78b7bf232f0e967710d044732185e561e47c0336b6"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
+
+[[package]]
+name = "mhy-kcp"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "env_logger",
+ "log",
+ "rand",
+ "thiserror",
+ "time",
+ "tokio",
+ "xxhash-rust",
+]
+
+[[package]]
+name = "mimalloc"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9186d86b79b52f4a77af65604b51225e8db1d6ee7e3f41aec1e40829c71a176"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "multimap"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand",
+ "serde",
+ "smallvec",
+ "zeroize",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num-integer"
+version = "0.1.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "object"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.5.1",
+ "smallvec",
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "pbkdf2"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs1"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+dependencies = [
+ "der",
+ "pkcs8",
+ "spki",
+]
+
+[[package]]
+name = "pkcs5"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6"
+dependencies = [
+ "aes",
+ "cbc",
+ "der",
+ "pbkdf2",
+ "scrypt",
+ "sha2",
+ "spki",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "pkcs5",
+ "rand_core",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "prettyplease"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
+dependencies = [
+ "toml_edit 0.21.1",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
+dependencies = [
+ "bytes",
+ "heck",
+ "itertools",
+ "log",
+ "multimap",
+ "once_cell",
+ "petgraph",
+ "prettyplease",
+ "prost",
+ "prost-types",
+ "regex",
+ "syn 2.0.66",
+ "tempfile",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0"
+dependencies = [
+ "prost",
+]
+
+[[package]]
+name = "proto"
+version = "0.1.0"
+dependencies = [
+ "prost",
+ "prost-build",
+ "prost-types",
+ "proto_gen",
+]
+
+[[package]]
+name = "proto_gen"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_mt"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e018c6ded60e5252609887c12eb3ca2592e9248c5894a7db3975c8a7a1e2df"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rayon"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rbase64"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b133fdd52a7cbb7619c86d93c8a34ea6e056462f901e08f6cbb6c9baf138b13"
+dependencies = [
+ "mimalloc",
+ "rayon",
+]
+
+[[package]]
+name = "redis"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0d7a6955c7511f60f3ba9e86c6d02b3c3f144f8c24b288d1f4e18074ab8bbec"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "combine",
+ "futures-util",
+ "itoa",
+ "percent-encoding",
+ "pin-project-lite",
+ "ryu",
+ "sha1_smol",
+ "socket2",
+ "tokio",
+ "tokio-util",
+ "url",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
+dependencies = [
+ "bitflags 2.5.0",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.6",
+ "regex-syntax 0.8.3",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.3",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
+
+[[package]]
+name = "ring"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom",
+ "libc",
+ "spin 0.9.8",
+ "untrusted",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rsa"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc"
+dependencies = [
+ "const-oid",
+ "digest",
+ "num-bigint-dig",
+ "num-integer",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core",
+ "serde",
+ "sha1",
+ "sha2",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustix"
+version = "0.38.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
+dependencies = [
+ "bitflags 2.5.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
+dependencies = [
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "salsa20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scrypt"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"
+dependencies = [
+ "pbkdf2",
+ "salsa20",
+ "sha2",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sdkserver"
+version = "0.1.0"
+dependencies = [
+ "axum",
+ "axum-server",
+ "common",
+ "env_logger",
+ "password-hash",
+ "pbkdf2",
+ "rand",
+ "rbase64",
+ "regex",
+ "rsa",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-futures",
+ "tracing-log 0.2.0",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "digest",
+ "rand_core",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "socket2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c"
+dependencies = [
+ "itertools",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlx"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa"
+dependencies = [
+ "sqlx-core",
+ "sqlx-macros",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6"
+dependencies = [
+ "ahash",
+ "atoi",
+ "byteorder",
+ "bytes",
+ "crc",
+ "crossbeam-queue",
+ "either",
+ "event-listener",
+ "futures-channel",
+ "futures-core",
+ "futures-intrusive",
+ "futures-io",
+ "futures-util",
+ "hashlink",
+ "hex",
+ "indexmap",
+ "log",
+ "memchr",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "sha2",
+ "smallvec",
+ "sqlformat",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8"
+dependencies = [
+ "dotenvy",
+ "either",
+ "heck",
+ "hex",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "sha2",
+ "sqlx-core",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+ "syn 1.0.109",
+ "tempfile",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "sqlx-mysql"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
+dependencies = [
+ "atoi",
+ "base64",
+ "bitflags 2.5.0",
+ "byteorder",
+ "bytes",
+ "crc",
+ "digest",
+ "dotenvy",
+ "either",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "generic-array",
+ "hex",
+ "hkdf",
+ "hmac",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "percent-encoding",
+ "rand",
+ "rsa",
+ "serde",
+ "sha1",
+ "sha2",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-postgres"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
+dependencies = [
+ "atoi",
+ "base64",
+ "bitflags 2.5.0",
+ "byteorder",
+ "crc",
+ "dotenvy",
+ "etcetera",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hkdf",
+ "hmac",
+ "home",
+ "itoa",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "rand",
+ "serde",
+ "serde_json",
+ "sha2",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa"
+dependencies = [
+ "atoi",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "sqlx-core",
+ "tracing",
+ "url",
+ "urlencoding",
+]
+
+[[package]]
+name = "stringprep"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+ "unicode-properties",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
+
+[[package]]
+name = "tempfile"
+version = "3.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.22.14",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "tracing-bunyan-formatter"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5c266b9ac83dedf0e0385ad78514949e6d89491269e7065bee51d2bb8ec7373"
+dependencies = [
+ "ahash",
+ "gethostname",
+ "log",
+ "serde",
+ "serde_json",
+ "time",
+ "tracing",
+ "tracing-core",
+ "tracing-log 0.1.4",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log 0.2.0",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-properties"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
+
+[[package]]
+name = "whoami"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9"
+dependencies = [
+ "redox_syscall 0.4.1",
+ "wasite",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.5",
+ "windows_aarch64_msvc 0.52.5",
+ "windows_i686_gnu 0.52.5",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.5",
+ "windows_x86_64_gnu 0.52.5",
+ "windows_x86_64_gnullvm 0.52.5",
+ "windows_x86_64_msvc 0.52.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "xxhash-rust"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.66",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+
+[[package]]
+name = "zeromq"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0560d00172817b7f7c2265060783519c475702ae290b154115ca75e976d4d0"
+dependencies = [
+ "async-trait",
+ "asynchronous-codec",
+ "bytes",
+ "crossbeam-queue",
+ "dashmap 5.5.3",
+ "futures-channel",
+ "futures-io",
+ "futures-task",
+ "futures-util",
+ "log",
+ "num-traits",
+ "once_cell",
+ "parking_lot",
+ "rand",
+ "regex",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "uuid",
+]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..36119ed
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,74 @@
+[workspace]
+members = ["framework/common", "dispatch", "gateserver", "kcp", "hk4e_proto", "sdkserver", "dbgate", "gameserver", "hk4e_data"]
+resolver = "2"
+
+[workspace.package]
+version = "0.1.0"
+
+[workspace.dependencies]
+thiserror = "1.0.61"
+bytes = "1.6.0"
+
+axum = "0.7.4"
+axum-server = "0.6.0"
+
+sqlx = { version = "0.7.4", features = ["postgres", "runtime-tokio-rustls"] }
+redis = { version = "0.25.4", features = ["aio", "tokio-comp"] }
+zeromq = "0.4.0"
+
+env_logger = "0.11.3"
+
+rbase64 = "2.0.3"
+rand = "0.8.5"
+rand_mt = "4.2.2"
+rsa = { version = "0.9.6", features = [
+ "sha1",
+ "nightly",
+ "pkcs5",
+ "serde",
+ "sha2",
+] }
+
+prost = "0.12.3"
+prost-types = "0.12.3"
+prost-build = "0.12.3"
+
+dashmap = "6.0.1"
+paste = "1.0.14"
+sysinfo = "0.30.7"
+
+hex = "0.4.3"
+
+csv = "1.3.0"
+num_enum = "0.7.3"
+serde = { version = "1.0.197", features = ["derive"] }
+serde_json = "1.0.114"
+
+parking_lot = "0.12.3"
+tokio = { version = "1.36.0", features = ["full"] }
+tokio-util = { version = "0.7.10", features = ["io"] }
+
+tracing = "0.1.40"
+tracing-futures = "0.2.5"
+tracing-log = { version = "0.2.0", features = ["std", "log-tracer"] }
+tracing-subscriber = { version = "0.3.18", features = [
+ "env-filter",
+ "registry",
+ "std",
+ "tracing",
+ "tracing-log",
+] }
+tracing-bunyan-formatter = "0.3.9"
+toml = "0.8.14"
+
+proto = { path = "hk4e_proto/" }
+proto_gen = { path = "hk4e_proto/proto_gen/" }
+data = { path = "hk4e_data/" }
+common = { path = "framework/common/" }
+mhy-kcp = { path = "kcp/", features = ["tokio"] }
+
+[profile.release]
+strip = true # Automatically strip symbols from the binary.
+lto = true # Link-time optimization.
+opt-level = 3 # Optimize for speed.
+codegen-units = 1 # Maximum size reduction optimizations.
diff --git a/README.md b/README.md
index 9579d71..c11a6bc 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,77 @@
# MualaniImpact
+### Current game version: 4.8.50
-Genshin Impact server reverse engineering project
\ No newline at end of file
+![screenshot](https://git.xeondev.com/ReversedRooms/MualaniImpact/raw/branch/master/screenshot.png)
+
+## What
+**MualaniImpact** is an **open-source project reverse-engineering Genshin Impact server binaries**. This means that all logic and architecture code is being reimplemented according to decompiled pseudocode of official servers.
+
+## How
+The original server binaries are written in C++. This project aims to rewrite them in rust. Because of that, some implementation details may be different (due to rust ownership model and so on).
We also use PostgreSQL instead of MySQL that is used by miHoYo.
+
+## Implemented services
+- Dispatch
+- Gateserver
+- Dbgate
+- Gameserver (work-in-progress)
+- SDKServer (not part of game-specific services, but required for authentification, emulates miHoYo account API)
+
+## Getting started
+#### Requirements:
+- [Rust](https://www.rust-lang.org/tools/install)
+- [PostgreSQL](https://www.postgresql.org/download/)
+- [Redis](https://redis.io/downloads/)
+##### NOTE: if you are using MS Windows, use [this version of Redis](https://github.com/tporadowski/redis/releases)
+
+### Setup
+#### Server
+##### a) building from sources
+```
+git clone https://git.xeondev.com/ReversedRooms/MualaniImpact.git
+cd MualaniImpact
+cargo run --bin sdkserver
+cargo run --bin dispatch
+cargo run --bin dbgate
+cargo run --bin gateserver
+cargo run --bin gameserver
+```
+
+##### b) using pre-built binaries
+Navigate to the [Releases](https://git.xeondev.com/ReversedRooms/MualaniImpact/releases)
+page and download the latest release for your platform.
+Launch all services: `sdkserver`, `dispatch`, `dbgate`, `gateserver`, `gameserver`
+##### NOTE: you don't have to install Rust if you're going to use pre-built binaries, although the preferred way is building from sources.
We don't provide support for pre-built binaries.
+
+#### Configuration
+You should configure each service using their own config files. They're being created in current working directory upon first startup.
+
+##### Database section
+You have to specify connection strings for **PostgreSQL** (`connection_string`) and **Redis** (`redis_url`)
+```
+[database]
+connection_string = "postgres://postgres:@localhost:5432/hk4e"
+redis_url = "redis://127.0.0.1/"
+```
+
+##### Application entries
+If you're going to host all services locally, you don't have to modify anything here.
If you're deploying services on different machines, you have to configure their `inner_ip`.
Every service should have its own unique `app_id`
Example of application entry for `Gateserver`:
+```
+[[applications.Gateserver]]
+app_id = 2
+inner_ip = "127.0.0.1:22002"
+```
+
+##### NOTE: the top most `app_id` line (before application entries) specifies `app_id` of current service.
+
+#### Data
+The data files: TSV tables (`data/txt`) and JSON configs (`data/json`) are included in this repository. Keep in mind that you need to have the `data` subdirectory in current working directory.
+
+#### Connecting
+You have to download client of **current supported game version** (at this moment it's 4.8.50, you can [get it here](https://git.xeondev.com/xeon/3/raw/branch/3/hk4e_oscbwin4.8.50_reversedrooms.torrent)), and apply the [encryption patch](https://git.xeondev.com/reversedrooms/hk4e-patch/releases).
+##### NOTE: once you got all services up and running, you have to create game account.
By default, you can do so at http://127.0.0.1:21000/account/register
+
+### Troubleshooting
+[Visit our discord](https://discord.gg/reversedrooms) if you have any questions/issues
+
+### Support
+If you want to support this project, feel free to [send a tip via boosty](https://boosty.to/xeondev/donate)
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Albedo.json b/data/json/avatar/ConfigAvatar_Albedo.json
new file mode 100644
index 0000000..fc54bec
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Albedo.json
@@ -0,0 +1,114 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Albedo_ExtraAttack",
+ "abilityName": "Avatar_Albedo_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_SkillHoldCharge",
+ "abilityName": "Avatar_Albedo_SkillHoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_FullRockAlchemist",
+ "abilityName": "Avatar_Albedo_FullRockAlchemist",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_FullRockAlchemist_Custom",
+ "abilityName": "Avatar_Albedo_FullRockAlchemist_Custom",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_AlchemicalBreakOut",
+ "abilityName": "Avatar_Albedo_AlchemicalBreakOut",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_DamageHandler",
+ "abilityName": "Avatar_Albedo_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_FallingAnthem",
+ "abilityName": "Avatar_Albedo_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo",
+ "abilityName": "Avatar_Albedo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Skill_ElementalArt",
+ "abilityName": "Avatar_Albedo_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Albedo_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Albedo_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_TeamConfig_01BS",
+ "abilityName": "Avatar_Albedo_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_TeamConfig_01Loop",
+ "abilityName": "Avatar_Albedo_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_TeamConfig_01AS",
+ "abilityName": "Avatar_Albedo_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Skill_ElementalArt_Charge",
+ "abilityName": "Avatar_Albedo_Skill_ElementalArt_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_ElementalBurst_Spine",
+ "abilityName": "Avatar_Albedo_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_ElementalBurst_Spine_Hand",
+ "abilityName": "Avatar_Albedo_ElementalBurst_Spine_Hand",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Spine",
+ "abilityName": "Avatar_Albedo_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_ElementalBurst_BS",
+ "abilityName": "Avatar_Albedo_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_ElementalBurst_Hit",
+ "abilityName": "Avatar_Albedo_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Spine_Loop",
+ "abilityName": "Avatar_Albedo_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Albedo_Spine_Loop_Hand",
+ "abilityName": "Avatar_Albedo_Spine_Loop_Hand",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Alhatham.json b/data/json/avatar/ConfigAvatar_Alhatham.json
new file mode 100644
index 0000000..3247942
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Alhatham.json
@@ -0,0 +1,154 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Alhatham_ExtraAttack",
+ "abilityName": "Avatar_Alhatham_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_SkillHoldCharge",
+ "abilityName": "Avatar_Alhatham_SkillHoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ElementalArt",
+ "abilityName": "Avatar_Alhatham_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ElementalArt_SkillStart",
+ "abilityName": "Avatar_Alhatham_ElementalArt_SkillStart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_Constellation_6",
+ "abilityName": "Avatar_Alhatham_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ElementalArt_Custom",
+ "abilityName": "Avatar_Alhatham_ElementalArt_Custom",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus",
+ "abilityName": "Avatar_Alhatham_ForlornLotus",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_NormalAttack_Mark",
+ "abilityName": "Avatar_Alhatham_NormalAttack_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_IN_ForlornLotus",
+ "abilityName": "Avatar_Alhatham_IN_ForlornLotus",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_NormalMode",
+ "abilityName": "Avatar_Alhatham_NormalMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotusMode",
+ "abilityName": "Avatar_Alhatham_ForlornLotusMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack_LV1",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack_LV1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack_LV2",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack_LV2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack_LV2_Helper",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack_LV2_Helper",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack_LV3",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack_LV3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ForlornLotus_Attack_LV3_Helper",
+ "abilityName": "Avatar_Alhatham_ForlornLotus_Attack_LV3_Helper",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ElementalBurst",
+ "abilityName": "Avatar_Alhatham_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_Constellation_6J",
+ "abilityName": "Avatar_Alhatham_Constellation_6J",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_ElementalBurst_Aftermath",
+ "abilityName": "Avatar_Alhatham_ElementalBurst_Aftermath",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_DamageHandler",
+ "abilityName": "Avatar_Alhatham_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_PermanentSkill_2",
+ "abilityName": "Avatar_Alhatham_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_PermanentSkill_1",
+ "abilityName": "Avatar_Alhatham_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_PermanentSkill_1_CD",
+ "abilityName": "Avatar_Alhatham_PermanentSkill_1_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_Constellation_6_FX",
+ "abilityName": "Avatar_Alhatham_Constellation_6_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_FallingAnthem",
+ "abilityName": "Avatar_Alhatham_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham",
+ "abilityName": "Avatar_Alhatham",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_TeamConfig_01BS",
+ "abilityName": "Avatar_Alhatham_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_TeamConfig_01Loop",
+ "abilityName": "Avatar_Alhatham_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Alhatham_TeamConfig_01AS",
+ "abilityName": "Avatar_Alhatham_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Aloy.json b/data/json/avatar/ConfigAvatar_Aloy.json
new file mode 100644
index 0000000..a39c16a
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Aloy.json
@@ -0,0 +1,214 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Aloy_PressShoot",
+ "abilityName": "Avatar_Aloy_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_AimPressShoot",
+ "abilityName": "Avatar_Aloy_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_PressShoot_Charge",
+ "abilityName": "Avatar_Aloy_PressShoot_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_PressShoot_Shooting",
+ "abilityName": "Avatar_Aloy_PressShoot_Shooting",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ShootArrow_01_01",
+ "abilityName": "Avatar_Aloy_ShootArrow_01_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ShootArrow_01_02",
+ "abilityName": "Avatar_Aloy_ShootArrow_01_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ShootArrow_02",
+ "abilityName": "Avatar_Aloy_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ShootArrow_03",
+ "abilityName": "Avatar_Aloy_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ShootArrow_04",
+ "abilityName": "Avatar_Aloy_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_LightEffect",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_LightEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_LightEffect_UltraMode",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_LightEffect_UltraMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX_UltraMode",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX_UltraMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ExtraAttack_WithoutIce",
+ "abilityName": "Avatar_AloyGadgetSkill_ExtraAttack_WithoutIce",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ExtraAttack_Ice",
+ "abilityName": "Avatar_AloyGadgetSkill_ExtraAttack_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_Coil_Handler",
+ "abilityName": "Avatar_Aloy_Coil_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ElementalArt",
+ "abilityName": "Avatar_Aloy_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalArt_Bullet",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalArt_Mine",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalArt_Mine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ElementalBurst_Camera",
+ "abilityName": "Avatar_Aloy_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_ElementalBurst",
+ "abilityName": "Avatar_Aloy_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalBurst",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_02_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_03_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_03_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_04_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_04_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_FallingAnthem",
+ "abilityName": "Avatar_Aloy_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy",
+ "abilityName": "Avatar_Aloy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX9Avatar_AloyGadgetSkill_NormalAttack_LightEffect_UltraMode5Avatar_AloyGadgetSkill_NormalAttack_HeavyFX_UltraMode",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_HeavyFX9Avatar_AloyGadgetSkill_NormalAttack_LightEffect_UltraMode5Avatar_AloyGadgetSkill_NormalAttack_HeavyFX_UltraMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalArt_Bullet1Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalArt_Bullet1Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalBurst0Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalBurst0Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Aloy_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_Skill_ElementalArt",
+ "abilityName": "Avatar_Aloy_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_TeamConfig_01BS",
+ "abilityName": "Avatar_Aloy_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_TeamConfig_01Loop",
+ "abilityName": "Avatar_Aloy_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_TeamConfig_01AS",
+ "abilityName": "Avatar_Aloy_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Aloy_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Aloy_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_01_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityName": "Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage0Avatar_AloyGadgetSkill_NormalAttack_01_02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet1Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityName": "Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet1Avatar_AloyGadgetSkill_ElementalArt_TriggerBullet",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Ambor.json b/data/json/avatar/ConfigAvatar_Ambor.json
new file mode 100644
index 0000000..3b8dc3d
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Ambor.json
@@ -0,0 +1,314 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Ambor_Arrow_FX",
+ "abilityName": "Avatar_Ambor_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_PressShoot",
+ "abilityName": "Avatar_Ambor_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_AimPressShoot",
+ "abilityName": "Avatar_Ambor_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Ambor_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_01",
+ "abilityName": "Avatar_Ambor_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_02",
+ "abilityName": "Avatar_Ambor_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_03",
+ "abilityName": "Avatar_Ambor_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_04",
+ "abilityName": "Avatar_Ambor_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_05",
+ "abilityName": "Avatar_Ambor_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ShootArrow_Aiming",
+ "abilityName": "Avatar_Ambor_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_BlowUpDummy",
+ "abilityName": "Avatar_Ambor_BlowUpDummy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_DoubleArrow_01",
+ "abilityName": "Avatar_Ambor_DoubleArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_DoubleArrow_02",
+ "abilityName": "Avatar_Ambor_DoubleArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_DummyTrigger",
+ "abilityName": "Avatar_Ambor_DummyTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ThrowDummy_UseSkill",
+ "abilityName": "Avatar_Ambor_ThrowDummy_UseSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ThrowDummy_Short",
+ "abilityName": "Avatar_Ambor_ThrowDummy_Short",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ThrowDummy_4M",
+ "abilityName": "Avatar_Ambor_ThrowDummy_4M",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ThrowDummy_7M",
+ "abilityName": "Avatar_Ambor_ThrowDummy_7M",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ThrowDummy",
+ "abilityName": "Avatar_Ambor_ThrowDummy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Dummy_Speed_Fix",
+ "abilityName": "Avatar_Ambor_Dummy_Speed_Fix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_CreateDummy",
+ "abilityName": "Avatar_Ambor_CreateDummy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_BlowUpByTrigger",
+ "abilityName": "Avatar_Ambor_BlowUpByTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_CreateBlowUpTrigger",
+ "abilityName": "Avatar_Ambor_CreateBlowUpTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_BlowUpByTriggerh",
+ "abilityName": "Avatar_Ambor_BlowUpByTriggerh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_DummyDropBall",
+ "abilityName": "Avatar_Ambor_DummyDropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ArrowRain_Alert",
+ "abilityName": "Avatar_Ambor_ArrowRain_Alert",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ArrowRain",
+ "abilityName": "Avatar_Ambor_ArrowRain",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ArrowRainField",
+ "abilityName": "Avatar_Ambor_ArrowRainField",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_AirShoot",
+ "abilityName": "Avatar_Ambor_AirShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ChangeMainSkill",
+ "abilityName": "Avatar_Ambor_ChangeMainSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_FlyStamina_Reduction",
+ "abilityName": "Avatar_Ambor_FlyStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ProudSkill_21",
+ "abilityName": "Avatar_Ambor_ProudSkill_21",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_FallingAnthem",
+ "abilityName": "Avatar_Ambor_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor",
+ "abilityName": "Avatar_Ambor",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Holdup",
+ "abilityName": "Avatar_Ambor_Skill_Holdup",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_HoldupStandby",
+ "abilityName": "Avatar_Ambor_Skill_HoldupStandby",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Long_01",
+ "abilityName": "Avatar_Ambor_Skill_Long_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Long_02",
+ "abilityName": "Avatar_Ambor_Skill_Long_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Middle_01",
+ "abilityName": "Avatar_Ambor_Skill_Middle_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Middle_02",
+ "abilityName": "Avatar_Ambor_Skill_Middle_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_PreForRun",
+ "abilityName": "Avatar_Ambor_Skill_PreForRun",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_PreForWalk",
+ "abilityName": "Avatar_Ambor_Skill_PreForWalk",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_Short",
+ "abilityName": "Avatar_Ambor_Skill_Short",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_TeamConfig_01BS",
+ "abilityName": "Avatar_Ambor_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_TeamConfig_01Loop",
+ "abilityName": "Avatar_Ambor_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_TeamConfig_01AS",
+ "abilityName": "Avatar_Ambor_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Skill_ArrowRain",
+ "abilityName": "Avatar_Ambor_Skill_ArrowRain",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ElementalBurst_Spine",
+ "abilityName": "Avatar_Ambor_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ElementalBurst_Hit",
+ "abilityName": "Avatar_Ambor_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ElementalBurst_BS",
+ "abilityName": "Avatar_Ambor_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_ElementalBurst_Hit_02",
+ "abilityName": "Avatar_Ambor_ElementalBurst_Hit_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Spine_Loop",
+ "abilityName": "Avatar_Ambor_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_MDAQ020_Ambor_01",
+ "abilityName": "Avatar_Ambor_VO_MDAQ020_Ambor_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Speculate_01",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Speculate_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Hesitate_01",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Hesitate_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Pity_01",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Pity_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_MDAQ020_Ambor_02",
+ "abilityName": "Avatar_Ambor_VO_MDAQ020_Ambor_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Satisfaction_02",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Satisfaction_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_Normal",
+ "abilityName": "Avatar_Ambor_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_MDAQ021_Ambor_01",
+ "abilityName": "Avatar_Ambor_VO_MDAQ021_Ambor_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Vigilant_02",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Vigilant_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ambor_VO_Emotion_Ambor_Excited_02",
+ "abilityName": "Avatar_Ambor_VO_Emotion_Ambor_Excited_02",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Arlecchino.json b/data/json/avatar/ConfigAvatar_Arlecchino.json
new file mode 100644
index 0000000..1d49872
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Arlecchino.json
@@ -0,0 +1,59 @@
+{
+ "abilities": [
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_NormalAttack_Wing",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_ElementalBurst_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_HPDebtsMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_HealToHpDebts",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Arlecchino_Show_01",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Ayaka.json b/data/json/avatar/ConfigAvatar_Ayaka.json
new file mode 100644
index 0000000..85d79ed
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Ayaka.json
@@ -0,0 +1,254 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack",
+ "abilityName": "Avatar_Ayaka_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack_Damage",
+ "abilityName": "Avatar_Ayaka_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack_Damage_Gadget",
+ "abilityName": "Avatar_Ayaka_ExtraAttack_Damage_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack_Damage_Handler",
+ "abilityName": "Avatar_Ayaka_ExtraAttack_Damage_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack_Damage_Gadget_1",
+ "abilityName": "Avatar_Ayaka_ExtraAttack_Damage_Gadget_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ExtraAttack_Damage_Gadget_2",
+ "abilityName": "Avatar_Ayaka_ExtraAttack_Damage_Gadget_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_NormalAttack05_CreateBullet",
+ "abilityName": "Avatar_Ayaka_NormalAttack05_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_NormalAttack05_Bullet",
+ "abilityName": "Avatar_Ayaka_NormalAttack05_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_IceSlash",
+ "abilityName": "Avatar_Ayaka_IceSlash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Liquid_TriggerAbility",
+ "abilityName": "Avatar_Ayaka_Liquid_TriggerAbility",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_LiquidStrike",
+ "abilityName": "Avatar_Ayaka_LiquidStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_LiquidStrike_YayoiKaeshi",
+ "abilityName": "Avatar_Ayaka_LiquidStrike_YayoiKaeshi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_EndLiquidStrike",
+ "abilityName": "Avatar_Ayaka_EndLiquidStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Icespine",
+ "abilityName": "Avatar_Ayaka_Icespine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Icespine_Sensu_Remover",
+ "abilityName": "Avatar_Ayaka_Icespine_Sensu_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Icespine_Strike_New",
+ "abilityName": "Avatar_Ayaka_Icespine_Strike_New",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmill_SkillStart",
+ "abilityName": "Avatar_Ayaka_FrozenWindmill_SkillStart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmill",
+ "abilityName": "Avatar_Ayaka_FrozenWindmill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Oboro",
+ "abilityName": "Avatar_Ayaka_Oboro",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Windmill_CameraController",
+ "abilityName": "Avatar_Ayaka_Windmill_CameraController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Windmill_Sensu_Remover",
+ "abilityName": "Avatar_Ayaka_Windmill_Sensu_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmillDamage",
+ "abilityName": "Avatar_Ayaka_FrozenWindmillDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmillDissipate",
+ "abilityName": "Avatar_Ayaka_FrozenWindmillDissipate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmill_Sub_Damage",
+ "abilityName": "Avatar_Ayaka_FrozenWindmill_Sub_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenWindmill_Sub_Dissipate",
+ "abilityName": "Avatar_Ayaka_FrozenWindmill_Sub_Dissipate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrozenButterfly_Area",
+ "abilityName": "Avatar_Ayaka_FrozenButterfly_Area",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FrostFall",
+ "abilityName": "Avatar_Ayaka_FrostFall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_MagicSheathe_Add",
+ "abilityName": "Avatar_Ayaka_MagicSheathe_Add",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_MagicSheathe_Remove",
+ "abilityName": "Avatar_Ayaka_MagicSheathe_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_MagicSheathe_Attack05_Add",
+ "abilityName": "Avatar_Ayaka_MagicSheathe_Attack05_Add",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_MagicSheathe_NormalAttack_Remove",
+ "abilityName": "Avatar_Ayaka_MagicSheathe_NormalAttack_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ChangeMainSkill",
+ "abilityName": "Avatar_Ayaka_ChangeMainSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_CloseCollider",
+ "abilityName": "Avatar_Ayaka_CloseCollider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_PermanentSkill_2",
+ "abilityName": "Avatar_Ayaka_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Constellation_6",
+ "abilityName": "Avatar_Ayaka_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Ayaka_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_FallingAnthem",
+ "abilityName": "Avatar_Ayaka_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka",
+ "abilityName": "Avatar_Ayaka",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_TeamConfig_01BS",
+ "abilityName": "Avatar_Ayaka_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_TeamConfig_01Loop",
+ "abilityName": "Avatar_Ayaka_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_TeamConfig_01AS",
+ "abilityName": "Avatar_Ayaka_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Ayaka_Kitsune_Mask",
+ "abilityName": "AvatarItem_Ayaka_Kitsune_Mask",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ElementalBurst_Spine",
+ "abilityName": "Avatar_Ayaka_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ElementalBurst_BS",
+ "abilityName": "Avatar_Ayaka_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ElementalBurst",
+ "abilityName": "Avatar_Ayaka_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ElementBurst",
+ "abilityName": "Avatar_Ayaka_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_ElementalBurst_Hit",
+ "abilityName": "Avatar_Ayaka_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Spine_Loop",
+ "abilityName": "Avatar_Ayaka_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Spine",
+ "abilityName": "Avatar_Ayaka_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayaka_Normal",
+ "abilityName": "Avatar_Ayaka_Normal",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Ayato.json b/data/json/avatar/ConfigAvatar_Ayato.json
new file mode 100644
index 0000000..f67969c
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Ayato.json
@@ -0,0 +1,249 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Ayato_ExtraAttack",
+ "abilityName": "Avatar_Ayato_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Ayato_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Ayato_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalArt",
+ "abilityName": "Avatar_Ayato_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff_Level",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff_Level",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose",
+ "abilityName": "Avatar_Ayato_KendoPose",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_State",
+ "abilityName": "Avatar_Ayato_KendoPose_State",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff_Level_Remove",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff_Level_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_BuffAdd",
+ "abilityName": "Avatar_Ayato_KendoPose_BuffAdd",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Click",
+ "abilityName": "Avatar_Ayato_KendoPose_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Hold_SpecialAttack",
+ "abilityName": "Avatar_Ayato_Hold_SpecialAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff0",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff0",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff1",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff2",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff3",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff4",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_Buff5",
+ "abilityName": "Avatar_Ayato_KendoPose_Buff5",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_BuffTimer",
+ "abilityName": "Avatar_Ayato_KendoPose_BuffTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_HPBuff",
+ "abilityName": "Avatar_Ayato_KendoPose_HPBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_BuffEffect",
+ "abilityName": "Avatar_Ayato_KendoPose_BuffEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_BuffEffect_Delay",
+ "abilityName": "Avatar_Ayato_KendoPose_BuffEffect_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_KendoPose_BuffTimerM",
+ "abilityName": "Avatar_Ayato_KendoPose_BuffTimerM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalArt_Gadget",
+ "abilityName": "Avatar_Ayato_ElementalArt_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst",
+ "abilityName": "Avatar_Ayato_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_Gadget",
+ "abilityName": "Avatar_Ayato_ElementalBurst_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_Gadget_Select",
+ "abilityName": "Avatar_Ayato_ElementalBurst_Gadget_Select",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_NormalAttackUp",
+ "abilityName": "Avatar_Ayato_ElementalBurst_NormalAttackUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_PermanentSkill_2_ReviveEnergy",
+ "abilityName": "Avatar_Ayato_PermanentSkill_2_ReviveEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_IsOffStage",
+ "abilityName": "Avatar_Ayato_IsOffStage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_OffStage",
+ "abilityName": "Avatar_Ayato_OffStage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ReviveEnergy_OffStage",
+ "abilityName": "Avatar_Ayato_ReviveEnergy_OffStage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Ayato_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_FallingAnthem",
+ "abilityName": "Avatar_Ayato_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato",
+ "abilityName": "Avatar_Ayato",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_ElementalArt",
+ "abilityName": "Avatar_Ayato_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Ayato_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_ElementalArt_Retreat",
+ "abilityName": "Avatar_Ayato_Skill_ElementalArt_Retreat",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_ElementalArt_Retreat_AS",
+ "abilityName": "Avatar_Ayato_Skill_ElementalArt_Retreat_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_SpecialAttack_01",
+ "abilityName": "Avatar_Ayato_Skill_SpecialAttack_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_SpecialAttack_02",
+ "abilityName": "Avatar_Ayato_Skill_SpecialAttack_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_TeamConfig_01BS",
+ "abilityName": "Avatar_Ayato_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_TeamConfig_01Loop",
+ "abilityName": "Avatar_Ayato_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_TeamConfig_01AS",
+ "abilityName": "Avatar_Ayato_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Skill_SpecialAttack_03",
+ "abilityName": "Avatar_Ayato_Skill_SpecialAttack_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_Spine",
+ "abilityName": "Avatar_Ayato_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_BS",
+ "abilityName": "Avatar_Ayato_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_ElementalBurst_Hit",
+ "abilityName": "Avatar_Ayato_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ayato_Spine_Loop",
+ "abilityName": "Avatar_Ayato_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Baizhuer.json b/data/json/avatar/ConfigAvatar_Baizhuer.json
new file mode 100644
index 0000000..276d1b5
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Baizhuer.json
@@ -0,0 +1,204 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Baizhuer_ExtraAttack",
+ "abilityName": "Avatar_Baizhuer_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ExtraAttack_Gadget",
+ "abilityName": "Avatar_Baizhuer_ExtraAttack_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ExtraAttack_Gadget_Fx",
+ "abilityName": "Avatar_Baizhuer_ExtraAttack_Gadget_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ExtraAttack_Delay_Damage",
+ "abilityName": "Avatar_Baizhuer_ExtraAttack_Delay_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Attack01",
+ "abilityName": "Avatar_Baizhuer_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Attack02",
+ "abilityName": "Avatar_Baizhuer_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Attack03",
+ "abilityName": "Avatar_Baizhuer_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Attack04",
+ "abilityName": "Avatar_Baizhuer_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalArt",
+ "abilityName": "Avatar_Baizhuer_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalArt_AngularVelocity",
+ "abilityName": "Avatar_Baizhuer_ElementalArt_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalArt_AngularVelocity_Timer",
+ "abilityName": "Avatar_Baizhuer_ElementalArt_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalArt_AvatarCheck",
+ "abilityName": "Avatar_Baizhuer_ElementalArt_AvatarCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Heal_ControlAbiilty",
+ "abilityName": "Avatar_Baizhuer_Heal_ControlAbiilty",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Funnel_Handler",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Funnel_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Funnel_Trigger",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Funnel_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_GetLocalAvatarTarget",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_GetLocalAvatarTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Funnel_Shoot",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Funnel_Shoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Burst_HasTarget",
+ "abilityName": "Avatar_Baizhuer_Burst_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Funnel_ShootPos",
+ "abilityName": "Avatar_Baizhuer_Funnel_ShootPos",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_AngularVelocity_Timer",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_AngularVelocity",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_PermanentSkill_1",
+ "abilityName": "Avatar_Baizhuer_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_HPRatio_Check",
+ "abilityName": "Avatar_Baizhuer_HPRatio_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Constellation_ShootPos",
+ "abilityName": "Avatar_Baizhuer_Constellation_ShootPos",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_HealWhenGather",
+ "abilityName": "Avatar_Baizhuer_HealWhenGather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_FallingAnthem",
+ "abilityName": "Avatar_Baizhuer_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer",
+ "abilityName": "Avatar_Baizhuer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_TeamConfig_01BS",
+ "abilityName": "Avatar_Baizhuer_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_TeamConfig_01Loop",
+ "abilityName": "Avatar_Baizhuer_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_TeamConfig_01AS",
+ "abilityName": "Avatar_Baizhuer_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Spine",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Spine_Hand",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Spine_Hand",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Spine",
+ "abilityName": "Avatar_Baizhuer_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_BS",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_BuffBS",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_BuffBS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_Buff",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementBurst",
+ "abilityName": "Avatar_Baizhuer_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_ElementalBurst_BuffHit",
+ "abilityName": "Avatar_Baizhuer_ElementalBurst_BuffHit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Baizhuer_Spine_Loop",
+ "abilityName": "Avatar_Baizhuer_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Barbara.json b/data/json/avatar/ConfigAvatar_Barbara.json
new file mode 100644
index 0000000..26ea021
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Barbara.json
@@ -0,0 +1,144 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Barbara_ExtraAttack",
+ "abilityName": "Avatar_Barbara_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ExtraAttack_FX",
+ "abilityName": "Avatar_Barbara_ExtraAttack_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ExtraAttack_Damage",
+ "abilityName": "Avatar_Barbara_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Attack01",
+ "abilityName": "Avatar_Barbara_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Attack02",
+ "abilityName": "Avatar_Barbara_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Attack03",
+ "abilityName": "Avatar_Barbara_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Attack04",
+ "abilityName": "Avatar_Barbara_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Attack04Damage",
+ "abilityName": "Avatar_Barbara_Attack04Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_WetShiled_Clear",
+ "abilityName": "Avatar_Barbara_WetShiled_Clear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_WetShiled",
+ "abilityName": "Avatar_Barbara_WetShiled",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_WetShiled_Heal",
+ "abilityName": "Avatar_Barbara_WetShiled_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_WetShiled_Impact",
+ "abilityName": "Avatar_Barbara_WetShiled_Impact",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_IdolHeal",
+ "abilityName": "Avatar_Barbara_IdolHeal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Trigger_Weather",
+ "abilityName": "Avatar_Barbara_Trigger_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ReviveElemEnergy",
+ "abilityName": "Avatar_Barbara_ReviveElemEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ReBorn_Pre",
+ "abilityName": "Avatar_Barbara_ReBorn_Pre",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ReBorn",
+ "abilityName": "Avatar_Barbara_ReBorn",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ReBornEffect_01",
+ "abilityName": "Avatar_Barbara_ReBornEffect_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ReBornEffect_02",
+ "abilityName": "Avatar_Barbara_ReBornEffect_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_FallingAnthem",
+ "abilityName": "Avatar_Barbara_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara",
+ "abilityName": "Avatar_Barbara",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_TeamConfig_01BS",
+ "abilityName": "Avatar_Barbara_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_TeamConfig_01Loop",
+ "abilityName": "Avatar_Barbara_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_TeamConfig_01AS",
+ "abilityName": "Avatar_Barbara_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ElementalBurst_Spine",
+ "abilityName": "Avatar_Barbara_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_ElementalBurst",
+ "abilityName": "Avatar_Barbara_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_Spine_Loop",
+ "abilityName": "Avatar_Barbara_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Barbara_VO_MDAQ054_Barbara_01",
+ "abilityName": "Avatar_Barbara_VO_MDAQ054_Barbara_01",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Beidou.json b/data/json/avatar/ConfigAvatar_Beidou.json
new file mode 100644
index 0000000..4f0c3bd
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Beidou.json
@@ -0,0 +1,109 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Beidou_ExtraAttack",
+ "abilityName": "Avatar_Beidou_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ThunderCounter_Handler",
+ "abilityName": "Avatar_Beidou_ThunderCounter_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ThunderCounter_Strike",
+ "abilityName": "Avatar_Beidou_ThunderCounter_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ThunderShield_CameraHandler",
+ "abilityName": "Avatar_Beidou_ThunderShield_CameraHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ThunderShield_Gadget",
+ "abilityName": "Avatar_Beidou_ThunderShield_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ThunderShield",
+ "abilityName": "Avatar_Beidou_ThunderShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_NormalAttackDamage",
+ "abilityName": "Avatar_Beidou_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_FallingAnthem",
+ "abilityName": "Avatar_Beidou_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ProudSkill_FlashSlash",
+ "abilityName": "Avatar_Beidou_ProudSkill_FlashSlash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_SwimStamina_Reduction",
+ "abilityName": "Avatar_Beidou_SwimStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ExtraAttack_Chongyun",
+ "abilityName": "Avatar_Beidou_ExtraAttack_Chongyun",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou",
+ "abilityName": "Avatar_Beidou",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_TeamConfig_01BS",
+ "abilityName": "Avatar_Beidou_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_TeamConfig_01Loop",
+ "abilityName": "Avatar_Beidou_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_TeamConfig_01AS",
+ "abilityName": "Avatar_Beidou_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ElementalBurst_Spine",
+ "abilityName": "Avatar_Beidou_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_Spine",
+ "abilityName": "Avatar_Beidou_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ElementalBurst_Hit",
+ "abilityName": "Avatar_Beidou_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_ElementalBurst_Buff",
+ "abilityName": "Avatar_Beidou_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_Spine_Loop",
+ "abilityName": "Avatar_Beidou_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Beidou_Spine_Loop_Water",
+ "abilityName": "Avatar_Beidou_Spine_Loop_Water",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Bennett.json b/data/json/avatar/ConfigAvatar_Bennett.json
new file mode 100644
index 0000000..63d9d78
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Bennett.json
@@ -0,0 +1,134 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Bennett_ExtraAttack",
+ "abilityName": "Avatar_Bennett_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_Shake",
+ "abilityName": "Avatar_Bennett_Shake",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Handler",
+ "abilityName": "Avatar_Bennett_ElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike01_01",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike01_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike02_01",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike02_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike02_02",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike02_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike02_03",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike02_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike03_01",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike03_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Strike03_02",
+ "abilityName": "Avatar_Bennett_ElementalArt_Strike03_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalArt_Explode",
+ "abilityName": "Avatar_Bennett_ElementalArt_Explode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst_Strike",
+ "abilityName": "Avatar_Bennett_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst",
+ "abilityName": "Avatar_Bennett_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst_Gadget",
+ "abilityName": "Avatar_Bennett_ElementalBurst_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_NormalAttackDamage",
+ "abilityName": "Avatar_Bennett_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_FallingAnthem",
+ "abilityName": "Avatar_Bennett_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett",
+ "abilityName": "Avatar_Bennett",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_TeamConfig_01BS",
+ "abilityName": "Avatar_Bennett_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_TeamConfig_01Loop",
+ "abilityName": "Avatar_Bennett_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_TeamConfig_01AS",
+ "abilityName": "Avatar_Bennett_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst_Spine",
+ "abilityName": "Avatar_Bennett_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst_BS",
+ "abilityName": "Avatar_Bennett_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_ElementalBurst_Hit",
+ "abilityName": "Avatar_Bennett_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Bennett_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_Spine_Loop",
+ "abilityName": "Avatar_Bennett_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_Spine_Loop_Star",
+ "abilityName": "Avatar_Bennett_Spine_Loop_Star",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Bennett_Spine",
+ "abilityName": "Avatar_Bennett_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Candace.json b/data/json/avatar/ConfigAvatar_Candace.json
new file mode 100644
index 0000000..e5c8c3a
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Candace.json
@@ -0,0 +1,174 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Candace_ExtraAttack",
+ "abilityName": "Avatar_Candace_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Candace_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalArt_HoldCharge",
+ "abilityName": "Avatar_Candace_ElementalArt_HoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalArt_ChargeShield",
+ "abilityName": "Avatar_Candace_ElementalArt_ChargeShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalArt_H",
+ "abilityName": "Avatar_Candace_ElementalArt_H",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalArt_ElemBall_Handler",
+ "abilityName": "Avatar_Candace_ElementalArt_ElemBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalArt_L",
+ "abilityName": "Avatar_Candace_ElementalArt_L",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalBurst",
+ "abilityName": "Avatar_Candace_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarIn_Attack_Constellation_61Candace_ElementalBurst_WaterField_AvatarIn_Attack",
+ "abilityName": "AvatarIn_Attack_Constellation_61Candace_ElementalBurst_WaterField_AvatarIn_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Candace_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_FallingAnthem",
+ "abilityName": "Avatar_Candace_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ClimbStamina_Reduction",
+ "abilityName": "Avatar_Candace_ClimbStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace",
+ "abilityName": "Avatar_Candace",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_Charge01",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_Charge01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_Charge02",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_Charge02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_Charge03",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_Charge03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_L",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_L",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_H",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_H",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_L_AS",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_L_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalArt_H_AS",
+ "abilityName": "Avatar_Candace_Skill_ElementalArt_H_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalBurst",
+ "abilityName": "Avatar_Candace_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_TeamConfig_01BS",
+ "abilityName": "Avatar_Candace_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_TeamConfig_01Loop",
+ "abilityName": "Avatar_Candace_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_TeamConfig_01AS",
+ "abilityName": "Avatar_Candace_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Candace_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalBurst_Spine",
+ "abilityName": "Avatar_Candace_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Spine",
+ "abilityName": "Avatar_Candace_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalBurst_BS",
+ "abilityName": "Avatar_Candace_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalBurst_Hit",
+ "abilityName": "Avatar_Candace_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_ElementalBurst_Buff",
+ "abilityName": "Avatar_Candace_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Spine_Loop",
+ "abilityName": "Avatar_Candace_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Spine_Loop_BG",
+ "abilityName": "Avatar_Candace_Spine_Loop_BG",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Candace_Sub_Spine",
+ "abilityName": "Avatar_Candace_Sub_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Charlotte.json b/data/json/avatar/ConfigAvatar_Charlotte.json
new file mode 100644
index 0000000..98bb070
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Charlotte.json
@@ -0,0 +1,429 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack",
+ "abilityName": "Avatar_Charlotte_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_BS_Check",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_BS_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack01",
+ "abilityName": "Avatar_Charlotte_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack01_onMonster",
+ "abilityName": "Avatar_Charlotte_Attack01_onMonster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack01_None",
+ "abilityName": "Avatar_Charlotte_Attack01_None",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack02",
+ "abilityName": "Avatar_Charlotte_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack02_onMonster",
+ "abilityName": "Avatar_Charlotte_Attack02_onMonster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack02_None",
+ "abilityName": "Avatar_Charlotte_Attack02_None",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Attack03",
+ "abilityName": "Avatar_Charlotte_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_DoAttack",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_DoAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_Gadget",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_GadgetEffect",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_GadgetEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_Damage",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_Arkhe_Strike",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_Arkhe_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_Arkhe_CDTimer_",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_Arkhe_CDTimer_",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ExtraAttack_Arkhe_CDTimer",
+ "abilityName": "Avatar_Charlotte_ExtraAttack_Arkhe_CDTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt",
+ "abilityName": "Avatar_Charlotte_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Charlotte_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Click",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Click_Strike",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Click_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Click_CameraReborn",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Click_CameraReborn",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArtHold_RayCast",
+ "abilityName": "Avatar_Charlotte_ElementalArtHold_RayCast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_InAim_SetGV",
+ "abilityName": "Avatar_Charlotte_RayCast_InAim_SetGV",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Trigger",
+ "abilityName": "Avatar_Charlotte_RayCast_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_CloseFx",
+ "abilityName": "Avatar_Charlotte_RayCast_CloseFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Handler",
+ "abilityName": "Avatar_Charlotte_RayCast_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Camera_Fx",
+ "abilityName": "Avatar_Charlotte_RayCast_Camera_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_HoldTimeChangeRayCast",
+ "abilityName": "Avatar_Charlotte_HoldTimeChangeRayCast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_InHoldTime",
+ "abilityName": "Avatar_Charlotte_InHoldTime",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_MaxHoldTime_TriggerDot",
+ "abilityName": "Avatar_Charlotte_MaxHoldTime_TriggerDot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_CloseFx_Detect",
+ "abilityName": "Avatar_Charlotte_RayCast_CloseFx_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_InterruptFx",
+ "abilityName": "Avatar_Charlotte_RayCast_InterruptFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_CountLayerHandler",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_CountLayerHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_CountLayerHandler02",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_CountLayerHandler02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Damage",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_ScreenEffect",
+ "abilityName": "Avatar_Charlotte_ElementalArt_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Dot_Handler",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Dot_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Effect_Weak",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Effect_Weak",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Effect_Strong",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Effect_Strong",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Weak",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Weak",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Strong",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_Strong",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Bomb_OnMonster_ToFullLayer",
+ "abilityName": "Avatar_Charlotte_RayCast_Bomb_OnMonster_ToFullLayer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_RayCast_Camera_Fx_OnTeam",
+ "abilityName": "Avatar_Charlotte_RayCast_Camera_Fx_OnTeam",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_HoldTimeChangeRayCast_Trigger",
+ "abilityName": "Avatar_Charlotte_HoldTimeChangeRayCast_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_TagNum_Clear",
+ "abilityName": "Avatar_Charlotte_ElementalArt_TagNum_Clear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Click_AddDotHandler",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Click_AddDotHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_TagNum_Clear0Avatar_Charlotte_ElementalArt_Hold_AddDotHandler",
+ "abilityName": "Avatar_Charlotte_ElementalArt_TagNum_Clear0Avatar_Charlotte_ElementalArt_Hold_AddDotHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Hold_AddDotHandler",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Hold_AddDotHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_WidgetMode",
+ "abilityName": "Avatar_Charlotte_ElementalArt_WidgetMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_WidgetMode_Check",
+ "abilityName": "Avatar_Charlotte_ElementalArt_WidgetMode_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalArt_Loop_WidgetMode",
+ "abilityName": "Avatar_Charlotte_ElementalArt_Loop_WidgetMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalBurst_Init",
+ "abilityName": "Avatar_Charlotte_ElementalBurst_Init",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_ElementalBurst",
+ "abilityName": "Avatar_Charlotte_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_FallingAnthem",
+ "abilityName": "Avatar_Charlotte_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_WaistCamera_DisAppear",
+ "abilityName": "Avatar_Charlotte_WaistCamera_DisAppear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_WaistCamera_Appear",
+ "abilityName": "Avatar_Charlotte_WaistCamera_Appear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_PermanentSkill_1",
+ "abilityName": "Avatar_Charlotte_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_PermanentSkill_1_Handler",
+ "abilityName": "Avatar_Charlotte_PermanentSkill_1_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_PermanentSkill_2",
+ "abilityName": "Avatar_Charlotte_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_PermanentSkill_2_IsNotFengdan",
+ "abilityName": "Avatar_Charlotte_PermanentSkill_2_IsNotFengdan",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_PermanentSkill_2_NotFengdanCount",
+ "abilityName": "Avatar_Charlotte_PermanentSkill_2_NotFengdanCount",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_Extra_Hot",
+ "abilityName": "Avatar_Charlotte_Constellation_Extra_Hot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_Extra_Hot_Handler",
+ "abilityName": "Avatar_Charlotte_Constellation_Extra_Hot_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_Extra_Hot_EffectHandler",
+ "abilityName": "Avatar_Charlotte_Constellation_Extra_Hot_EffectHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_Extra_Hot_Tick",
+ "abilityName": "Avatar_Charlotte_Constellation_Extra_Hot_Tick",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ElementalArt_AddAtkUp",
+ "abilityName": "Avatar_Charlotte_Constellation_ElementalArt_AddAtkUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ElementalArt_AddAtk_ClearCount",
+ "abilityName": "Avatar_Charlotte_Constellation_ElementalArt_AddAtk_ClearCount",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ReviveElemEnergy",
+ "abilityName": "Avatar_Charlotte_Constellation_ReviveElemEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCameraAttack",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCameraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCameraAttack_Handler",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCameraAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandler",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandlerCUNIQUE_Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandler",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandlerCUNIQUE_Avatar_Charlotte_Constellation_ExtraCameraAttack_TeamHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCamera_Gadget",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCamera_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCamera_Effect",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCamera_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte",
+ "abilityName": "Avatar_Charlotte",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_Extra_Hot4Avatar_Charlotte_Constellation_ElementalArt_AddAtkUp",
+ "abilityName": "Avatar_Charlotte_Constellation_Extra_Hot4Avatar_Charlotte_Constellation_ElementalArt_AddAtkUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Charlotte_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Skill_ElementalArt_Click0Emo_Avatar_Charlotte_Skill_ElementalArt_Click_AS0Emo_Avatar_Charlotte_Skill_ElementalArt_AimFocus1Emo_Avatar_Charlotte_Skill_ElementalArt_QuitFocus4Emo_Avatar_Charlotte_Skill_ElementalArt_QuitFocus_AS",
+ "abilityName": "Avatar_Charlotte_Skill_ElementalArt_Click0Emo_Avatar_Charlotte_Skill_ElementalArt_Click_AS0Emo_Avatar_Charlotte_Skill_ElementalArt_AimFocus1Emo_Avatar_Charlotte_Skill_ElementalArt_QuitFocus4Emo_Avatar_Charlotte_Skill_ElementalArt_QuitFocus_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Skill_ElementalBurst",
+ "abilityName": "Avatar_Charlotte_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Charlotte_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_TeamConfig_01BS",
+ "abilityName": "Avatar_Charlotte_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_TeamConfig_01Loop",
+ "abilityName": "Avatar_Charlotte_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_TeamConfig_01AS",
+ "abilityName": "Avatar_Charlotte_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Charlotte_Constellation_ExtraCamera_Gadget1Avatar_Charlotte_Constellation_ExtraCamera_Gadget",
+ "abilityName": "Avatar_Charlotte_Constellation_ExtraCamera_Gadget1Avatar_Charlotte_Constellation_ExtraCamera_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarIcon_Charlotte",
+ "abilityName": "AvatarIcon_Charlotte",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Chevreuse.json b/data/json/avatar/ConfigAvatar_Chevreuse.json
new file mode 100644
index 0000000..f7858c8
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Chevreuse.json
@@ -0,0 +1,174 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Chevreuse_ExtraAttack",
+ "abilityName": "Avatar_Chevreuse_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ExtraAttack_Cast",
+ "abilityName": "Avatar_Chevreuse_ExtraAttack_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Chevreuse_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt",
+ "abilityName": "Avatar_Chevreuse_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_Has_Target_Mark",
+ "abilityName": "Avatar_Chevreuse_Has_Target_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_Click",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_Shoot",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_Shoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_Damage_Up",
+ "abilityName": "Avatar_Chevreuse_Damage_Up",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ExtraArt_Chance",
+ "abilityName": "Avatar_Chevreuse_ExtraArt_Chance",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ExtraBomb",
+ "abilityName": "Avatar_Chevreuse_ExtraBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_DropBall",
+ "abilityName": "Avatar_Chevreuse_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ArkheGrade",
+ "abilityName": "Avatar_Chevreuse_ArkheGrade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ArkheGrade_CD",
+ "abilityName": "Avatar_Chevreuse_ArkheGrade_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalBurst",
+ "abilityName": "Avatar_Chevreuse_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_UpgradeBullet",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_UpgradeBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_SuperBullet_Buff",
+ "abilityName": "Avatar_Chevreuse_SuperBullet_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Handler",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver2Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver2Avatar_Chevreuse_ElementalArt_UpgradeBullet_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_ElementalArt_Feedback",
+ "abilityName": "Avatar_Chevreuse_ElementalArt_Feedback",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_SuperBullet_Eff",
+ "abilityName": "Avatar_Chevreuse_SuperBullet_Eff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_Buff",
+ "abilityName": "Avatar_Chevreuse_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Chevreuse",
+ "abilityName": "Avatar_ElementalArt_Buff_Chevreuse",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Chevreuse_Driver",
+ "abilityName": "Avatar_ElementalArt_Buff_Chevreuse_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Chevreuse_Driver0UNIQUE_Avatar_ElementalArt_Buff_Chevreuse_Driver",
+ "abilityName": "Avatar_ElementalArt_Buff_Chevreuse_Driver0UNIQUE_Avatar_ElementalArt_Buff_Chevreuse_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Chevreuse_Feedback",
+ "abilityName": "Avatar_ElementalArt_Buff_Chevreuse_Feedback",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_CreateBomb",
+ "abilityName": "Avatar_Chevreuse_CreateBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_DashStamina_Reduction",
+ "abilityName": "Avatar_Chevreuse_DashStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Chevreuse_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_FallingAnthem",
+ "abilityName": "Avatar_Chevreuse_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse",
+ "abilityName": "Avatar_Chevreuse",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_TeamConfig_01BS",
+ "abilityName": "Avatar_Chevreuse_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_TeamConfig_01Loop",
+ "abilityName": "Avatar_Chevreuse_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chevreuse_TeamConfig_01AS",
+ "abilityName": "Avatar_Chevreuse_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Chiori.json b/data/json/avatar/ConfigAvatar_Chiori.json
new file mode 100644
index 0000000..f55bb4a
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Chiori.json
@@ -0,0 +1,114 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Chiori_ExtraAttack",
+ "abilityName": "Avatar_Chiori_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_PutTurret",
+ "abilityName": "Avatar_Chiori_ElementalArt_PutTurret",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "SkillObj_Chiori_ElementalArt_RockGadget_Turret",
+ "abilityName": "SkillObj_Chiori_ElementalArt_RockGadget_Turret",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_Blink_HoldCharge",
+ "abilityName": "Avatar_Chiori_ElementalArt_Blink_HoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_Blink_OnStart",
+ "abilityName": "Avatar_Chiori_ElementalArt_Blink_OnStart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "ElementalArt_Blink_Trail",
+ "abilityName": "ElementalArt_Blink_Trail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_Blink",
+ "abilityName": "Avatar_Chiori_ElementalArt_Blink",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_Blink_SelectPos",
+ "abilityName": "Avatar_Chiori_ElementalArt_Blink_SelectPos",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Chiori_ElementalArt_AfterRushMove_CameraRevise",
+ "abilityName": "Chiori_ElementalArt_AfterRushMove_CameraRevise",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalArt_JumpSwitch",
+ "abilityName": "Avatar_Chiori_ElementalArt_JumpSwitch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Bullet_Chiori_ElementalArt_Rush_Detect",
+ "abilityName": "Bullet_Chiori_ElementalArt_Rush_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_ElementalBurst",
+ "abilityName": "Avatar_Chiori_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Bullet_Chiori_ElementalBurst_RockBomb",
+ "abilityName": "Bullet_Chiori_ElementalBurst_RockBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_FallingAnthem",
+ "abilityName": "Avatar_Chiori_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Chiori_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_Turret_Onkill_Handler",
+ "abilityName": "Avatar_Chiori_Turret_Onkill_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_PermanentSkill_2_OnCreateRockGadget",
+ "abilityName": "Avatar_Chiori_PermanentSkill_2_OnCreateRockGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_Constellation_2_AttackLanded_CreateDoll",
+ "abilityName": "Avatar_Chiori_Constellation_2_AttackLanded_CreateDoll",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_Constellation_4_ElementalBurst_AddDoll",
+ "abilityName": "Avatar_Chiori_Constellation_4_ElementalBurst_AddDoll",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_Constellation_6_Strengthen",
+ "abilityName": "Avatar_Chiori_Constellation_6_Strengthen",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "SkillObj_Chiori_Turret_Constellation",
+ "abilityName": "SkillObj_Chiori_Turret_Constellation",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chiori_PermanentSkill_3",
+ "abilityName": "Avatar_Chiori_PermanentSkill_3",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Chongyun.json b/data/json/avatar/ConfigAvatar_Chongyun.json
new file mode 100644
index 0000000..190666c
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Chongyun.json
@@ -0,0 +1,124 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Beidou_ExtraAttack_Chongyun",
+ "abilityName": "Avatar_Beidou_ExtraAttack_Chongyun",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalArt_Initiate",
+ "abilityName": "Avatar_Chongyun_ElementalArt_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalArt_Damage",
+ "abilityName": "Avatar_Chongyun_ElementalArt_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_IceCrystal",
+ "abilityName": "Avatar_Chongyun_IceCrystal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_IceCrystal_Dummy",
+ "abilityName": "Avatar_Chongyun_IceCrystal_Dummy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_Single_Initiate",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_Single_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_Initiate",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_SoulBlades_Quadra",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_SoulBlades_Quadra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_SoulBlades",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_SoulBlades",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_Damage",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_SoulUnleash_Quadra_Damage",
+ "abilityName": "Avatar_Chongyun_SoulUnleash_Quadra_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_HitReviveElemEnergy",
+ "abilityName": "Avatar_Chongyun_HitReviveElemEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Chongyun_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_IceBlade",
+ "abilityName": "Avatar_Chongyun_IceBlade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_FallingAnthem",
+ "abilityName": "Avatar_Chongyun_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun",
+ "abilityName": "Avatar_Chongyun",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_TeamConfig_01BS",
+ "abilityName": "Avatar_Chongyun_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_TeamConfig_01Loop",
+ "abilityName": "Avatar_Chongyun_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_TeamConfig_01AS",
+ "abilityName": "Avatar_Chongyun_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalBurst_Spine",
+ "abilityName": "Avatar_Chongyun_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalBurst_Hit",
+ "abilityName": "Avatar_Chongyun_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalBurst_BS",
+ "abilityName": "Avatar_Chongyun_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_ElementalBurst_Hit_NoSpine",
+ "abilityName": "Avatar_Chongyun_ElementalBurst_Hit_NoSpine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Chongyun_Spine_Loop",
+ "abilityName": "Avatar_Chongyun_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Clorinde.json b/data/json/avatar/ConfigAvatar_Clorinde.json
new file mode 100644
index 0000000..5545bf8
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Clorinde.json
@@ -0,0 +1,59 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Clorinde_ExtraAttack",
+ "abilityName": "Avatar_Clorinde_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalArt_Activate",
+ "abilityName": "Avatar_Clorinde_ElementalArt_Activate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalArt_GunShot",
+ "abilityName": "Avatar_Clorinde_ElementalArt_GunShot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalArt_Dodge_Input",
+ "abilityName": "Avatar_Clorinde_ElementalArt_Dodge_Input",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalArt_Dodge",
+ "abilityName": "Avatar_Clorinde_ElementalArt_Dodge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalBurst_Camera",
+ "abilityName": "Avatar_Clorinde_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_ElementalBurst_Activate",
+ "abilityName": "Avatar_Clorinde_ElementalBurst_Activate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_FallingAnthem",
+ "abilityName": "Avatar_Clorinde_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_Damage_Handler",
+ "abilityName": "Avatar_Clorinde_Damage_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_Talent_PassiveSkill",
+ "abilityName": "Avatar_Clorinde_Talent_PassiveSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Clorinde_Constellation_PassiveSkill",
+ "abilityName": "Avatar_Clorinde_Constellation_PassiveSkill",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Collei.json b/data/json/avatar/ConfigAvatar_Collei.json
new file mode 100644
index 0000000..b3184bd
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Collei.json
@@ -0,0 +1,144 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Collei_PressShoot",
+ "abilityName": "Avatar_Collei_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_AimPressShoot",
+ "abilityName": "Avatar_Collei_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Arrow_FX",
+ "abilityName": "Avatar_Collei_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Collei_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootArrow_01",
+ "abilityName": "Avatar_Collei_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootArrow_02",
+ "abilityName": "Avatar_Collei_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootArrow_03",
+ "abilityName": "Avatar_Collei_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootArrow_04",
+ "abilityName": "Avatar_Collei_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ShootArrow_Aiming",
+ "abilityName": "Avatar_Collei_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementalArt",
+ "abilityName": "Avatar_Collei_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementalBurst",
+ "abilityName": "Avatar_Collei_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_FallingAnthem",
+ "abilityName": "Avatar_Collei_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_FlyStamina_Reduction",
+ "abilityName": "Avatar_Collei_FlyStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei",
+ "abilityName": "Avatar_Collei",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_PermanentSkill_2",
+ "abilityName": "Avatar_Collei_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Skill_ElementalArt",
+ "abilityName": "Avatar_Collei_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Collei_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Skill_ElementalBurst",
+ "abilityName": "Avatar_Collei_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Collei_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_TeamConfig_01BS",
+ "abilityName": "Avatar_Collei_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_TeamConfig_01Loop",
+ "abilityName": "Avatar_Collei_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_TeamConfig_01AS",
+ "abilityName": "Avatar_Collei_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementalBurst_Spine",
+ "abilityName": "Avatar_Collei_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementalBurst_BS",
+ "abilityName": "Avatar_Collei_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementBurst",
+ "abilityName": "Avatar_Collei_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_ElementalBurst_Hit",
+ "abilityName": "Avatar_Collei_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Collei_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Collei_Spine_Loop",
+ "abilityName": "Avatar_Collei_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Cyno.json b/data/json/avatar/ConfigAvatar_Cyno.json
new file mode 100644
index 0000000..7b63c72
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Cyno.json
@@ -0,0 +1,319 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Cyno_ExtraAttack",
+ "abilityName": "Avatar_Cyno_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack05_TurndDirection",
+ "abilityName": "Avatar_Cyno_Attack05_TurndDirection",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack03_FireHitEffect_Handler",
+ "abilityName": "Avatar_Cyno_Attack03_FireHitEffect_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack03_Hit",
+ "abilityName": "Avatar_Cyno_Attack03_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack03_Hit_0",
+ "abilityName": "Avatar_Cyno_Attack03_Hit_0",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack03_Hit_1",
+ "abilityName": "Avatar_Cyno_Attack03_Hit_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack03_Hit_2",
+ "abilityName": "Avatar_Cyno_Attack03_Hit_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Cyno_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Cyno_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalArt_DropBallCheck",
+ "abilityName": "Avatar_Cyno_ElementalArt_DropBallCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalArt_DropBall",
+ "abilityName": "Avatar_Cyno_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalArt_Bullet",
+ "abilityName": "Avatar_Cyno_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BurstMode_ElementalArt_Onstart",
+ "abilityName": "Avatar_Cyno_BurstMode_ElementalArt_Onstart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Constellation_6",
+ "abilityName": "Avatar_Cyno_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalArt_Muya_Success_Handler",
+ "abilityName": "Avatar_Cyno_ElementalArt_Muya_Success_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst",
+ "abilityName": "Avatar_Cyno_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_CameraBlur_Handler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_CameraBlur_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_CameraBlur_Effect",
+ "abilityName": "Avatar_Cyno_ElementalBurst_CameraBlur_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_ChangeVisible",
+ "abilityName": "Avatar_Cyno_ElementalBurst_ChangeVisible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_ResetInit",
+ "abilityName": "Avatar_Cyno_ElementalBurst_ResetInit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Fog_Handler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Fog_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Weather_DisPlayHandler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Weather_DisPlayHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Weather_LoopHandler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Weather_LoopHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_ChangeWeather",
+ "abilityName": "Avatar_Cyno_ElementalBurst_ChangeWeather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BigArmAppear",
+ "abilityName": "Avatar_Cyno_BigArmAppear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ArmBreak",
+ "abilityName": "Avatar_Cyno_ArmBreak",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BurstMode_State_Badao",
+ "abilityName": "Avatar_Cyno_BurstMode_State_Badao",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BigArmDisAppear",
+ "abilityName": "Avatar_Cyno_BigArmDisAppear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_WarningCameraEffect",
+ "abilityName": "Avatar_Cyno_ElementalBurst_WarningCameraEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_JackalMode",
+ "abilityName": "Avatar_Cyno_ElementalBurst_JackalMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_WarningCameraEffectM",
+ "abilityName": "Avatar_Cyno_ElementalBurst_WarningCameraEffectM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_MuyaHandlerT",
+ "abilityName": "Avatar_Cyno_ElementalBurst_MuyaHandlerT",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_MuyaHandler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_MuyaHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Renderer_HandlerR",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Renderer_HandlerR",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Constellation_6_BulletHandlerR",
+ "abilityName": "Avatar_Cyno_Constellation_6_BulletHandlerR",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_EndMode",
+ "abilityName": "Avatar_Cyno_ElementalBurst_EndMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Renderer_Handler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Renderer_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Renderer_AttackHandler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Renderer_AttackHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_MuyaAddTime",
+ "abilityName": "Avatar_Cyno_ElementalBurst_MuyaAddTime",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Constellation_6_BulletHandler",
+ "abilityName": "Avatar_Cyno_Constellation_6_BulletHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_EndHanlder",
+ "abilityName": "Avatar_Cyno_ElementalBurst_EndHanlder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Buff_AddDurability",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Buff_AddDurability",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_FallingAnthem",
+ "abilityName": "Avatar_Cyno_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_onReconnectHandler",
+ "abilityName": "Avatar_Cyno_ElementalBurst_onReconnectHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BigArm_DisAppear",
+ "abilityName": "Avatar_Cyno_BigArm_DisAppear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ExtraAttack_BurstMode_Damage",
+ "abilityName": "Avatar_Cyno_ExtraAttack_BurstMode_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BurstMode_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Cyno_BurstMode_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack_DamageHandler",
+ "abilityName": "Avatar_Cyno_Attack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Constellation_6_BulletCdHandler",
+ "abilityName": "Avatar_Cyno_Constellation_6_BulletCdHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno",
+ "abilityName": "Avatar_Cyno",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_TeamConfig_01BS",
+ "abilityName": "Avatar_Cyno_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_TeamConfig_01Loop",
+ "abilityName": "Avatar_Cyno_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_TeamConfig_01AS",
+ "abilityName": "Avatar_Cyno_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_BurstMode_ExtraAttack_Bulletr",
+ "abilityName": "Avatar_Cyno_BurstMode_ExtraAttack_Bulletr",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Spine",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_BS",
+ "abilityName": "Avatar_Cyno_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_ElementalBurst_Hit",
+ "abilityName": "Avatar_Cyno_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Spine_Loop_01",
+ "abilityName": "Avatar_Cyno_Spine_Loop_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Spine",
+ "abilityName": "Avatar_Cyno_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Spine_Loop_02",
+ "abilityName": "Avatar_Cyno_Spine_Loop_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_02_Spine",
+ "abilityName": "Avatar_Cyno_02_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Cyno_Attack_DamageHandler1Cyno_PermanentSkill_2_Ratio_BurstModeNormalAttack",
+ "abilityName": "Avatar_Cyno_Attack_DamageHandler1Cyno_PermanentSkill_2_Ratio_BurstModeNormalAttack",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Dehya.json b/data/json/avatar/ConfigAvatar_Dehya.json
new file mode 100644
index 0000000..2858bc8
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Dehya.json
@@ -0,0 +1,489 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Dehya_ExtraAttack",
+ "abilityName": "Avatar_Dehya_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Insert",
+ "abilityName": "Avatar_Dehya_ElementalArt_Insert",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Insert_Initialize",
+ "abilityName": "Avatar_Dehya_ElementalArt_Insert_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_1_B",
+ "abilityName": "Avatar_Dehya_PermanentSkill_1_B",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Dehya_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_DropBall",
+ "abilityName": "Avatar_Dehya_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Recycle",
+ "abilityName": "Avatar_Dehya_ElementalArt_Recycle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_TriggerRecycle",
+ "abilityName": "Avatar_Dehya_ElementalArt_TriggerRecycle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_RecycleDamage",
+ "abilityName": "Avatar_Dehya_ElementalArt_RecycleDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_RecycleDamage_Remover",
+ "abilityName": "Avatar_Dehya_ElementalArt_RecycleDamage_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_1_A",
+ "abilityName": "Avatar_Dehya_PermanentSkill_1_A",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_TriggerRecycle_Fx",
+ "abilityName": "Avatar_Dehya_ElementalArt_TriggerRecycle_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_RecycleDamageV",
+ "abilityName": "Avatar_Dehya_ElementalArt_RecycleDamageV",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanHandler",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanFx",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanFx_Handler",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanFx_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanFx_Lv1",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanFx_Lv1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanFx_Lv2",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanFx_Lv2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_LoanFx_Lv1M",
+ "abilityName": "Avatar_Dehya_ElementalArt_LoanFx_Lv1M",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Initialize",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_LifeTimer",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_LifeTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_CDInherit",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_CDInherit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Fx",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Fx_01",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Fx_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Fx_02",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Fx_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Fx_LevelHandler",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Fx_LevelHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_CheckInField",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_CheckInField",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_PermanentSkill_EndureUp",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_PermanentSkill_EndureUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_OnDehya",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_OnDehya",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_OnDehya_SwitchSkill",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_OnDehya_SwitchSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_AttackHandler",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_AttackHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_OnMonster",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_OnMonster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_AttackByGrave",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_AttackByGrave",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_CheckInFieldM",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_CheckInFieldM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Bullet_Trail",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Bullet_Trail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Grave_Bullet_Timer",
+ "abilityName": "Avatar_Dehya_ElementalArt_Grave_Bullet_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Recycleh",
+ "abilityName": "Avatar_Dehya_ElementalArt_Recycleh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst",
+ "abilityName": "Avatar_Dehya_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Starter",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Starter",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Timer",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Fx",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Dehya_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Dehya_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_SwitchSkill",
+ "abilityName": "Avatar_Dehya_BladeStorm_SwitchSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_BladeStorm",
+ "abilityName": "Avatar_Dehya_ElementalBurst_BladeStorm",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_BladeStorm_Remover",
+ "abilityName": "Avatar_Dehya_ElementalBurst_BladeStorm_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Camera_DungeonEffect",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Camera_DungeonEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_1_AR",
+ "abilityName": "Avatar_Dehya_PermanentSkill_1_AR",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_SprintCancle",
+ "abilityName": "Avatar_Dehya_ElementalBurst_SprintCancle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_StandbyCancle",
+ "abilityName": "Avatar_Dehya_ElementalBurst_StandbyCancle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Controller",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_ClearTrigger",
+ "abilityName": "Avatar_Dehya_BladeStorm_ClearTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_QTE_Success",
+ "abilityName": "Avatar_Dehya_BladeStorm_QTE_Success",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_Strike_A",
+ "abilityName": "Avatar_Dehya_BladeStorm_Strike_A",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_Strike_B",
+ "abilityName": "Avatar_Dehya_BladeStorm_Strike_B",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_BladeStorm_TurnDir",
+ "abilityName": "Avatar_Dehya_ElementalBurst_BladeStorm_TurnDir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_BladeStorm_TurnDir_Last",
+ "abilityName": "Avatar_Dehya_ElementalBurst_BladeStorm_TurnDir_Last",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_Fx_Remover",
+ "abilityName": "Avatar_Dehya_BladeStorm_Fx_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_Speed_Handler",
+ "abilityName": "Avatar_Dehya_BladeStorm_Speed_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_BladeStorm_SpeedUp",
+ "abilityName": "Avatar_Dehya_BladeStorm_SpeedUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_1_Buff",
+ "abilityName": "Avatar_Dehya_PermanentSkill_1_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_A_Timer",
+ "abilityName": "Avatar_Dehya_PermanentSkill_A_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_B_Timer",
+ "abilityName": "Avatar_Dehya_PermanentSkill_B_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_B_Buff",
+ "abilityName": "Avatar_Dehya_PermanentSkill_B_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_2",
+ "abilityName": "Avatar_Dehya_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_2_Handler",
+ "abilityName": "Avatar_Dehya_PermanentSkill_2_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_2_HotBuff",
+ "abilityName": "Avatar_Dehya_PermanentSkill_2_HotBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_PermanentSkill_2_CDTimer",
+ "abilityName": "Avatar_Dehya_PermanentSkill_2_CDTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6",
+ "abilityName": "Avatar_Dehya_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_CritUp",
+ "abilityName": "Avatar_Dehya_Constellation_6_CritUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_CritHurtUp",
+ "abilityName": "Avatar_Dehya_Constellation_6_CritHurtUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_Handler",
+ "abilityName": "Avatar_Dehya_Constellation_6_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_Initialize",
+ "abilityName": "Avatar_Dehya_Constellation_6_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_Remover",
+ "abilityName": "Avatar_Dehya_Constellation_6_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Constellation_6_Crit_CountUp",
+ "abilityName": "Avatar_Dehya_Constellation_6_Crit_CountUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Attack_DamageHandler",
+ "abilityName": "Avatar_Dehya_Attack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_FallingAnthem",
+ "abilityName": "Avatar_Dehya_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya",
+ "abilityName": "Avatar_Dehya",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Insert_AS",
+ "abilityName": "Avatar_Dehya_ElementalArt_Insert_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalArt_Recycle_AS",
+ "abilityName": "Avatar_Dehya_ElementalArt_Recycle_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Loop_A",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Loop_A",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Loop_B",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Loop_B",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_End",
+ "abilityName": "Avatar_Dehya_ElementalBurst_End",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_AS",
+ "abilityName": "Avatar_Dehya_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_TeamConfig_01BS",
+ "abilityName": "Avatar_Dehya_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_TeamConfig_01Loop",
+ "abilityName": "Avatar_Dehya_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_TeamConfig_01AS",
+ "abilityName": "Avatar_Dehya_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Dehya_SumeruHairpin",
+ "abilityName": "AvatarItem_Dehya_SumeruHairpin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Spine",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_BS",
+ "abilityName": "Avatar_Dehya_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Hit",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_ElementalBurst_Hit_02",
+ "abilityName": "Avatar_Dehya_ElementalBurst_Hit_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dehya_Spine_Loop",
+ "abilityName": "Avatar_Dehya_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Diluc.json b/data/json/avatar/ConfigAvatar_Diluc.json
new file mode 100644
index 0000000..ef37b64
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Diluc.json
@@ -0,0 +1,174 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Diluc_ExtraAttack",
+ "abilityName": "Avatar_Diluc_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_Blade",
+ "abilityName": "Avatar_Diluc_Fire_Blade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_BladeSet1",
+ "abilityName": "Avatar_Diluc_Fire_BladeSet1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_AfterFireBlade",
+ "abilityName": "Avatar_Diluc_AfterFireBlade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_BladeSet2",
+ "abilityName": "Avatar_Diluc_Fire_BladeSet2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_BladeSet3",
+ "abilityName": "Avatar_Diluc_Fire_BladeSet3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_Enhancement",
+ "abilityName": "Avatar_Diluc_Fire_Enhancement",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireCrossCamera",
+ "abilityName": "Avatar_Diluc_FireCrossCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireCross_Push1",
+ "abilityName": "Avatar_Diluc_FireCross_Push1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireCross_Strike",
+ "abilityName": "Avatar_Diluc_FireCross_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireCross",
+ "abilityName": "Avatar_Diluc_FireCross",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireCross_Explode",
+ "abilityName": "Avatar_Diluc_FireCross_Explode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_NormalAttackDamage",
+ "abilityName": "Avatar_Diluc_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementArt",
+ "abilityName": "Avatar_Diluc_ElementArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_GiantKiller",
+ "abilityName": "Avatar_Diluc_GiantKiller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FireHowl",
+ "abilityName": "Avatar_Diluc_FireHowl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_AfterFireBladeCountDown",
+ "abilityName": "Avatar_Diluc_AfterFireBladeCountDown",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_NextFireBlade1",
+ "abilityName": "Avatar_Diluc_NextFireBlade1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_NextFireBlade2",
+ "abilityName": "Avatar_Diluc_NextFireBlade2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_FallingAnthem",
+ "abilityName": "Avatar_Diluc_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc",
+ "abilityName": "Avatar_Diluc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_TeamConfig_01BS",
+ "abilityName": "Avatar_Diluc_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_TeamConfig_01Loop",
+ "abilityName": "Avatar_Diluc_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_TeamConfig_01AS",
+ "abilityName": "Avatar_Diluc_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Diluc_Mask",
+ "abilityName": "AvatarItem_Diluc_Mask",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Fire_Enchantment",
+ "abilityName": "Avatar_Diluc_Fire_Enchantment",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementalBurst_Spine",
+ "abilityName": "Avatar_Diluc_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementalBurst_Spine_MotionBlur",
+ "abilityName": "Avatar_Diluc_ElementalBurst_Spine_MotionBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Spine",
+ "abilityName": "Avatar_Diluc_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementalBurst",
+ "abilityName": "Avatar_Diluc_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementBurst",
+ "abilityName": "Avatar_Diluc_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_ElementalBurst_Hit",
+ "abilityName": "Avatar_Diluc_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Spine_Loop",
+ "abilityName": "Avatar_Diluc_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diluc_Spine_BG",
+ "abilityName": "Avatar_Diluc_Spine_BG",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Diona.json b/data/json/avatar/ConfigAvatar_Diona.json
new file mode 100644
index 0000000..0b16ef0
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Diona.json
@@ -0,0 +1,224 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Diona_Arrow_FX",
+ "abilityName": "Avatar_Diona_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Diona_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_PressShoot",
+ "abilityName": "Avatar_Diona_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_Aiming",
+ "abilityName": "Avatar_Diona_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_ResetGlobalValue",
+ "abilityName": "Avatar_Diona_ShootArrow_ResetGlobalValue",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_AimPressShoot",
+ "abilityName": "Avatar_Diona_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_Enchanted_WithoutIce",
+ "abilityName": "Avatar_Diona_ShootArrow_Enchanted_WithoutIce",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_01",
+ "abilityName": "Avatar_Diona_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_02",
+ "abilityName": "Avatar_Diona_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_03",
+ "abilityName": "Avatar_Diona_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_04",
+ "abilityName": "Avatar_Diona_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_05",
+ "abilityName": "Avatar_Diona_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_NekoShoot_Press",
+ "abilityName": "Avatar_Diona_NekoShoot_Press",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_NekoShoot_Holdup",
+ "abilityName": "Avatar_Diona_NekoShoot_Holdup",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalArt_Shield",
+ "abilityName": "Avatar_Diona_ElementalArt_Shield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalArt_Bullet_Trail_01",
+ "abilityName": "Avatar_Diona_ElementalArt_Bullet_Trail_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalArt_Bullet_Trail_02",
+ "abilityName": "Avatar_Diona_ElementalArt_Bullet_Trail_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Elemental_Burst_Attack",
+ "abilityName": "Avatar_Diona_Elemental_Burst_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Elemental_Art_Flask",
+ "abilityName": "Avatar_Diona_Elemental_Art_Flask",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Elemental_Burst_Creata_IceWine_Fog",
+ "abilityName": "Avatar_Diona_Elemental_Burst_Creata_IceWine_Fog",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_IceWine_Fog",
+ "abilityName": "Avatar_Diona_IceWine_Fog",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ShootArrow_Damage",
+ "abilityName": "Avatar_Diona_ShootArrow_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_FallingAnthem",
+ "abilityName": "Avatar_Diona_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona",
+ "abilityName": "Avatar_Diona",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Short",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Short",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Short_AS",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Short_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Short_BS",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Short_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Throw",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Throw",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Throw_AS",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Throw_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalArt_Throw_BS",
+ "abilityName": "Avatar_Diona_Skill_ElementalArt_Throw_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalBurst",
+ "abilityName": "Avatar_Diona_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Diona_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_TeamConfig_01BS",
+ "abilityName": "Avatar_Diona_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_TeamConfig_01Loop",
+ "abilityName": "Avatar_Diona_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_TeamConfig_01AS",
+ "abilityName": "Avatar_Diona_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst_Spine_Trail",
+ "abilityName": "Avatar_Diona_ElementalBurst_Spine_Trail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst_Spine",
+ "abilityName": "Avatar_Diona_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Spine",
+ "abilityName": "Avatar_Diona_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst_BS",
+ "abilityName": "Avatar_Diona_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst",
+ "abilityName": "Avatar_Diona_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementBurst",
+ "abilityName": "Avatar_Diona_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst_Hit",
+ "abilityName": "Avatar_Diona_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_ElementalBurst_BS_Normal",
+ "abilityName": "Avatar_Diona_ElementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Diona_Spine_Loop",
+ "abilityName": "Avatar_Diona_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Dori.json b/data/json/avatar/ConfigAvatar_Dori.json
new file mode 100644
index 0000000..1708c25
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Dori.json
@@ -0,0 +1,119 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Dori_ExtraAttack",
+ "abilityName": "Avatar_Dori_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_NormalAttack_Sprite_Controller",
+ "abilityName": "Avatar_Dori_NormalAttack_Sprite_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ExtraAttack_Sprite_Remover",
+ "abilityName": "Avatar_Dori_ExtraAttack_Sprite_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalArt_Sprite_Remover",
+ "abilityName": "Avatar_Dori_ElementalArt_Sprite_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalArt_Sprite",
+ "abilityName": "Avatar_Dori_ElementalArt_Sprite",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalArt",
+ "abilityName": "Avatar_Dori_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst",
+ "abilityName": "Avatar_Dori_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ChargingStation_Bullet_Bullet",
+ "abilityName": "Avatar_Dori_ChargingStation_Bullet_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst_CreateGadgeth",
+ "abilityName": "Avatar_Dori_ElementalBurst_CreateGadgeth",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst_CreateGadget",
+ "abilityName": "Avatar_Dori_ElementalBurst_CreateGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ChargingStation",
+ "abilityName": "Avatar_Dori_ChargingStation",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Dori_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_FallingAnthem",
+ "abilityName": "Avatar_Dori_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_Constellation_6",
+ "abilityName": "Avatar_Dori_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori",
+ "abilityName": "Avatar_Dori",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_TeamConfig_01BS",
+ "abilityName": "Avatar_Dori_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_TeamConfig_01Loop",
+ "abilityName": "Avatar_Dori_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_TeamConfig_01AS",
+ "abilityName": "Avatar_Dori_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst_Spine",
+ "abilityName": "Avatar_Dori_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst_BS",
+ "abilityName": "Avatar_Dori_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementBurst",
+ "abilityName": "Avatar_Dori_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_ElementalBurst_Hit",
+ "abilityName": "Avatar_Dori_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Dori_Spine_Loop",
+ "abilityName": "Avatar_Dori_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Emilie.json b/data/json/avatar/ConfigAvatar_Emilie.json
new file mode 100644
index 0000000..9a6d5f0
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Emilie.json
@@ -0,0 +1,49 @@
+{
+ "abilities": [
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_ArkheGrade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_HideWeapon",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Emilie_FallingAnthem",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Eula.json b/data/json/avatar/ConfigAvatar_Eula.json
new file mode 100644
index 0000000..1cbd3e9
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Eula.json
@@ -0,0 +1,174 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Eula_ExtraAttack",
+ "abilityName": "Avatar_Eula_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_ExtraAttack_1",
+ "abilityName": "Avatar_Eula_ElementalArt_ExtraAttack_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_ExtraAttack_2",
+ "abilityName": "Avatar_Eula_ElementalArt_ExtraAttack_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt",
+ "abilityName": "Avatar_Eula_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_SetMark",
+ "abilityName": "Avatar_Eula_ElementalArt_SetMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_Click",
+ "abilityName": "Avatar_Eula_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_Burst",
+ "abilityName": "Avatar_Eula_ElementalArt_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst",
+ "abilityName": "Avatar_Eula_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_PostEffect",
+ "abilityName": "Avatar_Eula_ElementalBurst_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Eula_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_Attack",
+ "abilityName": "Avatar_Eula_ElementalBurst_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_Judgment",
+ "abilityName": "Avatar_Eula_ElementalBurst_Judgment",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_NormalAttackDamage_Handler",
+ "abilityName": "Avatar_Eula_NormalAttackDamage_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_FallingAnthem",
+ "abilityName": "Avatar_Eula_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot1",
+ "abilityName": "Avatar_Eula_Plot1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot_NoHarm",
+ "abilityName": "Avatar_Eula_Plot_NoHarm",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot_Fail",
+ "abilityName": "Avatar_Eula_Plot_Fail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot2",
+ "abilityName": "Avatar_Eula_Plot2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot_Throw",
+ "abilityName": "Avatar_Eula_Plot_Throw",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot3",
+ "abilityName": "Avatar_Eula_Plot3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Plot_Nofrozen",
+ "abilityName": "Avatar_Eula_Plot_Nofrozen",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula",
+ "abilityName": "Avatar_Eula",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_plot",
+ "abilityName": "Avatar_Eula_plot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_BS",
+ "abilityName": "Avatar_Eula_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_Click_AS",
+ "abilityName": "Avatar_Eula_ElementalArt_Click_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_Charge",
+ "abilityName": "Avatar_Eula_ElementalArt_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_TeamConfig_01BS",
+ "abilityName": "Avatar_Eula_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_TeamConfig_01Loop",
+ "abilityName": "Avatar_Eula_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_TeamConfig_01AS",
+ "abilityName": "Avatar_Eula_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalArt_Charge_AS",
+ "abilityName": "Avatar_Eula_ElementalArt_Charge_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_Spine",
+ "abilityName": "Avatar_Eula_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_BS",
+ "abilityName": "Avatar_Eula_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_ElementalBurst_Hit",
+ "abilityName": "Avatar_Eula_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Eula_Spine_Loop",
+ "abilityName": "Avatar_Eula_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Faruzan.json b/data/json/avatar/ConfigAvatar_Faruzan.json
new file mode 100644
index 0000000..5d9128c
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Faruzan.json
@@ -0,0 +1,264 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Faruzan_PressShoot",
+ "abilityName": "Avatar_Faruzan_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_AimPressShoot",
+ "abilityName": "Avatar_Faruzan_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Faruzan_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_ResetGlobalValue",
+ "abilityName": "Avatar_Faruzan_ShootArrow_ResetGlobalValue",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Arrow_FX",
+ "abilityName": "Avatar_Faruzan_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_Aiming",
+ "abilityName": "Avatar_Faruzan_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_01",
+ "abilityName": "Avatar_Faruzan_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_02",
+ "abilityName": "Avatar_Faruzan_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_03",
+ "abilityName": "Avatar_Faruzan_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_04",
+ "abilityName": "Avatar_Faruzan_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_05",
+ "abilityName": "Avatar_Faruzan_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_06",
+ "abilityName": "Avatar_Faruzan_ShootArrow_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_Enchanted_Wind",
+ "abilityName": "Avatar_Faruzan_ShootArrow_Enchanted_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ShootArrow_Enchanted_WithoutWind",
+ "abilityName": "Avatar_Faruzan_ShootArrow_Enchanted_WithoutWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_FallingAnthem",
+ "abilityName": "Avatar_Faruzan_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Elemental_Art",
+ "abilityName": "Avatar_Faruzan_Elemental_Art",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Wind_Arashi",
+ "abilityName": "Avatar_Faruzan_Wind_Arashi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Wind_Arashi_Bullet",
+ "abilityName": "Avatar_Faruzan_Wind_Arashi_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Bullet_Landed_WindBlackHole",
+ "abilityName": "Avatar_Faruzan_Bullet_Landed_WindBlackHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_WindZone_Avatar",
+ "abilityName": "Avatar_Faruzan_WindZone_Avatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_WindZone_Monster",
+ "abilityName": "Avatar_Faruzan_WindZone_Monster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_WindZone_Monster_Constellation6",
+ "abilityName": "Avatar_Faruzan_WindZone_Monster_Constellation6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_WindBlackHole_Gadget",
+ "abilityName": "Avatar_Faruzan_WindBlackHole_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Elemental_Burst_BS",
+ "abilityName": "Avatar_Faruzan_Elemental_Burst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_GadgetLifeController",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_GadgetLifeController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Elemental_Burst",
+ "abilityName": "Avatar_Faruzan_Elemental_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp",
+ "abilityName": "Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_ApplyRange",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_ApplyRange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd_Handler9UNIQUE_Avatar_Faruzan_ElementalBurst_GadgetLifeController",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd_Handler9UNIQUE_Avatar_Faruzan_ElementalBurst_GadgetLifeController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_LoopEff",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_LoopEff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_Handler",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindCriticalHurtUp",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindCriticalHurtUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_AutoHurricaneArrow",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_AutoHurricaneArrow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD9UNIQUE_Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD9UNIQUE_Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_AutoHurricaneArrow_CD",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_AutoHurricaneArrow_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd_Handler",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindAddHurtUp_EffOnAdd",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Constellation4_ReviveEnergy",
+ "abilityName": "Avatar_Faruzan_Constellation4_ReviveEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Constellation6_AutoHurricaneArrow_BulletTrigger",
+ "abilityName": "Avatar_Faruzan_Constellation6_AutoHurricaneArrow_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan",
+ "abilityName": "Avatar_Faruzan",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Skill_ElementalArt",
+ "abilityName": "Avatar_Faruzan_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Faruzan_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Skill_ElementalBurst",
+ "abilityName": "Avatar_Faruzan_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_TeamConfig_01BS",
+ "abilityName": "Avatar_Faruzan_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_TeamConfig_01Loop",
+ "abilityName": "Avatar_Faruzan_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_TeamConfig_01AS",
+ "abilityName": "Avatar_Faruzan_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp0Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp",
+ "abilityName": "Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp0Avatar_Faruzan_PermanentSkill2_WindDamageExtraUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Faruzan_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_Remove",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD",
+ "abilityName": "Avatar_Faruzan_ElementalBurst_WindDamageValueUp_CD",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Feiyan.json b/data/json/avatar/ConfigAvatar_Feiyan.json
new file mode 100644
index 0000000..cd31d17
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Feiyan.json
@@ -0,0 +1,154 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Feiyan_Attack01",
+ "abilityName": "Avatar_Feiyan_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_Attack02",
+ "abilityName": "Avatar_Feiyan_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_Attack03",
+ "abilityName": "Avatar_Feiyan_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_NormalAttackDamage01",
+ "abilityName": "Avatar_FeiyanGadgetSkill_NormalAttackDamage01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_NormalAttackDamage02",
+ "abilityName": "Avatar_FeiyanGadgetSkill_NormalAttackDamage02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_NormalAttackDamage03",
+ "abilityName": "Avatar_FeiyanGadgetSkill_NormalAttackDamage03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_Effect_Normal",
+ "abilityName": "Avatar_FeiyanGadgetSkill_Effect_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_Effect_Last",
+ "abilityName": "Avatar_FeiyanGadgetSkill_Effect_Last",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack",
+ "abilityName": "Avatar_Feiyan_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack_Charge",
+ "abilityName": "Avatar_Feiyan_ExtraAttack_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack_DoAttack",
+ "abilityName": "Avatar_Feiyan_ExtraAttack_DoAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_ExtraAttack_Damage",
+ "abilityName": "Avatar_FeiyanGadgetSkill_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack_Weight_Clear",
+ "abilityName": "Avatar_Feiyan_ExtraAttack_Weight_Clear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack_Weight_Handler",
+ "abilityName": "Avatar_Feiyan_ExtraAttack_Weight_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ExtraAttack_Weight_Timer",
+ "abilityName": "Avatar_Feiyan_ExtraAttack_Weight_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_FeiyanGadgetSkill_Weight_Count",
+ "abilityName": "Avatar_FeiyanGadgetSkill_Weight_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalArt_BS",
+ "abilityName": "Avatar_Feiyan_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalArt",
+ "abilityName": "Avatar_Feiyan_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalBurst_BS",
+ "abilityName": "Avatar_Feiyan_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalBurst",
+ "abilityName": "Avatar_Feiyan_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_FallingAnthem",
+ "abilityName": "Avatar_Feiyan_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_Attack04",
+ "abilityName": "Avatar_Feiyan_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_Radar_Collectables_Liyue",
+ "abilityName": "Avatar_Feiyan_Radar_Collectables_Liyue",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan",
+ "abilityName": "Avatar_Feiyan",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_TeamConfig_01BS",
+ "abilityName": "Avatar_Feiyan_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_TeamConfig_01Loop",
+ "abilityName": "Avatar_Feiyan_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_TeamConfig_01AS",
+ "abilityName": "Avatar_Feiyan_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalBurst_Spine",
+ "abilityName": "Avatar_Feiyan_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_ElementalBurst_Hit",
+ "abilityName": "Avatar_Feiyan_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Feiyan_Spine_Loop",
+ "abilityName": "Avatar_Feiyan_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Fischl.json b/data/json/avatar/ConfigAvatar_Fischl.json
new file mode 100644
index 0000000..d506bad
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Fischl.json
@@ -0,0 +1,259 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Fischl_PressShoot",
+ "abilityName": "Avatar_Fischl_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_AimPressShoot",
+ "abilityName": "Avatar_Fischl_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootAimingArrow_FX",
+ "abilityName": "Avatar_Fischl_ShootAimingArrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Fischl_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_Aiming",
+ "abilityName": "Avatar_Fischl_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_Element_Hit",
+ "abilityName": "Avatar_Fischl_ExtraAttack_Element_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_21_ExteaAttackThunder",
+ "abilityName": "Avatar_Fischl_ProudSkill_21_ExteaAttackThunder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_Element_FindCrow",
+ "abilityName": "Avatar_Fischl_ExtraAttack_Element_FindCrow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_Element_BulletFx",
+ "abilityName": "Avatar_Fischl_ExtraAttack_Element_BulletFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_WithoutElement_Hit",
+ "abilityName": "Avatar_Fischl_ExtraAttack_WithoutElement_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityName": "Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_01",
+ "abilityName": "Avatar_Fischl_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_02",
+ "abilityName": "Avatar_Fischl_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_03",
+ "abilityName": "Avatar_Fischl_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_04",
+ "abilityName": "Avatar_Fischl_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ShootArrow_05",
+ "abilityName": "Avatar_Fischl_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_NormalAttack_Smoke",
+ "abilityName": "Avatar_Fischl_NormalAttack_Smoke",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_CrowSummon_Init",
+ "abilityName": "Avatar_Fischl_CrowSummon_Init",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_CrowSummon_InitJ",
+ "abilityName": "Avatar_Fischl_CrowSummon_InitJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Crow_BeAttackedTrigger_Init",
+ "abilityName": "Avatar_Fischl_Crow_BeAttackedTrigger_Init",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElectricalCrow_Crow_Attack",
+ "abilityName": "Avatar_Fischl_ElectricalCrow_Crow_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_22",
+ "abilityName": "Avatar_Fischl_ProudSkill_22",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ExteaAttackThunderh",
+ "abilityName": "Avatar_Fischl_ProudSkill_ExteaAttackThunderh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ExteaAttackThunder",
+ "abilityName": "Avatar_Fischl_ProudSkill_ExteaAttackThunder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Skill_S_Crow_Handle",
+ "abilityName": "Avatar_Fischl_Skill_S_Crow_Handle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder",
+ "abilityName": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ElementReaction",
+ "abilityName": "Avatar_Fischl_ProudSkill_ElementReaction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_21_ExteaAttackThunder7",
+ "abilityName": "Avatar_Fischl_ProudSkill_21_ExteaAttackThunder7",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Skill_S_Crow_AutoAttack_Hit_01",
+ "abilityName": "Avatar_Fischl_Skill_S_Crow_AutoAttack_Hit_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Skill_E_CrowQueen_ScreenEffect333",
+ "abilityName": "Avatar_Fischl_Skill_E_CrowQueen_ScreenEffect333",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_FallingAnthem",
+ "abilityName": "Avatar_Fischl_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl",
+ "abilityName": "Avatar_Fischl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_WithoutElement_Hit1Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityName": "Avatar_Fischl_ExtraAttack_WithoutElement_Hit1Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_TeamConfig_01BS",
+ "abilityName": "Avatar_Fischl_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_TeamConfig_01Loop",
+ "abilityName": "Avatar_Fischl_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_TeamConfig_01AS",
+ "abilityName": "Avatar_Fischl_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx1Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityName": "Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx1Avatar_Fischl_ExtraAttack_WithoutElement_BulletFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder5Avatar_Fischl_ProudSkill_ElementReactionAttackThunder",
+ "abilityName": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder5Avatar_Fischl_ProudSkill_ElementReactionAttackThunder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst_Spine",
+ "abilityName": "Avatar_Fischl_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst",
+ "abilityName": "Avatar_Fischl_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementBurst",
+ "abilityName": "Avatar_Fischl_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst_BS",
+ "abilityName": "Avatar_Fischl_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst_Hit",
+ "abilityName": "Avatar_Fischl_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst_Buff_Hit",
+ "abilityName": "Avatar_Fischl_ElementalBurst_Buff_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Fischl_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ElementalBurst_Buff",
+ "abilityName": "Avatar_Fischl_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Spine_Loop",
+ "abilityName": "Avatar_Fischl_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_Skill_E_CrowQueen_ScreenEffect",
+ "abilityName": "Avatar_Fischl_Skill_E_CrowQueen_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder9AS_Fischl_ProudSkill_22_ElementReactionAttack_AttackRatio",
+ "abilityName": "Avatar_Fischl_ProudSkill_ElementReactionAttackThunder9AS_Fischl_ProudSkill_22_ElementReactionAttack_AttackRatio",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_WithoutElement_HitDFischl_ProudSkill_31_P6_ExtraAttack_WithoutElement_Damage_Percentage",
+ "abilityName": "Avatar_Fischl_ExtraAttack_WithoutElement_HitDFischl_ProudSkill_31_P6_ExtraAttack_WithoutElement_Damage_Percentage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Fischl_ExtraAttack_Element_Hit6Fischl_ProudSkill_31_P7_ChargeElementDamage_Percentage",
+ "abilityName": "Avatar_Fischl_ExtraAttack_Element_Hit6Fischl_ProudSkill_31_P7_ChargeElementDamage_Percentage",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Freminet.json b/data/json/avatar/ConfigAvatar_Freminet.json
new file mode 100644
index 0000000..614fef9
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Freminet.json
@@ -0,0 +1,154 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Freminet_ExtraAttack",
+ "abilityName": "Avatar_Freminet_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_DropBall",
+ "abilityName": "Avatar_Freminet_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack04_Hide",
+ "abilityName": "Avatar_Freminet_Attack04_Hide",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack04_HideEff",
+ "abilityName": "Avatar_Freminet_Attack04_HideEff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalArt",
+ "abilityName": "Avatar_Freminet_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_SkillBuff",
+ "abilityName": "Avatar_Freminet_SkillBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack01_Ice",
+ "abilityName": "Avatar_Freminet_Attack01_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack02_IceB",
+ "abilityName": "Avatar_Freminet_Attack02_IceB",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack03_IceJ",
+ "abilityName": "Avatar_Freminet_Attack03_IceJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack04_Ice",
+ "abilityName": "Avatar_Freminet_Attack04_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_SkillBuff_EffEnd",
+ "abilityName": "Avatar_Freminet_SkillBuff_EffEnd",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack02_Ice",
+ "abilityName": "Avatar_Freminet_Attack02_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Attack03_Ice",
+ "abilityName": "Avatar_Freminet_Attack03_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalArt_Strike",
+ "abilityName": "Avatar_Freminet_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ArkheGrade",
+ "abilityName": "Avatar_Freminet_ArkheGrade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ArkheGrade_CD",
+ "abilityName": "Avatar_Freminet_ArkheGrade_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalArt_2",
+ "abilityName": "Avatar_Freminet_ElementalArt_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalArt_3",
+ "abilityName": "Avatar_Freminet_ElementalArt_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalBurst_Strike",
+ "abilityName": "Avatar_Freminet_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_ElementalBurst",
+ "abilityName": "Avatar_Freminet_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Utral_Buff",
+ "abilityName": "Avatar_Freminet_Utral_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_FallingAnthem",
+ "abilityName": "Avatar_Freminet_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_DamageHandler",
+ "abilityName": "Avatar_Freminet_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_PermanentSkill_2",
+ "abilityName": "Avatar_Freminet_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_Constellation_6",
+ "abilityName": "Avatar_Freminet_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_DivingStamina_Reduction",
+ "abilityName": "Avatar_Freminet_DivingStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet",
+ "abilityName": "Avatar_Freminet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_TeamConfig_01BS",
+ "abilityName": "Avatar_Freminet_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_TeamConfig_01Loop",
+ "abilityName": "Avatar_Freminet_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Freminet_TeamConfig_01AS",
+ "abilityName": "Avatar_Freminet_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Furina.json b/data/json/avatar/ConfigAvatar_Furina.json
new file mode 100644
index 0000000..b26f15b
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Furina.json
@@ -0,0 +1,144 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Furina_ExtraAttack",
+ "abilityName": "Avatar_Furina_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_Attack04_CreateBullet",
+ "abilityName": "Avatar_Furina_Attack04_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityName": "Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ArkheGrade_Handler",
+ "abilityName": "Avatar_Furina_ArkheGrade_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_DamageHandler",
+ "abilityName": "Avatar_Furina_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalArt",
+ "abilityName": "Avatar_Furina_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst",
+ "abilityName": "Avatar_Furina_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Furina_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_BuffStart",
+ "abilityName": "Avatar_Furina_ElementalBurst_BuffStart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_Camera",
+ "abilityName": "Avatar_Furina_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Furina_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FogM",
+ "abilityName": "Avatar_Furina_ElementalBurst_FogM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FairyStage_ShadeM",
+ "abilityName": "Avatar_Furina_ElementalBurst_FairyStage_ShadeM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FairyStageM",
+ "abilityName": "Avatar_Furina_ElementalBurst_FairyStageM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FairyStage_3rdView",
+ "abilityName": "Avatar_Furina_ElementalBurst_FairyStage_3rdView",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FairyStage",
+ "abilityName": "Avatar_Furina_ElementalBurst_FairyStage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_FairyStage_Shade",
+ "abilityName": "Avatar_Furina_ElementalBurst_FairyStage_Shade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarChangeHP_MinCount3_ABILITY_Furina_ElementalBurst_AvatarChangeHP_Count",
+ "abilityName": "AvatarChangeHP_MinCount3_ABILITY_Furina_ElementalBurst_AvatarChangeHP_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_ElementalBurst_Fog",
+ "abilityName": "Avatar_Furina_ElementalBurst_Fog",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_PermanentSkill_1",
+ "abilityName": "Avatar_Furina_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_PermanentSkill_2",
+ "abilityName": "Avatar_Furina_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_FallingAnthem",
+ "abilityName": "Avatar_Furina_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_MoveOnWater_FootRipple_Left",
+ "abilityName": "Avatar_Furina_MoveOnWater_FootRipple_Left",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_MoveOnWater_FootRipple_Right",
+ "abilityName": "Avatar_Furina_MoveOnWater_FootRipple_Right",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_PermanentSkill_3",
+ "abilityName": "Avatar_Furina_PermanentSkill_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina",
+ "abilityName": "Avatar_Furina",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_Attack04_CreateBullet1Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityName": "Avatar_Furina_Attack04_CreateBullet1Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Furina_Attack04_WaterEnhanced_CreateBullet1Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityName": "Avatar_Furina_Attack04_WaterEnhanced_CreateBullet1Avatar_Furina_Attack04_WaterEnhanced_CreateBullet",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Gaming.json b/data/json/avatar/ConfigAvatar_Gaming.json
new file mode 100644
index 0000000..b04a442
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Gaming.json
@@ -0,0 +1,109 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Gaming_ExtraAttack",
+ "abilityName": "Avatar_Gaming_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_LionHead",
+ "abilityName": "Avatar_Gaming_LionHead",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_LionPet",
+ "abilityName": "Avatar_Gaming_LionPet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_OutFit",
+ "abilityName": "Avatar_Gaming_OutFit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalArt",
+ "abilityName": "Avatar_Gaming_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalArt_Jump",
+ "abilityName": "Avatar_Gaming_ElementalArt_Jump",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_Cast",
+ "abilityName": "Avatar_Gaming_ElementalBurst_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_HasTarget",
+ "abilityName": "Avatar_Gaming_ElementalBurst_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_NoTarget",
+ "abilityName": "Avatar_Gaming_ElementalBurst_NoTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_Handler",
+ "abilityName": "Avatar_Gaming_ElementalBurst_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_HandlerD",
+ "abilityName": "Avatar_Gaming_ElementalBurst_HandlerD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_Bullet_01",
+ "abilityName": "Avatar_Gaming_ElementalBurst_Bullet_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalArti",
+ "abilityName": "Avatar_Gaming_ElementalArti",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_Bullet_02",
+ "abilityName": "Avatar_Gaming_ElementalBurst_Bullet_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalArtM",
+ "abilityName": "Avatar_Gaming_ElementalArtM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_ElementalBurst_Bullet_03",
+ "abilityName": "Avatar_Gaming_ElementalBurst_Bullet_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_PermanentSkill_2",
+ "abilityName": "Avatar_Gaming_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_PermanentSkill_3",
+ "abilityName": "Avatar_Gaming_PermanentSkill_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_NormalAttack_Damage_Handler",
+ "abilityName": "Avatar_Gaming_NormalAttack_Damage_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming_FallingAnthem",
+ "abilityName": "Avatar_Gaming_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gaming",
+ "abilityName": "Avatar_Gaming",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Ganyu.json b/data/json/avatar/ConfigAvatar_Ganyu.json
new file mode 100644
index 0000000..e2a283e
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Ganyu.json
@@ -0,0 +1,189 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Ganyu_PressShoot",
+ "abilityName": "Avatar_Ganyu_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_AimPressShoot",
+ "abilityName": "Avatar_Ganyu_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_Arrow_FX",
+ "abilityName": "Avatar_Ganyu_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Ganyu_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_01",
+ "abilityName": "Avatar_Ganyu_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_02",
+ "abilityName": "Avatar_Ganyu_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_03",
+ "abilityName": "Avatar_Ganyu_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_04",
+ "abilityName": "Avatar_Ganyu_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_05",
+ "abilityName": "Avatar_Ganyu_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_06",
+ "abilityName": "Avatar_Ganyu_ShootArrow_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_Aiming",
+ "abilityName": "Avatar_Ganyu_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ShootArrow_Enchanted_WithoutIce",
+ "abilityName": "Avatar_Ganyu_ShootArrow_Enchanted_WithoutIce",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_Fission_GainEnergy",
+ "abilityName": "Avatar_Ganyu_Fission_GainEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_EnchantedFission",
+ "abilityName": "Avatar_Ganyu_EnchantedFission",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_IceBreaker_PrePosCheck",
+ "abilityName": "Avatar_Ganyu_IceBreaker_PrePosCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_IceBreaker_PosCheck",
+ "abilityName": "Avatar_Ganyu_IceBreaker_PosCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_IceBreaker",
+ "abilityName": "Avatar_Ganyu_IceBreaker",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_UnbreakableIce",
+ "abilityName": "Avatar_Ganyu_UnbreakableIce",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_FallingAnthem",
+ "abilityName": "Avatar_Ganyu_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu",
+ "abilityName": "Avatar_Ganyu",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_TeamConfig_01BS",
+ "abilityName": "Avatar_Ganyu_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_TeamConfig_01Loop",
+ "abilityName": "Avatar_Ganyu_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_TeamConfig_01AS",
+ "abilityName": "Avatar_Ganyu_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalBurst_Spine",
+ "abilityName": "Avatar_Ganyu_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalBurst",
+ "abilityName": "Avatar_Ganyu_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalBurst_Areahit",
+ "abilityName": "Avatar_Ganyu_ElementalBurst_Areahit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_elementalBurst_Areahit_Golden",
+ "abilityName": "Avatar_Ganyu_elementalBurst_Areahit_Golden",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalBurst_Hit",
+ "abilityName": "Avatar_Ganyu_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalArt_Special_BS",
+ "abilityName": "Avatar_Ganyu_ElementalArt_Special_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalArt_Special_Bullet",
+ "abilityName": "Avatar_Ganyu_ElementalArt_Special_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalArt_Special_Hit",
+ "abilityName": "Avatar_Ganyu_ElementalArt_Special_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalArt_Special_Bullet_Fission",
+ "abilityName": "Avatar_Ganyu_ElementalArt_Special_Bullet_Fission",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalArt_Special_Hit_Fission",
+ "abilityName": "Avatar_Ganyu_ElementalArt_Special_Hit_Fission",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_ElementalBurst_NoSpine",
+ "abilityName": "Avatar_Ganyu_ElementalBurst_NoSpine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_elementalBurst_Areahit",
+ "abilityName": "Avatar_Ganyu_elementalBurst_Areahit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_Spine_Loop",
+ "abilityName": "Avatar_Ganyu_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ganyu_Spine",
+ "abilityName": "Avatar_Ganyu_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Gorou.json b/data/json/avatar/ConfigAvatar_Gorou.json
new file mode 100644
index 0000000..507414e
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Gorou.json
@@ -0,0 +1,234 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Gorou_Arrow_FX",
+ "abilityName": "Avatar_Gorou_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_PressShoot",
+ "abilityName": "Avatar_Gorou_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_AimPressShoot",
+ "abilityName": "Avatar_Gorou_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Gorou_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_Aiming",
+ "abilityName": "Avatar_Gorou_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_01",
+ "abilityName": "Avatar_Gorou_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_02",
+ "abilityName": "Avatar_Gorou_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_03",
+ "abilityName": "Avatar_Gorou_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_04",
+ "abilityName": "Avatar_Gorou_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_05",
+ "abilityName": "Avatar_Gorou_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ShootArrow_Damage",
+ "abilityName": "Avatar_Gorou_ShootArrow_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_SkillHoldCharge",
+ "abilityName": "Avatar_Gorou_ElementalArt_SkillHoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layer3_Avatars4UNIQUE_Gorou_Constellation_RockAvatar_Layer1_Avatars",
+ "abilityName": "Avatar_Layer3_Avatars4UNIQUE_Gorou_Constellation_RockAvatar_Layer1_Avatars",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt",
+ "abilityName": "Avatar_Gorou_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer1_Modifier",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer1_Modifier",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer2_Modifier",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer2_Modifier",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer3_Modifier",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer3_Modifier",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer_Controller",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar1UNIQUE_Avatar_Gorou_ElementalArt_Layer_Controller",
+ "abilityName": "Avatar1UNIQUE_Avatar_Gorou_ElementalArt_Layer_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer1",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer2",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalArt_Layer3",
+ "abilityName": "Avatar_Gorou_ElementalArt_Layer3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_PutAwayGadget",
+ "abilityName": "Avatar_Gorou_ElementalBurst_PutAwayGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_KillGadget",
+ "abilityName": "Avatar_Gorou_ElementalBurst_KillGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_KillSelf",
+ "abilityName": "Avatar_Gorou_ElementalBurst_KillSelf",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst",
+ "abilityName": "Avatar_Gorou_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Gorou_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_Duration",
+ "abilityName": "Avatar_Gorou_ElementalBurst_Duration",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_SelfHanler",
+ "abilityName": "Avatar_Gorou_ElementalBurst_SelfHanler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_End_PutAwayGadget",
+ "abilityName": "Avatar_Gorou_ElementalBurst_End_PutAwayGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_WindZone",
+ "abilityName": "Avatar_Gorou_ElementalBurst_WindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_ElementalBurst_Heal_Handler",
+ "abilityName": "Avatar_Gorou_ElementalBurst_Heal_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Radar_Collectables_Daoqi",
+ "abilityName": "Avatar_Gorou_Radar_Collectables_Daoqi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_FallingAnthem",
+ "abilityName": "Avatar_Gorou_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou",
+ "abilityName": "Avatar_Gorou",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Gorou_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalArt",
+ "abilityName": "Avatar_Gorou_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Gorou_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalArt_Hold_Charge",
+ "abilityName": "Avatar_Gorou_Skill_ElementalArt_Hold_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalBurst",
+ "abilityName": "Avatar_Gorou_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalBurst_AS01",
+ "abilityName": "Avatar_Gorou_Skill_ElementalBurst_AS01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_Skill_ElementalBurst_AS02",
+ "abilityName": "Avatar_Gorou_Skill_ElementalBurst_AS02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_TeamConfig_01BS",
+ "abilityName": "Avatar_Gorou_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_TeamConfig_01Loop",
+ "abilityName": "Avatar_Gorou_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Gorou_TeamConfig_01AS",
+ "abilityName": "Avatar_Gorou_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Heizo.json b/data/json/avatar/ConfigAvatar_Heizo.json
new file mode 100644
index 0000000..f6a6ca7
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Heizo.json
@@ -0,0 +1,119 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Heizo_ExtraAttack",
+ "abilityName": "Avatar_Heizo_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_NormalAttack_Handler",
+ "abilityName": "Avatar_Heizo_NormalAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalArt_Handler",
+ "abilityName": "Avatar_Heizo_ElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalArt_Reset",
+ "abilityName": "Avatar_Heizo_ElementalArt_Reset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalArt_Strike",
+ "abilityName": "Avatar_Heizo_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalArt_Strike_Max",
+ "abilityName": "Avatar_Heizo_ElementalArt_Strike_Max",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_Strike",
+ "abilityName": "Avatar_Heizo_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Heizo_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindHole",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_HitCheck",
+ "abilityName": "Avatar_Heizo_ElementalBurst_HitCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_SetElementBomb",
+ "abilityName": "Avatar_Heizo_ElementalBurst_SetElementBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Default_Handler",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Default_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Handler",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Monster_Small",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Monster_Small",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Monster_Big",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Monster_Big",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Other2Avatar_Heizo_ElementalBurst_WindZone_Monster_Small",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Other2Avatar_Heizo_ElementalBurst_WindZone_Monster_Small",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_ElementalBurst_WindZone_Other",
+ "abilityName": "Avatar_Heizo_ElementalBurst_WindZone_Other",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_FallingAnthem",
+ "abilityName": "Avatar_Heizo_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_DashStamina_Reduction",
+ "abilityName": "Avatar_Heizo_DashStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo",
+ "abilityName": "Avatar_Heizo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_TeamConfig_01BS",
+ "abilityName": "Avatar_Heizo_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_TeamConfig_01Loop",
+ "abilityName": "Avatar_Heizo_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Heizo_TeamConfig_01AS",
+ "abilityName": "Avatar_Heizo_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Hutao.json b/data/json/avatar/ConfigAvatar_Hutao.json
new file mode 100644
index 0000000..efe035f
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Hutao.json
@@ -0,0 +1,179 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack",
+ "abilityName": "Avatar_Hutao_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_CrimsonPlum_CreateBullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_CrimsonPlum_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_CrimsonPlum_Bullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_CrimsonPlum_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_KillBullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_KillBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_CrimsonPlum",
+ "abilityName": "Avatar_Hutao_CrimsonPlum",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_PermanentSkill_1",
+ "abilityName": "Avatar_Hutao_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Constellation_Kill",
+ "abilityName": "Avatar_Hutao_Constellation_Kill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Constellation_LifeBonus",
+ "abilityName": "Avatar_Hutao_Constellation_LifeBonus",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_VermilionBite_CameraController",
+ "abilityName": "Avatar_Hutao_VermilionBite_CameraController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_VermilionBite_PostEffect",
+ "abilityName": "Avatar_Hutao_VermilionBite_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Hutao_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_VermilionBite",
+ "abilityName": "Avatar_Hutao_VermilionBite",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_VermilionBite_BakeMesh",
+ "abilityName": "Avatar_Hutao_VermilionBite_BakeMesh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Sprint_CloseCollider",
+ "abilityName": "Avatar_Hutao_Sprint_CloseCollider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Constellation_Limbo",
+ "abilityName": "Avatar_Hutao_Constellation_Limbo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Constellation_Limbo_Trigger",
+ "abilityName": "Avatar_Hutao_Constellation_Limbo_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Constellation_Limbo_Trigger2UNIQUE_Hutao_Constellation_Limbo_Untriggered_Limbo",
+ "abilityName": "Avatar_Hutao_Constellation_Limbo_Trigger2UNIQUE_Hutao_Constellation_Limbo_Untriggered_Limbo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_PermanentSkill_2",
+ "abilityName": "Avatar_Hutao_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Hutao_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_FallingAnthem",
+ "abilityName": "Avatar_Hutao_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_DropBall",
+ "abilityName": "Avatar_Hutao_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao",
+ "abilityName": "Avatar_Hutao",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ExtraAttack_Bullet1Avatar_Hutao_ExtraAttack_CrimsonPlum_CreateBullet",
+ "abilityName": "Avatar_Hutao_ExtraAttack_Bullet1Avatar_Hutao_ExtraAttack_CrimsonPlum_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_TeamConfig_01BS",
+ "abilityName": "Avatar_Hutao_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_TeamConfig_01Loop",
+ "abilityName": "Avatar_Hutao_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_TeamConfig_01AS",
+ "abilityName": "Avatar_Hutao_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ElementalBurst_Spine",
+ "abilityName": "Avatar_Hutao_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ElementalBurst_Hit",
+ "abilityName": "Avatar_Hutao_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_ElementArt_Buff",
+ "abilityName": "Avatar_Hutao_ElementArt_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_Spine_Loop",
+ "abilityName": "Avatar_Hutao_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_CrimsonPlum1CrimsonPlum_Debuff_Constellation_LifeBonus_Factor",
+ "abilityName": "Avatar_Hutao_CrimsonPlum1CrimsonPlum_Debuff_Constellation_LifeBonus_Factor",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_CrimsonPlum4CrimsonPlum_Debuff_Constellation_Kill_Critical_Delta",
+ "abilityName": "Avatar_Hutao_CrimsonPlum4CrimsonPlum_Debuff_Constellation_Kill_Critical_Delta",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Hutao_CrimsonPlum3CrimsonPlum_PermanentSkill_CriticalUp_CriticalDelta",
+ "abilityName": "Avatar_Hutao_CrimsonPlum3CrimsonPlum_PermanentSkill_CriticalUp_CriticalDelta",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Itto.json b/data/json/avatar/ConfigAvatar_Itto.json
new file mode 100644
index 0000000..d19ffe0
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Itto.json
@@ -0,0 +1,364 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack",
+ "abilityName": "Avatar_Itto_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraHoldChargingM",
+ "abilityName": "Avatar_Itto_ExtraHoldChargingM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequencyU",
+ "abilityName": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequencyU",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraHoldCharging",
+ "abilityName": "Avatar_Itto_ExtraHoldCharging",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequency",
+ "abilityName": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequency",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequencyM",
+ "abilityName": "Avatar_Itto_ExtraAttackTrigger_HighTickFrequencyM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_SpecialExtra_Damage",
+ "abilityName": "Avatar_Itto_SpecialExtra_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_SpecialExtra_Damage_Ghost",
+ "abilityName": "Avatar_Itto_SpecialExtra_Damage_Ghost",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Symbol_Handler",
+ "abilityName": "Avatar_Itto_Symbol_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Calculate_ExtraCombo",
+ "abilityName": "Avatar_Itto_Calculate_ExtraCombo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Calculate_ClearExtraCombo",
+ "abilityName": "Avatar_Itto_Calculate_ClearExtraCombo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_SpecialExtra_TipEffect",
+ "abilityName": "Avatar_Itto_SpecialExtra_TipEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ComboAddSymbol_Handler",
+ "abilityName": "Avatar_Itto_ComboAddSymbol_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_2ndNormalAttack_AddSymbol",
+ "abilityName": "Avatar_Itto_2ndNormalAttack_AddSymbol",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_LastNormalAttack_AddSymbol",
+ "abilityName": "Avatar_Itto_LastNormalAttack_AddSymbol",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ForeNormalAttack_AddSymbol",
+ "abilityName": "Avatar_Itto_ForeNormalAttack_AddSymbol",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Mask_Timer",
+ "abilityName": "Avatar_Itto_Mask_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArtAddSymbol_Handler",
+ "abilityName": "Avatar_Itto_ElementalArtAddSymbol_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_SymbolEffect_Handler",
+ "abilityName": "Avatar_Itto_SymbolEffect_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Mask_Handler",
+ "abilityName": "Avatar_Itto_Mask_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Symbol_Cost",
+ "abilityName": "Avatar_Itto_Symbol_Cost",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack_Mask",
+ "abilityName": "Avatar_Itto_ExtraAttack_Mask",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt",
+ "abilityName": "Avatar_Itto_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_ChargeRune",
+ "abilityName": "Avatar_Itto_ElementalArt_ChargeRune",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_SaveNormalCombo",
+ "abilityName": "Avatar_Itto_ElementalArt_SaveNormalCombo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_Strike",
+ "abilityName": "Avatar_Itto_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_HitCheck",
+ "abilityName": "Avatar_Itto_ElementalArt_HitCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_DropBall",
+ "abilityName": "Avatar_Itto_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_CreateBull",
+ "abilityName": "Avatar_Itto_ElementalArt_CreateBull",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_CreateBullM",
+ "abilityName": "Avatar_Itto_ElementalArt_CreateBullM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_CreateGadget",
+ "abilityName": "Avatar_Itto_ElementalArt_CreateGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Gadget_OniBull_Bullet",
+ "abilityName": "Avatar_Itto_Gadget_OniBull_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalArt_CreateGadgeth",
+ "abilityName": "Avatar_Itto_ElementalArt_CreateGadgeth",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Gadget_OniBull",
+ "abilityName": "Avatar_Itto_Gadget_OniBull",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Mask_TimerU",
+ "abilityName": "Avatar_Itto_Mask_TimerU",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst",
+ "abilityName": "Avatar_Itto_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Itto_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Itto_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Itto_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_CameraBlur",
+ "abilityName": "Avatar_Itto_ElementalBurst_CameraBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Itto_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_WeatherChange_Pre",
+ "abilityName": "Avatar_Itto_ElementalBurst_WeatherChange_Pre",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Itto_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Buff_AddDurability",
+ "abilityName": "Avatar_Itto_ElementalBurst_Buff_AddDurability",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Buff",
+ "abilityName": "Avatar_Itto_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_CameraEffectS",
+ "abilityName": "Avatar_Itto_ElementalBurst_CameraEffectS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_CameraEffect",
+ "abilityName": "Avatar_Itto_ElementalBurst_CameraEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Itto_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_WeatherChangeJ",
+ "abilityName": "Avatar_Itto_ElementalBurst_WeatherChangeJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_FallingAnthem",
+ "abilityName": "Avatar_Itto_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Attack_DamageHandler",
+ "abilityName": "Avatar_Itto_Attack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_PermanentSkill_1",
+ "abilityName": "Avatar_Itto_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack_AddEndure",
+ "abilityName": "Avatar_Itto_ExtraAttack_AddEndure",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack_ComboSpeed_Handler",
+ "abilityName": "Avatar_Itto_ExtraAttack_ComboSpeed_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack_ComboSpeed",
+ "abilityName": "Avatar_Itto_ExtraAttack_ComboSpeed",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_PermanentSkill_2",
+ "abilityName": "Avatar_Itto_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ExtraAttack_DamageUp",
+ "abilityName": "Avatar_Itto_ExtraAttack_DamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_SymbolBurst",
+ "abilityName": "Avatar_Itto_Constellation_SymbolBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_HotReviveSymbol_Delay",
+ "abilityName": "Avatar_Itto_Constellation_HotReviveSymbol_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_HotReviveSymbol",
+ "abilityName": "Avatar_Itto_Constellation_HotReviveSymbol",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_CalculateRockAvatar",
+ "abilityName": "Avatar_Itto_Constellation_CalculateRockAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_ReduceCD",
+ "abilityName": "Avatar_Itto_Constellation_ReduceCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_6",
+ "abilityName": "Avatar_Itto_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Constellation_CritDamageUp",
+ "abilityName": "Avatar_Itto_Constellation_CritDamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto",
+ "abilityName": "Avatar_Itto",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_TeamConfig_01BS",
+ "abilityName": "Avatar_Itto_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_TeamConfig_01Loop",
+ "abilityName": "Avatar_Itto_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_TeamConfig_01AS",
+ "abilityName": "Avatar_Itto_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Spine",
+ "abilityName": "Avatar_Itto_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_BS",
+ "abilityName": "Avatar_Itto_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_ElementalBurst_Hit",
+ "abilityName": "Avatar_Itto_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Itto_Spine_Loop",
+ "abilityName": "Avatar_Itto_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kachina.json b/data/json/avatar/ConfigAvatar_Kachina.json
new file mode 100644
index 0000000..d2bb0ee
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kachina.json
@@ -0,0 +1,54 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kachina_ExtraAttack",
+ "abilityName": "Avatar_Kachina_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Kachina_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_FallingAnthem",
+ "abilityName": "Avatar_Kachina_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_ElementalArt",
+ "abilityName": "Avatar_Kachina_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_NyxCycle",
+ "abilityName": "Avatar_Kachina_NyxCycle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_SpecialJump",
+ "abilityName": "Avatar_Kachina_SpecialJump",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_Level_Interaction",
+ "abilityName": "Avatar_Kachina_Level_Interaction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_Top_ShowHandler",
+ "abilityName": "Avatar_Kachina_Top_ShowHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_ElementalBurst",
+ "abilityName": "Avatar_Kachina_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kachina_NyxSwitch",
+ "abilityName": "Avatar_Kachina_NyxSwitch",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Kaeya.json b/data/json/avatar/ConfigAvatar_Kaeya.json
new file mode 100644
index 0000000..07ff731
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kaeya.json
@@ -0,0 +1,94 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kaeya_ExtraAttack",
+ "abilityName": "Avatar_Kaeya_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_DamageHandler",
+ "abilityName": "Avatar_Kaeya_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_DashStamina_Reduction",
+ "abilityName": "Avatar_Kaeya_DashStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_FallingAnthem",
+ "abilityName": "Avatar_Kaeya_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya",
+ "abilityName": "Avatar_Kaeya",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_TeamConfig_01BS",
+ "abilityName": "Avatar_Kaeya_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_TeamConfig_01Loop",
+ "abilityName": "Avatar_Kaeya_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_TeamConfig_01AS",
+ "abilityName": "Avatar_Kaeya_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementalBurst_Spine",
+ "abilityName": "Avatar_Kaeya_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementalBurst_Spine_Coin",
+ "abilityName": "Avatar_Kaeya_ElementalBurst_Spine_Coin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_Spine",
+ "abilityName": "Avatar_Kaeya_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementalBurst_BS",
+ "abilityName": "Avatar_Kaeya_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementalBurst",
+ "abilityName": "Avatar_Kaeya_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementBurst",
+ "abilityName": "Avatar_Kaeya_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_ElementalBurst_Hit",
+ "abilityName": "Avatar_Kaeya_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_Spine_Loop",
+ "abilityName": "Avatar_Kaeya_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_VO_Emotion_Kaeya_Deny_01",
+ "abilityName": "Avatar_Kaeya_VO_Emotion_Kaeya_Deny_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaeya_VO_MDAQ036_Kaeya_01",
+ "abilityName": "Avatar_Kaeya_VO_MDAQ036_Kaeya_01",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kate.json b/data/json/avatar/ConfigAvatar_Kate.json
new file mode 100644
index 0000000..84b0647
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kate.json
@@ -0,0 +1,3 @@
+{
+ "abilities": []
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kaveh.json b/data/json/avatar/ConfigAvatar_Kaveh.json
new file mode 100644
index 0000000..07ea704
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kaveh.json
@@ -0,0 +1,224 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kaveh_ExtraAttack",
+ "abilityName": "Avatar_Kaveh_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ExtraAttack_Flag",
+ "abilityName": "Avatar_Kaveh_ExtraAttack_Flag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_Chest_Handler",
+ "abilityName": "Avatar_Kaveh_Chest_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalArt",
+ "abilityName": "Avatar_Kaveh_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalArt_Strike",
+ "abilityName": "Avatar_Kaveh_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalArt_ElementalBall_Handler",
+ "abilityName": "Avatar_Kaveh_ElementalArt_ElementalBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalArt_ElementalBall",
+ "abilityName": "Avatar_Kaveh_ElementalArt_ElementalBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalArt_HealBuff",
+ "abilityName": "Avatar_Kaveh_ElementalArt_HealBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_OvergrowSeed_Trigger",
+ "abilityName": "Avatar_Kaveh_OvergrowSeed_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst",
+ "abilityName": "Avatar_Kaveh_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_Pre_Weather",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_Pre_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ExitCamera",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ExitCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_VFX",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_Handler",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_AtkSpeedBuff",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_AtkSpeedBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ReactionDamageUp_TeamBuff",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ReactionDamageUp_TeamBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ElementMastery_Handler",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ElementMastery_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ExtraStrike_Handler",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ExtraStrike_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAttack_Flag",
+ "abilityName": "Avatar_Kaveh_FallingAttack_Flag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAttackVFX_Flag",
+ "abilityName": "Avatar_Kaveh_FallingAttackVFX_Flag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_Handler5Avatar_Kaveh_ElementalBurst_ReactionDamageUp_TeamBuff",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_Handler5Avatar_Kaveh_ElementalBurst_ReactionDamageUp_TeamBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ExtraStrike_Attack",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ExtraStrike_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ExtraStrike_CD",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ExtraStrike_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ExtraStrike_CD2Avatar_Kaveh_ElementalBurst_ElementMastery_Handler",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ExtraStrike_CD2Avatar_Kaveh_ElementalBurst_ElementMastery_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ElementMastery_Buff",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ElementMastery_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst_ElementMastery_CD",
+ "abilityName": "Avatar_Kaveh_ElementalBurst_ElementMastery_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_Overgrow_HealHP",
+ "abilityName": "Avatar_Kaveh_Overgrow_HealHP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_Overgrow_HealHP_Handler",
+ "abilityName": "Avatar_Kaveh_Overgrow_HealHP_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_Overgrow_ReactionDamageUp",
+ "abilityName": "Avatar_Kaveh_Overgrow_ReactionDamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_Overgrow_ReactionDamageUp_Buff",
+ "abilityName": "Avatar_Kaveh_Overgrow_ReactionDamageUp_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAnthem",
+ "abilityName": "Avatar_Kaveh_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAttackVFX_Handler4Avatar_Kaveh_FallingAttackVFX_ElementalBurst_Handler",
+ "abilityName": "Avatar_Kaveh_FallingAttackVFX_Handler4Avatar_Kaveh_FallingAttackVFX_ElementalBurst_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAttackVFX_Handler",
+ "abilityName": "Avatar_Kaveh_FallingAttackVFX_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_FallingAttackVFX_ElementalBurst_Handler",
+ "abilityName": "Avatar_Kaveh_FallingAttackVFX_ElementalBurst_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Kaveh_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh",
+ "abilityName": "Avatar_Kaveh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_TeamConfig_01BS",
+ "abilityName": "Avatar_Kaveh_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_TeamConfig_01Loop",
+ "abilityName": "Avatar_Kaveh_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_TeamConfig_01AS",
+ "abilityName": "Avatar_Kaveh_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Kaveh_Spnotebook",
+ "abilityName": "AvatarItem_Kaveh_Spnotebook",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst1Kaveh_ElementalBurst_ElementMastery_Buff_StackNum",
+ "abilityName": "Avatar_Kaveh_ElementalBurst1Kaveh_ElementalBurst_ElementMastery_Buff_StackNum",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurst9Kaveh_ElementalBurst_ElementMastery_Buff_ElemMasteryDelta",
+ "abilityName": "Avatar_Kaveh_ElementalBurst9Kaveh_ElementalBurst_ElementMastery_Buff_ElemMasteryDelta",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kaveh_ElementalBurstEKaveh_ElementalBurst_ReactionDamageUp_TeamBuff_ElemReactOvergrowDelta",
+ "abilityName": "Avatar_Kaveh_ElementalBurstEKaveh_ElementalBurst_ReactionDamageUp_TeamBuff_ElemReactOvergrowDelta",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kazuha.json b/data/json/avatar/ConfigAvatar_Kazuha.json
new file mode 100644
index 0000000..837550c
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kazuha.json
@@ -0,0 +1,634 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kazuha_ExtraAttack",
+ "abilityName": "Avatar_Kazuha_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_Handler",
+ "abilityName": "Avatar_Kazuha_NormalAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05_Damage",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Hide_Fx",
+ "abilityName": "Avatar_Kazuha_Hide_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Hide",
+ "abilityName": "Avatar_Kazuha_Hide",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_MagicSheath",
+ "abilityName": "Avatar_Kazuha_NormalAttack_MagicSheath",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05_Handler",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05_Damage01",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05_Damage01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05_Damage02",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05_Damage02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_05_Damage03",
+ "abilityName": "Avatar_Kazuha_NormalAttack_05_Damage03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Check",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_ResetMixType",
+ "abilityName": "Avatar_Kazuha_ElementalArt_ResetMixType",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_HitCheck",
+ "abilityName": "Avatar_Kazuha_ElementalArt_HitCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_AddHitMark",
+ "abilityName": "Avatar_Kazuha_ElementalArt_AddHitMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_DropBall",
+ "abilityName": "Avatar_Kazuha_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_MonsterTail",
+ "abilityName": "Avatar_Kazuha_ElementalArt_MonsterTail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_AirCheck",
+ "abilityName": "Avatar_Kazuha_ElementalArt_AirCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Air_AddMark",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Air_AddMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Air_RemoveMark",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Air_RemoveMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_ClearVelocity",
+ "abilityName": "Avatar_Kazuha_ElementalArt_ClearVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_ChangeSkillButton",
+ "abilityName": "Avatar_Kazuha_ElementalArt_ChangeSkillButton",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Air_Handler",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Air_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_WindEffect_Delay",
+ "abilityName": "Avatar_Kazuha_ElementalArt_WindEffect_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_WindEffect",
+ "abilityName": "Avatar_Kazuha_ElementalArt_WindEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Charge",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Charge_WindZone",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Charge_WindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Charge_Remove",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Charge_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_EmptyJump",
+ "abilityName": "Avatar_Kazuha_ElementalArt_EmptyJump",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_Effect",
+ "abilityName": "Avatar_Kazuha_EmptyJump_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_EnterCD",
+ "abilityName": "Avatar_Kazuha_ElementalArt_EnterCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Click_Detect",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Click_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_Strike",
+ "abilityName": "Avatar_Kazuha_EmptyJump_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_MixDetect",
+ "abilityName": "Avatar_Kazuha_EmptyJump_MixDetect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_CreateWindZone",
+ "abilityName": "Avatar_Kazuha_EmptyJump_CreateWindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_DragCamera",
+ "abilityName": "Avatar_Kazuha_EmptyJump_DragCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_MixDetectJ",
+ "abilityName": "Avatar_Kazuha_EmptyJump_MixDetectJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_1_MixJ",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_1_MixJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Constellation_6",
+ "abilityName": "Avatar_Kazuha_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_WindHole",
+ "abilityName": "Avatar_Kazuha_EmptyJump_WindHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_WindZone_Monster_Small",
+ "abilityName": "Avatar_Kazuha_ElementalArt_WindZone_Monster_Small",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_WindZone_Monster_Big",
+ "abilityName": "Avatar_Kazuha_ElementalArt_WindZone_Monster_Big",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_WindZone_Other",
+ "abilityName": "Avatar_Kazuha_ElementalArt_WindZone_Other",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_FlyAway",
+ "abilityName": "Avatar_Kazuha_ElementalArt_FlyAway",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Hold_EnterCD",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Hold_EnterCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Hold_Detect",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Hold_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_Strike",
+ "abilityName": "Avatar_Kazuha_FlyAway_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_MixDetect",
+ "abilityName": "Avatar_Kazuha_FlyAway_MixDetect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_WindZone",
+ "abilityName": "Avatar_Kazuha_FlyAway_WindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_CameraBlur",
+ "abilityName": "Avatar_Kazuha_FlyAway_CameraBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_DragCamera",
+ "abilityName": "Avatar_Kazuha_FlyAway_DragCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FlyAway_MixDetectJ",
+ "abilityName": "Avatar_Kazuha_FlyAway_MixDetectJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_EmptyJump_Hold_WindHole",
+ "abilityName": "Avatar_Kazuha_EmptyJump_Hold_WindHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Monster_Small",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Monster_Small",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Monster_Big",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Monster_Big",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Other",
+ "abilityName": "Avatar_Kazuha_ElementalArt_Hold_WindZone_Other",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst",
+ "abilityName": "Avatar_Kazuha_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_CameraEffect",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_CameraEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_CameraBlur",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_CameraBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Strike_Damage",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Strike_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_CreateMist",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_CreateMist",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Reconnect",
+ "abilityName": "Avatar_Kazuha_Reconnect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_CreateMistJ",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_CreateMistJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Strike_Mix",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Strike_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist_Initialize",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist_FieldEffect",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist_FieldEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist_Dissipate",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist_Dissipate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Delay",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Effect",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Fire",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Water",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Water",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Electric",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Electric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Ice",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_MistStrike_Wind",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_MistStrike_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist_Mix",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_FallingAnthem",
+ "abilityName": "Avatar_Kazuha_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_FallingAttack_HideCollider",
+ "abilityName": "Avatar_Kazuha_ElementalArt_FallingAttack_HideCollider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_FallingAttack_LoopDamage",
+ "abilityName": "Avatar_Kazuha_ElementalArt_FallingAttack_LoopDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalArt_FallingAttack_DragCamera",
+ "abilityName": "Avatar_Kazuha_ElementalArt_FallingAttack_DragCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_1",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Kazuha_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_1_Effect",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_1_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_1_ExtraDamage",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_1_ExtraDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_1_Mix",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_1_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Handler",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Fire",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Firec",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Firec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Water",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Water",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Waterc",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Waterc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Electric",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Electric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Electricc",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Electricc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_PermanentSkill_2_Ice",
+ "abilityName": "Avatar_Kazuha_PermanentSkill_2_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Constellation_6_WindEnchant",
+ "abilityName": "Avatar_Kazuha_Constellation_6_WindEnchant",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Constellation_6_DamageUp",
+ "abilityName": "Avatar_Kazuha_Constellation_6_DamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_DashStamina_Reduction",
+ "abilityName": "Avatar_Kazuha_DashStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_RegionAbility_Dreamland_KazuhaMovie",
+ "abilityName": "Avatar_RegionAbility_Dreamland_KazuhaMovie",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha",
+ "abilityName": "Avatar_Kazuha",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Mist_Dissipate1Avatar_Kauzha_ElementalArt_FallingAttack_WindZone",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Mist_Dissipate1Avatar_Kauzha_ElementalArt_FallingAttack_WindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_Charge",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_Hold",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_Hold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_Hold_AS5Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_BS7Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Loop9Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_Hold_AS5Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_BS7Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Loop9Emo_Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_TeamConfig_01BS",
+ "abilityName": "Avatar_Kazuha_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_TeamConfig_01Loop",
+ "abilityName": "Avatar_Kazuha_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_TeamConfig_01AS",
+ "abilityName": "Avatar_Kazuha_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_Hold_AS",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_Hold_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_BS",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Loop",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike_AS",
+ "abilityName": "Avatar_Kazuha_Skill_ElementalArt_FallingAttack_Strike_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Spine",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_BS",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_ElementalBurst_Hit",
+ "abilityName": "Avatar_Kazuha_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Spine_Loop",
+ "abilityName": "Avatar_Kazuha_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kazuha_Spine",
+ "abilityName": "Avatar_Kazuha_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Keqing.json b/data/json/avatar/ConfigAvatar_Keqing.json
new file mode 100644
index 0000000..84df2d0
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Keqing.json
@@ -0,0 +1,314 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Keqing_ExtraAttack",
+ "abilityName": "Avatar_Keqing_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ExtraAttack_ExplodeGadget_Eff",
+ "abilityName": "Avatar_Keqing_ExtraAttack_ExplodeGadget_Eff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ExtraAttack_ExplodeGadget",
+ "abilityName": "Avatar_Keqing_ExtraAttack_ExplodeGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_NormalAttack_Handler",
+ "abilityName": "Avatar_Keqing_NormalAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_NormalAttack05_CreateBullet",
+ "abilityName": "Avatar_Keqing_NormalAttack05_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_NormalAttack05_Bullet",
+ "abilityName": "Avatar_Keqing_NormalAttack05_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Electrans_Click",
+ "abilityName": "Avatar_Keqing_Electrans_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Electrans_Charge",
+ "abilityName": "Avatar_Keqing_Electrans_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Charge_Aim",
+ "abilityName": "Avatar_Keqing_ElementalArt_Charge_Aim",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Electrans_SetGadget",
+ "abilityName": "Avatar_Keqing_Electrans_SetGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Electrans_Part2",
+ "abilityName": "Avatar_Keqing_Electrans_Part2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_HideSpark",
+ "abilityName": "Avatar_Keqing_ElementalArt_HideSpark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Break1_Buff",
+ "abilityName": "Avatar_Keqing_Break1_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Electrans_Strike",
+ "abilityName": "Avatar_Keqing_Electrans_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Strike_Hit",
+ "abilityName": "Avatar_Keqing_ElementalArt_Strike_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Bullet",
+ "abilityName": "Avatar_Keqing_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Hit",
+ "abilityName": "Avatar_Keqing_ElementalArt_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Trap",
+ "abilityName": "Avatar_Keqing_ElementalArt_Trap",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Trap_Die",
+ "abilityName": "Avatar_Keqing_ElementalArt_Trap_Die",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_TrapBurst",
+ "abilityName": "Avatar_Keqing_ElementalArt_TrapBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Camera",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_ScreenEffect_01",
+ "abilityName": "Avatar_Keqing_ElementalBurst_ScreenEffect_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_CameraEff",
+ "abilityName": "Avatar_Keqing_ElementalBurst_CameraEff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Field",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Field",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst",
+ "abilityName": "Avatar_Keqing_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack00",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack00",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack01",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack02",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack03",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack03_NoCamera",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack03_NoCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack_Hit",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_ScreenEffect_02",
+ "abilityName": "Avatar_Keqing_ElementalBurst_ScreenEffect_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Keqing_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_FallingAnthem",
+ "abilityName": "Avatar_Keqing_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing",
+ "abilityName": "Avatar_Keqing",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_TeamConfig_01BS",
+ "abilityName": "Avatar_Keqing_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_TeamConfig_01Loop",
+ "abilityName": "Avatar_Keqing_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_TeamConfig_01AS",
+ "abilityName": "Avatar_Keqing_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Spine",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Spine",
+ "abilityName": "Avatar_Keqing_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Hit",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_BS",
+ "abilityName": "Avatar_Keqing_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Hit_01",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Hit_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Hit_02",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Hit_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Spine_Loop",
+ "abilityName": "Avatar_Keqing_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_01",
+ "abilityName": "Avatar_Keqing_Attack_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_02",
+ "abilityName": "Avatar_Keqing_Attack_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_03",
+ "abilityName": "Avatar_Keqing_Attack_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack04_Dust",
+ "abilityName": "Avatar_Keqing_Attack04_Dust",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_04_01",
+ "abilityName": "Avatar_Keqing_Attack_04_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_04_02",
+ "abilityName": "Avatar_Keqing_Attack_04_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_HideSpark_04",
+ "abilityName": "Avatar_Keqing_Attack_HideSpark_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_HideSpark_05",
+ "abilityName": "Avatar_Keqing_Attack_HideSpark_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_05",
+ "abilityName": "Avatar_Keqing_Attack_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack05_Dust",
+ "abilityName": "Avatar_Keqing_Attack05_Dust",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ExtraAttack_SpeedLine",
+ "abilityName": "Avatar_Keqing_ExtraAttack_SpeedLine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_Attack_ExtraAttack_00",
+ "abilityName": "Avatar_Keqing_Attack_ExtraAttack_00",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Cast",
+ "abilityName": "Avatar_Keqing_ElementalArt_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Charge_Cast",
+ "abilityName": "Avatar_Keqing_ElementalArt_Charge_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Fly_Attack",
+ "abilityName": "Avatar_Keqing_ElementalArt_Fly_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalArt_Charge_Lock",
+ "abilityName": "Avatar_Keqing_ElementalArt_Charge_Lock",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Keqing_ElementalBurst_Attack032Eff_Avatar_Keqing_ElementalBurst_Attack03_NoCamera",
+ "abilityName": "Avatar_Keqing_ElementalBurst_Attack032Eff_Avatar_Keqing_ElementalBurst_Attack03_NoCamera",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kinich.json b/data/json/avatar/ConfigAvatar_Kinich.json
new file mode 100644
index 0000000..04429da
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kinich.json
@@ -0,0 +1,99 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kinich_ExtraAttack",
+ "abilityName": "Avatar_Kinich_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt",
+ "abilityName": "Avatar_Kinich_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_Start",
+ "abilityName": "Avatar_Kinich_ElementalArt_Start",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_Combat",
+ "abilityName": "Avatar_Kinich_ElementalArt_Combat",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_Combat_Over",
+ "abilityName": "Avatar_Kinich_ElementalArt_Combat_Over",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_HookMove",
+ "abilityName": "Avatar_Kinich_ElementalArt_HookMove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_HookMoveAir",
+ "abilityName": "Avatar_Kinich_ElementalArt_HookMoveAir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_Skill_Controller",
+ "abilityName": "Avatar_Kinich_ElementalArt_Skill_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_HookGrab",
+ "abilityName": "Avatar_Kinich_ElementalArt_HookGrab",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_HookFree",
+ "abilityName": "Avatar_Kinich_ElementalArt_HookFree",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalArt_HookGrabShoot",
+ "abilityName": "Avatar_Kinich_ElementalArt_HookGrabShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_HookMove_Attack",
+ "abilityName": "Avatar_Kinich_HookMove_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_ElementalBurst",
+ "abilityName": "Avatar_Kinich_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_FallingAnthem",
+ "abilityName": "Avatar_Kinich_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_Platform_ExtraAbility",
+ "abilityName": "Avatar_Kinich_Platform_ExtraAbility",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_NyxSwitch",
+ "abilityName": "Avatar_Kinich_NyxSwitch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_Emotion_Controller",
+ "abilityName": "Avatar_Kinich_Emotion_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_Elemball",
+ "abilityName": "Avatar_Kinich_Elemball",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kinich_NormalAttackDamage",
+ "abilityName": "Avatar_Kinich_NormalAttackDamage",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Klee.json b/data/json/avatar/ConfigAvatar_Klee.json
new file mode 100644
index 0000000..3e33f25
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Klee.json
@@ -0,0 +1,209 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Klee_ExtraAttack",
+ "abilityName": "Avatar_Klee_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ExtraAttack_CreateClover",
+ "abilityName": "Avatar_Klee_ExtraAttack_CreateClover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ExtraAttack_Clover",
+ "abilityName": "Avatar_Klee_ExtraAttack_Clover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ExtraAttack_Clover_Bullet",
+ "abilityName": "Avatar_Klee_ExtraAttack_Clover_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_NoarmalAttack_01_Damage",
+ "abilityName": "Avatar_Klee_NoarmalAttack_01_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_NoarmalAttack_02_Damage",
+ "abilityName": "Avatar_Klee_NoarmalAttack_02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_NoarmalAttack_03_Damage",
+ "abilityName": "Avatar_Klee_NoarmalAttack_03_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalArt_ClearTrigger",
+ "abilityName": "Avatar_Klee_ElementalArt_ClearTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Attack01",
+ "abilityName": "Avatar_Klee_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Attack02",
+ "abilityName": "Avatar_Klee_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Attack03",
+ "abilityName": "Avatar_Klee_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_NormalAttack",
+ "abilityName": "Avatar_Klee_NormalAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_JumpingBomb",
+ "abilityName": "Avatar_Klee_JumpingBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ThrowMine",
+ "abilityName": "Avatar_Klee_ThrowMine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Mine",
+ "abilityName": "Avatar_Klee_Mine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Clover_Clear",
+ "abilityName": "Avatar_Klee_Clover_Clear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_CameraRadialBlur",
+ "abilityName": "Avatar_Klee_CameraRadialBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Elemental_Burst",
+ "abilityName": "Avatar_Klee_Elemental_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Elemental_Burst_Trigger",
+ "abilityName": "Avatar_Klee_Elemental_Burst_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst_CreateFunnel",
+ "abilityName": "Avatar_Klee_ElementalBurst_CreateFunnel",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Elemental_Burst_Explode",
+ "abilityName": "Avatar_Klee_Elemental_Burst_Explode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Constellation_Explode",
+ "abilityName": "Avatar_Klee_Constellation_Explode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Constellation_6",
+ "abilityName": "Avatar_Klee_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_PermanentSkill_1",
+ "abilityName": "Avatar_Klee_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_PermanentSkill_Free_ExtraAttack_CD",
+ "abilityName": "Avatar_Klee_PermanentSkill_Free_ExtraAttack_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_PermanentSkill_2",
+ "abilityName": "Avatar_Klee_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_FallingAnthem",
+ "abilityName": "Avatar_Klee_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Radar_Collectables_Mengde",
+ "abilityName": "Avatar_Klee_Radar_Collectables_Mengde",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee",
+ "abilityName": "Avatar_Klee",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Skill_ElementalArt",
+ "abilityName": "Avatar_Klee_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Klee_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_TeamConfig_01BS",
+ "abilityName": "Avatar_Klee_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_TeamConfig_01Loop",
+ "abilityName": "Avatar_Klee_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_TeamConfig_01AS",
+ "abilityName": "Avatar_Klee_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst_Spine",
+ "abilityName": "Avatar_Klee_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst",
+ "abilityName": "Avatar_Klee_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementBurst",
+ "abilityName": "Avatar_Klee_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementBurst_02",
+ "abilityName": "Avatar_Klee_ElementBurst_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst_BS",
+ "abilityName": "Avatar_Klee_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst_Hit",
+ "abilityName": "Avatar_Klee_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Klee_ElementalBurst_Buff",
+ "abilityName": "Avatar_Klee_ElementalBurst_Buff",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Kokomi.json b/data/json/avatar/ConfigAvatar_Kokomi.json
new file mode 100644
index 0000000..7f7dece
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Kokomi.json
@@ -0,0 +1,374 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack",
+ "abilityName": "Avatar_Kokomi_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack_Charge",
+ "abilityName": "Avatar_Kokomi_ExtraAttack_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack_BurstMark",
+ "abilityName": "Avatar_Kokomi_ExtraAttack_BurstMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack_Charge_HasTarget",
+ "abilityName": "Avatar_Kokomi_ExtraAttack_Charge_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack_Charge_NoTarget",
+ "abilityName": "Avatar_Kokomi_ExtraAttack_Charge_NoTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraAttack_Initiate",
+ "abilityName": "Avatar_Kokomi_ExtraAttack_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Attack01",
+ "abilityName": "Avatar_Kokomi_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Attack02",
+ "abilityName": "Avatar_Kokomi_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Attack03",
+ "abilityName": "Avatar_Kokomi_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_BounceBullet",
+ "abilityName": "Avatar_Kokomi_NormalAttack_BounceBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_1_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_1_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_AngularVelocity_Timer",
+ "abilityName": "Avatar_Kokomi_NormalAttack_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_AngularVelocity",
+ "abilityName": "Avatar_Kokomi_NormalAttack_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_2_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_2_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_3_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_3_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_1_Burst_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_1_Burst_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Heal_Handler",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Heal_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Heal",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_AtkSpeeddBuff",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_AtkSpeeddBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_ReviveEnergy",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_ReviveEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_2_Burst_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_2_Burst_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_3_Burst_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_3_Burst_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalArt",
+ "abilityName": "Avatar_Kokomi_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalArt_KillGadget",
+ "abilityName": "Avatar_Kokomi_ElementalArt_KillGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalArt_WaterBuff",
+ "abilityName": "Avatar_Kokomi_ElementalArt_WaterBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalArt_ElemBall",
+ "abilityName": "Avatar_Kokomi_ElementalArt_ElemBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalArt_Heal",
+ "abilityName": "Avatar_Kokomi_ElementalArt_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Hagoromo",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Hagoromo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Reset",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Reset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Move",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Move",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Attack01",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Attack02",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Attack03",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_ExtraAttack",
+ "abilityName": "Avatar_Kokomi_Hagoromo_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_ElementalArt",
+ "abilityName": "Avatar_Kokomi_Hagoromo_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Hide",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Hide",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Ripple_Hide",
+ "abilityName": "Avatar_Kokomi_Ripple_Hide",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_ChangeFollowDampTime",
+ "abilityName": "Avatar_Kokomi_Hagoromo_ChangeFollowDampTime",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo",
+ "abilityName": "Avatar_Kokomi_Hagoromo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_FootRipple_Left",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_FootRipple_Left",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_FootRipple_Right",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_FootRipple_Right",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Initiate",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_States",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_States",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Camera",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Pre_Weather",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Pre_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Emotion",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Emotion",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Weathert",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Weathert",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Weather",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_DamageBuff_HealAdd",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_DamageBuff_HealAdd",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_AtkSpeedBuff",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_AtkSpeedBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo_Remover",
+ "abilityName": "Avatar_Kokomi_Hagoromo_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_MoveOnWater_Remover",
+ "abilityName": "Avatar_Kokomi_MoveOnWater_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Hagoromo6UNIQUE_Avatar_Kokomi_ElementalBurst_DamageBuff_HealAdd",
+ "abilityName": "Avatar_Kokomi_Hagoromo6UNIQUE_Avatar_Kokomi_ElementalBurst_DamageBuff_HealAdd",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_LowHP",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_LowHP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Heal_LowHPTarget",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Heal_LowHPTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal4Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal4Avatar_Kokomi_ElementalBurst_Heal_Predicate_Overheal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ExtraHeal_OverHeal",
+ "abilityName": "Avatar_Kokomi_ExtraHeal_OverHeal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_OverHeal",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_OverHeal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_OverHeal_Buff1UNIQUE_Avatar_Kokomi_ElementalBurst_OverHeal_Buff",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_OverHeal_Buff1UNIQUE_Avatar_Kokomi_ElementalBurst_OverHeal_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_FallingAnthem",
+ "abilityName": "Avatar_Kokomi_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_SwimStamina_Reduction",
+ "abilityName": "Avatar_Kokomi_SwimStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_CritRateDown",
+ "abilityName": "Avatar_Kokomi_CritRateDown",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_CritRate_Delta",
+ "abilityName": "Avatar_Kokomi_CritRate_Delta",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_HealAdd_Delta",
+ "abilityName": "Avatar_Kokomi_HealAdd_Delta",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi",
+ "abilityName": "Avatar_Kokomi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_NormalAttack_Bullet_3_Damage0Avatar_Kokomi_NormalAttack_Bullet_1_Burst_Damage0Avatar_Kokomi_NormalAttack_Bullet_2_Burst_Damage0Avatar_Kokomi_NormalAttack_Bullet_3_Burst_Damage",
+ "abilityName": "Avatar_Kokomi_NormalAttack_Bullet_3_Damage0Avatar_Kokomi_NormalAttack_Bullet_1_Burst_Damage0Avatar_Kokomi_NormalAttack_Bullet_2_Burst_Damage0Avatar_Kokomi_NormalAttack_Bullet_3_Burst_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_TeamConfig_01BS",
+ "abilityName": "Avatar_Kokomi_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_TeamConfig_01Loop",
+ "abilityName": "Avatar_Kokomi_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_TeamConfig_01AS",
+ "abilityName": "Avatar_Kokomi_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Spine",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_BS",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_ElementalBurst_Hit",
+ "abilityName": "Avatar_Kokomi_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Kokomi_Spine_Loop",
+ "abilityName": "Avatar_Kokomi_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Layla.json b/data/json/avatar/ConfigAvatar_Layla.json
new file mode 100644
index 0000000..49494a5
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Layla.json
@@ -0,0 +1,109 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Layla_ExtraAttack",
+ "abilityName": "Avatar_Layla_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ElementalArt",
+ "abilityName": "Avatar_Layla_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_HasTeamShield",
+ "abilityName": "Avatar_Layla_HasTeamShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ElementalArt_Handler",
+ "abilityName": "Avatar_Layla_ElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_IceShield_GV_Count",
+ "abilityName": "Avatar_Layla_IceShield_GV_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_IceShield_Can_Count",
+ "abilityName": "Avatar_Layla_IceShield_Can_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ToughShield_Level",
+ "abilityName": "Avatar_Layla_ToughShield_Level",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ElementalArt_Gadget",
+ "abilityName": "Avatar_Layla_ElementalArt_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_IceShield_GV_Gadget",
+ "abilityName": "Avatar_Layla_IceShield_GV_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_Shoot_TeamBuff",
+ "abilityName": "Avatar_Layla_Shoot_TeamBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ArtAndBurst_ReviveEnergy",
+ "abilityName": "Avatar_Layla_ArtAndBurst_ReviveEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ElementalBurst",
+ "abilityName": "Avatar_Layla_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ElementalBurst_Gadget",
+ "abilityName": "Avatar_Layla_ElementalBurst_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Layla_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ArtAndBurst_DamageExtra",
+ "abilityName": "Avatar_Layla_ArtAndBurst_DamageExtra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_ArtAndBurst_DamageUp",
+ "abilityName": "Avatar_Layla_ArtAndBurst_DamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_FallingAnthem",
+ "abilityName": "Avatar_Layla_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla",
+ "abilityName": "Avatar_Layla",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_TeamConfig_01BS",
+ "abilityName": "Avatar_Layla_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_TeamConfig_01Loop",
+ "abilityName": "Avatar_Layla_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Layla_TeamConfig_01AS",
+ "abilityName": "Avatar_Layla_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Linette.json b/data/json/avatar/ConfigAvatar_Linette.json
new file mode 100644
index 0000000..451af12
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Linette.json
@@ -0,0 +1,169 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Linette_ExtraAttack",
+ "abilityName": "Avatar_Linette_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ArkheGrade",
+ "abilityName": "Avatar_Linette_ArkheGrade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ArkheGrade_CD",
+ "abilityName": "Avatar_Linette_ArkheGrade_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt",
+ "abilityName": "Avatar_Linette_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Linette_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_Executed",
+ "abilityName": "Avatar_Linette_ElementalArt_Executed",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_Short_Strike",
+ "abilityName": "Avatar_Linette_ElementalArt_Short_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_Executed_Strike",
+ "abilityName": "Avatar_Linette_ElementalArt_Executed_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_RushMove",
+ "abilityName": "Avatar_Linette_ElementalArt_RushMove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_Constellation_6",
+ "abilityName": "Avatar_Linette_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_Constellation_6_WindEnchant",
+ "abilityName": "Avatar_Linette_Constellation_6_WindEnchant",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_Constellation_6_DamageUp",
+ "abilityName": "Avatar_Linette_Constellation_6_DamageUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalArt_Executed_Bullet",
+ "abilityName": "Avatar_Linette_ElementalArt_Executed_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst",
+ "abilityName": "Avatar_Linette_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_PermanentSkill_1",
+ "abilityName": "Avatar_Linette_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_Strike",
+ "abilityName": "Avatar_Linette_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Ice",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Fire",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Water",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Water",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Electric",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Electric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_HitBox",
+ "abilityName": "Avatar_Linette_ElementalBurst_HitBox",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_Constellation_WindZone",
+ "abilityName": "Avatar_Linette_Constellation_WindZone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_PermanentSkill_1_AttackUp",
+ "abilityName": "Avatar_Linette_PermanentSkill_1_AttackUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Linette_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_FallingAnthem",
+ "abilityName": "Avatar_Linette_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Wind",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox_Bullet_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_PermanentSkill_3",
+ "abilityName": "Avatar_Linette_PermanentSkill_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette",
+ "abilityName": "Avatar_Linette",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_ElementalBurst_MagicBox1Avatar_Linette_ElementalBurst_MagicBox_Bullet_Ice2Avatar_Linette_ElementalBurst_MagicBox_Bullet_Fire3Avatar_Linette_ElementalBurst_MagicBox_Bullet_Water6Avatar_Linette_ElementalBurst_MagicBox_Bullet_Electric",
+ "abilityName": "Avatar_Linette_ElementalBurst_MagicBox1Avatar_Linette_ElementalBurst_MagicBox_Bullet_Ice2Avatar_Linette_ElementalBurst_MagicBox_Bullet_Fire3Avatar_Linette_ElementalBurst_MagicBox_Bullet_Water6Avatar_Linette_ElementalBurst_MagicBox_Bullet_Electric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_TeamConfig_01BS",
+ "abilityName": "Avatar_Linette_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_TeamConfig_01Loop",
+ "abilityName": "Avatar_Linette_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Linette_TeamConfig_01AS",
+ "abilityName": "Avatar_Linette_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Liney.json b/data/json/avatar/ConfigAvatar_Liney.json
new file mode 100644
index 0000000..76a44dd
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Liney.json
@@ -0,0 +1,129 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Liney_PressShoot",
+ "abilityName": "Avatar_Liney_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_AimPressShoot",
+ "abilityName": "Avatar_Liney_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_Arrow_FX",
+ "abilityName": "Avatar_Liney_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Liney_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_01",
+ "abilityName": "Avatar_Liney_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_02",
+ "abilityName": "Avatar_Liney_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_03_01",
+ "abilityName": "Avatar_Liney_ShootArrow_03_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_03_02",
+ "abilityName": "Avatar_Liney_ShootArrow_03_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_04",
+ "abilityName": "Avatar_Liney_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_Aiming",
+ "abilityName": "Avatar_Liney_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ShootArrow_Enchanted_WithoutFire",
+ "abilityName": "Avatar_Liney_ShootArrow_Enchanted_WithoutFire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ExtraAttack",
+ "abilityName": "Avatar_Liney_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ElementalArt",
+ "abilityName": "Avatar_Liney_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ElementalBurst",
+ "abilityName": "Avatar_Liney_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_ExitSpecialMove",
+ "abilityName": "Avatar_Liney_ExitSpecialMove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_FallingAnthem",
+ "abilityName": "Avatar_Liney_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_PermanentSkill_3",
+ "abilityName": "Avatar_Liney_PermanentSkill_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_PermanentSkill_2",
+ "abilityName": "Avatar_Liney_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_CriticalHurt_GrandHandler",
+ "abilityName": "Avatar_Liney_CriticalHurt_GrandHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_CriticalHurt_Handler",
+ "abilityName": "Avatar_Liney_CriticalHurt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_CriticalHurt_Buff",
+ "abilityName": "Avatar_Liney_CriticalHurt_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney",
+ "abilityName": "Avatar_Liney",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_TeamConfig_01BS",
+ "abilityName": "Avatar_Liney_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_TeamConfig_01Loop",
+ "abilityName": "Avatar_Liney_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liney_TeamConfig_01AS",
+ "abilityName": "Avatar_Liney_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Lisa.json b/data/json/avatar/ConfigAvatar_Lisa.json
new file mode 100644
index 0000000..622600b
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Lisa.json
@@ -0,0 +1,189 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Lisa_ExtraAttack",
+ "abilityName": "Avatar_Lisa_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_ExtraAttack_Damage",
+ "abilityName": "Avatar_Lisa_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_NormalAttack04_Blink",
+ "abilityName": "Avatar_Lisa_NormalAttack04_Blink",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_TriggerAbility2",
+ "abilityName": "Avatar_Lisa_TriggerAbility2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Weather_Trigger",
+ "abilityName": "Avatar_Lisa_Weather_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Weather_Remove",
+ "abilityName": "Avatar_Lisa_Weather_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Attack01",
+ "abilityName": "Avatar_Lisa_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Attack02",
+ "abilityName": "Avatar_Lisa_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Attack03",
+ "abilityName": "Avatar_Lisa_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Attack04",
+ "abilityName": "Avatar_Lisa_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_NormalAttack_Burst",
+ "abilityName": "Avatar_Lisa_NormalAttack_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_NormalAttack_Hit_Fx",
+ "abilityName": "Avatar_Lisa_NormalAttack_Hit_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_FlickerWave_Hit_Fx",
+ "abilityName": "Avatar_Lisa_FlickerWave_Hit_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_FlickerWave",
+ "abilityName": "Avatar_Lisa_FlickerWave",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_FlickerWaveDamage",
+ "abilityName": "Avatar_Lisa_FlickerWaveDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_StaticElecFieldh",
+ "abilityName": "Avatar_Lisa_StaticElecFieldh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_StaticElecField",
+ "abilityName": "Avatar_Lisa_StaticElecField",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Constellation_6",
+ "abilityName": "Avatar_Lisa_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_ThunderFall",
+ "abilityName": "Avatar_Lisa_ThunderFall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_PierceLightning",
+ "abilityName": "Avatar_Lisa_PierceLightning",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_PierceLightning_Ball",
+ "abilityName": "Avatar_Lisa_PierceLightning_Ball",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_PierceLightning_Ball_Attack",
+ "abilityName": "Avatar_Lisa_PierceLightning_Ball_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_PierceLightning_Ball_FX",
+ "abilityName": "Avatar_Lisa_PierceLightning_Ball_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Captain",
+ "abilityName": "Avatar_Lisa_Captain",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_FallingAnthem",
+ "abilityName": "Avatar_Lisa_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa",
+ "abilityName": "Avatar_Lisa",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_PierceLightning_AS",
+ "abilityName": "Avatar_Lisa_PierceLightning_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_TeamConfig_01BS",
+ "abilityName": "Avatar_Lisa_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_TeamConfig_01Loop",
+ "abilityName": "Avatar_Lisa_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_TeamConfig_01AS",
+ "abilityName": "Avatar_Lisa_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_ElementalBurst_Spine",
+ "abilityName": "Avatar_Lisa_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_ElementalBurst_Hit",
+ "abilityName": "Avatar_Lisa_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_ElementalBurst_BS",
+ "abilityName": "Avatar_Lisa_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_Spine_Loop",
+ "abilityName": "Avatar_Lisa_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_VO_Emotion_Lisa_Strange_01",
+ "abilityName": "Avatar_Lisa_VO_Emotion_Lisa_Strange_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_VO_Emotion_Lisa_Wu_03",
+ "abilityName": "Avatar_Lisa_VO_Emotion_Lisa_Wu_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Lisa_VO_Emotion_Lisa_Deny_01",
+ "abilityName": "Avatar_Lisa_VO_Emotion_Lisa_Deny_01",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Liuyun.json b/data/json/avatar/ConfigAvatar_Liuyun.json
new file mode 100644
index 0000000..aeeff60
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Liuyun.json
@@ -0,0 +1,129 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Liuyun_ExtraAttack",
+ "abilityName": "Avatar_Liuyun_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Liuyun_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Attack01",
+ "abilityName": "Avatar_Liuyun_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_NormalAttack_Bullet_01",
+ "abilityName": "Avatar_Liuyun_NormalAttack_Bullet_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Attack02",
+ "abilityName": "Avatar_Liuyun_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_NormalAttack_Bullet_02",
+ "abilityName": "Avatar_Liuyun_NormalAttack_Bullet_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Attack03",
+ "abilityName": "Avatar_Liuyun_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_NormalAttack_Bullet_03",
+ "abilityName": "Avatar_Liuyun_NormalAttack_Bullet_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Attack04",
+ "abilityName": "Avatar_Liuyun_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_NormalAttack_Bullet_04",
+ "abilityName": "Avatar_Liuyun_NormalAttack_Bullet_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementalArt",
+ "abilityName": "Avatar_Liuyun_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementalArt_CameraControl",
+ "abilityName": "Avatar_Liuyun_ElementalArt_CameraControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Liuyun_ElementalArt_Move_Collider",
+ "abilityName": "Liuyun_ElementalArt_Move_Collider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementalArt_ExtraFallingAttack",
+ "abilityName": "Avatar_Liuyun_ElementalArt_ExtraFallingAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Liuyun_ElementalArt_Crane_Collider",
+ "abilityName": "Liuyun_ElementalArt_Crane_Collider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementBurst",
+ "abilityName": "Avatar_Liuyun_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementBurst_Drone",
+ "abilityName": "Avatar_Liuyun_ElementBurst_Drone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_ElementBurst_HealHandler",
+ "abilityName": "Avatar_Liuyun_ElementBurst_HealHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_FallingAnthem",
+ "abilityName": "Avatar_Liuyun_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_PermanentSkill_1",
+ "abilityName": "Avatar_Liuyun_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Liuyun_ElementalArt_WindHole",
+ "abilityName": "Liuyun_ElementalArt_WindHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Constellation_2",
+ "abilityName": "Avatar_Liuyun_Constellation_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Constellation_4",
+ "abilityName": "Avatar_Liuyun_Constellation_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_Constellation_6",
+ "abilityName": "Avatar_Liuyun_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Liuyun_PermanentSkill_3",
+ "abilityName": "Avatar_Liuyun_PermanentSkill_3",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Mika.json b/data/json/avatar/ConfigAvatar_Mika.json
new file mode 100644
index 0000000..7c2b399
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Mika.json
@@ -0,0 +1,254 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Mika_ExtraAttack",
+ "abilityName": "Avatar_Mika_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Mika_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Mika_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt",
+ "abilityName": "Avatar_Mika_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_Buff_Controller",
+ "abilityName": "Avatar_Mika_ElementalArt_Buff_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_Buff_Team_Ratio",
+ "abilityName": "Avatar_Mika_ElementalArt_Buff_Team_Ratio",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_Controller",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_Buff_Mark",
+ "abilityName": "Avatar_Mika_ElementalArt_Buff_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_1",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_2",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_3",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_4",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_5",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_5",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_P2_Mark",
+ "abilityName": "Avatar_Mika_P2_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Buff_Eff_Trigger_Mode",
+ "abilityName": "Avatar_Mika_Buff_Eff_Trigger_Mode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Sub_Buff_GV_AddOne",
+ "abilityName": "Avatar_Mika_Sub_Buff_GV_AddOne",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_1_LocalAvatar",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_1_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_2_LocalAvatar",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_2_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_3_LocalAvatar",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_3_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_4_LocalAvatar",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_4_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_Speed_Up_Sub_5_LocalAvatar",
+ "abilityName": "Avatar_Mika_Attack_Speed_Up_Sub_5_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_1_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_1_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_2_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_2_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_3_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_3_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_4_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_4_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C6_Sub_5_LocalAvatar",
+ "abilityName": "Avatar_Mika_C6_Sub_5_LocalAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Sub_Buff_Trigger_Eff_Mode_1",
+ "abilityName": "Avatar_Mika_Sub_Buff_Trigger_Eff_Mode_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Buff_Eff_Trigger_Mode_In_1",
+ "abilityName": "Avatar_Mika_Buff_Eff_Trigger_Mode_In_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Buff_Eff_Trigger_Mode_In_2",
+ "abilityName": "Avatar_Mika_Buff_Eff_Trigger_Mode_In_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Sub_Buff_Trigger_Eff",
+ "abilityName": "Avatar_Mika_Sub_Buff_Trigger_Eff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Sub_Buff_Trigger_Eff_Mode_2",
+ "abilityName": "Avatar_Mika_Sub_Buff_Trigger_Eff_Mode_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_NoChargeShoot",
+ "abilityName": "Avatar_Mika_ElementalArt_NoChargeShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_Buff_Controller_",
+ "abilityName": "Avatar_Mika_ElementalArt_Buff_Controller_",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_Sub_Bullet_Launch",
+ "abilityName": "Avatar_Mika_ElementalArt_Sub_Bullet_Launch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementalArt_ChargeShoot",
+ "abilityName": "Avatar_Mika_ElementalArt_ChargeShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Aim_Mixin",
+ "abilityName": "Avatar_Mika_Aim_Mixin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_RayCast_CloseFx",
+ "abilityName": "Avatar_Mika_RayCast_CloseFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_EArt_Has_Target_Mark",
+ "abilityName": "Avatar_Mika_EArt_Has_Target_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_ElementBurst",
+ "abilityName": "Avatar_Mika_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_C4_Stack",
+ "abilityName": "Avatar_Mika_C4_Stack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Burst_Energy_Revive",
+ "abilityName": "Avatar_Mika_Burst_Energy_Revive",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_FallingAnthem",
+ "abilityName": "Avatar_Mika_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Attack_DamageHandler",
+ "abilityName": "Avatar_Mika_Attack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_Radar_Collectables_Mengde",
+ "abilityName": "Avatar_Mika_Radar_Collectables_Mengde",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika",
+ "abilityName": "Avatar_Mika",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_TeamConfig_01BS",
+ "abilityName": "Avatar_Mika_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_TeamConfig_01Loop",
+ "abilityName": "Avatar_Mika_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mika_TeamConfig_01AS",
+ "abilityName": "Avatar_Mika_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Momoka.json b/data/json/avatar/ConfigAvatar_Momoka.json
new file mode 100644
index 0000000..0d80fc3
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Momoka.json
@@ -0,0 +1,134 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Momoka_ExtraAttack",
+ "abilityName": "Avatar_Momoka_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_Check",
+ "abilityName": "Avatar_Momoka_ElementalArt_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_Click",
+ "abilityName": "Avatar_Momoka_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Momoka_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_AddShieldMode",
+ "abilityName": "Avatar_Momoka_AddShieldMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_Hold",
+ "abilityName": "Avatar_Momoka_ElementalArt_Hold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_Inactive_Detect",
+ "abilityName": "Avatar_Momoka_ElementalArt_Inactive_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_onReconnect",
+ "abilityName": "Avatar_Momoka_ElementalArt_onReconnect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_HasTeamShield",
+ "abilityName": "Avatar_Momoka_HasTeamShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_Constellation_AddAttack",
+ "abilityName": "Avatar_Momoka_Constellation_AddAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalArt_Charge_Strike",
+ "abilityName": "Avatar_Momoka_ElementalArt_Charge_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalBurst",
+ "abilityName": "Avatar_Momoka_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_ElementalBurst_ExpressDamage",
+ "abilityName": "Avatar_Momoka_ElementalBurst_ExpressDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Momoka_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_FallingAnthem",
+ "abilityName": "Avatar_Momoka_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_PermanentSkill_2",
+ "abilityName": "Avatar_Momoka_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_PermanentSkill_2_Handler",
+ "abilityName": "Avatar_Momoka_PermanentSkill_2_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_Constellation_6",
+ "abilityName": "Avatar_Momoka_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_Constellation_6_ElemDamageUp_Effect",
+ "abilityName": "Avatar_Momoka_Constellation_6_ElemDamageUp_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_Constellation_AddAttack_CDHandler",
+ "abilityName": "Avatar_Momoka_Constellation_AddAttack_CDHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_Constellation_AddAttack_Effect",
+ "abilityName": "Avatar_Momoka_Constellation_AddAttack_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_PermanentSkill_3",
+ "abilityName": "Avatar_Momoka_PermanentSkill_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka",
+ "abilityName": "Avatar_Momoka",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_TeamConfig_01BS",
+ "abilityName": "Avatar_Momoka_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_TeamConfig_01Loop",
+ "abilityName": "Avatar_Momoka_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Momoka_TeamConfig_01AS",
+ "abilityName": "Avatar_Momoka_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Mona.json b/data/json/avatar/ConfigAvatar_Mona.json
new file mode 100644
index 0000000..bc1c3ec
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Mona.json
@@ -0,0 +1,169 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Mona_Liquid_TriggerAbility",
+ "abilityName": "Avatar_Mona_Liquid_TriggerAbility",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_LiquidStrike",
+ "abilityName": "Avatar_Mona_LiquidStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_EndLiquidStrike",
+ "abilityName": "Avatar_Mona_EndLiquidStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ExtraAttack",
+ "abilityName": "Avatar_Mona_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ExtraAttack_FX",
+ "abilityName": "Avatar_Mona_ExtraAttack_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ExtraAttack_Damage",
+ "abilityName": "Avatar_Mona_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_01",
+ "abilityName": "Avatar_Mona_NormalAttack_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_02",
+ "abilityName": "Avatar_Mona_NormalAttack_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_03_BS",
+ "abilityName": "Avatar_Mona_NormalAttack_03_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_03_Blink",
+ "abilityName": "Avatar_Mona_NormalAttack_03_Blink",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_03",
+ "abilityName": "Avatar_Mona_NormalAttack_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_04",
+ "abilityName": "Avatar_Mona_NormalAttack_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_NormalAttack_04_Hit",
+ "abilityName": "Avatar_Mona_NormalAttack_04_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Phantom_BS",
+ "abilityName": "Avatar_Mona_Phantom_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Phantom_Blink_BS",
+ "abilityName": "Avatar_Mona_Phantom_Blink_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Phantom",
+ "abilityName": "Avatar_Mona_Phantom",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Phantom_Blink",
+ "abilityName": "Avatar_Mona_Phantom_Blink",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Phantom_Blink_SetVisible",
+ "abilityName": "Avatar_Mona_Phantom_Blink_SetVisible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_MonaGadgetSkill_Phantom",
+ "abilityName": "Avatar_MonaGadgetSkill_Phantom",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_MonaGadgetSkill_PhantomLastAttack",
+ "abilityName": "Avatar_MonaGadgetSkill_PhantomLastAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_StarChart_Camera",
+ "abilityName": "Avatar_Mona_StarChart_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_StarChart",
+ "abilityName": "Avatar_Mona_StarChart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_FallingAnthem",
+ "abilityName": "Avatar_Mona_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona",
+ "abilityName": "Avatar_Mona",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_TeamConfig_01BS",
+ "abilityName": "Avatar_Mona_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_TeamConfig_01Loop",
+ "abilityName": "Avatar_Mona_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_TeamConfig_01AS",
+ "abilityName": "Avatar_Mona_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Mona_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ElementalBurst_Spine",
+ "abilityName": "Avatar_Mona_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ElementalBurst_Hit",
+ "abilityName": "Avatar_Mona_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_ElementalBurst_BS",
+ "abilityName": "Avatar_Mona_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_Spine_Loop",
+ "abilityName": "Avatar_Mona_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Mona_StarChart1AS_Mona_StarChart_RemovedDamage_HurtUp_DamageRate",
+ "abilityName": "Avatar_Mona_StarChart1AS_Mona_StarChart_RemovedDamage_HurtUp_DamageRate",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Mualani.json b/data/json/avatar/ConfigAvatar_Mualani.json
new file mode 100644
index 0000000..c2e0708
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Mualani.json
@@ -0,0 +1,94 @@
+{
+ "abilities": [
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ExtraAttack_Launch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Gadgets_Misc_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_NyxSwitch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_Launch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_Combat",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_Surfing",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_Surfing_Dash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_Exit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalArt_ArcLight",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Surfing_Attack_SelectTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Surfing_AddSurfingCount",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "",
+ "abilityName": "Avatar_Mualani_Surfing_DropFugu",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Nahida.json b/data/json/avatar/ConfigAvatar_Nahida.json
new file mode 100644
index 0000000..152598a
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Nahida.json
@@ -0,0 +1,454 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack",
+ "abilityName": "Avatar_Nahida_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_BS_Check",
+ "abilityName": "Avatar_Nahida_ExtraAttack_BS_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Damage",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Hand_FX",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Hand_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Block_FXy",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Block_FXy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Initialize",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Block_FX",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Block_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Gadget",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ExtraAttack_Delay_Damage",
+ "abilityName": "Avatar_Nahida_ExtraAttack_Delay_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Attack01",
+ "abilityName": "Avatar_Nahida_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Block_Die_01",
+ "abilityName": "Avatar_Nahida_Block_Die_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Attack02",
+ "abilityName": "Avatar_Nahida_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Block_Die_02D",
+ "abilityName": "Avatar_Nahida_Block_Die_02D",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Block_Die_02",
+ "abilityName": "Avatar_Nahida_Block_Die_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Attack03",
+ "abilityName": "Avatar_Nahida_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Block_Die_03",
+ "abilityName": "Avatar_Nahida_Block_Die_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Attack04",
+ "abilityName": "Avatar_Nahida_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt",
+ "abilityName": "Avatar_Nahida_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_HairEmission",
+ "abilityName": "Avatar_Nahida_ElementalArt_HairEmission",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_HairEmission_Remover",
+ "abilityName": "Avatar_Nahida_ElementalArt_HairEmission_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_Tag_Handler",
+ "abilityName": "Avatar_Nahida_ElementalArt_Tag_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayTag_OnMonster",
+ "abilityName": "Avatar_Nahida_RayTag_OnMonster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_Tag_ClearTimer",
+ "abilityName": "Avatar_Nahida_ElementalArt_Tag_ClearTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_ChainCD_Handler",
+ "abilityName": "Avatar_Nahida_ElementalArt_ChainCD_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Nahida_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_DropBall",
+ "abilityName": "Avatar_Nahida_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_Click",
+ "abilityName": "Avatar_Nahida_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_Click_Strike",
+ "abilityName": "Avatar_Nahida_ElementalArt_Click_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_Click_Effect",
+ "abilityName": "Avatar_Nahida_ElementalArt_Click_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_RayCast",
+ "abilityName": "Avatar_Nahida_ElementalArt_RayCast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Trigger",
+ "abilityName": "Avatar_Nahida_RayCast_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_CloseFx",
+ "abilityName": "Avatar_Nahida_RayCast_CloseFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Handler",
+ "abilityName": "Avatar_Nahida_RayCast_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Camera_Fx",
+ "abilityName": "Avatar_Nahida_RayCast_Camera_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_HitBoxOffset",
+ "abilityName": "Avatar_Nahida_RayCast_HitBoxOffset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Bomb_OnMonster_Fx",
+ "abilityName": "Avatar_Nahida_RayCast_Bomb_OnMonster_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Bomb_OnMonster_Damage",
+ "abilityName": "Avatar_Nahida_RayCast_Bomb_OnMonster_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalArt_ScreenEffect",
+ "abilityName": "Avatar_Nahida_ElementalArt_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Reconnect_Handler",
+ "abilityName": "Avatar_Nahida_Reconnect_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Camera_Fx_OnTeam",
+ "abilityName": "Avatar_Nahida_RayCast_Camera_Fx_OnTeam",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst",
+ "abilityName": "Avatar_Nahida_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Nahida_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Camera_Effect",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Camera_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Camera_PushTarget333",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Camera_PushTarget333",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Nahida_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_CreateHollow",
+ "abilityName": "Avatar_Nahida_ElementalBurst_CreateHollow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Camera_DungeonEffect",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Camera_DungeonEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_CheckAvatarElement",
+ "abilityName": "Avatar_Nahida_ElementalBurst_CheckAvatarElement",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_GVinitialize",
+ "abilityName": "Avatar_Nahida_ElementalBurst_GVinitialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_Gadget",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_TeamFormula",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_TeamFormula",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_Fx",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_LifeTimer",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_LifeTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_CheckInHollowh",
+ "abilityName": "Avatar_Nahida_ElementalBurst_CheckInHollowh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_CheckInHollow",
+ "abilityName": "Avatar_Nahida_ElementalBurst_CheckInHollow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_InDistance_Keeper5UNIQUE_Nahida_ElementalBurst_Hollow_InDistance_OnTeam",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_InDistance_Keeper5UNIQUE_Nahida_ElementalBurst_Hollow_InDistance_OnTeam",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hollow_InDistance_Keeper",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hollow_InDistance_Keeper",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_HairEmission",
+ "abilityName": "Avatar_Nahida_ElementalBurst_HairEmission",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_FallingAnthem",
+ "abilityName": "Avatar_Nahida_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_PermanentSkill_1",
+ "abilityName": "Avatar_Nahida_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_PermanentSkill_2",
+ "abilityName": "Avatar_Nahida_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_PermanentSkill_EnhanceChainDamage",
+ "abilityName": "Avatar_Nahida_PermanentSkill_EnhanceChainDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6",
+ "abilityName": "Avatar_Nahida_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6_AttackState",
+ "abilityName": "Avatar_Nahida_Constellation_6_AttackState",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6_Trigger",
+ "abilityName": "Avatar_Nahida_Constellation_6_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6_Fx",
+ "abilityName": "Avatar_Nahida_Constellation_6_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6_Timer",
+ "abilityName": "Avatar_Nahida_Constellation_6_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Constellation_6_ReduceNum",
+ "abilityName": "Avatar_Nahida_Constellation_6_ReduceNum",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_RayCast_Quest_Gadget_Call",
+ "abilityName": "Avatar_Nahida_RayCast_Quest_Gadget_Call",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida",
+ "abilityName": "Avatar_Nahida",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Click",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Click_AS",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Click_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Move",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Move",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Loop",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Hold",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Hold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Skill_ElementalArt_Hold_AS",
+ "abilityName": "Avatar_Nahida_Skill_ElementalArt_Hold_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_TeamConfig_01BS",
+ "abilityName": "Avatar_Nahida_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_TeamConfig_01Loop",
+ "abilityName": "Avatar_Nahida_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_TeamConfig_01AS",
+ "abilityName": "Avatar_Nahida_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Spine",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_BS",
+ "abilityName": "Avatar_Nahida_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementalBurst_Hit",
+ "abilityName": "Avatar_Nahida_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_ElementArt_Buff",
+ "abilityName": "Avatar_Nahida_ElementArt_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Spine_Loop",
+ "abilityName": "Avatar_Nahida_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nahida_Spine",
+ "abilityName": "Avatar_Nahida_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Navia.json b/data/json/avatar/ConfigAvatar_Navia.json
new file mode 100644
index 0000000..242001e
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Navia.json
@@ -0,0 +1,94 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Navia_ExtraAttack",
+ "abilityName": "Avatar_Navia_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_Attack_3_Create_Gadget",
+ "abilityName": "Avatar_Navia_Attack_3_Create_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_NormalAttack_3_Claymore",
+ "abilityName": "Navia_NormalAttack_3_Claymore",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_WeaponHide_Driver",
+ "abilityName": "Avatar_Navia_WeaponHide_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_Crystal_Seed_Get_Controller",
+ "abilityName": "Avatar_Navia_Crystal_Seed_Get_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_ElementalArt",
+ "abilityName": "Avatar_Navia_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_ElementalArt_Pneuma",
+ "abilityName": "Avatar_Navia_ElementalArt_Pneuma",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_ElementalArt_ShotGun_Bullet",
+ "abilityName": "Avatar_Navia_ElementalArt_ShotGun_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_ElementalBurst",
+ "abilityName": "Avatar_Navia_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_Burst_Bullet_Upon",
+ "abilityName": "Navia_Burst_Bullet_Upon",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_NormalAttackDamage",
+ "abilityName": "Avatar_Navia_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_PermanentSkill_2_Driver",
+ "abilityName": "Navia_PermanentSkill_2_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_PermanentSkill_1",
+ "abilityName": "Avatar_Navia_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_Talent_1_Driver",
+ "abilityName": "Navia_Talent_1_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_Talent_2_Driver",
+ "abilityName": "Navia_Talent_2_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Navia_Talent_4_Driver",
+ "abilityName": "Navia_Talent_4_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_FallingAnthem",
+ "abilityName": "Avatar_Navia_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Navia_Show_WindZone",
+ "abilityName": "Avatar_Navia_Show_WindZone",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Neuvillette.json b/data/json/avatar/ConfigAvatar_Neuvillette.json
new file mode 100644
index 0000000..4955378
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Neuvillette.json
@@ -0,0 +1,504 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Neuvillette_Attack01",
+ "abilityName": "Avatar_Neuvillette_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Attack02",
+ "abilityName": "Avatar_Neuvillette_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Attack03",
+ "abilityName": "Avatar_Neuvillette_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Stick_Handler",
+ "abilityName": "Avatar_Neuvillette_Stick_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_StickRemover",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_StickRemover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Levitate",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Levitate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Levitate_HitBoxOffset",
+ "abilityName": "Avatar_Neuvillette_Levitate_HitBoxOffset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_CountFx",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_CountFx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Absorb",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Absorb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Attack",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Attack_StateMark",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Attack_StateMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Attack_UnreadyF",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Attack_UnreadyF",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Charge_Handler",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Charge_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Trans_CameraShake",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Trans_CameraShake",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Wing_FxFadeR",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Wing_FxFadeR",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Wing_FxFade",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Wing_FxFade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_ScreenEffect",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Attack_Unready",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Attack_Unready",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_Handler",
+ "abilityName": "Avatar_Neuvillette_Core_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_AddCore",
+ "abilityName": "Avatar_Neuvillette_AddCore",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_CostCore",
+ "abilityName": "Avatar_Neuvillette_CostCore",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_AddCore_DelayTimer",
+ "abilityName": "Avatar_Neuvillette_AddCore_DelayTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_AddCore_DelayTimer7",
+ "abilityName": "Avatar_Neuvillette_AddCore_DelayTimer7",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_FullAttack_Delay",
+ "abilityName": "Avatar_Neuvillette_FullAttack_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Absorb_Gadget",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Absorb_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_GadgetJ",
+ "abilityName": "Avatar_Neuvillette_Core_GadgetJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Attack_Gadget",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Attack_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Camera_Shake",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Camera_Shake",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_StateCheck",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_StateCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Wing_FxFadeM",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Wing_FxFadeM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_LoseHp",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_LoseHp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_Buff_Handler",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_StateCheckM",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_StateCheckM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_Gadget",
+ "abilityName": "Avatar_Neuvillette_Core_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_Gadget_Eff",
+ "abilityName": "Avatar_Neuvillette_Core_Gadget_Eff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_Fx",
+ "abilityName": "Avatar_Neuvillette_Core_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_Bullet",
+ "abilityName": "Avatar_Neuvillette_Core_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt",
+ "abilityName": "Avatar_Neuvillette_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_DropCore_Handler",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_DropCore_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_DropCore",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_DropCore",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_DropBall",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_Camera",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_Arkhe_Handler",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_Arkhe_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_Arkhe_CDTimer",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_Arkhe_CDTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalArt_Arkhe_DelayStrike",
+ "abilityName": "Avatar_Neuvillette_ElementalArt_Arkhe_DelayStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Camera_Fx",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Camera_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_CameraShakeB",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_CameraShakeB",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_ExitCamera",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_ExitCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Camera_PushTarget333",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Camera_PushTarget333",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Camera_FogEffect",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Camera_FogEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_CameraShake",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_CameraShake",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Strike_Once",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Strike_Once",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Strike_Twice",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Strike_Twice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_Strike_Thrice",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_Strike_Thrice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ElementalBurst_WeatherChange6UNIQUE_Avatar_Neuvillette_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Neuvillette_ElementalBurst_WeatherChange6UNIQUE_Avatar_Neuvillette_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_FallingAnthem",
+ "abilityName": "Avatar_Neuvillette_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_1",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_1_BuffHandler",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_1_BuffHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_1_Handler",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_1_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_CheckWaterReaction_OnAvatar",
+ "abilityName": "Avatar_Neuvillette_CheckWaterReaction_OnAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Streamc",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Streamc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Overgrowc",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Overgrowc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Freezec",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Freezec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Shockc",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Shockc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_SwirlWaterc",
+ "abilityName": "Avatar_Neuvillette_ReactionType_SwirlWaterc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_CrystallizeWater",
+ "abilityName": "Avatar_Neuvillette_ReactionType_CrystallizeWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Stream",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Stream",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Overgrow",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Overgrow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Freeze",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Freeze",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_Shock",
+ "abilityName": "Avatar_Neuvillette_ReactionType_Shock",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ReactionType_SwirlWater",
+ "abilityName": "Avatar_Neuvillette_ReactionType_SwirlWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_Lv1",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_Lv1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_Lv2",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_Lv2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_Lv3",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_Lv3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_2",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_2_Handler",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_2_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_2_CalculatorM",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_2_CalculatorM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_2_Buff",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_2_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_PermanentSkill_2_Calculator",
+ "abilityName": "Avatar_Neuvillette_PermanentSkill_2_Calculator",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6",
+ "abilityName": "Avatar_Neuvillette_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6_Handler",
+ "abilityName": "Avatar_Neuvillette_Constellation_6_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6_Attack",
+ "abilityName": "Avatar_Neuvillette_Constellation_6_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6_Absorb",
+ "abilityName": "Avatar_Neuvillette_Constellation_6_Absorb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Core_HandlerD",
+ "abilityName": "Avatar_Neuvillette_Core_HandlerD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6_CDTimer",
+ "abilityName": "Avatar_Neuvillette_Constellation_6_CDTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_Constellation_6_Bullet",
+ "abilityName": "Avatar_Neuvillette_Constellation_6_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_DiveDashSpeedUp",
+ "abilityName": "Avatar_Neuvillette_DiveDashSpeedUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette",
+ "abilityName": "Avatar_Neuvillette",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Neuvillette_Stick",
+ "abilityName": "AvatarItem_Neuvillette_Stick",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Neuvillette_Stick_Nolight",
+ "abilityName": "AvatarItem_Neuvillette_Stick_Nolight",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Neuvillette_ExtraAttack_HitOnEnemy",
+ "abilityName": "Avatar_Neuvillette_ExtraAttack_HitOnEnemy",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Nilou.json b/data/json/avatar/ConfigAvatar_Nilou.json
new file mode 100644
index 0000000..ad7e1a1
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Nilou.json
@@ -0,0 +1,264 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Nilou_ExtraAttack",
+ "abilityName": "Avatar_Nilou_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Attack_01_Spec",
+ "abilityName": "Avatar_Nilou_Attack_01_Spec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Recombo_Mark",
+ "abilityName": "Avatar_Nilou_Recombo_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Attack_02_Spec",
+ "abilityName": "Avatar_Nilou_Attack_02_Spec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalDance",
+ "abilityName": "Avatar_Nilou_ElementalDance",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_In_NormalAttack_Mark",
+ "abilityName": "Avatar_Nilou_In_NormalAttack_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_NilouAllCount_1",
+ "abilityName": "Avatar_NilouAllCount_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_NilouAllCount_2",
+ "abilityName": "Avatar_NilouAllCount_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Change_ECount_To_4",
+ "abilityName": "Avatar_Nilou_Change_ECount_To_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Combo_Complete_Mark",
+ "abilityName": "Avatar_Nilou_Combo_Complete_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Keep_Attack_Combo_Handler",
+ "abilityName": "Avatar_Nilou_Keep_Attack_Combo_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Elemental_Art_ElemBall_Handler",
+ "abilityName": "Avatar_Nilou_Elemental_Art_ElemBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Keep_Attack_Combo_Handler_",
+ "abilityName": "Avatar_Nilou_Keep_Attack_Combo_Handler_",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalDanceFake",
+ "abilityName": "Avatar_Nilou_ElementalDanceFake",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spec_Attack_Count_Add1",
+ "abilityName": "Avatar_Nilou_Spec_Attack_Count_Add1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spec_E_2",
+ "abilityName": "Avatar_Nilou_Spec_E_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spec_E_3",
+ "abilityName": "Avatar_Nilou_Spec_E_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spec_Attack_Over",
+ "abilityName": "Avatar_Nilou_Spec_Attack_Over",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_AOver_Dance_Buff",
+ "abilityName": "Avatar_Nilou_AOver_Dance_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_AOver_Dance_Buff_Driver",
+ "abilityName": "Avatar_Nilou_AOver_Dance_Buff_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalArt_Buff_Controller",
+ "abilityName": "Avatar_Nilou_ElementalArt_Buff_Controller",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spec_EArt_Over",
+ "abilityName": "Avatar_Nilou_Spec_EArt_Over",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalArt_Buff_ControllerM",
+ "abilityName": "Avatar_Nilou_ElementalArt_Buff_ControllerM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Nilou",
+ "abilityName": "Avatar_ElementalArt_Buff_Nilou",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_ElementalArt_Buff_Nilou_Driver",
+ "abilityName": "Avatar_ElementalArt_Buff_Nilou_Driver",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Resistance_Reduce_Avatar",
+ "abilityName": "Avatar_Nilou_Resistance_Reduce_Avatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Overgrow_Damage_Up",
+ "abilityName": "Avatar_Nilou_Overgrow_Damage_Up",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Max_HP_Refresh",
+ "abilityName": "Avatar_Nilou_Max_HP_Refresh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_SpecE_Energy_Revive",
+ "abilityName": "Avatar_Nilou_SpecE_Energy_Revive",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Water_Bubble_Bullet",
+ "abilityName": "Avatar_Nilou_Water_Bubble_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Recombo_Mark_Bullet",
+ "abilityName": "Avatar_Nilou_Recombo_Mark_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_Camera",
+ "abilityName": "Avatar_Nilou_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Nilou_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Burst_Attacker",
+ "abilityName": "Avatar_Nilou_Burst_Attacker",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Burst_Delay_Attacker",
+ "abilityName": "Avatar_Nilou_Burst_Delay_Attacker",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Nilou_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_MaxHP_Trans_Crit",
+ "abilityName": "Avatar_Nilou_MaxHP_Trans_Crit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_FallingAnthem",
+ "abilityName": "Avatar_Nilou_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_QuestAbility_NilouFullMP",
+ "abilityName": "Avatar_QuestAbility_NilouFullMP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_NilouFullMP",
+ "abilityName": "Avatar_NilouFullMP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou",
+ "abilityName": "Avatar_Nilou",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_TeamConfig_01BS",
+ "abilityName": "Avatar_Nilou_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_TeamConfig_01Loop",
+ "abilityName": "Avatar_Nilou_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_TeamConfig_01AS",
+ "abilityName": "Avatar_Nilou_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Nilou_HushangWreaths",
+ "abilityName": "AvatarItem_Nilou_HushangWreaths",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_Spine",
+ "abilityName": "Avatar_Nilou_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_BS",
+ "abilityName": "Avatar_Nilou_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_Hit",
+ "abilityName": "Avatar_Nilou_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_ElementalBurst_Buff",
+ "abilityName": "Avatar_Nilou_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spine_Loop",
+ "abilityName": "Avatar_Nilou_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spine_Loop_Floor",
+ "abilityName": "Avatar_Nilou_Spine_Loop_Floor",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Nilou_Spine",
+ "abilityName": "Avatar_Nilou_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Ningguang.json b/data/json/avatar/ConfigAvatar_Ningguang.json
new file mode 100644
index 0000000..7ce965f
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Ningguang.json
@@ -0,0 +1,289 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Ningguang_Roulette",
+ "abilityName": "Avatar_Ningguang_Roulette",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ExtraAttack",
+ "abilityName": "Avatar_Ningguang_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ExtraAttack_Fx",
+ "abilityName": "Avatar_Ningguang_ExtraAttack_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ExtraAttack_BulletTrigger",
+ "abilityName": "Avatar_Ningguang_ExtraAttack_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Constellation_Attack_Up_BulletTrigger",
+ "abilityName": "Avatar_Ningguang_Constellation_Attack_Up_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ExtraAttack_GemBullet_Handler",
+ "abilityName": "Avatar_Ningguang_ExtraAttack_GemBullet_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ExtraAttack_Damage",
+ "abilityName": "Avatar_Ningguang_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_NormalAttack_Dummy",
+ "abilityName": "Avatar_Ningguang_NormalAttack_Dummy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_NormalAttackDamage",
+ "abilityName": "Avatar_Ningguang_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_NormalAttack_LifeOver_Fx",
+ "abilityName": "Avatar_Ningguang_NormalAttack_LifeOver_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Elemental_Burst_LifeOver_Orange",
+ "abilityName": "Avatar_Ningguang_Elemental_Burst_LifeOver_Orange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Elemental_Burst_LifeOver_Red",
+ "abilityName": "Avatar_Ningguang_Elemental_Burst_LifeOver_Red",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Elemental_Burst_LifeOver_Yellow",
+ "abilityName": "Avatar_Ningguang_Elemental_Burst_LifeOver_Yellow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Attack01",
+ "abilityName": "Avatar_Ningguang_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Attack02",
+ "abilityName": "Avatar_Ningguang_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Attack03",
+ "abilityName": "Avatar_Ningguang_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Attack04",
+ "abilityName": "Avatar_Ningguang_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ServantStone",
+ "abilityName": "Avatar_Ningguang_ServantStone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Charge_ServantStone",
+ "abilityName": "Avatar_Ningguang_Charge_ServantStone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Change_Gadget_BornState",
+ "abilityName": "Avatar_Ningguang_Change_Gadget_BornState",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ServantStone_Switch",
+ "abilityName": "Avatar_Ningguang_ServantStone_Switch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Trigger_ElementalArt_CD",
+ "abilityName": "Avatar_Ningguang_Trigger_ElementalArt_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_GemStone_Impact",
+ "abilityName": "Avatar_Ningguang_GemStone_Impact",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_BulletTrigger",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_BulletTrigger_WithOutTarget",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_BulletTrigger_WithOutTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_ServantStoneTrigger",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_ServantStoneTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_1",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_2",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_3",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Bullet_Hit_Fx_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ReviveElemEnergy",
+ "abilityName": "Avatar_Ningguang_ReviveElemEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Constellation_6",
+ "abilityName": "Avatar_Ningguang_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_PermanentSkill_2",
+ "abilityName": "Avatar_Ningguang_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_SkillUpgrade_3",
+ "abilityName": "Avatar_Ningguang_SkillUpgrade_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_GemBullet_Damage",
+ "abilityName": "Avatar_Ningguang_GemBullet_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_FallingAnthem",
+ "abilityName": "Avatar_Ningguang_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Radar_Ore",
+ "abilityName": "Avatar_Ningguang_Radar_Ore",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang",
+ "abilityName": "Avatar_Ningguang",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_NormalAttack_LifeOver_Fx0Avatar_Ningguang_Elemental_Burst_LifeOver_Orange",
+ "abilityName": "Avatar_Ningguang_NormalAttack_LifeOver_Fx0Avatar_Ningguang_Elemental_Burst_LifeOver_Orange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Elemental_Burst_LifeOver_Red0Avatar_Ningguang_Elemental_Burst_LifeOver_Yellow",
+ "abilityName": "Avatar_Ningguang_Elemental_Burst_LifeOver_Red0Avatar_Ningguang_Elemental_Burst_LifeOver_Yellow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_BulletTrigger_WithOutTarget3Avatar_Ningguang_ElementalBurst_ServantStoneTrigger",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_BulletTrigger_WithOutTarget3Avatar_Ningguang_ElementalBurst_ServantStoneTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_TeamConfig_01BS",
+ "abilityName": "Avatar_Ningguang_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_TeamConfig_01Loop",
+ "abilityName": "Avatar_Ningguang_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_TeamConfig_01AS",
+ "abilityName": "Avatar_Ningguang_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Spine",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_BS",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Yellow",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Yellow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_01",
+ "abilityName": "Avatar_Ningguang_ElementBurst_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_04",
+ "abilityName": "Avatar_Ningguang_ElementBurst_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Orange",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Orange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_02",
+ "abilityName": "Avatar_Ningguang_ElementBurst_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_05",
+ "abilityName": "Avatar_Ningguang_ElementBurst_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Red",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Red",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_03",
+ "abilityName": "Avatar_Ningguang_ElementBurst_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementBurst_06",
+ "abilityName": "Avatar_Ningguang_ElementBurst_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_ElementalBurst_Hit",
+ "abilityName": "Avatar_Ningguang_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Ningguang_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Ningguang_Spine_Loop",
+ "abilityName": "Avatar_Ningguang_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Noel.json b/data/json/avatar/ConfigAvatar_Noel.json
new file mode 100644
index 0000000..6931f06
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Noel.json
@@ -0,0 +1,119 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Noel_ExtraAttack",
+ "abilityName": "Avatar_Noel_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Skill_S",
+ "abilityName": "Avatar_Noel_Skill_S",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Skill_E",
+ "abilityName": "Avatar_Noel_Skill_E",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Skill_E_ExitCamera",
+ "abilityName": "Avatar_Noel_Skill_E_ExitCamera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ProudSkill_21",
+ "abilityName": "Avatar_Noel_ProudSkill_21",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ProudSkill_21_Shield",
+ "abilityName": "Avatar_Noel_ProudSkill_21_Shield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ProudSkill_22",
+ "abilityName": "Avatar_Noel_ProudSkill_22",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_FallingAnthem",
+ "abilityName": "Avatar_Noel_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel",
+ "abilityName": "Avatar_Noel",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Skill_E_ExitCamera1Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Noel_Skill_E_ExitCamera1Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_TeamConfig_01BS",
+ "abilityName": "Avatar_Noel_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_TeamConfig_01Loop",
+ "abilityName": "Avatar_Noel_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_TeamConfig_01AS",
+ "abilityName": "Avatar_Noel_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ProudSkill_NormalAttack_DamageHandler1Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Noel_ProudSkill_NormalAttack_DamageHandler1Avatar_Noel_ProudSkill_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Spine",
+ "abilityName": "Avatar_Noel_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst_Spine",
+ "abilityName": "Avatar_Noel_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst",
+ "abilityName": "Avatar_Noel_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst_BS",
+ "abilityName": "Avatar_Noel_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst_Hit",
+ "abilityName": "Avatar_Noel_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst_Buff",
+ "abilityName": "Avatar_Noel_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_ElementalBurst_Buff_Hit",
+ "abilityName": "Avatar_Noel_ElementalBurst_Buff_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Noel_Spine_Loop",
+ "abilityName": "Avatar_Noel_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_PlayerBoy.json b/data/json/avatar/ConfigAvatar_PlayerBoy.json
new file mode 100644
index 0000000..17cff34
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_PlayerBoy.json
@@ -0,0 +1,5 @@
+{
+ "abilities": [
+
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_PlayerGirl.json b/data/json/avatar/ConfigAvatar_PlayerGirl.json
new file mode 100644
index 0000000..84b0647
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_PlayerGirl.json
@@ -0,0 +1,3 @@
+{
+ "abilities": []
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Qin.json b/data/json/avatar/ConfigAvatar_Qin.json
new file mode 100644
index 0000000..65dc141
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Qin.json
@@ -0,0 +1,304 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Qin_ExtraAttack",
+ "abilityName": "Avatar_Qin_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VortexSmash",
+ "abilityName": "Avatar_Qin_VortexSmash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind_Camera",
+ "abilityName": "Avatar_Qin_DandelionWind_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind",
+ "abilityName": "Avatar_Qin_DandelionWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind_Heal",
+ "abilityName": "Avatar_Qin_DandelionWind_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind_Harm",
+ "abilityName": "Avatar_Qin_DandelionWind_Harm",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind_Harm_FieldDamage",
+ "abilityName": "Avatar_Qin_DandelionWind_Harm_FieldDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_DandelionWind_Push",
+ "abilityName": "Avatar_Qin_DandelionWind_Push",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_HinowaSlash",
+ "abilityName": "Avatar_Qin_HinowaSlash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_GreaterSelfHeal",
+ "abilityName": "Avatar_Qin_GreaterSelfHeal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_AttackCritic",
+ "abilityName": "Avatar_Qin_AttackCritic",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_TeamSpeedWhenGetElementBall",
+ "abilityName": "Avatar_Qin_TeamSpeedWhenGetElementBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_NormalAttackDamage",
+ "abilityName": "Avatar_Qin_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_AutoDefend",
+ "abilityName": "Avatar_Qin_AutoDefend",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_FallingAnthem",
+ "abilityName": "Avatar_Qin_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin",
+ "abilityName": "Avatar_Qin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayQin01BS_0",
+ "abilityName": "Avatar_PlayQin01BS_0",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayQin01Loop_0",
+ "abilityName": "Avatar_PlayQin01Loop_0",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayQin01AS_0",
+ "abilityName": "Avatar_PlayQin01AS_0",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Common_PlayMusic_Qin",
+ "abilityName": "Avatar_Common_PlayMusic_Qin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_Charge",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_Charge_02",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_Charge_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_Charge_AS",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_Charge_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_Fly",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_Fly",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_Fly_AS",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_Fly_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_FlyAir",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_FlyAir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_TeamConfig_01BS",
+ "abilityName": "Avatar_Qin_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_TeamConfig_01Loop",
+ "abilityName": "Avatar_Qin_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_TeamConfig_01AS",
+ "abilityName": "Avatar_Qin_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_AS",
+ "abilityName": "Avatar_PlayMusic_Qin_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin",
+ "abilityName": "Avatar_PlayMusic_Qin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_KeQing_Skill_ElementalArt_FlyAir_AS",
+ "abilityName": "Avatar_KeQing_Skill_ElementalArt_FlyAir_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_ElementalBurst_Spine",
+ "abilityName": "Avatar_Qin_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_ElementalBurst",
+ "abilityName": "Avatar_Qin_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_Spine_Loop",
+ "abilityName": "Avatar_Qin_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_MDAQ037_Qin_01",
+ "abilityName": "Avatar_Qin_VO_MDAQ037_Qin_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_Emotion_Qin_Hesitate_01",
+ "abilityName": "Avatar_Qin_VO_Emotion_Qin_Hesitate_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_Emotion_Qin_Vigilant_01",
+ "abilityName": "Avatar_Qin_VO_Emotion_Qin_Vigilant_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_Emotion_Qin_Affirm_01",
+ "abilityName": "Avatar_Qin_VO_Emotion_Qin_Affirm_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_Emotion_Qin_Satisfaction_01",
+ "abilityName": "Avatar_Qin_VO_Emotion_Qin_Satisfaction_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_VO_MDAQ053_Qin_01",
+ "abilityName": "Avatar_Qin_VO_MDAQ053_Qin_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901001",
+ "abilityName": "Avatar_Qin_4901001",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901004",
+ "abilityName": "Avatar_Qin_4901004",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901006",
+ "abilityName": "Avatar_Qin_4901006",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901008",
+ "abilityName": "Avatar_Qin_4901008",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901010",
+ "abilityName": "Avatar_Qin_4901010",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901011",
+ "abilityName": "Avatar_Qin_4901011",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901013",
+ "abilityName": "Avatar_Qin_4901013",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901014",
+ "abilityName": "Avatar_Qin_4901014",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901015",
+ "abilityName": "Avatar_Qin_4901015",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901017",
+ "abilityName": "Avatar_Qin_4901017",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qin_4901019",
+ "abilityName": "Avatar_Qin_4901019",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_01_AS",
+ "abilityName": "Avatar_PlayMusic_Qin_01_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_01",
+ "abilityName": "Avatar_PlayMusic_Qin_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_01_Loli",
+ "abilityName": "Avatar_PlayMusic_Qin_01_Loli",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_Loli",
+ "abilityName": "Avatar_PlayMusic_Qin_Loli",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayMusic_Qin_Loli_AS",
+ "abilityName": "Avatar_PlayMusic_Qin_Loli_AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Qiqi.json b/data/json/avatar/ConfigAvatar_Qiqi.json
new file mode 100644
index 0000000..fde3584
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Qiqi.json
@@ -0,0 +1,139 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Qiqi_ExtraAttack",
+ "abilityName": "Avatar_Qiqi_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalArt_Clear",
+ "abilityName": "Avatar_Qiqi_ElementalArt_Clear",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalArt",
+ "abilityName": "Avatar_Qiqi_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalArt_CD",
+ "abilityName": "Avatar_Qiqi_ElementalArt_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalArt_Bullet",
+ "abilityName": "Avatar_Qiqi_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst",
+ "abilityName": "Avatar_Qiqi_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_PostEffect",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Revive",
+ "abilityName": "Avatar_Qiqi_Revive",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_ApplyModifier",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_ApplyModifier",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_TriggerAttack",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_TriggerAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_CameraRadialBlur",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_CameraRadialBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_NormalAttackDamage",
+ "abilityName": "Avatar_Qiqi_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalArt_Damage",
+ "abilityName": "Avatar_Qiqi_ElementalArt_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Frozen_AttackUp",
+ "abilityName": "Avatar_Qiqi_Frozen_AttackUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_FallingAnthem",
+ "abilityName": "Avatar_Qiqi_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Radar_Collectables_Liyue",
+ "abilityName": "Avatar_Qiqi_Radar_Collectables_Liyue",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi",
+ "abilityName": "Avatar_Qiqi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Skill_ElementalArt",
+ "abilityName": "Avatar_Qiqi_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_TeamConfig_01BS",
+ "abilityName": "Avatar_Qiqi_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_TeamConfig_01Loop",
+ "abilityName": "Avatar_Qiqi_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_TeamConfig_01AS",
+ "abilityName": "Avatar_Qiqi_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Qiqi_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_Spine",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_BS",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_ElementalBurst_Hit",
+ "abilityName": "Avatar_Qiqi_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Qiqi_Spine_Loop",
+ "abilityName": "Avatar_Qiqi_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Razor.json b/data/json/avatar/ConfigAvatar_Razor.json
new file mode 100644
index 0000000..dc58358
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Razor.json
@@ -0,0 +1,139 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Razor_ExtraAttack",
+ "abilityName": "Avatar_Razor_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_General_Handler",
+ "abilityName": "Avatar_Razor_General_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_Main",
+ "abilityName": "Avatar_Razor_ClawMark_Main",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_Click",
+ "abilityName": "Avatar_Razor_ClawMark_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_SetMark",
+ "abilityName": "Avatar_Razor_ClawMark_SetMark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_Charging",
+ "abilityName": "Avatar_Razor_ClawMark_Charging",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_Weather_Remove",
+ "abilityName": "Avatar_Razor_ClawMark_Weather_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_Burst",
+ "abilityName": "Avatar_Razor_ClawMark_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ClawMark_EnergyRegain",
+ "abilityName": "Avatar_Razor_ClawMark_EnergyRegain",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_LycanMode",
+ "abilityName": "Avatar_Razor_LycanMode",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_LycanMode_LycanSimulator",
+ "abilityName": "Avatar_Razor_LycanMode_LycanSimulator",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_LycanMode_FirstAttackGuaranteer",
+ "abilityName": "Avatar_Razor_LycanMode_FirstAttackGuaranteer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_DashStamina_Reduction",
+ "abilityName": "Avatar_Razor_DashStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Razor_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_FallingAnthem",
+ "abilityName": "Avatar_Razor_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor",
+ "abilityName": "Avatar_Razor",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_TeamConfig_01BS",
+ "abilityName": "Avatar_Razor_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_TeamConfig_01Loop",
+ "abilityName": "Avatar_Razor_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_TeamConfig_01AS",
+ "abilityName": "Avatar_Razor_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_Spine",
+ "abilityName": "Avatar_Razor_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_01",
+ "abilityName": "Avatar_Razor_ElementalBurst_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_Hit_01",
+ "abilityName": "Avatar_Razor_ElementalBurst_Hit_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_Hit_02",
+ "abilityName": "Avatar_Razor_ElementalBurst_Hit_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_02",
+ "abilityName": "Avatar_Razor_ElementalBurst_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_ElementalBurst_03",
+ "abilityName": "Avatar_Razor_ElementalBurst_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_Spine_Loop",
+ "abilityName": "Avatar_Razor_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Razor_Spine",
+ "abilityName": "Avatar_Razor_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Rosaria.json b/data/json/avatar/ConfigAvatar_Rosaria.json
new file mode 100644
index 0000000..e48f979
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Rosaria.json
@@ -0,0 +1,114 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Rosaria_ExtraAttack",
+ "abilityName": "Avatar_Rosaria_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Rosaria_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Rosaria_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalArt",
+ "abilityName": "Avatar_Rosaria_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalArt_Strike_01",
+ "abilityName": "Avatar_Rosaria_ElementalArt_Strike_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalArt_Strike_02",
+ "abilityName": "Avatar_Rosaria_ElementalArt_Strike_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalBurst_Camera",
+ "abilityName": "Avatar_Rosaria_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalBurst_Strike_01",
+ "abilityName": "Avatar_Rosaria_ElementalBurst_Strike_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_ElementalBurst_Create_Gadget",
+ "abilityName": "Avatar_Rosaria_ElementalBurst_Create_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_GadgetEndEffect_Played",
+ "abilityName": "Avatar_Rosaria_GadgetEndEffect_Played",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Rosaria_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_FallingAnthem",
+ "abilityName": "Avatar_Rosaria_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria",
+ "abilityName": "Avatar_Rosaria",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalArt",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalBurst_BS",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalBurst",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_TeamConfig_01BS",
+ "abilityName": "Avatar_Rosaria_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_TeamConfig_01Loop",
+ "abilityName": "Avatar_Rosaria_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_TeamConfig_01AS",
+ "abilityName": "Avatar_Rosaria_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Rosaria_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Rosaria_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Sara.json b/data/json/avatar/ConfigAvatar_Sara.json
new file mode 100644
index 0000000..65006a9
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Sara.json
@@ -0,0 +1,179 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Sara_Arrow_FX",
+ "abilityName": "Avatar_Sara_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_PressShoot",
+ "abilityName": "Avatar_Sara_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_AimPressShoot",
+ "abilityName": "Avatar_Sara_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Sara_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_ResetGlobalValue",
+ "abilityName": "Avatar_Sara_ShootArrow_ResetGlobalValue",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_Aiming",
+ "abilityName": "Avatar_Sara_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_01",
+ "abilityName": "Avatar_Sara_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_02",
+ "abilityName": "Avatar_Sara_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_03",
+ "abilityName": "Avatar_Sara_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_04",
+ "abilityName": "Avatar_Sara_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Hide_Fxo",
+ "abilityName": "Avatar_Sara_Hide_Fxo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Hide_Fx",
+ "abilityName": "Avatar_Sara_Hide_Fx",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_05",
+ "abilityName": "Avatar_Sara_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Elemental_Art",
+ "abilityName": "Avatar_Sara_Elemental_Art",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_KarasShoot_DelayAttack",
+ "abilityName": "Avatar_Sara_KarasShoot_DelayAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Elemental_Burst",
+ "abilityName": "Avatar_Sara_Elemental_Burst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Elemental_Burst_AttackWave_Trigger",
+ "abilityName": "Avatar_Sara_Elemental_Burst_AttackWave_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Elemental_Burst_AttackWave",
+ "abilityName": "Avatar_Sara_Elemental_Burst_AttackWave",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ElementalBurst_PostEffect",
+ "abilityName": "Avatar_Sara_ElementalBurst_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Sara_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_AttackUp",
+ "abilityName": "Avatar_Sara_AttackUp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_BaseAttack",
+ "abilityName": "Avatar_Sara_BaseAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_PermanentSkill_1",
+ "abilityName": "Avatar_Sara_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ShootArrow_Damage",
+ "abilityName": "Avatar_Sara_ShootArrow_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_PermanentSkill_1_ReduceColdDown",
+ "abilityName": "Avatar_Sara_PermanentSkill_1_ReduceColdDown",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_PermanentSkill_2",
+ "abilityName": "Avatar_Sara_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_FallingAnthem",
+ "abilityName": "Avatar_Sara_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara",
+ "abilityName": "Avatar_Sara",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_TeamConfig_01BS",
+ "abilityName": "Avatar_Sara_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_TeamConfig_01Loop",
+ "abilityName": "Avatar_Sara_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_TeamConfig_01AS",
+ "abilityName": "Avatar_Sara_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ElementalBurst_Spine",
+ "abilityName": "Avatar_Sara_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ElementalBurst_BS",
+ "abilityName": "Avatar_Sara_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_ElementalBurst_Hit",
+ "abilityName": "Avatar_Sara_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sara_Spine_Loop",
+ "abilityName": "Avatar_Sara_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Sayu.json b/data/json/avatar/ConfigAvatar_Sayu.json
new file mode 100644
index 0000000..53a35ba
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Sayu.json
@@ -0,0 +1,239 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Sayu_ExtraAttack",
+ "abilityName": "Avatar_Sayu_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_NormalAttack_Handler",
+ "abilityName": "Avatar_Sayu_NormalAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_NormalAttack_Hide",
+ "abilityName": "Avatar_Sayu_NormalAttack_Hide",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Check",
+ "abilityName": "Avatar_Sayu_ElementalArt_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Sayu_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Click",
+ "abilityName": "Avatar_Sayu_ElementalArt_Click",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Click_EnterCD",
+ "abilityName": "Avatar_Sayu_ElementalArt_Click_EnterCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Click_TriggerBullet",
+ "abilityName": "Avatar_Sayu_ElementalArt_Click_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Click_Effect",
+ "abilityName": "Avatar_Sayu_ElementalArt_Click_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Bullet",
+ "abilityName": "Avatar_Sayu_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Hold",
+ "abilityName": "Avatar_Sayu_ElementalArt_Hold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_CDHandler",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_CDHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_Handler",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_CloseCollider",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_CloseCollider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_Effect",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_TriggerBullet",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Hold_Strike",
+ "abilityName": "Avatar_Sayu_ElementalArt_Hold_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_TriggerFire",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_TriggerFire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_TriggerWater",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_TriggerWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_TriggerElectric",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_TriggerElectric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_TriggerIce",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_TriggerIce",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_Bullet",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalArt_Roll_Mix",
+ "abilityName": "Avatar_Sayu_ElementalArt_Roll_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst",
+ "abilityName": "Avatar_Sayu_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Strike",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Heal",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Sayu_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_CameraBlur",
+ "abilityName": "Avatar_Sayu_ElementalBurst_CameraBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_TriggerDaruma",
+ "abilityName": "Avatar_Sayu_ElementalBurst_TriggerDaruma",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_Delay",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_Handler",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_PlayAnim",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_PlayAnim",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_Heal",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_Heal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_Attack",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_ElementalBurst_Phantom_AttackAndHeal",
+ "abilityName": "Avatar_Sayu_ElementalBurst_Phantom_AttackAndHeal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_Constellation_6_Handler",
+ "abilityName": "Avatar_Sayu_Constellation_6_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_FallingAnthem",
+ "abilityName": "Avatar_Sayu_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Sayu_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_PermanentSkill_1",
+ "abilityName": "Avatar_Sayu_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu",
+ "abilityName": "Avatar_Sayu",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_TeamConfig_01BS",
+ "abilityName": "Avatar_Sayu_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_TeamConfig_01Loop",
+ "abilityName": "Avatar_Sayu_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sayu_TeamConfig_01AS",
+ "abilityName": "Avatar_Sayu_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Sethos.json b/data/json/avatar/ConfigAvatar_Sethos.json
new file mode 100644
index 0000000..650dfee
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Sethos.json
@@ -0,0 +1,69 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Sethos_PressShoot",
+ "abilityName": "Avatar_Sethos_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_AimPressShoot",
+ "abilityName": "Avatar_Sethos_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_Arrow_FX",
+ "abilityName": "Avatar_Sethos_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Sethos_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootArrow_01",
+ "abilityName": "Avatar_Sethos_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootArrow_02",
+ "abilityName": "Avatar_Sethos_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootArrow_03",
+ "abilityName": "Avatar_Sethos_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootArrow_04",
+ "abilityName": "Avatar_Sethos_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ShootArrow_Aiming",
+ "abilityName": "Avatar_Sethos_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ElementalArt",
+ "abilityName": "Avatar_Sethos_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_ElementalBurst",
+ "abilityName": "Avatar_Sethos_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_HideWeaponControl",
+ "abilityName": "Avatar_Sethos_HideWeaponControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sethos_FallingAnthem",
+ "abilityName": "Avatar_Sethos_FallingAnthem",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Shenhe.json b/data/json/avatar/ConfigAvatar_Shenhe.json
new file mode 100644
index 0000000..e134fd0
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Shenhe.json
@@ -0,0 +1,134 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Shenhe_ExtraAttack",
+ "abilityName": "Avatar_Shenhe_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_CreateBullet",
+ "abilityName": "Avatar_Shenhe_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Shenhe_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalArt_Bullet",
+ "abilityName": "Avatar_Shenhe_ElementalArt_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalArt_FX",
+ "abilityName": "Avatar_Shenhe_ElementalArt_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalArt_Attack_L",
+ "abilityName": "Avatar_Shenhe_ElementalArt_Attack_L",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalArt_Attack_H",
+ "abilityName": "Avatar_Shenhe_ElementalArt_Attack_H",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalBurst",
+ "abilityName": "Avatar_Shenhe_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Shenhe_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Shenhe_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_FallingAnthem",
+ "abilityName": "Avatar_Shenhe_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe",
+ "abilityName": "Avatar_Shenhe",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalArt_BS",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalArt_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalArt_L",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalArt_L",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalArt_H",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalArt_H",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalArt_L_AS",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalArt_L_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalArt_H_AS",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalArt_H_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalBurst_BS",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Skill_ElementalBurst",
+ "abilityName": "Avatar_Shenhe_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_TeamConfig_01BS",
+ "abilityName": "Avatar_Shenhe_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_TeamConfig_01Loop",
+ "abilityName": "Avatar_Shenhe_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_TeamConfig_01AS",
+ "abilityName": "Avatar_Shenhe_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalBurst_Spine",
+ "abilityName": "Avatar_Shenhe_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalBurst_BS",
+ "abilityName": "Avatar_Shenhe_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_ElementalBurst_Hit",
+ "abilityName": "Avatar_Shenhe_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shenhe_Spine_Loop",
+ "abilityName": "Avatar_Shenhe_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Shinobu.json b/data/json/avatar/ConfigAvatar_Shinobu.json
new file mode 100644
index 0000000..6ead00b
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Shinobu.json
@@ -0,0 +1,139 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Shinobu_ExtraAttack",
+ "abilityName": "Avatar_Shinobu_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_NormalAttack_Handler",
+ "abilityName": "Avatar_Shinobu_NormalAttack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_Init",
+ "abilityName": "Avatar_Shinobu_ElementalArt_Init",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_ElemBall_Handler",
+ "abilityName": "Avatar_Shinobu_ElementalArt_ElemBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt",
+ "abilityName": "Avatar_Shinobu_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_Constellation_Attack_Handler",
+ "abilityName": "Avatar_Shinobu_ElementalArt_Constellation_Attack_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_Bullet_KillGadget",
+ "abilityName": "Avatar_Shinobu_ElementalArt_Bullet_KillGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_ElemBall",
+ "abilityName": "Avatar_Shinobu_ElementalArt_ElemBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation_Attack_Detect",
+ "abilityName": "Avatar_Shinobu_Constellation_Attack_Detect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation_AddAttack",
+ "abilityName": "Avatar_Shinobu_Constellation_AddAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_TickLogic",
+ "abilityName": "Avatar_Shinobu_ElementalArt_TickLogic",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalArt_TickLogic_Effect",
+ "abilityName": "Avatar_Shinobu_ElementalArt_TickLogic_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation_AddAttack_IntoCD",
+ "abilityName": "Avatar_Shinobu_Constellation_AddAttack_IntoCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation_AddAttack_Effect",
+ "abilityName": "Avatar_Shinobu_Constellation_AddAttack_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalBurst",
+ "abilityName": "Avatar_Shinobu_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_ElementalBurst_Init",
+ "abilityName": "Avatar_Shinobu_ElementalBurst_Init",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Shinobu_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_FallingAnthem",
+ "abilityName": "Avatar_Shinobu_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_PermanentSkill_WhenLowHp",
+ "abilityName": "Avatar_Shinobu_PermanentSkill_WhenLowHp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_PermanentSkill_HealUpWhenLowHp",
+ "abilityName": "Avatar_Shinobu_PermanentSkill_HealUpWhenLowHp",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation6_Limbo",
+ "abilityName": "Avatar_Shinobu_Constellation6_Limbo",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation6_Limbo_Trigger_Protect",
+ "abilityName": "Avatar_Shinobu_Constellation6_Limbo_Trigger_Protect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_Constellation6_Limbo_Trigger_ElemMastery",
+ "abilityName": "Avatar_Shinobu_Constellation6_Limbo_Trigger_ElemMastery",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu",
+ "abilityName": "Avatar_Shinobu",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_TeamConfig_01BS",
+ "abilityName": "Avatar_Shinobu_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_TeamConfig_01Loop",
+ "abilityName": "Avatar_Shinobu_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shinobu_TeamConfig_01AS",
+ "abilityName": "Avatar_Shinobu_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Shougun.json b/data/json/avatar/ConfigAvatar_Shougun.json
new file mode 100644
index 0000000..80d204d
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Shougun.json
@@ -0,0 +1,124 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Shougun_ExtraAttack",
+ "abilityName": "Avatar_Shougun_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ElementalArt",
+ "abilityName": "Avatar_Shougun_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Elfh",
+ "abilityName": "Avatar_Shougun_Elfh",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Elf",
+ "abilityName": "Avatar_Shougun_Elf",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ChargeLevel",
+ "abilityName": "Avatar_Shougun_ChargeLevel",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ElementalBurst",
+ "abilityName": "Avatar_Shougun_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_FallingAnthem",
+ "abilityName": "Avatar_Shougun_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarOMonster_Shougun_Mitakenarukami_Mitakenarukami_BurstAtk02_AbsorbEnergyFromAvatar",
+ "abilityName": "AvatarOMonster_Shougun_Mitakenarukami_Mitakenarukami_BurstAtk02_AbsorbEnergyFromAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun",
+ "abilityName": "Avatar_Shougun",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Skill_ElementalArt",
+ "abilityName": "Avatar_Shougun_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Shougun_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_FallingAttack_AS_01",
+ "abilityName": "Avatar_Shougun_FallingAttack_AS_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_FallingAttack_AS_02",
+ "abilityName": "Avatar_Shougun_FallingAttack_AS_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Katana_FallingAttack_AS_01",
+ "abilityName": "Avatar_Shougun_Katana_FallingAttack_AS_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_TeamConfig_01BS",
+ "abilityName": "Avatar_Shougun_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_TeamConfig_01Loop",
+ "abilityName": "Avatar_Shougun_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_TeamConfig_01AS",
+ "abilityName": "Avatar_Shougun_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Katana_FallingAttack_AS_02",
+ "abilityName": "Avatar_Shougun_Katana_FallingAttack_AS_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Spine",
+ "abilityName": "Avatar_Shougun_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ElementalBurst_Spine",
+ "abilityName": "Avatar_Shougun_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ElementalBurst_BS",
+ "abilityName": "Avatar_Shougun_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ElementalBurst_Hit",
+ "abilityName": "Avatar_Shougun_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_Spine_Loop",
+ "abilityName": "Avatar_Shougun_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Shougun_ChargeLevel0BurstSkillEnergy_ExtraChargeLevel_OtherElemRatio",
+ "abilityName": "Avatar_Shougun_ChargeLevel0BurstSkillEnergy_ExtraChargeLevel_OtherElemRatio",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Sigewinne.json b/data/json/avatar/ConfigAvatar_Sigewinne.json
new file mode 100644
index 0000000..73dcada
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Sigewinne.json
@@ -0,0 +1,109 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Sigewinne_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Sigewinne_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_PressShoot",
+ "abilityName": "Avatar_Sigewinne_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_Arrow_FX",
+ "abilityName": "Avatar_Sigewinne_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ShootArrow_Aiming",
+ "abilityName": "Avatar_Sigewinne_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_AimPressShoot",
+ "abilityName": "Avatar_Sigewinne_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ShootArrow_01",
+ "abilityName": "Avatar_Sigewinne_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ShootArrow_02",
+ "abilityName": "Avatar_Sigewinne_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ShootArrow_03",
+ "abilityName": "Avatar_Sigewinne_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt",
+ "abilityName": "Avatar_Sigewinne_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_EArt_Heal_Other",
+ "abilityName": "Avatar_Sigewinne_EArt_Heal_Other",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_EArt_Heal_Self",
+ "abilityName": "Avatar_Sigewinne_EArt_Heal_Self",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt_Core_Trigger_OnAvatar",
+ "abilityName": "Avatar_Sigewinne_ElementalArt_Core_Trigger_OnAvatar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt_Shoot_Short",
+ "abilityName": "Avatar_Sigewinne_ElementalArt_Shoot_Short",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt_Shoot_Hold",
+ "abilityName": "Avatar_Sigewinne_ElementalArt_Shoot_Hold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt_Pneuma",
+ "abilityName": "Avatar_Sigewinne_ElementalArt_Pneuma",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalBurst",
+ "abilityName": "Avatar_Sigewinne_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_PermanentSkill_2",
+ "abilityName": "Avatar_Sigewinne_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ShootArrow_Damage",
+ "abilityName": "Avatar_Sigewinne_ShootArrow_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_FallingAnthem",
+ "abilityName": "Avatar_Sigewinne_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_ElementalArt_Core_Add_Debts",
+ "abilityName": "Avatar_Sigewinne_ElementalArt_Core_Add_Debts",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sigewinne_EArt_Elemball_Driver",
+ "abilityName": "Avatar_Sigewinne_EArt_Elemball_Driver",
+ "abilityOverride": ""
+ }
+ ]
+}
diff --git a/data/json/avatar/ConfigAvatar_Sucrose.json b/data/json/avatar/ConfigAvatar_Sucrose.json
new file mode 100644
index 0000000..be5bebc
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Sucrose.json
@@ -0,0 +1,244 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Sucrose_ExtraAttack",
+ "abilityName": "Avatar_Sucrose_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack01",
+ "abilityName": "Avatar_Sucrose_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack02",
+ "abilityName": "Avatar_Sucrose_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack03",
+ "abilityName": "Avatar_Sucrose_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack04_Pre",
+ "abilityName": "Avatar_Sucrose_Attack04_Pre",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack04_Gadget",
+ "abilityName": "Avatar_Sucrose_Attack04_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Attack04",
+ "abilityName": "Avatar_Sucrose_Attack04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_WindBlackHole",
+ "abilityName": "Avatar_Sucrose_WindBlackHole",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_WindBlackHole_Gadget",
+ "abilityName": "Avatar_Sucrose_WindBlackHole_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane",
+ "abilityName": "Avatar_Sucrose_DemiHurricane",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane_Flusk",
+ "abilityName": "Avatar_Sucrose_DemiHurricane_Flusk",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane_Gadget",
+ "abilityName": "Avatar_Sucrose_DemiHurricane_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane_Dissipate",
+ "abilityName": "Avatar_Sucrose_DemiHurricane_Dissipate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane_Damage",
+ "abilityName": "Avatar_Sucrose_DemiHurricane_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_DemiHurricane_Mix",
+ "abilityName": "Avatar_Sucrose_DemiHurricane_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Contellation_6",
+ "abilityName": "Avatar_Sucrose_Contellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_FallingAnthem",
+ "abilityName": "Avatar_Sucrose_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Handler",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Fire",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Firec",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Firec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Water",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Water",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Waterc",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Waterc",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Ice",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Ice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Icec",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Icec",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Electric",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Electric",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa_Electric2UNIQUE_Avatar_Sucrose_PermanentSkill_Catalysa_Fire",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa_Electric2UNIQUE_Avatar_Sucrose_PermanentSkill_Catalysa_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_NetherWind",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_NetherWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_NetherWind_Handler",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_NetherWind_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_NetherWind_Buff",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_NetherWind_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_NetherWind_Buff4UNIQUE_Avatar_Sucrose_PermanentSkill_NetherWind_Buff",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_NetherWind_Buff4UNIQUE_Avatar_Sucrose_PermanentSkill_NetherWind_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Sucrose_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid",
+ "abilityName": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid_AddCount",
+ "abilityName": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid_AddCount",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid_ReduceColdDown",
+ "abilityName": "Avatar_Sucrose_NormalAttack_DamageHandler_Paranoid_ReduceColdDown",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Contellation_4",
+ "abilityName": "Avatar_Sucrose_Contellation_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose",
+ "abilityName": "Avatar_Sucrose",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_TeamConfig_01BS",
+ "abilityName": "Avatar_Sucrose_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_TeamConfig_01Loop",
+ "abilityName": "Avatar_Sucrose_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_TeamConfig_01AS",
+ "abilityName": "Avatar_Sucrose_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_ElementalBurst_Spine",
+ "abilityName": "Avatar_Sucrose_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_ElementalBurst_BS",
+ "abilityName": "Avatar_Sucrose_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_ElementalBurst",
+ "abilityName": "Avatar_Sucrose_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_ElementBurst",
+ "abilityName": "Avatar_Sucrose_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_ElementalBurst_Hit",
+ "abilityName": "Avatar_Sucrose_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_elementalBurst_BS_Normal",
+ "abilityName": "Avatar_Sucrose_elementalBurst_BS_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_Spine_Loop",
+ "abilityName": "Avatar_Sucrose_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Sucrose_PermanentSkill_Catalysa0Sucrose_PermanentSkill_Catalysa_ElemMasteryDelta",
+ "abilityName": "Avatar_Sucrose_PermanentSkill_Catalysa0Sucrose_PermanentSkill_Catalysa_ElemMasteryDelta",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Tartaglia.json b/data/json/avatar/ConfigAvatar_Tartaglia.json
new file mode 100644
index 0000000..87ca33f
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Tartaglia.json
@@ -0,0 +1,239 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Tartaglia_Arrow_FX",
+ "abilityName": "Avatar_Tartaglia_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_PressShoot",
+ "abilityName": "Avatar_Tartaglia_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_AimPressShoot",
+ "abilityName": "Avatar_Tartaglia_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_01",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_02",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_03",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_04",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_05",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_06",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_Aiming",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_Enchanted_Water",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_Enchanted_Water",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_Enchanted_WithoutWater",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_Enchanted_WithoutWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Tartaglia_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ChangeMainSkill",
+ "abilityName": "Avatar_Tartaglia_ChangeMainSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_WaterFlower_Handler",
+ "abilityName": "Avatar_Tartaglia_WaterFlower_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_EddyBlade",
+ "abilityName": "Avatar_Tartaglia_EddyBlade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Ripple",
+ "abilityName": "Avatar_Tartaglia_Ripple",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_EndOfIris",
+ "abilityName": "Avatar_Tartaglia_EndOfIris",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr",
+ "abilityName": "Avatar_Tartaglia_Gandalfr",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr_Remover",
+ "abilityName": "Avatar_Tartaglia_Gandalfr_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr_Attack05",
+ "abilityName": "Avatar_Tartaglia_Gandalfr_Attack05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr_Trigger",
+ "abilityName": "Avatar_Tartaglia_Gandalfr_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_GandalfrU",
+ "abilityName": "Avatar_Tartaglia_GandalfrU",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr_TriggerOff",
+ "abilityName": "Avatar_Tartaglia_Gandalfr_TriggerOff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Gandalfr_RemoverU",
+ "abilityName": "Avatar_Tartaglia_Gandalfr_RemoverU",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_AquariaBlade_Melee",
+ "abilityName": "Avatar_Tartaglia_AquariaBlade_Melee",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ThousandWithers7",
+ "abilityName": "Avatar_Tartaglia_ThousandWithers7",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_AquariaBlade_Range",
+ "abilityName": "Avatar_Tartaglia_AquariaBlade_Range",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_AquariaBlade_Range_Gadget",
+ "abilityName": "Avatar_Tartaglia_AquariaBlade_Range_Gadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Blade_Manager",
+ "abilityName": "Avatar_Tartaglia_Blade_Manager",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_AquariaBlade_CameraController",
+ "abilityName": "Avatar_Tartaglia_AquariaBlade_CameraController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_FallingAnthem",
+ "abilityName": "Avatar_Tartaglia_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia",
+ "abilityName": "Avatar_Tartaglia",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ShootArrow_Enchanted_Water2Avatar_Tartaglia_ShootArrow_Enchanted_WithoutWater",
+ "abilityName": "Avatar_Tartaglia_ShootArrow_Enchanted_Water2Avatar_Tartaglia_ShootArrow_Enchanted_WithoutWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_TeamConfig_01BS",
+ "abilityName": "Avatar_Tartaglia_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_TeamConfig_01Loop",
+ "abilityName": "Avatar_Tartaglia_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_TeamConfig_01AS",
+ "abilityName": "Avatar_Tartaglia_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_01_Spine",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_01_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_01_Hit",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_01_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_01_BS",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_01_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_02_Spine",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_02_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_02_Hit",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_02_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ElementalBurst_02_BS",
+ "abilityName": "Avatar_Tartaglia_ElementalBurst_02_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Spine_Loop",
+ "abilityName": "Avatar_Tartaglia_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_Spine",
+ "abilityName": "Avatar_Tartaglia_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_02_Spine",
+ "abilityName": "Avatar_Tartaglia_02_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tartaglia_ThousandWithers",
+ "abilityName": "Avatar_Tartaglia_ThousandWithers",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Tighnari.json b/data/json/avatar/ConfigAvatar_Tighnari.json
new file mode 100644
index 0000000..08f8586
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Tighnari.json
@@ -0,0 +1,194 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Tighnari_PressShoot",
+ "abilityName": "Avatar_Tighnari_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_AimPressShoot",
+ "abilityName": "Avatar_Tighnari_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Tighnari_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_Aiming",
+ "abilityName": "Avatar_Tighnari_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_PermanentSkill_1P",
+ "abilityName": "Avatar_Tighnari_PermanentSkill_1P",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_PermanentSkill_1",
+ "abilityName": "Avatar_Tighnari_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_01",
+ "abilityName": "Avatar_Tighnari_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_02",
+ "abilityName": "Avatar_Tighnari_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_03",
+ "abilityName": "Avatar_Tighnari_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_03_01",
+ "abilityName": "Avatar_Tighnari_ShootArrow_03_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ShootArrow_04",
+ "abilityName": "Avatar_Tighnari_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalArt",
+ "abilityName": "Avatar_Tighnari_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst",
+ "abilityName": "Avatar_Tighnari_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_BulletTrigger",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_Bullet_Damage1",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_Bullet_Damage1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_Bullet_Damage2",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_Bullet_Damage2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_PermanentSkill_2",
+ "abilityName": "Avatar_Tighnari_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_FallingAnthem",
+ "abilityName": "Avatar_Tighnari_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_Radar_Collectables_Sumeru",
+ "abilityName": "Avatar_Tighnari_Radar_Collectables_Sumeru",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari",
+ "abilityName": "Avatar_Tighnari",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_SetGadget",
+ "abilityName": "Avatar_Tighnari_SetGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_TeamConfig_01BS",
+ "abilityName": "Avatar_Tighnari_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_TeamConfig_01Loop",
+ "abilityName": "Avatar_Tighnari_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_TeamConfig_01AS",
+ "abilityName": "Avatar_Tighnari_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_Spine",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_Spine",
+ "abilityName": "Avatar_Tighnari_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_BS",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_01",
+ "abilityName": "Avatar_Tighnari_ElementBurst_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_05",
+ "abilityName": "Avatar_Tighnari_ElementBurst_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_02",
+ "abilityName": "Avatar_Tighnari_ElementBurst_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_06",
+ "abilityName": "Avatar_Tighnari_ElementBurst_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_03",
+ "abilityName": "Avatar_Tighnari_ElementBurst_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_07",
+ "abilityName": "Avatar_Tighnari_ElementBurst_07",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_04",
+ "abilityName": "Avatar_Tighnari_ElementBurst_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementBurst_08",
+ "abilityName": "Avatar_Tighnari_ElementBurst_08",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_ElementalBurst_Hit",
+ "abilityName": "Avatar_Tighnari_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tighnari_Spine_Loop",
+ "abilityName": "Avatar_Tighnari_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Tohma.json b/data/json/avatar/ConfigAvatar_Tohma.json
new file mode 100644
index 0000000..6b3ec97
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Tohma.json
@@ -0,0 +1,114 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Tohma_ExtraAttack",
+ "abilityName": "Avatar_Tohma_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Tohma_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Tohma_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalArt_Handler",
+ "abilityName": "Avatar_Tohma_ElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_HasTeamShield",
+ "abilityName": "Avatar_Tohma_HasTeamShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_Has_ELementalBurstBuff",
+ "abilityName": "Avatar_Tohma_Has_ELementalBurstBuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalArt_Strike",
+ "abilityName": "Avatar_Tohma_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalBurst_Start",
+ "abilityName": "Avatar_Tohma_ElementalBurst_Start",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalBurst_Buff_Handler",
+ "abilityName": "Avatar_Tohma_ElementalBurst_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalBurstPos",
+ "abilityName": "Avatar_Tohma_ElementalBurstPos",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalBurstDir",
+ "abilityName": "Avatar_Tohma_ElementalBurstDir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_ElementalBurst_TriggerAttack",
+ "abilityName": "Avatar_Tohma_ElementalBurst_TriggerAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Tohma_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_FallingAnthem",
+ "abilityName": "Avatar_Tohma_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma",
+ "abilityName": "Avatar_Tohma",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_Skill_ElementalArt",
+ "abilityName": "Avatar_Tohma_Skill_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_Skill_ElementalArt_AS",
+ "abilityName": "Avatar_Tohma_Skill_ElementalArt_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_Skill_ElementalBurst",
+ "abilityName": "Avatar_Tohma_Skill_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_TeamConfig_01BS",
+ "abilityName": "Avatar_Tohma_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_TeamConfig_01Loop",
+ "abilityName": "Avatar_Tohma_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_TeamConfig_01AS",
+ "abilityName": "Avatar_Tohma_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Tohma_Skill_ElementalBurst_AS",
+ "abilityName": "Avatar_Tohma_Skill_ElementalBurst_AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Venti.json b/data/json/avatar/ConfigAvatar_Venti.json
new file mode 100644
index 0000000..3a00424
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Venti.json
@@ -0,0 +1,194 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Venti_WindBlade_Test",
+ "abilityName": "Avatar_Venti_WindBlade_Test",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_WindBlade",
+ "abilityName": "Avatar_Venti_WindBlade",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Arrow_FX",
+ "abilityName": "Avatar_Venti_Arrow_FX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_PressShoot",
+ "abilityName": "Avatar_Venti_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_AimPressShoot",
+ "abilityName": "Avatar_Venti_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_01",
+ "abilityName": "Avatar_Venti_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_02",
+ "abilityName": "Avatar_Venti_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_03",
+ "abilityName": "Avatar_Venti_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_04",
+ "abilityName": "Avatar_Venti_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_05",
+ "abilityName": "Avatar_Venti_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_06",
+ "abilityName": "Avatar_Venti_ShootArrow_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_Aiming",
+ "abilityName": "Avatar_Venti_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_Enchanted_Wind",
+ "abilityName": "Avatar_Venti_ShootArrow_Enchanted_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootArrow_Enchanted_WithoutWind",
+ "abilityName": "Avatar_Venti_ShootArrow_Enchanted_WithoutWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Venti_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ChangeMainSkill",
+ "abilityName": "Avatar_Venti_ChangeMainSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Hurricane",
+ "abilityName": "Avatar_Venti_Hurricane",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Hurricane_Mix",
+ "abilityName": "Avatar_Venti_Hurricane_Mix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Hurricane_Dissipate",
+ "abilityName": "Avatar_Venti_Hurricane_Dissipate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Hurricane_DropBall",
+ "abilityName": "Avatar_Venti_Hurricane_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_FlyChampion",
+ "abilityName": "Avatar_Venti_FlyChampion",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_FlyStamina_Reduction",
+ "abilityName": "Avatar_Venti_FlyStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Talnet_ShootArrow_Enchanted_Wind",
+ "abilityName": "Avatar_Venti_Talnet_ShootArrow_Enchanted_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Talnet_ShootArrow_Enchanted_WithoutWind",
+ "abilityName": "Avatar_Venti_Talnet_ShootArrow_Enchanted_WithoutWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_WindField",
+ "abilityName": "Avatar_Venti_WindField",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_FallingAnthem",
+ "abilityName": "Avatar_Venti_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti",
+ "abilityName": "Avatar_Venti",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Talnet_ShootArrow_Enchanted_Wind4Avatar_Venti_Talnet_ShootArrow_Enchanted_WithoutWind",
+ "abilityName": "Avatar_Venti_Talnet_ShootArrow_Enchanted_Wind4Avatar_Venti_Talnet_ShootArrow_Enchanted_WithoutWind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_TeamConfig_01BS",
+ "abilityName": "Avatar_Venti_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_TeamConfig_01Loop",
+ "abilityName": "Avatar_Venti_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_TeamConfig_01AS",
+ "abilityName": "Avatar_Venti_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ElementalBurst_Spine",
+ "abilityName": "Avatar_Venti_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ElementalBurst_BS",
+ "abilityName": "Avatar_Venti_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ElementalBurst",
+ "abilityName": "Avatar_Venti_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ElementBurst",
+ "abilityName": "Avatar_Venti_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_ElementalBurst_Hit",
+ "abilityName": "Avatar_Venti_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_Spine_Loop",
+ "abilityName": "Avatar_Venti_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Venti_FlyStamina_Reduction_",
+ "abilityName": "Avatar_Venti_FlyStamina_Reduction_",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Wanderer.json b/data/json/avatar/ConfigAvatar_Wanderer.json
new file mode 100644
index 0000000..831c98f
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Wanderer.json
@@ -0,0 +1,569 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Handler",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack",
+ "abilityName": "Avatar_Wanderer_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Charge",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Charge_HasTarget",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Charge_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Charge_NoTarget",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Charge_NoTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Initiate",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Air_Charge",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Air_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Air_Charge_HasTarget",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Air_Charge_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Air_Charge_NoTarget",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Air_Charge_NoTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ExtraAttack_Air_Initiate",
+ "abilityName": "Avatar_Wanderer_ExtraAttack_Air_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAir_Flag",
+ "abilityName": "Avatar_Wanderer_HoverAir_Flag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HatVisible_Flag",
+ "abilityName": "Avatar_Wanderer_HatVisible_Flag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HatVisible_Hide_Handler",
+ "abilityName": "Avatar_Wanderer_HatVisible_Hide_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HatVisible_SetGV",
+ "abilityName": "Avatar_Wanderer_HatVisible_SetGV",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Attack01",
+ "abilityName": "Avatar_Wanderer_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Attack02",
+ "abilityName": "Avatar_Wanderer_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Attack03",
+ "abilityName": "Avatar_Wanderer_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_Bullet_1",
+ "abilityName": "Avatar_Wanderer_NormalAttack_Bullet_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_01_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_NormalAttack_01_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_01_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_Bullet_2",
+ "abilityName": "Avatar_Wanderer_NormalAttack_Bullet_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_02_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_NormalAttack_02_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_02_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_Bullet_3",
+ "abilityName": "Avatar_Wanderer_NormalAttack_Bullet_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_03_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_NormalAttack_03_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_03_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_Bullet_4",
+ "abilityName": "Avatar_Wanderer_NormalAttack_Bullet_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_04_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_NormalAttack_04_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity6Avatar_Wanderer_NormalAttack_04_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Launch",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Launch",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Ring_Handler",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Ring_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Kasa_Ring_Idle",
+ "abilityName": "Avatar_Wanderer_Kasa_Ring_Idle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Kasa_Ring_Move",
+ "abilityName": "Avatar_Wanderer_Kasa_Ring_Move",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Kasa_Ring_Dash",
+ "abilityName": "Avatar_Wanderer_Kasa_Ring_Dash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Kasa_Ring_DashHold",
+ "abilityName": "Avatar_Wanderer_Kasa_Ring_DashHold",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Kasa_Ring_Recovery",
+ "abilityName": "Avatar_Wanderer_Kasa_Ring_Recovery",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAir_Mark",
+ "abilityName": "Avatar_Wanderer_HoverAir_Mark",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Ring",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Ring",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Remover",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Constellation_6_Handler",
+ "abilityName": "Avatar_Wanderer_Constellation_6_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Constellation_6_Count",
+ "abilityName": "Avatar_Wanderer_Constellation_6_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Constellation_6_Buff",
+ "abilityName": "Avatar_Wanderer_Constellation_6_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Dash",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Dash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Up",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Up",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Recovery",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Recovery",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HitFallToGround_Visible_Handler",
+ "abilityName": "Avatar_Wanderer_HitFallToGround_Visible_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Recovery_Handler",
+ "abilityName": "Avatar_Wanderer_Recovery_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Recovery_AddEndure",
+ "abilityName": "Avatar_Wanderer_Recovery_AddEndure",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_1",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_2",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_3",
+ "abilityName": "Avatar_Wanderer_ElementalArt_HoverAir_Shoot_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_1",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_01_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_HoverAttack_01_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_01_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_2",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_02_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_HoverAttack_02_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_02_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_3",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_03_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_HoverAttack_03_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_03_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_4",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_04_Bullet_VFX",
+ "abilityName": "Avatar_Wanderer_HoverAttack_04_Bullet_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity_Timer",
+ "abilityName": "Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity",
+ "abilityName": "Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity5Avatar_Wanderer_HoverAttack_04_Bullet_AngularVelocity",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_1_Extra",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_1_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_2_Extra",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_2_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_3_Extra",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_3_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_4_Extra",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_4_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst",
+ "abilityName": "Avatar_Wanderer_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Emotion",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Emotion",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_SkinControl",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_SkinControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_FogFX01",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_FogFX01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Bullet",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_PermanentSkill_1",
+ "abilityName": "Avatar_Wanderer_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_ResetMixTypey",
+ "abilityName": "Avatar_Wanderer_ElementalArt_ResetMixTypey",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_ResetMixType",
+ "abilityName": "Avatar_Wanderer_ElementalArt_ResetMixType",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_PermanentSkill_2",
+ "abilityName": "Avatar_Wanderer_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_PermanentSkill_2_HasTarget",
+ "abilityName": "Avatar_Wanderer_PermanentSkill_2_HasTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_PermanentSkill_2_NoTarget",
+ "abilityName": "Avatar_Wanderer_PermanentSkill_2_NoTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_PermanentSkill_2_RandomCheck",
+ "abilityName": "Avatar_Wanderer_PermanentSkill_2_RandomCheck",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_HoverDash",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_HoverDash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Trail",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Trail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Core",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Core",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Hit",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_Extra_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_FallingAnthem",
+ "abilityName": "Avatar_Wanderer_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_FallAnthem_BS_Wind",
+ "abilityName": "Avatar_Wanderer_FallAnthem_BS_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_FallAnthem_Self_Wind",
+ "abilityName": "Avatar_Wanderer_FallAnthem_Self_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_FallAnthem_Strike_01_Wind",
+ "abilityName": "Avatar_Wanderer_FallAnthem_Strike_01_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_FallAnthem_Strike_02_Wind",
+ "abilityName": "Avatar_Wanderer_FallAnthem_Strike_02_Wind",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer",
+ "abilityName": "Avatar_Wanderer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_TeamConfig_01BS",
+ "abilityName": "Avatar_Wanderer_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_TeamConfig_01Loop",
+ "abilityName": "Avatar_Wanderer_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_TeamConfig_01AS",
+ "abilityName": "Avatar_Wanderer_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalArt_Bullet_HoverDash_Trigger5Avatar_Wanderer_ElementalArt_Bullet_HoverDash_Trigger",
+ "abilityName": "Avatar_Wanderer_ElementalArt_Bullet_HoverDash_Trigger5Avatar_Wanderer_ElementalArt_Bullet_HoverDash_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Spine",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Spine_Foot",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Spine_Foot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Spine",
+ "abilityName": "Avatar_Wanderer_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_02_Spine",
+ "abilityName": "Avatar_Wanderer_02_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_BS",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_ElementalBurst_Hit",
+ "abilityName": "Avatar_Wanderer_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Spine_Loop_Hand",
+ "abilityName": "Avatar_Wanderer_Spine_Loop_Hand",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wanderer_Spine_Loop",
+ "abilityName": "Avatar_Wanderer_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Wriothesley.json b/data/json/avatar/ConfigAvatar_Wriothesley.json
new file mode 100644
index 0000000..1374037
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Wriothesley.json
@@ -0,0 +1,264 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Strike",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_NormalAttack_Damage_Handler",
+ "abilityName": "Avatar_Wriothesley_NormalAttack_Damage_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Handler",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Handler0Avatar_Wriothesley_AttackSpeed_Buff_Team_Handler",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Handler0Avatar_Wriothesley_AttackSpeed_Buff_Team_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Timer",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Team_Timer",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Team_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Handler",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Self_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Self0Avatar_Wriothesley_AttackSpeed_Buff_Team_Handler",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Self0Avatar_Wriothesley_AttackSpeed_Buff_Team_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Team",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Team",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_AttackSpeed_Buff_Self",
+ "abilityName": "Avatar_Wriothesley_AttackSpeed_Buff_Self",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalArt_Buff",
+ "abilityName": "Avatar_Wriothesley_ElementalArt_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalArt_Buff_Handler",
+ "abilityName": "Avatar_Wriothesley_ElementalArt_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_NormalAttack_Buff_Handler",
+ "abilityName": "Avatar_Wriothesley_NormalAttack_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalArt_LoseHP",
+ "abilityName": "Avatar_Wriothesley_ElementalArt_LoseHP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalArt_GenerateEnergy",
+ "abilityName": "Avatar_Wriothesley_ElementalArt_GenerateEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_CD_Handler",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_CD_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_Predicate",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_Predicate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_CD",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_CD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_Trigger",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_Trigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_Handler",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Buff_HealHP",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Buff_HealHP",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalArt_Buff_HandlerM",
+ "abilityName": "Avatar_Wriothesley_ElementalArt_Buff_HandlerM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalBurst_Cast",
+ "abilityName": "Avatar_Wriothesley_ElementalBurst_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Wriothesley_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalBurst_Bullet",
+ "abilityName": "Avatar_Wriothesley_ElementalBurst_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ElementalBurst_Arkhe_CD_Handler2Avatar_Wriothesley_ElementalBurst_Arkhe_CD_Handler",
+ "abilityName": "Avatar_Wriothesley_ElementalBurst_Arkhe_CD_Handler2Avatar_Wriothesley_ElementalBurst_Arkhe_CD_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_FallingAnthem",
+ "abilityName": "Avatar_Wriothesley_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_Handler3",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_Handler3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_L_Handler",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_L_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_R_Handler",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_R_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_L_Dissolve",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_L_Dissolve",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_R_Dissolve",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_R_Dissolve",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_L_Enable",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_L_Enable",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_R_Enable",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_R_Enable",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_ElementalBurst_Dissolveff",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_ElementalBurst_Dissolveff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_Handler_VFX",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_Handler_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_Initialize_2",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_Initialize_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_L_Disable",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_L_Disable",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_R_Disable",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_R_Disable",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_L_Disabler",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_L_Disabler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_R_Disabler",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_R_Disabler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_ElementalBurst_Dissolve",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_ElementalBurst_Dissolve",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_Initialize",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley",
+ "abilityName": "Avatar_Wriothesley",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_TeamConfig_01BS",
+ "abilityName": "Avatar_Wriothesley_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_TeamConfig_01Loop",
+ "abilityName": "Avatar_Wriothesley_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_TeamConfig_01AS",
+ "abilityName": "Avatar_Wriothesley_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_Gauntlet_Handler",
+ "abilityName": "Avatar_Wriothesley_Gauntlet_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Strike0Wriothesley_ExtraAttack_Constellation_6_CritRate",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Strike0Wriothesley_ExtraAttack_Constellation_6_CritRate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Wriothesley_ExtraAttack_Strike0Wriothesley_ExtraAttack_Constellation_6_CritHurt",
+ "abilityName": "Avatar_Wriothesley_ExtraAttack_Strike0Wriothesley_ExtraAttack_Constellation_6_CritHurt",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Xiangling.json b/data/json/avatar/ConfigAvatar_Xiangling.json
new file mode 100644
index 0000000..b11c016
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Xiangling.json
@@ -0,0 +1,169 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Xiangling_ExtraAttack_Damage",
+ "abilityName": "Avatar_Xiangling_ExtraAttack_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ExtraAttack",
+ "abilityName": "Avatar_Xiangling_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Xiangling_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Xiangling_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_Eff_Attack_04",
+ "abilityName": "Avatar_Xiangling_Eff_Attack_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaBornEffect",
+ "abilityName": "Avatar_Xiangling_PandaBornEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaBornEffect_Run",
+ "abilityName": "Avatar_Xiangling_PandaBornEffect_Run",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaFire",
+ "abilityName": "Avatar_Xiangling_PandaFire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaFire_Run",
+ "abilityName": "Avatar_Xiangling_PandaFire_Run",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaFireAim",
+ "abilityName": "Avatar_Xiangling_PandaFireAim",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaFire_Effect",
+ "abilityName": "Avatar_Xiangling_PandaFire_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaFire_Attack",
+ "abilityName": "Avatar_Xiangling_PandaFire_Attack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_PandaPepper",
+ "abilityName": "Avatar_Xiangling_PandaPepper",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FireCircleSkillStart",
+ "abilityName": "Avatar_Xiangling_FireCircleSkillStart",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FireCircle01",
+ "abilityName": "Avatar_Xiangling_FireCircle01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FireCircle02",
+ "abilityName": "Avatar_Xiangling_FireCircle02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FireCircle03",
+ "abilityName": "Avatar_Xiangling_FireCircle03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FireCircle",
+ "abilityName": "Avatar_Xiangling_FireCircle",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_NormalAttackDamage",
+ "abilityName": "Avatar_Xiangling_NormalAttackDamage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_FallingAnthem",
+ "abilityName": "Avatar_Xiangling_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling",
+ "abilityName": "Avatar_Xiangling",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_TeamConfig_01BS",
+ "abilityName": "Avatar_Xiangling_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_TeamConfig_01Loop",
+ "abilityName": "Avatar_Xiangling_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_TeamConfig_01AS",
+ "abilityName": "Avatar_Xiangling_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ElementalBurst_Spine",
+ "abilityName": "Avatar_Xiangling_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ElementalBurst_BS",
+ "abilityName": "Avatar_Xiangling_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ElementalBurst",
+ "abilityName": "Avatar_Xiangling_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ElementBurst",
+ "abilityName": "Avatar_Xiangling_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_ElementalBurst_Hit",
+ "abilityName": "Avatar_Xiangling_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_elementalBurst_Normal",
+ "abilityName": "Avatar_Xiangling_elementalBurst_Normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_Spine_Loop",
+ "abilityName": "Avatar_Xiangling_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_Spine_Loop_BG",
+ "abilityName": "Avatar_Xiangling_Spine_Loop_BG",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiangling_Spine",
+ "abilityName": "Avatar_Xiangling_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Xiao.json b/data/json/avatar/ConfigAvatar_Xiao.json
new file mode 100644
index 0000000..f90ccc7
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Xiao.json
@@ -0,0 +1,134 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Xiao_ExtraAttack",
+ "abilityName": "Avatar_Xiao_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_DevilDash_Handler",
+ "abilityName": "Avatar_Xiao_DevilDash_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_DevilDash_Bullet",
+ "abilityName": "Avatar_Xiao_DevilDash_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_CloseCollider",
+ "abilityName": "Avatar_Xiao_CloseCollider",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_FallingAnthem",
+ "abilityName": "Avatar_Xiao_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_HowlingSoul_CameraController",
+ "abilityName": "Avatar_Xiao_HowlingSoul_CameraController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_HowlingSoul",
+ "abilityName": "Avatar_Xiao_HowlingSoul",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Xiao_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_CoreSkill",
+ "abilityName": "Avatar_Xiao_CoreSkill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_FallingDamageReduction",
+ "abilityName": "Avatar_Xiao_FallingDamageReduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_ClimbStamina_Reduction",
+ "abilityName": "Avatar_Xiao_ClimbStamina_Reduction",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_QuestAbility_XiaoTriggerElementalBurst",
+ "abilityName": "Avatar_QuestAbility_XiaoTriggerElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao",
+ "abilityName": "Avatar_Xiao",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Skill_DevilDash",
+ "abilityName": "Avatar_Xiao_Skill_DevilDash",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Skill_DevilDash_AS",
+ "abilityName": "Avatar_Xiao_Skill_DevilDash_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Skill_DevilDashAir",
+ "abilityName": "Avatar_Xiao_Skill_DevilDashAir",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Skill_DevilDashAir_AS",
+ "abilityName": "Avatar_Xiao_Skill_DevilDashAir_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_TeamConfig_01BS",
+ "abilityName": "Avatar_Xiao_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_TeamConfig_01Loop",
+ "abilityName": "Avatar_Xiao_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_TeamConfig_01AS",
+ "abilityName": "Avatar_Xiao_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_ElementalBurst_Spine",
+ "abilityName": "Avatar_Xiao_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_ElementalBurst_BS",
+ "abilityName": "Avatar_Xiao_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_ElementalBurst_Hit",
+ "abilityName": "Avatar_Xiao_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Spine_Loop",
+ "abilityName": "Avatar_Xiao_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_Spine",
+ "abilityName": "Avatar_Xiao_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xiao_02_Spine",
+ "abilityName": "Avatar_Xiao_02_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Xingqiu.json b/data/json/avatar/ConfigAvatar_Xingqiu.json
new file mode 100644
index 0000000..812ca6e
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Xingqiu.json
@@ -0,0 +1,189 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Xingqiu_ExtraAttack",
+ "abilityName": "Avatar_Xingqiu_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Spoondrift",
+ "abilityName": "Avatar_Xingqiu_Spoondrift",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_PhantomShield",
+ "abilityName": "Avatar_Xingqiu_PhantomShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Minazuki",
+ "abilityName": "Avatar_Xingqiu_Minazuki",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Minazuki_Attack01",
+ "abilityName": "Avatar_Xingqiu_Minazuki_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Minazuki_Attack02",
+ "abilityName": "Avatar_Xingqiu_Minazuki_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Minazuki_Attack03",
+ "abilityName": "Avatar_Xingqiu_Minazuki_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_PhantomBurst_GainEnergy",
+ "abilityName": "Avatar_Xingqiu_PhantomBurst_GainEnergy",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_PhantomBurst_Debuff",
+ "abilityName": "Avatar_Xingqiu_PhantomBurst_Debuff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_DamageHandler",
+ "abilityName": "Avatar_Xingqiu_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_FallingAnthem",
+ "abilityName": "Avatar_Xingqiu_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu",
+ "abilityName": "Avatar_Xingqiu",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Skill_ElmentalArt_01",
+ "abilityName": "Avatar_Xingqiu_Skill_ElmentalArt_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Skill_ElmentalArt_01_AS",
+ "abilityName": "Avatar_Xingqiu_Skill_ElmentalArt_01_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Skill_ElmentalBurst",
+ "abilityName": "Avatar_Xingqiu_Skill_ElmentalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Skill_ElmentalBurst_AS",
+ "abilityName": "Avatar_Xingqiu_Skill_ElmentalBurst_AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_TeamConfig_01BS",
+ "abilityName": "Avatar_Xingqiu_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_TeamConfig_01Loop",
+ "abilityName": "Avatar_Xingqiu_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_TeamConfig_01AS",
+ "abilityName": "Avatar_Xingqiu_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementalBurst_Spine",
+ "abilityName": "Avatar_Xingqiu_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementalBurst_BS",
+ "abilityName": "Avatar_Xingqiu_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementalBurst",
+ "abilityName": "Avatar_Xingqiu_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_01",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_06",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_02",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_07",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_07",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_03",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_08",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_08",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_04",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_09",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_09",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_05",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementBurst_10",
+ "abilityName": "Avatar_Xingqiu_ElementBurst_10",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_ElementalBurst_Hit",
+ "abilityName": "Avatar_Xingqiu_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_elementalBurst_normal",
+ "abilityName": "Avatar_Xingqiu_elementalBurst_normal",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_elementalBurst_buff",
+ "abilityName": "Avatar_Xingqiu_elementalBurst_buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Spine_Loop",
+ "abilityName": "Avatar_Xingqiu_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xingqiu_Spine",
+ "abilityName": "Avatar_Xingqiu_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Xinyan.json b/data/json/avatar/ConfigAvatar_Xinyan.json
new file mode 100644
index 0000000..3245e11
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Xinyan.json
@@ -0,0 +1,99 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Xinyan_ExtraAttack",
+ "abilityName": "Avatar_Xinyan_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt_Hit",
+ "abilityName": "Avatar_Xinyan_ElementalArt_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt_Shield_1",
+ "abilityName": "Avatar_Xinyan_ElementalArt_Shield_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt_Shield_2",
+ "abilityName": "Avatar_Xinyan_ElementalArt_Shield_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt_Shield_3",
+ "abilityName": "Avatar_Xinyan_ElementalArt_Shield_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt",
+ "abilityName": "Avatar_Xinyan_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalArt_Shield_3_Explosion",
+ "abilityName": "Avatar_Xinyan_ElementalArt_Shield_3_Explosion",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalBurst_Initiate",
+ "abilityName": "Avatar_Xinyan_ElementalBurst_Initiate",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalBurst_Hit",
+ "abilityName": "Avatar_Xinyan_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalBurst_Effect",
+ "abilityName": "Avatar_Xinyan_ElementalBurst_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalBurst_Fire",
+ "abilityName": "Avatar_Xinyan_ElementalBurst_Fire",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_ElementalBurst_CameraExit",
+ "abilityName": "Avatar_Xinyan_ElementalBurst_CameraExit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_FallingAnthem",
+ "abilityName": "Avatar_Xinyan_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Xinyan_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan",
+ "abilityName": "Avatar_Xinyan",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_TeamConfig_01BS",
+ "abilityName": "Avatar_Xinyan_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_TeamConfig_01Loop",
+ "abilityName": "Avatar_Xinyan_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Xinyan_TeamConfig_01AS",
+ "abilityName": "Avatar_Xinyan_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_PlayGuitar01_Xinyan",
+ "abilityName": "Avatar_PlayGuitar01_Xinyan",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Yae.json b/data/json/avatar/ConfigAvatar_Yae.json
new file mode 100644
index 0000000..0589344
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Yae.json
@@ -0,0 +1,224 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack",
+ "abilityName": "Avatar_Yae_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_TriggerBullet",
+ "abilityName": "Avatar_Yae_ExtraAttack_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_Damage_1",
+ "abilityName": "Avatar_Yae_ExtraAttack_Damage_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_Damage_2",
+ "abilityName": "Avatar_Yae_ExtraAttack_Damage_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_Damage_3",
+ "abilityName": "Avatar_Yae_ExtraAttack_Damage_3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_Damage_4",
+ "abilityName": "Avatar_Yae_ExtraAttack_Damage_4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ExtraAttack_Damage_5",
+ "abilityName": "Avatar_Yae_ExtraAttack_Damage_5",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack_Hit",
+ "abilityName": "Avatar_Yae_Attack_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack01",
+ "abilityName": "Avatar_Yae_Attack01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack02",
+ "abilityName": "Avatar_Yae_Attack02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack03",
+ "abilityName": "Avatar_Yae_Attack03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack01_Damage",
+ "abilityName": "Avatar_Yae_Attack01_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack02_Damage",
+ "abilityName": "Avatar_Yae_Attack02_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Attack03_Damage",
+ "abilityName": "Avatar_Yae_Attack03_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt_ElderBrain",
+ "abilityName": "Avatar_Yae_ElementalArt_ElderBrain",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt",
+ "abilityName": "Avatar_Yae_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt_Foxtail",
+ "abilityName": "Avatar_Yae_ElementalArt_Foxtail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt_Retreat_Foxtail",
+ "abilityName": "Avatar_Yae_ElementalArt_Retreat_Foxtail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt_Foxtail_Remover",
+ "abilityName": "Avatar_Yae_ElementalArt_Foxtail_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalArt_Air",
+ "abilityName": "Avatar_Yae_ElementalArt_Air",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FoxTower_ThunderFall_Level1",
+ "abilityName": "Avatar_Yae_FoxTower_ThunderFall_Level1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FoxTower_ThunderFall_Level2",
+ "abilityName": "Avatar_Yae_FoxTower_ThunderFall_Level2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FoxTower_ThunderFall_Level3",
+ "abilityName": "Avatar_Yae_FoxTower_ThunderFall_Level3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FoxTower_ThunderFall_Level4",
+ "abilityName": "Avatar_Yae_FoxTower_ThunderFall_Level4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_CameraController",
+ "abilityName": "Avatar_Yae_ElementalBurst_CameraController",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_PostEffect",
+ "abilityName": "Avatar_Yae_ElementalBurst_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Yae_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_Mark_Tower",
+ "abilityName": "Avatar_Yae_ElementalBurst_Mark_Tower",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_Clear_Tower",
+ "abilityName": "Avatar_Yae_ElementalBurst_Clear_Tower",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_PermanentSkill_1",
+ "abilityName": "Avatar_Yae_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_PermanentSkill_2",
+ "abilityName": "Avatar_Yae_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Constellation_6",
+ "abilityName": "Avatar_Yae_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FallingAnthem_Foxtail",
+ "abilityName": "Avatar_Yae_FallingAnthem_Foxtail",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_FallingAnthem",
+ "abilityName": "Avatar_Yae_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae",
+ "abilityName": "Avatar_Yae",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_TeamConfig_01BS",
+ "abilityName": "Avatar_Yae_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_TeamConfig_01Loop",
+ "abilityName": "Avatar_Yae_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_TeamConfig_01AS",
+ "abilityName": "Avatar_Yae_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_Spine",
+ "abilityName": "Avatar_Yae_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_BS",
+ "abilityName": "Avatar_Yae_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_Hit",
+ "abilityName": "Avatar_Yae_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_ElementalBurst_Buff",
+ "abilityName": "Avatar_Yae_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yae_Spine_Loop",
+ "abilityName": "Avatar_Yae_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_YaeMiko",
+ "abilityName": "Avatar_YaeMiko",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Yaoyao.json b/data/json/avatar/ConfigAvatar_Yaoyao.json
new file mode 100644
index 0000000..bd6c35f
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Yaoyao.json
@@ -0,0 +1,209 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Yaoyao_ExtraAttack",
+ "abilityName": "Avatar_Yaoyao_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ExtraAttack_CreateBullet",
+ "abilityName": "Avatar_Yaoyao_ExtraAttack_CreateBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Yaoyao_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt",
+ "abilityName": "Avatar_Yaoyao_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_CreateRabbit",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_CreateRabbit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_CreateRabbitM",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_CreateRabbitM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_CreateGadget",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_CreateGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_StrikeL7",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_StrikeL7",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Strike",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_CreateGadget",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_CreateGadget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Yaoyao_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_FallingAnthem",
+ "abilityName": "Avatar_Yaoyao_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Turnip_Bullet",
+ "abilityName": "Avatar_Yaoyao_Turnip_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Turnip",
+ "abilityName": "Avatar_Yaoyao_Turnip",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Golden_Turnip_Bullet",
+ "abilityName": "Avatar_Yaoyao_Golden_Turnip_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Golden_Turnip",
+ "abilityName": "Avatar_Yaoyao_Golden_Turnip",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Turnip_Bullet_Parabola",
+ "abilityName": "Avatar_Yaoyao_Turnip_Bullet_Parabola",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_Rabbit",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_Rabbit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_CreateGadgeth",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_CreateGadgeth",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw_Speed_Fix",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw_Speed_Fix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Rabbit",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Rabbit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw_Pre",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw_Pre",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw_Pre_BulletTrigger",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw_Pre_BulletTrigger",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_CreateGadgeth",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_CreateGadgeth",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Rabbit_Throw",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_PermanentSkill_1",
+ "abilityName": "Avatar_Yaoyao_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_PermanentSkill_2",
+ "abilityName": "Avatar_Yaoyao_PermanentSkill_2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao",
+ "abilityName": "Avatar_Yaoyao",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw1Avatar_Yaoyao_ElementalArt_Rabbit_Throw_Speed_Fix",
+ "abilityName": "Avatar_Yaoyao_ElementalArt_Rabbit_Throw1Avatar_Yaoyao_ElementalArt_Rabbit_Throw_Speed_Fix",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_TeamConfig_01BS",
+ "abilityName": "Avatar_Yaoyao_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_TeamConfig_01Loop",
+ "abilityName": "Avatar_Yaoyao_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_TeamConfig_01AS",
+ "abilityName": "Avatar_Yaoyao_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Spine",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_BS_Rabbit",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_BS_Rabbit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_BS",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementBurst",
+ "abilityName": "Avatar_Yaoyao_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Hit",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_ElementalBurst_Buff",
+ "abilityName": "Avatar_Yaoyao_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yaoyao_Spine_Loop",
+ "abilityName": "Avatar_Yaoyao_Spine_Loop",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Yelan.json b/data/json/avatar/ConfigAvatar_Yelan.json
new file mode 100644
index 0000000..fcc89aa
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Yelan.json
@@ -0,0 +1,474 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Activity_CharAmusement_Yelan_ResetCD",
+ "abilityName": "Avatar_Activity_CharAmusement_Yelan_ResetCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Activity_CharAmusement_Yelan_ResetCD_Delay1Avatar_Activity_CharAmusement_Yelan_ResetCD_Delay",
+ "abilityName": "Avatar_Activity_CharAmusement_Yelan_ResetCD_Delay1Avatar_Activity_CharAmusement_Yelan_ResetCD_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PressShoot",
+ "abilityName": "Avatar_Yelan_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_AimPressShoot",
+ "abilityName": "Avatar_Yelan_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Yelan_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_01",
+ "abilityName": "Avatar_Yelan_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_02",
+ "abilityName": "Avatar_Yelan_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_03",
+ "abilityName": "Avatar_Yelan_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_04",
+ "abilityName": "Avatar_Yelan_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_05",
+ "abilityName": "Avatar_Yelan_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_06",
+ "abilityName": "Avatar_Yelan_ShootArrow_06",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_Aiming",
+ "abilityName": "Avatar_Yelan_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_Bullet",
+ "abilityName": "Avatar_Yelan_ShootArrow_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_Bullet_Last",
+ "abilityName": "Avatar_Yelan_ShootArrow_Bullet_Last",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_Enchanted_WithOutWater",
+ "abilityName": "Avatar_Yelan_ShootArrow_Enchanted_WithOutWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShootArrow_Enchanted_WithWater",
+ "abilityName": "Avatar_Yelan_ShootArrow_Enchanted_WithWater",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_SneakArrow",
+ "abilityName": "Avatar_Yelan_SneakArrow",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Sneak_Shoot",
+ "abilityName": "Avatar_Yelan_Sneak_Shoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalArt_Check",
+ "abilityName": "Avatar_Yelan_ElementalArt_Check",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Initialize",
+ "abilityName": "Avatar_Yelan_QuietStep_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect_Line",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect_Line",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect_Line_Remover",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect_Line_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Weather",
+ "abilityName": "Avatar_Yelan_QuietStep_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_MaxTimer",
+ "abilityName": "Avatar_Yelan_QuietStep_MaxTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TurndDirection_Add",
+ "abilityName": "Avatar_Yelan_QuietStep_TurndDirection_Add",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TurndDirection_Remove",
+ "abilityName": "Avatar_Yelan_QuietStep_TurndDirection_Remove",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TurndDirection",
+ "abilityName": "Avatar_Yelan_QuietStep_TurndDirection",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_StrikeEndEffect",
+ "abilityName": "Avatar_Yelan_QuietStep_StrikeEndEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_StopEndEffect",
+ "abilityName": "Avatar_Yelan_QuietStep_StopEndEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_LineStrike_Remover",
+ "abilityName": "Avatar_Yelan_QuietStep_LineStrike_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalArt_DropBall_Handler",
+ "abilityName": "Avatar_Yelan_ElementalArt_DropBall_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect_Line_Handler_DelayM",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect_Line_Handler_DelayM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect_Line_Handler",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect_Line_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_Effect_Line_Handler_Delay",
+ "abilityName": "Avatar_Yelan_QuietStep_Effect_Line_Handler_Delay",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_LineStrike",
+ "abilityName": "Avatar_Yelan_QuietStep_LineStrike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalArt_ScreenEffect",
+ "abilityName": "Avatar_Yelan_ElementalArt_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_SwitchJumpSprint",
+ "abilityName": "Avatar_Yelan_QuietStep_SwitchJumpSprint",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalArt_TriggerCollision",
+ "abilityName": "Avatar_Yelan_ElementalArt_TriggerCollision",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TriggerConstellation",
+ "abilityName": "Avatar_Yelan_QuietStep_TriggerConstellation",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TriggerBullet",
+ "abilityName": "Avatar_Yelan_QuietStep_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_FireBomb",
+ "abilityName": "Avatar_Yelan_QuietStep_FireBomb",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TriggerConstellationM",
+ "abilityName": "Avatar_Yelan_QuietStep_TriggerConstellationM",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_CollisionDetect",
+ "abilityName": "Avatar_Yelan_QuietStep_CollisionDetect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_ResetSneak",
+ "abilityName": "Avatar_Yelan_QuietStep_ResetSneak",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_QuietStep_TimeBomb_OnMonster",
+ "abilityName": "Avatar_Yelan_QuietStep_TimeBomb_OnMonster",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalArt_QuietStep_Bullet",
+ "abilityName": "Avatar_Yelan_ElementalArt_QuietStep_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst",
+ "abilityName": "Avatar_Yelan_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Initialize",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Initialize",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Camera_Effect",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Camera_Effect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Camera_Handler",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Camera_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_EmotionControl",
+ "abilityName": "Avatar_Yelan_ElementalBurst_EmotionControl",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Camera_PushTarget",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Camera_PushTarget",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Invincible",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Invincible",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_WeatherChange",
+ "abilityName": "Avatar_Yelan_ElementalBurst_WeatherChange",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Camera_DungeonEffect",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Camera_DungeonEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_CameraBlur",
+ "abilityName": "Avatar_Yelan_ElementalBurst_CameraBlur",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_CreateDice",
+ "abilityName": "Avatar_Yelan_ElementalBurst_CreateDice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Strike_Damage",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Strike_Damage",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_PostEffect",
+ "abilityName": "Avatar_Yelan_ElementalBurst_PostEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_ScreenEffect",
+ "abilityName": "Avatar_Yelan_ElementalBurst_ScreenEffect",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShareElementalArt_Handler",
+ "abilityName": "Avatar_Yelan_ShareElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ShareElementalArt_TriggerDice",
+ "abilityName": "Avatar_Yelan_ShareElementalArt_TriggerDice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_PostEffectJ",
+ "abilityName": "Avatar_Yelan_ElementalBurst_PostEffectJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellation_6",
+ "abilityName": "Avatar_Yelan_Constellation_6",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_2_Handler",
+ "abilityName": "Avatar_Yelan_PermanentSkill_2_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_2_Buff_OnTeam",
+ "abilityName": "Avatar_Yelan_PermanentSkill_2_Buff_OnTeam",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_2_Buff",
+ "abilityName": "Avatar_Yelan_PermanentSkill_2_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_Bullet_01",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_Bullet_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_FallingAnthem",
+ "abilityName": "Avatar_Yelan_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Handler",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Buff",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Buff_Lv1",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Buff_Lv1",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Buff_Lv2",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Buff_Lv2",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Buff_Lv3",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Buff_Lv3",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_PermanentSkill_1_Buff_Lv4",
+ "abilityName": "Avatar_Yelan_PermanentSkill_1_Buff_Lv4",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_Bullet_Extra",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_Bullet_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellatin_4_Handler",
+ "abilityName": "Avatar_Yelan_Constellatin_4_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellatin_4_Timer",
+ "abilityName": "Avatar_Yelan_Constellatin_4_Timer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellation_6_BuffTimer",
+ "abilityName": "Avatar_Yelan_Constellation_6_BuffTimer",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellation_6_StateHandler",
+ "abilityName": "Avatar_Yelan_Constellation_6_StateHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_Constellation_6_State",
+ "abilityName": "Avatar_Yelan_Constellation_6_State",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_SneakArrow_Extra_Before",
+ "abilityName": "Avatar_Yelan_SneakArrow_Extra_Before",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_SneakArrow_Extra_After",
+ "abilityName": "Avatar_Yelan_SneakArrow_Extra_After",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan",
+ "abilityName": "Avatar_Yelan",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet4Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet4Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_TeamConfig_01BS",
+ "abilityName": "Avatar_Yelan_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_TeamConfig_01Loop",
+ "abilityName": "Avatar_Yelan_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_TeamConfig_01AS",
+ "abilityName": "Avatar_Yelan_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra4Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityName": "Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra4Avatar_Yelan_ElementalBurst_Dice_TriggerBullet_Extra",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Yoimiya.json b/data/json/avatar/ConfigAvatar_Yoimiya.json
new file mode 100644
index 0000000..c5603ba
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Yoimiya.json
@@ -0,0 +1,239 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Yoimiya_PressShoot",
+ "abilityName": "Avatar_Yoimiya_PressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_AimPressShoot",
+ "abilityName": "Avatar_Yoimiya_AimPressShoot",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_01",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_FireShoot_State",
+ "abilityName": "Avatar_Yoimiya_FireShoot_State",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_01_01",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_01_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_02",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_02",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_03",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_03",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_04",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_04",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_04_01",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_04_01",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_05",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_05",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootAimingArrow_Charge",
+ "abilityName": "Avatar_Yoimiya_ShootAimingArrow_Charge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ShootArrow_Aiming",
+ "abilityName": "Avatar_Yoimiya_ShootArrow_Aiming",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalArt_DropBall",
+ "abilityName": "Avatar_Yoimiya_ElementalArt_DropBall",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalArt",
+ "abilityName": "Avatar_Yoimiya_ElementalArt",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_Stack_Num",
+ "abilityName": "Avatar_Yoimiya_Stack_Num",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Camera",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Camera",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_SetTag",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_SetTag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_MonsterInTag",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_MonsterInTag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Count",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Count",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Tag",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Tag",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_TimeCount",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_TimeCount",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_EffectDone",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_EffectDone",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_InTriggerCD",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_InTriggerCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_BombAttackCD",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_BombAttackCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_BombAttackEvent",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_BombAttackEvent",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_WhenMonsterOnKill",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_WhenMonsterOnKill",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Tag1UNIQUE_Avatar_Yoimiya_ElementalBurst_BombAttackCD",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Tag1UNIQUE_Avatar_Yoimiya_ElementalBurst_BombAttackCD",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_TagJ",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_TagJ",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_FallingAnthem",
+ "abilityName": "Avatar_Yoimiya_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya",
+ "abilityName": "Avatar_Yoimiya",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_TeamConfig_01BS",
+ "abilityName": "Avatar_Yoimiya_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_TeamConfig_01Loop",
+ "abilityName": "Avatar_Yoimiya_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_TeamConfig_01AS",
+ "abilityName": "Avatar_Yoimiya_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Yoimiya_Turquoise",
+ "abilityName": "AvatarItem_Yoimiya_Turquoise",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Spine",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementBurst",
+ "abilityName": "Avatar_Yoimiya_ElementBurst",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_BS",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Hit",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Hit_Buff",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Hit_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_Spine_Loop",
+ "abilityName": "Avatar_Yoimiya_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_Spine",
+ "abilityName": "Avatar_Yoimiya_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_Spine_Loop_BG",
+ "abilityName": "Avatar_Yoimiya_Spine_Loop_BG",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yoimiya_ElementalBurst_Spine_Star",
+ "abilityName": "Avatar_Yoimiya_ElementalBurst_Spine_Star",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Yoimiya_Turquoise_01_TurquoiseShine",
+ "abilityName": "AvatarItem_Yoimiya_Turquoise_01_TurquoiseShine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Yoimiya_Turquoise_01_Outside",
+ "abilityName": "AvatarItem_Yoimiya_Turquoise_01_Outside",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "AvatarItem_Yoimiya_Turquoise_01_Inside",
+ "abilityName": "AvatarItem_Yoimiya_Turquoise_01_Inside",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Yunjin.json b/data/json/avatar/ConfigAvatar_Yunjin.json
new file mode 100644
index 0000000..e594dc3
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Yunjin.json
@@ -0,0 +1,119 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Yunjin_NormalAttack_DamageHandler",
+ "abilityName": "Avatar_Yunjin_NormalAttack_DamageHandler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ExtraAttack",
+ "abilityName": "Avatar_Yunjin_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ExtraAttack_Cast",
+ "abilityName": "Avatar_Yunjin_ExtraAttack_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ExtraAttack_Bullet",
+ "abilityName": "Avatar_Yunjin_ExtraAttack_Bullet",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_FallingAnthem",
+ "abilityName": "Avatar_Yunjin_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalArt_Handler",
+ "abilityName": "Avatar_Yunjin_ElementalArt_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalArt_Remover",
+ "abilityName": "Avatar_Yunjin_ElementalArt_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_Kaoqi",
+ "abilityName": "Avatar_Yunjin_Kaoqi",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_Kaoqi_Reset",
+ "abilityName": "Avatar_Yunjin_Kaoqi_Reset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_Kaoqi_Remover",
+ "abilityName": "Avatar_Yunjin_Kaoqi_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalArt_Strike",
+ "abilityName": "Avatar_Yunjin_ElementalArt_Strike",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalArt_Strike_VFX",
+ "abilityName": "Avatar_Yunjin_ElementalArt_Strike_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalArt_Strike_Weather",
+ "abilityName": "Avatar_Yunjin_ElementalArt_Strike_Weather",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalBurst_Cast",
+ "abilityName": "Avatar_Yunjin_ElementalBurst_Cast",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalBurst_Buff_Handler",
+ "abilityName": "Avatar_Yunjin_ElementalBurst_Buff_Handler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalBurst_Buff",
+ "abilityName": "Avatar_Yunjin_ElementalBurst_Buff",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalBurst_Reset",
+ "abilityName": "Avatar_Yunjin_ElementalBurst_Reset",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_ElementalBurst_Buff_VFX",
+ "abilityName": "Avatar_Yunjin_ElementalBurst_Buff_VFX",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_Buff_VFX_Remover",
+ "abilityName": "Avatar_Yunjin_Buff_VFX_Remover",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin",
+ "abilityName": "Avatar_Yunjin",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_TeamConfig_01BS",
+ "abilityName": "Avatar_Yunjin_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_TeamConfig_01Loop",
+ "abilityName": "Avatar_Yunjin_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Yunjin_TeamConfig_01AS",
+ "abilityName": "Avatar_Yunjin_TeamConfig_01AS",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/json/avatar/ConfigAvatar_Zhongli.json b/data/json/avatar/ConfigAvatar_Zhongli.json
new file mode 100644
index 0000000..eea546e
--- /dev/null
+++ b/data/json/avatar/ConfigAvatar_Zhongli.json
@@ -0,0 +1,94 @@
+{
+ "abilities": [
+ {
+ "abilityID": "Avatar_Zhongli_ExtraAttack",
+ "abilityName": "Avatar_Zhongli_ExtraAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_PillarOrShield_HoldCharge",
+ "abilityName": "Avatar_Zhongli_PillarOrShield_HoldCharge",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_SetHairEmissionScaler",
+ "abilityName": "Avatar_Zhongli_SetHairEmissionScaler",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_PrimoPillar",
+ "abilityName": "Avatar_Zhongli_PrimoPillar",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_RockShield",
+ "abilityName": "Avatar_Zhongli_RockShield",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_GeoOrder",
+ "abilityName": "Avatar_Zhongli_GeoOrder",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_RockFever",
+ "abilityName": "Avatar_Zhongli_RockFever",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_NormalAttack",
+ "abilityName": "Avatar_Zhongli_NormalAttack",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_FallingAnthem",
+ "abilityName": "Avatar_Zhongli_FallingAnthem",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli",
+ "abilityName": "Avatar_Zhongli",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_TeamConfig_01BS",
+ "abilityName": "Avatar_Zhongli_TeamConfig_01BS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_TeamConfig_01Loop",
+ "abilityName": "Avatar_Zhongli_TeamConfig_01Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_TeamConfig_01AS",
+ "abilityName": "Avatar_Zhongli_TeamConfig_01AS",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_ElementalBurst_Spine",
+ "abilityName": "Avatar_Zhongli_ElementalBurst_Spine",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_ElementalBurst_Hit",
+ "abilityName": "Avatar_Zhongli_ElementalBurst_Hit",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_Spine_Loop",
+ "abilityName": "Avatar_Zhongli_Spine_Loop",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_Spine_Loop_Cloud",
+ "abilityName": "Avatar_Zhongli_Spine_Loop_Cloud",
+ "abilityOverride": ""
+ },
+ {
+ "abilityID": "Avatar_Zhongli_Sub_Spine",
+ "abilityName": "Avatar_Zhongli_Sub_Spine",
+ "abilityOverride": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/txt/AvatarData.txt b/data/txt/AvatarData.txt
new file mode 100644
index 0000000..d9f24f1
--- /dev/null
+++ b/data/txt/AvatarData.txt
@@ -0,0 +1,119 @@
+bodyType iconName sideIconName qualityType chargeEfficiency initialWeapon weaponType imageName skillDepotId staminaRecoverSpeed candSkillDepotIds avatarIdentityType avatarPromoteId avatarPromoteRewardLevelList featureTagGroupID hpBase attackBase defenseBase critical criticalHurt id useType isRangeAttack
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 101 25 AVATAR_IDENTITY_NORMAL 2 1,3,5 10000001 166.0 5.0 8.0 0.05 0.5 10000001 false
+BODY_GIRL UI_AvatarIcon_Ayaka UI_AvatarIcon_Side_Ayaka QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Ayaka 201 25 AVATAR_IDENTITY_NORMAL 2 1,3,5 10000002 1000.986 26.6266 61.0266 0.05 0.5 10000002 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 301 25 AVATAR_IDENTITY_NORMAL 3 1,3,5 10000003 1143.984 18.62 59.83 0.05 0.5 10000003 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_PlayerBoy UI_AvatarIcon_Side_PlayerBoy QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 501 25 501,502,503,504,505,506,507,508 12 1,3,5 10000005 911.791 17.808 57.225 0.05 0.5 10000005 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Lisa UI_AvatarIcon_Side_Lisa QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Lisa 601 25 AVATAR_IDENTITY_NORMAL 4 1,3,5 10000006 802.3761 19.41072 48.069 0.05 0.5 10000006 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_PlayerGirl UI_AvatarIcon_Side_PlayerGirl QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 701 25 701,702,703,704,705,706,707,708 12 1,3,5 10000007 911.791 17.808 57.225 0.05 0.5 10000007 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Barbara UI_AvatarIcon_Side_Barbara QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Barbara 1401 25 AVATAR_IDENTITY_NORMAL 14 1,3,5 10000014 820.6119 13.356 56.0805 0.05 0.5 10000014 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Kaeya UI_AvatarIcon_Side_Kaeya QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 15 1,3,5 10000015 975.6164 18.6984 66.381 0.05 0.5 10000015 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Diluc UI_AvatarIcon_Side_Diluc QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Diluc 1601 25 AVATAR_IDENTITY_NORMAL 16 1,3,5 10000016 1010.5192 26.068 61.0266 0.05 0.5 10000016 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Razor UI_AvatarIcon_Side_Razor QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Qin 2001 25 AVATAR_IDENTITY_NORMAL 20 1,3,5 10000020 1002.9701 19.5888 62.9475 0.05 0.5 10000020 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Ambor UI_AvatarIcon_Side_Ambor QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Ambor 2101 25 AVATAR_IDENTITY_NORMAL 21 1,3,5 10000021 793.2582 18.6984 50.358 0.05 0.5 10000021 AVATAR_FORMAL true
+BODY_BOY UI_AvatarIcon_Venti UI_AvatarIcon_Side_Venti QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Venti 2201 25 AVATAR_IDENTITY_NORMAL 22 1,3,5 10000022 819.8552 20.482 52.0521 0.05 0.5 10000022 AVATAR_FORMAL true
+BODY_GIRL UI_AvatarIcon_Xiangling UI_AvatarIcon_Side_Xiangling QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Xiangling 2301 25 AVATAR_IDENTITY_NORMAL 23 1,3,5 10000023 911.791 18.87648 56.0805 0.05 0.5 10000023 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Beidou UI_AvatarIcon_Side_Beidou QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Beidou 2401 25 AVATAR_IDENTITY_NORMAL 24 1,3,5 10000024 1094.1492 18.87648 54.36375 0.05 0.5 10000024 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Xingqiu UI_AvatarIcon_Side_Xingqiu QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Xingqiu 2501 25 AVATAR_IDENTITY_NORMAL 25 1,3,5 10000025 857.08356 16.9176 63.51975 0.05 0.5 10000025 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Xiao UI_AvatarIcon_Side_Xiao QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Xiao 2601 25 AVATAR_IDENTITY_NORMAL 26 1,3,5 10000026 991.4528 27.1852 62.2232 0.05 0.5 10000026 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Ningguang UI_AvatarIcon_Side_Ningguang QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Lisa 2701 25 AVATAR_IDENTITY_NORMAL 27 1,3,5 10000027 820.6119 17.808 48.069 0.05 0.5 10000027 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Klee UI_AvatarIcon_Side_Klee QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Klee 2901 25 AVATAR_IDENTITY_NORMAL 29 1,3,5 10000029 800.7888 24.206 47.864 0.05 0.5 10000029 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Zhongli UI_AvatarIcon_Side_Zhongli QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Diluc 3001 25 AVATAR_IDENTITY_NORMAL 30 1,3,5 10000030 1143.984 19.551 57.4368 0.05 0.5 10000030 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Fischl UI_AvatarIcon_Side_Fischl QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Fischl 3101 25 AVATAR_IDENTITY_NORMAL 31 1,3,5 10000031 770.4634 20.4792 49.78575 0.05 0.5 10000031 AVATAR_FORMAL true
+BODY_BOY UI_AvatarIcon_Bennett UI_AvatarIcon_Side_Bennett QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Bennett 3201 25 AVATAR_IDENTITY_NORMAL 32 1,3,5 10000032 1039.4418 16.0272 64.66425 0.05 0.5 10000032 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Tartaglia UI_AvatarIcon_Side_Tartaglia QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Tartaglia 3301 25 AVATAR_IDENTITY_NORMAL 33 1,3,5 10000033 1020.0524 23.4612 63.4198 0.05 0.5 10000033 AVATAR_FORMAL true
+BODY_GIRL UI_AvatarIcon_Noel UI_AvatarIcon_Side_Noel QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Noel 3401 25 AVATAR_IDENTITY_NORMAL 34 1,3,5 10000034 1012.088 16.0272 66.95325 0.05 0.5 10000034 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Qiqi UI_AvatarIcon_Side_Qiqi QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 3501 25 AVATAR_IDENTITY_NORMAL 35 1,3,5 10000035 962.8532 22.344 71.796 0.05 0.5 10000035 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Chongyun UI_AvatarIcon_Side_Chongyun QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Kate 3601 25 AVATAR_IDENTITY_NORMAL 36 1,3,5 10000036 920.90894 18.6984 54.36375 0.05 0.5 10000036 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Ganyu UI_AvatarIcon_Side_Ganyu QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Fischl 3701 25 AVATAR_IDENTITY_NORMAL 37 1,3,5 10000037 762.656 26.068 49.0606 0.05 0.5 10000037 AVATAR_FORMAL true
+BODY_BOY UI_AvatarIcon_Albedo UI_AvatarIcon_Side_Albedo QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Albedo 3801 25 AVATAR_IDENTITY_NORMAL 38 1,3,5 10000038 1029.5856 19.551 68.2062 0.05 0.5 10000038 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Diona UI_AvatarIcon_Side_Diona QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Diona 3901 25 AVATAR_IDENTITY_NORMAL 39 1,3,5 10000039 802.3761 17.808 50.358 0.05 0.5 10000039 AVATAR_FORMAL true
+BODY_GIRL UI_AvatarIcon_Mona UI_AvatarIcon_Side_Mona QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Mona 4101 25 AVATAR_IDENTITY_NORMAL 41 1,3,5 10000041 810.322 22.344 50.8555 0.05 0.5 10000041 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Keqing UI_AvatarIcon_Side_Keqing QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Keqing 4201 25 AVATAR_IDENTITY_NORMAL 42 1,3,5 10000042 1020.0524 25.137 62.2232 0.05 0.5 10000042 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Sucrose UI_AvatarIcon_Side_Sucrose QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Sucrose 4301 25 AVATAR_IDENTITY_NORMAL 43 1,3,5 10000043 775.02234 14.2464 58.94175 0.05 0.5 10000043 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Xinyan UI_AvatarIcon_Side_Xinyan QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Xinyan 4401 25 AVATAR_IDENTITY_NORMAL 44 1,3,5 10000044 939.1447 20.83536 66.95325 0.05 0.5 10000044 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Rosaria UI_AvatarIcon_Side_Rosaria QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Rosaria 4501 25 AVATAR_IDENTITY_NORMAL 45 1,3,5 10000045 1030.3239 20.12304 59.514 0.05 0.5 10000045 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Hutao UI_AvatarIcon_Side_Hutao QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Hutao 4601 25 AVATAR_IDENTITY_NORMAL 46 1,3,5 10000046 1210.7164 8.2859 68.2062 0.05 0.5 10000046 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Kazuha UI_AvatarIcon_Side_Kazuha QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kazuha 4701 25 AVATAR_IDENTITY_NORMAL 47 1,3,5 10000047 1039.1188 23.0888 62.8215 0.05 0.5 10000047 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Feiyan UI_AvatarIcon_Side_Feiyan QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Feiyan 4801 25 AVATAR_IDENTITY_NORMAL 48 1,3,5 10000048 784.14026 20.12304 49.2135 0.05 0.5 10000048 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Yoimiya UI_AvatarIcon_Side_Yoimiya QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Yoimiya 4901 25 AVATAR_IDENTITY_NORMAL 49 1,3,5 10000049 791.2556 25.137 47.864 0.05 0.5 10000049 AVATAR_FORMAL true
+BODY_MALE UI_AvatarIcon_Tohma UI_AvatarIcon_Side_Tohma QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Tohma 5001 25 AVATAR_IDENTITY_NORMAL 50 1,3,5 10000050 866.2015 16.9176 62.9475 0.05 0.5 10000050 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Eula UI_AvatarIcon_Side_Eula QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Eula 5101 25 AVATAR_IDENTITY_NORMAL 51 1,3,5 10000051 1029.5856 26.6266 58.45391 0.05 0.5 10000051 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Shougun UI_AvatarIcon_Side_Shougun QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Shougun 5201 25 AVATAR_IDENTITY_NORMAL 52 1,3,5 10000052 1004.79926 26.2542 61.44541 0.05 0.5 10000052 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Sayu UI_AvatarIcon_Side_Sayu QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Sayu 5301 25 AVATAR_IDENTITY_NORMAL 53 1,3,5 10000053 993.8522 20.4792 62.432476 0.05 0.5 10000053 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Kokomi UI_AvatarIcon_Side_Kokomi QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Kokomi 5401 25 AVATAR_IDENTITY_NORMAL 54 1,3,5 10000054 1048.652 18.2476 51.15465 0.05 0.5 10000054 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Gorou UI_AvatarIcon_Side_Gorou QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Gorou 5501 25 AVATAR_IDENTITY_NORMAL 55 1,3,5 10000055 802.3761 15.31488 54.36375 0.05 0.5 10000055 AVATAR_FORMAL true
+BODY_LADY UI_AvatarIcon_Sara UI_AvatarIcon_Side_Sara QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Sara 5601 25 AVATAR_IDENTITY_NORMAL 56 1,3,5 10000056 802.3761 16.38336 52.647 0.05 0.5 10000056 AVATAR_FORMAL true
+BODY_MALE UI_AvatarIcon_Itto UI_AvatarIcon_Side_Itto QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Itto 5701 25 AVATAR_IDENTITY_NORMAL 57 1,3,5 10000057 1000.986 17.689 74.66784 0.05 0.5 10000057 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Yae UI_AvatarIcon_Side_Yae QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Yae 5801 25 AVATAR_IDENTITY_NORMAL 58 1,3,5 10000058 807.46204 26.4404 44.2742 0.05 0.5 10000058 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Heizo UI_AvatarIcon_Side_Heizo QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Heizo 5901 25 AVATAR_IDENTITY_NORMAL 59 1,3,5 10000059 893.5552 18.87648 57.33945 0.05 0.5 10000059 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Yelan UI_AvatarIcon_Side_Yelan QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Yelan 6001 25 AVATAR_IDENTITY_NORMAL 60 1,3,5 10000060 1124.9176 18.9924 42.65879 0.05 0.5 10000060 AVATAR_FORMAL true
+BODY_GIRL UI_AvatarIcon_Momoka UI_AvatarIcon_Side_Momoka QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Momoka 6101 25 AVATAR_IDENTITY_NORMAL 61 1,3,5 10000061 1021.20593 18.6984 45.78 0.05 0.5 10000061 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Aloy UI_AvatarIcon_Side_Aloy QUALITY_ORANGE_SP 1.0 15101 WEAPON_BOW AvatarImage_Forward_Aloy 6201 25 AVATAR_IDENTITY_NORMAL 62 1,3,5 10000062 848.4548 18.21036 52.6504 0.05 0.5 10000062 AVATAR_FORMAL true
+BODY_LADY UI_AvatarIcon_Shenhe UI_AvatarIcon_Side_Shenhe QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Shenhe 6301 25 AVATAR_IDENTITY_NORMAL 63 1,3,5 10000063 1011.47253 23.6474 64.6164 0.05 0.5 10000063 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Yunjin UI_AvatarIcon_Side_Yunjin QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Yunjin 6401 25 AVATAR_IDENTITY_NORMAL 64 1,3,5 10000064 893.5552 16.0272 61.5741 0.05 0.5 10000064 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Shinobu UI_AvatarIcon_Side_Shinobu QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Shinobu 6501 25 AVATAR_IDENTITY_NORMAL 65 1,3,5 10000065 1030.3239 17.808 62.9475 0.05 0.5 10000065 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Ayato UI_AvatarIcon_Side_Ayato QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Ayato 6601 25 AVATAR_IDENTITY_NORMAL 66 1,3,5 10000066 1067.7184 23.275 59.83 0.05 0.5 10000066 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Collei UI_AvatarIcon_Side_Collei QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Collei 6701 25 AVATAR_IDENTITY_NORMAL 67 1,3,5 10000067 820.6119 16.73952 50.358 0.05 0.5 10000067 AVATAR_FORMAL true
+BODY_LOLI UI_AvatarIcon_Dori UI_AvatarIcon_Side_Dori QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Dori 6801 25 AVATAR_IDENTITY_NORMAL 68 1,3,5 10000068 1039.4418 18.6984 60.6585 0.05 0.5 10000068 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Tighnari UI_AvatarIcon_Side_Tighnari QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Tighnari 6901 25 AVATAR_IDENTITY_NORMAL 69 1,3,5 10000069 844.64154 20.8544 49.0606 0.05 0.5 10000069 AVATAR_FORMAL true
+BODY_GIRL UI_AvatarIcon_Nilou UI_AvatarIcon_Side_Nilou QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Nilou 7001 25 AVATAR_IDENTITY_NORMAL 70 1,3,5 10000070 1182.1168 17.8752 56.71884 0.05 0.5 10000070 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Cyno UI_AvatarIcon_Side_Cyno QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Cyno 7101 25 AVATAR_IDENTITY_NORMAL 71 1,3,5 10000071 972.3864 24.7646 66.88994 0.05 0.5 10000071 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Candace UI_AvatarIcon_Side_Candace QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Candace 7201 25 AVATAR_IDENTITY_NORMAL 72 1,3,5 10000072 911.791 17.808 57.225 0.05 0.5 10000072 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Nahida UI_AvatarIcon_Side_Nahida QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Nahida 7301 25 AVATAR_IDENTITY_NORMAL 73 1,3,5 10000073 806.5087 23.275 49.0606 0.05 0.5 10000073 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Layla UI_AvatarIcon_Side_Layla QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Layla 7401 25 AVATAR_IDENTITY_NORMAL 74 1,3,5 10000074 930.0268 18.16416 54.936 0.05 0.5 10000074 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Wanderer UI_AvatarIcon_Side_Wanderer QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Wanderer 7501 25 AVATAR_IDENTITY_NORMAL 75 1,3,5 10000075 791.2556 25.5094 47.2657 0.05 0.5 10000075 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Faruzan UI_AvatarIcon_Side_Faruzan QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Faruzan 7601 25 AVATAR_IDENTITY_NORMAL 76 1,3,5 10000076 802.3761 16.4724 52.647 0.05 0.5 10000076 AVATAR_FORMAL true
+BODY_LOLI UI_AvatarIcon_Yaoyao UI_AvatarIcon_Side_Yaoyao QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Yaoyao 7701 25 AVATAR_IDENTITY_NORMAL 77 1,3,5 10000077 1030.3239 17.808 62.9475 0.05 0.5 10000077 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Alhatham UI_AvatarIcon_Side_Alhatham QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Alhatham 7801 25 AVATAR_IDENTITY_NORMAL 78 1,3,5 10000078 1039.1188 24.3922 60.84711 0.05 0.5 10000078 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Dehya UI_AvatarIcon_Side_Dehya QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Dehya 7901 25 AVATAR_IDENTITY_NORMAL 79 1,3,5 10000079 1220.2496 20.6682 48.88111 0.05 0.5 10000079 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Mika UI_AvatarIcon_Side_Mika QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Mika 8001 25 AVATAR_IDENTITY_NORMAL 80 1,3,5 10000080 1048.5597 18.6984 59.800125 0.05 0.5 10000080 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Kaveh UI_AvatarIcon_Side_Kaveh QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Kaveh 8101 25 AVATAR_IDENTITY_NORMAL 81 1,3,5 10000081 1002.9701 19.5888 62.9475 0.05 0.5 10000081 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Baizhuer UI_AvatarIcon_Side_Baizhuer QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Baizhuer 8201 25 AVATAR_IDENTITY_NORMAL 82 1,3,5 10000082 1039.1188 14.9891 38.8895 0.05 0.5 10000082 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Linette UI_AvatarIcon_Side_Linette QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Linette 8301 25 AVATAR_IDENTITY_NORMAL 83 1,3,5 10000083 1039.4418 19.41072 59.685677 0.05 0.5 10000083 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Liney UI_AvatarIcon_Side_Liney QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Liney 8401 25 AVATAR_IDENTITY_NORMAL 84 1,3,5 10000084 857.988 24.7646 41.881 0.05 0.5 10000084 AVATAR_FORMAL true
+BODY_BOY UI_AvatarIcon_Freminet UI_AvatarIcon_Side_Freminet QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Freminet 8501 25 AVATAR_IDENTITY_NORMAL 85 1,3,5 10000085 1012.088 21.3696 59.39955 0.05 0.5 10000085 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Wriothesley UI_AvatarIcon_Side_Wriothesley QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Wriothesley 8601 25 AVATAR_IDENTITY_NORMAL 86 1,3,5 10000086 1058.1852 24.206 59.41119 0.05 0.5 10000086 AVATAR_FORMAL false
+BODY_MALE UI_AvatarIcon_Neuvillette UI_AvatarIcon_Side_Neuvillette QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Neuvillette 8701 25 AVATAR_IDENTITY_NORMAL 87 1,3,5 10000087 1143.984 16.21802 44.8725 0.05 0.5 10000087 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Charlotte UI_AvatarIcon_Side_Charlotte QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Charlotte 8801 25 AVATAR_IDENTITY_NORMAL 88 1,3,5 10000088 902.6731 14.51352 45.78 0.05 0.5 10000088 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Furina UI_AvatarIcon_Side_Furina QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Furina 8901 25 AVATAR_IDENTITY_NORMAL 89 1,3,5 10000089 1191.65 18.9924 54.14615 0.05 0.5 10000089 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Chevreuse UI_AvatarIcon_Side_Chevreuse QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Chevreuse 9001 25 AVATAR_IDENTITY_NORMAL 90 1,3,5 10000090 1002.9701 16.20528 50.70135 0.05 0.5 10000090 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Navia UI_AvatarIcon_Side_Navia QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Navia 9101 25 AVATAR_IDENTITY_NORMAL 91 1,3,5 10000091 984.77954 27.3714 61.74456 0.05 0.5 10000091 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Gaming UI_AvatarIcon_Side_Gaming QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Gaming 9201 25 AVATAR_IDENTITY_NORMAL 92 1,3,5 10000092 957.38055 25.28736 58.94175 0.05 0.5 10000092 AVATAR_FORMAL false
+BODY_LADY UI_AvatarIcon_Liuyun UI_AvatarIcon_Side_Liuyun QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Liuyun 9301 25 AVATAR_IDENTITY_NORMAL 93 1,3,5 10000093 810.322 26.068 44.57335 0.05 0.5 10000093 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Chiori UI_AvatarIcon_Side_Chiori QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Chiori 9401 25 AVATAR_IDENTITY_NORMAL 94 1,3,5 10000094 890.4009 25.137 74.1892 0.05 0.5 10000094 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Sigewinne UI_AvatarIcon_Side_Sigewinne QUALITY_ORANGE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Sigewinne 9501 25 AVATAR_IDENTITY_NORMAL 95 1,3,5 10000095 1039.1188 14.9891 38.8895 0.05 0.5 10000095 AVATAR_FORMAL true
+BODY_LADY UI_AvatarIcon_Arlecchino UI_AvatarIcon_Side_Arlecchino QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Arlecchino 9601 25 AVATAR_IDENTITY_NORMAL 96 1,3,5 10000096 1020.0524 26.6266 59.53085 0.05 0.5 10000096 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Sethos UI_AvatarIcon_Side_Sethos QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Sethos 9701 25 AVATAR_IDENTITY_NORMAL 97 1,3,5 10000097 820.6119 19.05456 46.9245 0.05 0.5 10000097 AVATAR_FORMAL true
+BODY_LADY UI_AvatarIcon_Clorinde UI_AvatarIcon_Side_Clorinde QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Clorinde 9801 25 AVATAR_IDENTITY_NORMAL 98 1,3,5 10000098 1008.61255 26.2542 61.0266 0.05 0.5 10000098 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Emilie UI_AvatarIcon_Side_Emilie QUALITY_ORANGE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Emilie 9901 25 AVATAR_IDENTITY_NORMAL 99 1,3,5 10000099 1056.2786 26.068 56.8385 0.05 0.5 10000099 AVATAR_FORMAL false
+BODY_LOLI UI_AvatarIcon_Kachina UI_AvatarIcon_Side_Kachina QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Kachina 10001 25 AVATAR_IDENTITY_NORMAL 100 1,3,5 10000100 989.2932 18.16416 66.438225 0.05 0.5 10000100 AVATAR_FORMAL false
+BODY_BOY UI_AvatarIcon_Kinich UI_AvatarIcon_Side_Kinich QUALITY_ORANGE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Kinich 10101 25 AVATAR_IDENTITY_NORMAL 101 1,3,5 10000101 1000.986 25.8818 62.40269 0.05 0.5 10000101 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Mualani UI_AvatarIcon_Side_Mualani QUALITY_ORANGE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Mualani 10201 25 AVATAR_IDENTITY_NORMAL 102 1,3,5 10000102 1182.1168 14.1512 44.39386 0.05 0.5 10000102 AVATAR_FORMAL false
+BODY_GIRL UI_AvatarIcon_Side_Ambor UI_AvatarIcon_Side_Ambor QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Ambor 8011 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000008 AVATAR_ABANDON false
+BODY_GIRL UI_AvatarIcon_Side_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 9011 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000009 AVATAR_ABANDON false
+BODY_GIRL UI_AvatarIcon_Side_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 10011 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000010 AVATAR_ABANDON false
+BODY_BOY UI_AvatarIcon_Side_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000011 false
+BODY_GIRL UI_AvatarIcon_Side_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 13011 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000013 AVATAR_SYNC_TEST false
+BODY_MALE UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000017 false
+BODY_LADY UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000018 false
+BODY_GIRL UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000019 false
+BODY_BOY UI_AvatarIcon_Razor UI_AvatarIcon_Side_Razor QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Qin 25011 25 AVATAR_IDENTITY_NORMAL 2 10000001 208.6 8.2 9.5 0.05 0.5 11000025 true
+BODY_LOLI UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 14101 WEAPON_CATALYST AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000026 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 101 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000027 false
+BODY_GIRL UI_AvatarIcon_Ayaka UI_AvatarIcon_Side_Ayaka QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Ayaka 28011 25 AVATAR_IDENTITY_NORMAL 2 10000001 185.0 6.0 10.4 0.05 0.5 11000028 false
+BODY_GIRL UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Qin 30011 25 AVATAR_IDENTITY_NORMAL 2 10000001 189.5 5.6 10.5 0.05 0.5 11000030 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 40003 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000031 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 40002 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000032 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 40001 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000033 false
+BODY_LADY UI_AvatarIcon_Xiangling UI_AvatarIcon_Side_Xiangling QUALITY_PURPLE 1.0 13101 WEAPON_POLE AvatarImage_Forward_Xiangling 101 25 AVATAR_IDENTITY_NORMAL 2 10000001 185.0 6.0 10.4 0.05 0.5 11000035 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 101 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000036 false
+BODY_BOY UI_AvatarIcon_PlayerBoy UI_AvatarIcon_Side_PlayerBoy QUALITY_PURPLE 1.0 15101 WEAPON_BOW AvatarImage_Forward_Kate 37011 25 AVATAR_IDENTITY_NORMAL 2 10000001 191.0 5.0 11.0 0.05 0.5 11000037 true
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 101 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000038 false
+BODY_GIRL UI_AvatarIcon_Kate UI_AvatarIcon_Side_Kate QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 101 25 AVATAR_IDENTITY_NORMAL 2 10000001 166.0 5.0 8.0 0.05 0.5 11000039 false
+BODY_GIRL UI_AvatarIcon_PlayerGirl UI_AvatarIcon_Side_PlayerGirl QUALITY_ORANGE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 701 25 AVATAR_IDENTITY_NORMAL 2 10000001 441.9454 17.6352 15.9755 0.05 0.5 11000040 false
+BODY_BOY UI_AvatarIcon_PlayerBoy UI_AvatarIcon_Side_PlayerBoy QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 501 25 AVATAR_IDENTITY_NORMAL 2 10000001 441.9454 17.6352 15.9755 0.05 0.5 11000041 false
+BODY_BOY UI_AvatarIcon_PlayerBoy UI_AvatarIcon_Side_PlayerBoy QUALITY_PURPLE 1.0 11101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Kate 38001 25 AVATAR_IDENTITY_NORMAL 2 10000001 441.9454 17.6352 15.9755 0.05 0.5 11000042 false
+BODY_LOLI UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 14101 WEAPON_CLAYMORE AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000043 false
+BODY_LOLI UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 14101 WEAPON_SWORD_ONE_HAND AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000044 false
+BODY_LOLI UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 14101 WEAPON_BOW AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000045 false
+BODY_LADY UI_AvatarIcon_Qin UI_AvatarIcon_Side_Qin QUALITY_PURPLE 1.0 12101 WEAPON_CLAYMORE AvatarImage_Forward_Qin 1501 25 AVATAR_IDENTITY_NORMAL 2 10000001 99999.0 99999.0 99999.0 0.05 0.5 11000046 false
diff --git a/data/txt/OpenStateData.txt b/data/txt/OpenStateData.txt
new file mode 100644
index 0000000..874753e
--- /dev/null
+++ b/data/txt/OpenStateData.txt
@@ -0,0 +1,388 @@
+cond systemOpenUiId defaultState allowClientOpen id
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 1
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 3
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 4
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 10
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 5
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 6
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 7
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 8
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 9
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 11
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 12
+condType:OPEN_STATE_COND_QUEST|param:2010001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 1 false false 31
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:2|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 30
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:2|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 37
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:14|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 39
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 45
+condType:OPEN_STATE_COND_QUEST|param:35723|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 13 false false 54
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:7|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2100
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 13
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 14
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 15
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 16
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 17
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 18
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 19
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 20
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 21
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 22
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 23
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 24
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 25
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 26
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 27
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 28
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 29
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 32
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 33
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 34
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 35
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 36
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 38
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 40
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 41
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 50
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 51
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 59
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 52
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:8|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 11 false false 53
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 56
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 58
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 76
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 60
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 61
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 62
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 63
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 64
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 66
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 67
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 68
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 69
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 70
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 71
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 72
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 73
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 74
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 75
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 77
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 78
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 79
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 80
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 81
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 82
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 83
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 84
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2001
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2002
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2003
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2004
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2104
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2105
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2106
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 1411
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 1412
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2205
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2206
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2400
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2401
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2402
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2210
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2211
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2212
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2601
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2700
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2701
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2702
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2703
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3500
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3501
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3502
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3503
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4604
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4605
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4606
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4607
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4613
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2800
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2704
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3006
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3007
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3100
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3101
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3102
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3103
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3201
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3312
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3313
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3314
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3400
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3504
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3601
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3611
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3612
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3613
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3614
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3615
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3616
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3701
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3703
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3704
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3705
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3710
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3711
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3712
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3713
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3714
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3715
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3716
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3717
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3718
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3719
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3720
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3721
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3722
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3723
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3750
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4100
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4101
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4102
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4200
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4201
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4202
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4301
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4302
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4303
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4304
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4708
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4709
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4710
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:26|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 17 false false 57
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 43
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 1001
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 1002
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 1003
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:5|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1004
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:5|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1005
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:13|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1006
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 1007
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:5|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1008
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 1009
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:5|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1010
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 903
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 901
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 902
+condType:OPEN_STATE_COND_QUEST|param:2010001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 12 false false 900
+condType:OPEN_STATE_OFFERING_LEVEL|param:2|NEOENBFLOGE:50,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 1011
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 1013
+condType:OPEN_STATE_OFFERING_LEVEL|param:5|NEOENBFLOGE:50,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 3004
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 3005
+condType:OPEN_STATE_OFFERING_LEVEL|param:7|NEOENBFLOGE:50,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 4006
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4007
+condType:OPEN_STATE_OFFERING_LEVEL|param:9|NEOENBFLOGE:50,condType:OPEN_STATE_COND_QUEST|param:31101|NEOENBFLOGE:0 0 false false 5011
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 5012
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_QUEST|param:2003003|NEOENBFLOGE:0 0 false false 1100
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:8|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1103
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 1101
+condType:OPEN_STATE_COND_QUEST|param:2211102|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1102
+condType:OPEN_STATE_COND_QUEST|param:39303|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1104
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:16|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2801
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 44
+condType:OPEN_STATE_COND_QUEST|param:35001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 47
+condType:OPEN_STATE_COND_QUEST|param:99902|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 48
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:16|NEOENBFLOGE:0,condType:OPEN_STATE_COND_QUEST|param:35001|NEOENBFLOGE:0 9 false false 49
+condType:OPEN_STATE_COND_QUEST|param:35311|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1403
+condType:OPEN_STATE_COND_QUEST|param:4000100|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 2 false false 1200
+condType:OPEN_STATE_COND_QUEST|param:4000110|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1201
+condType:OPEN_STATE_COND_QUEST|param:4000104|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1202
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1300
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:20|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 10 false false 1301
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 55
+condType:OPEN_STATE_COND_QUEST|param:35802|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1401
+condType:OPEN_STATE_COND_QUEST|param:39403|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1402
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 14 false false 802
+condType:OPEN_STATE_COND_QUEST|param:7065001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 800
+condType:OPEN_STATE_COND_QUEST|param:7165001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 801
+condType:OPEN_STATE_COND_QUEST|param:7265701|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 803
+condType:OPEN_STATE_COND_QUEST|param:7367301|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3000
+condType:OPEN_STATE_COND_QUEST|param:7465001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4000
+condType:OPEN_STATE_CITY_REPUTATION_LEVEL|param:1|NEOENBFLOGE:2,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1404
+condType:OPEN_STATE_CITY_REPUTATION_LEVEL|param:2|NEOENBFLOGE:2,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1405
+condType:OPEN_STATE_CITY_REPUTATION_LEVEL|param:3|NEOENBFLOGE:2,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1409
+condType:OPEN_STATE_CITY_REPUTATION_LEVEL|param:4|NEOENBFLOGE:2,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3002
+condType:OPEN_STATE_CITY_REPUTATION_LEVEL|param:5|NEOENBFLOGE:2,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4001
+condType:OPEN_STATE_TRIBAL_REPUTATION_FINISH_NUM|param:6|NEOENBFLOGE:1,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5016
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true false 65
+condType:OPEN_STATE_COND_QUEST|param:7014118|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 15 false false 1406
+condType:OPEN_STATE_COND_QUEST|param:7181210|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1407
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:26|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1408
+condType:OPEN_STATE_COND_QUEST|param:7066103|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 19 false false 1410
+condType:OPEN_STATE_COND_PARENT_QUEST|param:1025|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2200
+condType:OPEN_STATE_COND_PARENT_QUEST|param:70661|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2201
+condType:OPEN_STATE_COND_QUEST|param:1100811|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 16 false false 1502
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1500
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:28|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1501
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:10|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1700
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:45|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1600
+condType:OPEN_STATE_COND_PARENT_QUEST|param:71654|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1504
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 1505
+condType:OPEN_STATE_COND_QUEST|param:201310|NEOENBFLOGE:0,condType:OPEN_STATE_COND_PLAYER_LEVEL|param:30|NEOENBFLOGE:0 18 false false 2000
+condType:OPEN_STATE_COND_QUEST|param:1201812|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1012
+condType:OPEN_STATE_COND_QUEST|param:7103711|NEOENBFLOGE:0,condType:OPEN_STATE_COND_PLAYER_LEVEL|param:28|NEOENBFLOGE:0 20 false false 2600
+condType:OPEN_STATE_COND_QUEST|param:7322902|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 21 false false 3001
+condType:OPEN_STATE_COND_QUEST|param:7334101|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 23 false false 3600
+condType:OPEN_STATE_COND_QUEST|param:400617|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 24 false false 4004
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4005
+condType:OPEN_STATE_COND_QUEST|param:7112704|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 25 false false 4400
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4401
+condType:OPEN_STATE_COND_QUEST|param:500218|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 28 false false 5009
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 5010
+condType:OPEN_STATE_COND_PARENT_QUEST|param:71655|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 1503
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 85
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 86
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:2|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2101
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2103
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2102
+condType:OPEN_STATE_COND_QUEST|param:201310|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2005
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 87
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 88
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 89
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:30|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2500
+condType:OPEN_STATE_COND_QUEST|param:7217716|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 2403
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 2501
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 91
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 92
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 90
+condType:OPEN_STATE_COND_QUEST|param:7303510|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3003
+condType:OPEN_STATE_COND_QUEST|param:7066521|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 22 false false 3300
+condType:OPEN_STATE_COND_GCG_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3301
+condType:OPEN_STATE_COND_GCG_LEVEL|param:4|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3302
+condType:OPEN_STATE_COND_GCG_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3303
+condType:OPEN_STATE_COND_QUEST|param:7066510|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3304
+condType:OPEN_STATE_COND_GCG_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3305
+condType:OPEN_STATE_COND_GCG_LEVEL|param:3|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3306
+condType:OPEN_STATE_COND_QUEST|param:7066510|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3307
+condType:OPEN_STATE_COND_GCG_LEVEL|param:2|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3308
+condType:OPEN_STATE_COND_QUEST|param:7066521|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3309
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 3200
+condType:OPEN_STATE_COND_GCG_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3311
+condType:OPEN_STATE_COND_GCG_LEVEL|param:4|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3700
+condType:OPEN_STATE_COND_GCG_LEVEL|param:1|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4008
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4204
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3505
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3506
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3702
+condType:OPEN_STATE_COND_QUEST|param:4011314|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3800
+condType:OPEN_STATE_COND_QUEST|param:4011501|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3801
+condType:OPEN_STATE_COND_QUEST|param:4011602|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 3802
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3805
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3751
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3760
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3761
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4002
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4003
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4009
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4010
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3803
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 3804
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4103
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:24|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4104
+condType:OPEN_STATE_COND_QUEST|param:202102|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4105
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4106
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4107
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4813
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4614
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4108
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4109
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4203
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4300
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4110
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4111
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4206
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4207
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4208
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4112
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4210
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4211
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4212
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4213
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4214
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4215
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4216
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4217
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4218
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4219
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4220
+condType:OPEN_STATE_COND_QUEST|param:7110082|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4402
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4501
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4502
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4403
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4404
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4504
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4503
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4509
+condType:OPEN_STATE_COND_QUEST|param:39604|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4601
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4602
+condType:OPEN_STATE_COND_QUEST|param:7418432|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4603
+condType:OPEN_STATE_COND_QUEST|param:7067602|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 26 false false 4700
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4505
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4506
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4507
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4508
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4526
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4520
+condType:OPEN_STATE_COND_QUEST|param:2003004|NEOENBFLOGE:0,condType:OPEN_STATE_COND_PLAYER_LEVEL|param:12|NEOENBFLOGE:0 0 false false 4510
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4511
+condType:OPEN_STATE_COND_QUEST|param:2500902|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4512
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4513
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4514
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4515
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4516
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4517
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4519
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4525
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4521
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4522
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4523
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4608
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4609
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4610
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4611
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 true true 4612
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4615
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4616
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5002
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5003
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5004
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 29 false false 5001
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5005
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5013
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5006
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5007
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:25|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 5008
+condType:OPEN_STATE_COND_QUEST|param:7068001|NEOENBFLOGE:0,condType:OPEN_STATE_COND_PLAYER_LEVEL|param:35|NEOENBFLOGE:0 27 false false 4805
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4801
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4802
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4803
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4804
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4701
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4704
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4705
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4706
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4702
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4703
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4707
+condType:OPEN_STATE_COND_QUEST|param:4016202|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4806
+condType:OPEN_STATE_COND_QUEST|param:4016303|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4807
+condType:OPEN_STATE_COND_QUEST|param:4016304|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4808
+condType:OPEN_STATE_COND_QUEST|param:4016403|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4809
+condType:OPEN_STATE_COND_QUEST|param:4016406|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false false 4810
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4812
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4820
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4821
+condType:OPEN_STATE_COND_PLAYER_LEVEL|param:28|NEOENBFLOGE:0,condType:OPEN_STATE_COND_QUEST|param:102510|NEOENBFLOGE:0 0 false false 5014
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4822
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4823
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 5015
+condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0,condType:OPEN_STATE_COND_NONE|param:0|NEOENBFLOGE:0 0 false true 4811
diff --git a/data/txt/SceneData.txt b/data/txt/SceneData.txt
new file mode 100644
index 0000000..141b0e2
--- /dev/null
+++ b/data/txt/SceneData.txt
@@ -0,0 +1,1412 @@
+id type ignoreNavMesh scriptData overrideDefaultProfile levelEntityConfig specifiedAvatarList comment boundaryPointVec dungeonEntryPoint maxSpecifiedAvatarNum worldSceneId mpType sceneFixTime useToTheMoon navmeshMode safePoint isAllowMapMarkPoint isDeleteMapMarkPoint entityAppearSorted subtype imageSceneId overrideVisionLevelType
+1001 SCENE_DUNGEON NotUse ClimbTest1 测试
+1002 SCENE_WORLD NotUse ClimbTest2 测试
+1003 SCENE_WORLD NotUse TheBigWorld 测试
+1006 SCENE_DUNGEON Level_PFDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon01 正式
+1011 SCENE_DUNGEON NotUse Level_Gameplay_Test 测试
+1015 SCENE_DUNGEON WindZone Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindZone01 Level_Sneak 10000005,10000007 正式 1
+1016 SCENE_DUNGEON Level_AmborAbyss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AmborAbyss01 正式
+1017 SCENE_DUNGEON Level_FCdungeon_Kettle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Kettle01 正式
+1019 SCENE_DUNGEON NotUse Level_Wisdom03 Level_Dungeon 测试
+1024 SCENE_DUNGEON Level_WeekDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon01 正式
+1030 SCENE_WORLD NotUse TestIntercept_LiYue Level_Sneak 测试 1
+1031 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+1032 SCENE_DUNGEON Level_FCdungeon_Cloud02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud03 LevelEntity_Quest_XiaoDungeon 正式
+1050 SCENE_DUNGEON NotUse Level_WaterMonster_Test 测试
+1051 SCENE_DUNGEON Level_QunYuGe_CLX Data/Environment/EnviroSystemProfile/Dungeon/ESP_Qunyuge01 正式
+1052 SCENE_DUNGEON Level_FCdungeon_FatOtaku Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_FatOtaku 正式
+1053 SCENE_DUNGEON Level_FCdungeon_Kettle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Kettle01 正式
+1054 SCENE_DUNGEON Level_FCdungeon_Kettle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Kettle01 正式
+1055 SCENE_DUNGEON Level_YoungMaster Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_YoungMaster01 正式
+1056 SCENE_DUNGEON Level_ZhongLi_WG Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Zhongli01 正式
+1058 SCENE_DUNGEON Level_FCdungeon_FatOtaku Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_FatOtaku 正式
+1059 SCENE_DUNGEON Level_FCdungeon_Hutao Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Hutao_01 正式
+1062 SCENE_DUNGEON Level_FCdungeon_LeiDianYing 正式
+1064 SCENE_ROOM NotUse IndoorScene_Dq_TenryuBugyo 正式 3
+1065 SCENE_DUNGEON Level_TenryuBugyo01 正式
+1066 SCENE_ROOM NotUse IndoorScene_Dq_Uyutei 正式 3
+1068 SCENE_ROOM IndoorScene_Md_AngelShare_Bartender01 Level_Bartender_Room 10000005,10000007 正式 1 SCENE_MP_SINGLE_PLAYER_SINGLE_MODE
+1070 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+1071 SCENE_DUNGEON Level_FCdungeon_Shougun01_Kazuha 正式
+1076 SCENE_ROOM IndoorScene_Md_CattailTavern 正式 3
+1004 SCENE_ROOM NotUse Knight_Inside_Test 正式 3
+1005 SCENE_ROOM ChurchSteal Level_Sneak 10000005,10000007 正式 1
+1008 SCENE_ROOM ChurchLobby 正式 3
+1009 SCENE_ROOM AngelShare 正式 3
+1013 SCENE_ROOM NotUse SneakAdvancedTest Level_Sneak 10000005,10000007 测试 1
+1018 SCENE_ROOM Chateau 正式 3
+1023 SCENE_ROOM Level_Yurenzhong 正式
+1033 SCENE_ROOM Indoor_Ly_Bank 正式 3
+1034 SCENE_ROOM Indoor_Ly_Liuliting 正式 3
+1035 SCENE_ROOM Indoor_Ly_Xinyuexuan 正式 3
+1057 SCENE_ROOM NotUse Indoor_Ly_Qunyuge 正式 3
+1060 SCENE_ROOM NotUse IndoorScene_Dq_Teahouse 正式 3
+1061 SCENE_ROOM NotUse IndoorScene_Dq_Syabugyo 正式 3
+1063 SCENE_ROOM NotUse IndoorScene_Dq_Donjon 正式 3
+1069 SCENE_ROOM IndoorScene_Ly_CyRoom 正式
+1072 SCENE_ROOM NotUse IndoorScene_Xm_Barbecue 正式 3
+1073 SCENE_ROOM NotUse IndoorScene_Xm_Biglibrary 正式 3
+1074 SCENE_ROOM NotUse IndoorScene_Xm_Coffeehouse 正式 3
+1075 SCENE_ROOM NotUse IndoorScene_Xm_Csd 正式 3
+1077 SCENE_ROOM NotUse IndoorScene_Xm_Chunzhangjia 正式 3
+1078 SCENE_ROOM NotUse IndoorScene_Xm_Zls 正式 3
+1079 SCENE_ROOM NotUse IndoorScene_Xm_Alhouse 正式 3
+1082 SCENE_ROOM NotUse IndoorScene_Ly_Baizhu 正式 3
+1080 SCENE_ROOM NotUse IndoorScene_Fd_ShuiXian 正式 3
+1081 SCENE_ROOM NotUse IndoorScene_Cyg_Qyz 正式 3
+1083 SCENE_ROOM NotUse IndoorScene_Fd_Yht 正式 3
+1084 SCENE_ROOM NotUse IndoorScene_Fd_Hotel 正式 3
+1085 SCENE_ROOM NotUse IndoorScene_Fd_Gjy 正式 3
+1086 SCENE_ROOM NotUse IndoorScene_Fd_Dyz 正式 3
+1087 SCENE_ROOM NotUse IndoorScene_Fd_Fln 正式 3
+1088 SCENE_ROOM NotUse IndoorScene_Fd_Ck 正式 3
+1089 SCENE_ROOM NotUse IndoorScene_Fd_Qz 正式 3
+1090 SCENE_ROOM NotUse IndoorScene_Md_CatCafe 正式 3
+1091 SCENE_ROOM NotUse IndoorScene_XM_SilenceTemple 正式 3
+1092 SCENE_ROOM NotUse IndoorScene_Fd_Xgw 正式 3
+1093 SCENE_ROOM NotUse IndoorScene_Md_TRPGGame 正式 3 11
+1094 SCENE_ROOM NotUse IndoorScene_Fd_KlldCk 正式 3 22
+2001 SCENE_HOME_WORLD Client Homeworld_Exterior_Above 正式
+2002 SCENE_HOME_WORLD Client Homeworld_Exterior_Karst 正式
+2003 SCENE_HOME_WORLD Client Homeworld_Exterior_Uncharted 正式
+2004 SCENE_HOME_WORLD Client Homeworld_Exterior_Ukiyo 正式
+2005 SCENE_HOME_WORLD Client Homeworld_Exterior_Sumeru 正式
+2006 SCENE_HOME_WORLD NotUse Homeworld_Exterior_Theater Level_HomeWorld_Theater 正式
+2201 SCENE_HOME_ROOM Client Homeworld_Interior_Md_Apartment_01 正式
+2202 SCENE_HOME_ROOM Client Homeworld_Interior_Ly_Apartment_01 正式
+2203 SCENE_HOME_ROOM Client Homeworld_Interior_Dq_Apartment_01 正式
+2204 SCENE_HOME_ROOM Client Homeworld_Interior_Xm_Apt_01 正式
+2205 SCENE_HOME_ROOM Client Homeworld_Interior_Fd_Apt_01 正式
+1 SCENE_WORLD NotUse BigWorld_LevelStreaming Level_BigWorld 测试
+2 SCENE_WORLD NotUse BigWorld_LevelStreaming Level_BigWorld 测试
+3 SCENE_WORLD BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_BigWorld 正式 -8523.2,8736,7819.2,-7680 true NAVMESH_MODE_BOX 15 true
+4 SCENE_WORLD LostParadise_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 1 true true
+5 SCENE_WORLD AbyssalPalace_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 -2131.2,2755.2,3155.2,-1731.2 1 true
+6 SCENE_WORLD TheChasm_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 -2131.2,2755.2,3155.2,-1731.2 0.75 1 true
+7 SCENE_WORLD MichiaeMatsuri_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 2 true true
+9 SCENE_WORLD DreamIsland_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 NAVMESH_MODE_POLYGON 33 true true
+10 SCENE_WORLD Penumbra_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld_Scene10 正式 -2131.2,2755.2,3155.2,-1731.2 2 true true
+11 SCENE_WORLD DeepSea_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_LP_General Level_BigWorld 正式 -2131.2,2755.2,3155.2,-1731.2 true 1 true
+20000 SCENE_DUNGEON NotUse Level_Gameplay_Test 测试
+20005 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd Data/Environment/EnviroSystemProfile/Dungeon/ESP_XianglingPlotLevel01 正式
+20006 SCENE_DUNGEON NotUse Level_UCDungeon01 测试
+20007 SCENE_DUNGEON NotUse PlotLevel_BarbaraMission02_Xyd 测试
+20008 SCENE_DUNGEON Level_KaeyaTutorialMission01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_KaeyaTutorialMission01 正式
+20009 SCENE_DUNGEON Level_AmborTutorialMission01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AmborTutorialMission01 正式
+20010 SCENE_DUNGEON Level_LisaTutorialMission04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+20011 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+20012 SCENE_DUNGEON NotUse Level_UCDungeon01 测试
+20013 SCENE_DUNGEON NotUse Level_KaeyaTutorialMission02 测试
+20014 SCENE_DUNGEON NotUse Level_UCDungeon01 测试
+20015 SCENE_DUNGEON NotUse Level_LisaTutorialMission03 测试
+20016 SCENE_DUNGEON Level_KaeyaTutorialMission02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_KaeyaTutorialMission02 正式
+20017 SCENE_DUNGEON DvalinTest_S01 Data/Environment/EnviroSystemProfile/Monster/ESP_Monster_Dvalin_S01 Level_Dvalin_S01 10000005,10000007 正式 1 1
+20018 SCENE_DUNGEON DvalinTest_S04 Data/Environment/EnviroSystemProfile/Monster/ESP_Monster_Dvalin_S04 Level_Dvalin_S04 正式 1
+20019 SCENE_DUNGEON Level_LisaTutorialMission04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+20020 SCENE_DUNGEON DvalinTest_S00 Data/Environment/EnviroSystemProfile/Monster/ESP_Monster_Dvalin_S00 Level_Dvalin_S00 10000005,10000007 正式 1 1
+20022 SCENE_DUNGEON Level_UCDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BarbaraMission01 正式
+20023 SCENE_DUNGEON Level_Plot Data/Environment/EnviroSystemProfile/Dungeon/ESP_Plot 正式
+20024 SCENE_DUNGEON Level_UCDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BarbaraMission01 正式
+20025 SCENE_DUNGEON DvalinTest_S04 Data/Environment/EnviroSystemProfile/Monster/ESP_Monster_Dvalin_S04 Level_Dvalin_S04_Recycle 正式 1
+20026 SCENE_DUNGEON Level_WeekDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon01 正式
+20027 SCENE_DUNGEON Level_WeekDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon01 正式
+20028 SCENE_DUNGEON Level_WeekDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon01 正式
+20031 SCENE_DUNGEON Level_UCDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BarbaraMission01 正式
+20032 SCENE_DUNGEON Level_WindyTutorial_YQT Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+20034 SCENE_DUNGEON IndoorScene_Ly_Goldenhouse Data/Environment/EnviroSystemProfile/Dungeon/ESP_AureaBattle01 Level_Tartaglia 正式
+20035 SCENE_DUNGEON Level_KaeyaTutorialMission02 正式
+20036 SCENE_DUNGEON Level_KaeyaTutorialMission02 正式
+20037 SCENE_DUNGEON Level_FCdungeon_Eula Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Eula 正式
+20101 SCENE_DUNGEON IndoorScene_Ly_Goldenhouse Data/Environment/EnviroSystemProfile/Dungeon/ESP_AureaBattle01 Level_Tartaglia 正式
+20102 SCENE_DUNGEON Level_FCdungeon_Qiqi Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Qiqi 正式
+20103 SCENE_DUNGEON Level_AmborTutorialMission01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AmborTutorialMission01 正式
+20104 SCENE_DUNGEON Level_FCdungeon_GoddessLY Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_GoddessLY01 正式
+20105 SCENE_DUNGEON Level_FCdungeon_GoddessLY Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_GoddessLY01 正式
+20106 SCENE_DUNGEON Level_DahakaBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DahakaBoss01 Level_Dahaka_CameraSetting 正式
+20107 SCENE_DUNGEON Level_DahakaBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DahakaBoss01 Level_Dahaka_CameraSetting 正式
+20108 SCENE_DUNGEON Level_DahakaBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DahakaBoss01 Level_Dahaka_CameraSetting 正式
+20109 SCENE_DUNGEON Level_DahakaBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DahakaBoss01 Level_Dahaka_CameraSetting 正式
+20110 SCENE_DUNGEON Level_DahakaBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DahakaBoss01 Level_Dahaka_CameraSetting 正式
+20111 SCENE_DUNGEON Level_HFDungeon_Prison01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 正式
+20112 SCENE_DUNGEON Level_Dq_Void01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Dq_Void01 Level_Monster_Shougun_Setting 正式
+20113 SCENE_DUNGEON Level_FCdungeon_Delusion01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCDungeon_Delusion01 正式
+20114 SCENE_DUNGEON Level_DonjonBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DonjonBattle 正式
+20115 SCENE_DUNGEON Level_DonjonBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_DonjonBattle 正式
+20116 SCENE_DUNGEON Level_Dq_Void01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Dq_Void01 正式
+20117 SCENE_DUNGEON Level_Dq_Void02 Level_Monster_Shougun_Tachi_Revive 正式
+20118 SCENE_DUNGEON Level_HFDungeon02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon02 正式
+20119 SCENE_DUNGEON Level_HFDungeon_Yidou01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon_Yidou01 正式
+20120 SCENE_DUNGEON Level_Eldritch_Minor01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Eldritch_Minor01 正式
+20121 SCENE_DUNGEON QuestLevel_FCdungeon_ShenheCloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Kettle01 正式
+20122 SCENE_DUNGEON Level_WeekDungeon_Baal Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon_Baal Level_Monster_Shougun_Mitakenarukami_AvatarRevive 正式
+20123 SCENE_DUNGEON Level_FCdungeon_Miko Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCDungeon_Miko 正式
+20124 SCENE_DUNGEON Level_Eldritch_Minor01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Eldritch_Minor01 正式
+20125 SCENE_DUNGEON Level_WeekDungeon_Baal Data/Environment/EnviroSystemProfile/Dungeon/ESP_WeekDungeon_Baal 正式
+20126 SCENE_DUNGEON Level_QuestRongcai_Dungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 正式
+20127 SCENE_DUNGEON Level_CYDungeon_Activy01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CYDungeon_Activy01 正式
+20128 SCENE_DUNGEON Level_CYDungeon_Activy02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CYDungeon_Activy02 LevelEntity_Activity_V2_7_CYRogue_20128 正式
+20129 SCENE_DUNGEON Level_CYDungeon_Activy03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 正式
+20130 SCENE_ROOM IndoorScene_Ly_CyRoom 正式 6
+20131 SCENE_DUNGEON Level_FCdungeon_Yelan Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Yelan 正式
+20132 SCENE_DUNGEON Level_SmrDungeon_BigTree Level_Dungeon 正式
+20133 SCENE_DUNGEON Level_DreamIsland_Xinyan01 正式 9,27 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20134 SCENE_DUNGEON Level_DreamIsland_Mona01 Level_DreamDungeon_Mona 正式 9,29 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20135 SCENE_DUNGEON Level_DreamIsland_Kazuha02 正式 9,11 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20136 SCENE_DUNGEON Level_DreamIsland_Mona02 Level_DreamDungeon_Mona 正式 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20137 SCENE_DUNGEON Level_DreamIsland_Fischl01 正式 9,15 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20138 SCENE_DUNGEON Level_DreamIsland_Fischl02 正式 9,17 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20139 SCENE_DUNGEON Level_DreamIsland_Fischl03 正式 9,19 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20140 SCENE_DUNGEON Level_DreamIsland_Kazuha03 正式 9,13 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20141 SCENE_DUNGEON Level_DreamIsland_Fischllibrary 正式 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20142 SCENE_DUNGEON Level_DreamIsland_Kazuha01 正式 9,9 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20143 SCENE_DUNGEON Level_DreamIsland_Fischlroom 正式 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20144 SCENE_DUNGEON Level_DreamIsland_Fischlcorridor 正式 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+20145 SCENE_DUNGEON Level_XMDungeon_WQ01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01 Level_Dungeon 正式
+20146 SCENE_DUNGEON Level_XMDungeon_WQ04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01_02 Level_Dungeon 正式
+20147 SCENE_DUNGEON Level_XMDungeon_WQ03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01_03 Level_Dungeon 正式
+20148 SCENE_DUNGEON Level_XMDungeon_WQ02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ02 正式
+20149 SCENE_DUNGEON Level_SmrDungeon_Tinali Level_Dungeon 正式
+20150 SCENE_DUNGEON Level_VoidWorldTree 正式
+20151 SCENE_DUNGEON Level_FC_DeshretTemple 正式
+20152 SCENE_DUNGEON NotUse Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 测试
+20153 SCENE_DUNGEON Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 正式
+20154 SCENE_DUNGEON Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 正式
+20155 SCENE_DUNGEON Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 正式
+20156 SCENE_DUNGEON Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 正式
+20157 SCENE_DUNGEON Level_SmrDungeon_Cyno 正式
+20158 SCENE_DUNGEON Level_FCdungeon_BigTree Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_BigTree_01 Level_Dungeon 正式
+20159 SCENE_DUNGEON Level_XMDungeon_WQ01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01 Level_Dungeon 正式
+20160 SCENE_DUNGEON Level_FC_DeshretTemple Level_Dungeon 正式
+20161 SCENE_DUNGEON Level_FC_DeshretTemple Level_Dungeon 正式
+20162 SCENE_DUNGEON IndoorScene_Xm_Biglibrary 正式 1073
+20163 SCENE_DUNGEON Level_ScaramoucheFactory Level_Dungeon 正式
+20164 SCENE_DUNGEON Level_VoidWorldTree 正式
+20165 SCENE_DUNGEON Level_NahidaDungeon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_NahidaDungeon_01 Level_Dungeon 正式
+20166 SCENE_DUNGEON Level_VoidWorldTree_02 LevelEntity_Activity_ClearFollowPet 正式
+20167 SCENE_DUNGEON Level_Consciousness LevelEntity_Activity_ClearFollowPet 正式
+20168 SCENE_DUNGEON Level_ScaramoucheBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_ScaramoucheBoss01 Level_Monster_Nada_Setting 正式
+20169 SCENE_DUNGEON Level_ScaramoucheRecall 正式
+20170 SCENE_DUNGEON Level_ScaramoucheFactory 正式
+20171 SCENE_DUNGEON Level_ScaramoucheBoss LevelEntity_ScaramoucheBoss 正式
+20172 SCENE_DUNGEON Level_Consciousness 正式
+20173 SCENE_DUNGEON Level_Xm_Alhaitham_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Alhaitham_01 Level_AlHaitham_Dungeon_Setting 正式
+20174 SCENE_DUNGEON Level_Wisdom01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Wisdom01 Level_SpaceIntelligence_Dungeon 正式
+20175 SCENE_DUNGEON Level_Wisdom02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Wisdom02 Level_SpaceIntelligence_Dungeon 正式
+20176 SCENE_DUNGEON Level_Wisdom03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Wisdom03 Level_SpaceIntelligence_Dungeon 正式
+20177 SCENE_DUNGEON Level_SmrDungeon_Dehya Level_Dungeon 正式
+20178 SCENE_DUNGEON Level_HangMystification 正式
+20179 SCENE_DUNGEON Level_WeekDungeon_Apep Data/Environment/EnviroSystemProfile/Dungeon/ESP_GrassDragonBoss01 正式
+20180 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,776 3
+20181 SCENE_DUNGEON Level_HangMystification 正式
+20182 SCENE_DUNGEON Level_Ly_Baizhu_01 正式
+20183 SCENE_DUNGEON Level_Penumbra_CircusTent Level_V3_8_Scene20183 正式
+20184 SCENE_DUNGEON NotUse Level_PtahurBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 测试
+20185 SCENE_DUNGEON Level_WeekDungeon_Apep Data/Environment/EnviroSystemProfile/Dungeon/ESP_GrassDragonBoss01 正式
+20186 SCENE_DUNGEON Level_Fontaine_Gear 正式
+20187 SCENE_DUNGEON Level_Dungeon_Fd_LinNi 正式
+20188 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,945 3
+20189 SCENE_DUNGEON Level_BoxMatch LevelEntity_Activity_V4_1_BoxMatch_20189 正式
+20190 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+20191 SCENE_DUNGEON Level_BoxMatch LevelEntity_Activity_V4_1_BoxMatch_20191 正式
+20192 SCENE_DUNGEON Level_BoxMatch LevelEntity_Activity_V4_1_BoxMatch_20192 正式
+20193 SCENE_DUNGEON Level_BoxMatch LevelEntity_Activity_V4_1_BoxMatch_20193 正式
+20194 SCENE_DUNGEON Level_BoxMatch LevelEntity_Activity_V4_1_BoxMatch_20194 正式
+20195 SCENE_DUNGEON Level_Dungeon_Fd_Laiousili Level_Wriothesley_Dungeon_Setting 正式
+20196 SCENE_DUNGEON Level_Fd_RestrictedArea 正式
+20197 SCENE_DUNGEON Level_FD_Freminet 正式
+20198 SCENE_DUNGEON Level_Devourer_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd42_Level_Devourer_Out LevelEntity_Ptahur_Story 正式 VISION_LEVEL_LITTLE_REMOTE
+20199 SCENE_DUNGEON Level_Devourer_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd42_Level_Devourer_Out 正式 VISION_LEVEL_LITTLE_REMOTE
+20200 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,1054 3
+20201 SCENE_DUNGEON IndoorScene_Fd_Gjy 正式 20200,2 1085
+20202 SCENE_DUNGEON Level_Fd_TearLand_01 正式
+20203 SCENE_DUNGEON Level_Fd_SlateRuin01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_SlateRuin01_Before 正式
+20204 SCENE_DUNGEON Level_Fd_SlateRuin01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_SlateRuin01_After 正式
+20205 SCENE_DUNGEON Level_FD_Shuixian Data/Environment/EnviroSystemProfile/Indoor/ESP_Fd_ShuiXian 正式
+20206 SCENE_DUNGEON Level_QuestDevourer_01 Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd42_TH_Boss_Up 正式
+20207 SCENE_DUNGEON Level_LY44Dungeon_WQ Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_BossWQ Level_V4_4_Hermit_Dungeon 正式
+20208 SCENE_DUNGEON Level_WeekDungeon_Nihil Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du46_NihilBoss01_A Level_Monster_Nihil_StoryLevel 正式
+20209 SCENE_DUNGEON Level_FCdungeon_Liuyun Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_Liuyun_WS_Start 正式
+20210 SCENE_DUNGEON DeepSea_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd46_Kpm_GlodenLobby_After Level_BigWorld 正式 3,1138 11
+20211 SCENE_DUNGEON DeepSea_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd46_Kpm_GlodenLobby_After Level_BigWorld 正式 3,1140 11
+20212 SCENE_DUNGEON Level_Fd_Chiori Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd45_Chiori_Shops 正式
+20213 SCENE_DUNGEON Level_Smr_SilenceTemple 正式
+20214 SCENE_DUNGEON Level_WeekDungeon_Nihil Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du46_NihilBoss01_A Level_Monster_Nihil_WeatherSetting 正式
+20215 SCENE_DUNGEON DeepSea_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd46_Kpm_GlodenLobby_After LevelEntity_TeamAbility_V4.6_WQ_AvatarRevive 正式 11,20 11
+20216 SCENE_DUNGEON DeepSea_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd46_Kpm_GlodenLobby_After Level_BigWorld 正式 11,22 11
+20217 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,1223 14 true 3
+20218 SCENE_DUNGEON Level_Fd_Sigewinne Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_Sigewinne_Base 正式
+20219 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,1266 20 true 3
+20222 SCENE_DUNGEON Level_SmrDungeon_Twins1 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_SmrDungeon_Twins1 Level_Dungeon 正式
+20224 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 3,1288 3
+20225 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 Level_BigWorld 正式 1093,2 18 true 3
+20226 SCENE_DUNGEON Level_SmrDungeon_Twins2 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_SmrDungeon_Twins2 正式
+30001 SCENE_DUNGEON NotUse LevelTest_CurseMaze 测试
+30100 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30101 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30102 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30103 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30104 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30200 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30201 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30202 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30203 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30204 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30300 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30301 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30302 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30303 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30304 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+30400 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30401 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30402 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30403 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30404 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30500 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30501 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30502 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30503 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30504 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30600 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30601 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30602 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30603 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30604 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30700 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30701 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30702 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30703 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30704 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 正式
+30800 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+30801 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+30802 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+30803 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+30804 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+30900 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30901 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30902 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30903 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+30904 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31000 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31001 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31002 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31003 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31004 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31100 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31101 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31102 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31103 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31104 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31200 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31201 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31202 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31203 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31204 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31300 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+31301 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+31302 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+31303 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+31304 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+31400 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+31401 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+31402 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+31403 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+31404 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+31500 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+31501 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+31502 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+31503 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+31504 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+31600 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+31601 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+31602 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+31603 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+31604 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+31700 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31701 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31702 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31703 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31704 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+31800 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31801 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31802 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31803 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31804 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31900 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31901 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31902 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31903 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+31904 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32000 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32001 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32002 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32003 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32004 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+32100 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32101 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32102 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32103 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32104 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32200 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32201 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32202 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32203 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+32204 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+33100 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+33101 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+33102 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33103 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+34100 SCENE_DUNGEON Level_Tower_Morning_01 正式
+34101 SCENE_DUNGEON Level_Tower_01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_General 正式
+34102 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34103 SCENE_DUNGEON Level_Tower_Morning_01 正式
+35100 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+35101 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+35102 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+35103 SCENE_DUNGEON Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 正式
+33401 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 LevelEntity_ClearLocalGadgets 正式
+33402 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33403 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33404 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34401 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 LevelEntity_ClearLocalGadgets 正式
+34402 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34403 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34404 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35401 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 LevelEntity_ClearLocalGadgets 正式
+35402 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35403 SCENE_DUNGEON Level_Tower_Dusk_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Dusk_01 LevelEntity_ClearLocalGadgets 正式
+35404 SCENE_DUNGEON Level_Tower_Night_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33700 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33701 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33702 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33703 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33704 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+33705 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+33706 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+33707 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+33708 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33709 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+33710 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33711 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+33712 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33713 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+33714 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+33715 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33716 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33717 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33718 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33719 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33720 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33721 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33722 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33723 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33724 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33725 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33726 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33727 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33728 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33729 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33730 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33731 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33732 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33733 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33734 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33735 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+33736 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+33737 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33738 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33739 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33740 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33741 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33742 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33743 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33744 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33745 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33746 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33747 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33748 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33749 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33750 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33751 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33752 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33753 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33754 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33755 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33756 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33757 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33758 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33759 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33760 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33761 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33762 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33763 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33764 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33765 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33766 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33767 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33768 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33769 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33770 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33771 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33772 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+33773 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+33774 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34700 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34701 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34702 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34703 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34704 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+34705 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+34706 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+34707 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+34708 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34709 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+34710 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34711 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+34712 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34713 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+34714 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+34715 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34716 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34717 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34718 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34719 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34720 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34721 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34722 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34723 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34724 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34725 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34726 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34727 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34728 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34729 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34730 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34731 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34732 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34733 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34734 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34735 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+34736 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+34737 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34738 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34739 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34740 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34741 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34742 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34743 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34744 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34745 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34746 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34747 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34748 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34749 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34750 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34751 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34752 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34753 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34754 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34755 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34756 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34757 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34758 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34759 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34760 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34761 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34762 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34763 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34764 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34765 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34766 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34767 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34768 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34769 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34770 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34771 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34772 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+34773 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+34774 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35700 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35701 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35702 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35703 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35704 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+35705 SCENE_DUNGEON Level_Tower_Element_Fire_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Fire_01 正式
+35706 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+35707 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+35708 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35709 SCENE_DUNGEON Level_Tower_Element_Thunder_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Thunder_01 正式
+35710 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35711 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+35712 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35713 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+35714 SCENE_DUNGEON Level_Tower_Element_Ice_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Ice_01 正式
+35715 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35716 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35717 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35718 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35719 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35720 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35721 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35722 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35723 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35724 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35725 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35726 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35727 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35728 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35729 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35730 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35731 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35732 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35733 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35734 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35735 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+35736 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+35737 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35738 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35739 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35740 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35741 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35742 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35743 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35744 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35745 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35746 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35747 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35748 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35749 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35750 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35751 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35752 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35753 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35754 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35755 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35756 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35757 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35758 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35759 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35760 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35761 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35762 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35763 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35764 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35765 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35766 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35767 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35768 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35769 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35770 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35771 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35772 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35773 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 LevelEntity_ClearLocalGadgets 正式
+35774 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 LevelEntity_ClearLocalGadgets 正式
+35800 SCENE_DUNGEON Level_CycleDungeon_WindFlower Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon_WindFlower Level_WindFlora_Dungeon 正式
+35801 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35802 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35803 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35804 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35805 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35806 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35807 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35808 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35809 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35810 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35811 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35812 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35813 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35814 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35815 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35816 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35817 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35818 SCENE_DUNGEON Level_ContestBattle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_ContestBattle01 正式
+35820 SCENE_DUNGEON Level_FCdungeon_Qiqi Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Qiqi 正式
+35821 SCENE_DUNGEON Level_FCdungeon_Qiqi Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Qiqi 正式
+35822 SCENE_DUNGEON Level_FCdungeon_Qiqi Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Qiqi 正式
+35823 SCENE_DUNGEON Level_FCdungeon_Qiqi Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Qiqi 正式
+35824 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd Data/Environment/EnviroSystemProfile/Dungeon/ESP_XianglingPlotLevel01 正式
+35825 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd Data/Environment/EnviroSystemProfile/Dungeon/ESP_XianglingPlotLevel01 正式
+35826 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd Data/Environment/EnviroSystemProfile/Dungeon/ESP_XianglingPlotLevel01 正式
+35827 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd Data/Environment/EnviroSystemProfile/Dungeon/ESP_XianglingPlotLevel01 正式
+35828 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+35829 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+35830 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+35831 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+35840 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35841 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35842 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35843 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35844 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35845 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35846 SCENE_DUNGEON Level_DreamIsland_Xinyan01 正式
+35847 SCENE_DUNGEON Level_DreamIsland_Xinyan01 正式
+35848 SCENE_DUNGEON Level_DIKazuha04 正式
+35849 SCENE_DUNGEON Level_DIKazuha04 正式
+35850 SCENE_DUNGEON Level_DreamIsland_Fischl03 正式
+35851 SCENE_DUNGEON Level_DreamIsland_Fischl03 正式
+35852 SCENE_DUNGEON Level_DreamIsland_Mona01 Level_DreamDungeon_Mona 正式
+35853 SCENE_DUNGEON Level_DreamIsland_Mona01 Level_DreamDungeon_Mona 正式
+35854 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35855 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35856 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35857 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35858 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35859 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35860 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35861 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35862 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35863 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35870 SCENE_DUNGEON NotUse Level_BrickBreaker01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BrickBreaker01 正式
+35871 SCENE_DUNGEON NotUse Level_BrickBreaker01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BrickBreaker01 正式
+35872 SCENE_DUNGEON NotUse Level_BrickBreaker01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_BrickBreaker01 正式
+35873 SCENE_DUNGEON Level_FungusFighter01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter01_A 正式
+35874 SCENE_DUNGEON Level_FungusFighter01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter01_A 正式
+35875 SCENE_DUNGEON Level_FungusFighter01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter01_A 正式
+35876 SCENE_DUNGEON Level_FungusFighter02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter02_A 正式
+35877 SCENE_DUNGEON Level_FungusFighter02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter02_A 正式
+35878 SCENE_DUNGEON Level_FungusFighter02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter02_A 正式
+35879 SCENE_DUNGEON Level_FungusFighter02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter02_A 正式
+35880 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+35881 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+35882 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+35883 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+35884 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+35890 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35891 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35892 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35893 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35894 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35895 SCENE_DUNGEON Level_CrystalLink_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CrystalLink_01 正式
+35896 SCENE_DUNGEON Level_AkaFesRhythm01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm36_Level_AkaFesRhythm01_01 正式
+35897 SCENE_DUNGEON Level_AkaFesRhythm01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm36_Level_AkaFesRhythm01_01 正式
+35898 SCENE_DUNGEON Level_AkaFesRhythm01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm36_Level_AkaFesRhythm01_01 正式
+35899 SCENE_DUNGEON Level_FungusFighter01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FungusFighter01_A 正式
+35900 SCENE_DUNGEON Level_AkaFesArc_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AkaFesArc_01 LevelEntity_Activity_V3_6_AkaFesCustomGrapplingHook 正式
+35901 SCENE_DUNGEON Level_AkaFesArc_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AkaFesArc_01 LevelEntity_Activity_V3_6_AkaFesCustomGrapplingHook 正式
+35902 SCENE_DUNGEON Level_AkaFesArc_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AkaFesArc_01 LevelEntity_Activity_V3_6_AkaFesCustomGrapplingHook 正式
+35903 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35904 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35905 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35906 SCENE_DUNGEON Level_CycleDungeon_WindFlower Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon_WindFlower 正式
+35907 SCENE_DUNGEON Level_CycleDungeon_WindFlower Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon_WindFlower 正式
+35908 SCENE_DUNGEON Level_CycleDungeon_WindFlower Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon_WindFlower 正式
+35909 SCENE_DUNGEON Level_CycleDungeon_WindFlower Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon_WindFlower 正式
+35910 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35911 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35912 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35913 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35914 SCENE_DUNGEON Level_Activity_Circus LevelEntity_Activity_Bladedance_BanItem 正式
+35915 SCENE_DUNGEON Level_Activity_Circus LevelEntity_Activity_Bladedance_BanItem 正式
+35916 SCENE_DUNGEON Level_Activity_Circus LevelEntity_Activity_Bladedance_BanItem 正式
+35917 SCENE_DUNGEON Level_Activity_Circus LevelEntity_Activity_Bladedance_BanItem 正式
+35918 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35919 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35920 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35921 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35922 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+35923 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_LostSamachurl 正式 3,776 3
+35924 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_FilmfestSniper 正式 3,776 8 3
+35925 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_FilmfestSniper 正式 3,776 24 3
+35926 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_FilmfestSniper 正式 3,776 24 3
+35927 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_FilmfestSniper 正式 3776 19 3
+35928 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_FilmfestSniper 正式 3,1093 3
+35930 SCENE_DUNGEON Level_FungusFighter04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter04_Light 正式
+35931 SCENE_DUNGEON Level_FungusFighter04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter04_Light 正式
+35932 SCENE_DUNGEON Level_FungusFighter04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter04_Light 正式
+35933 SCENE_DUNGEON Level_FungusFighter03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter03_Night 正式
+35934 SCENE_DUNGEON Level_FungusFighter03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter03_Night 正式
+35935 SCENE_DUNGEON Level_FungusFighter03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter03_Night 正式
+35936 SCENE_DUNGEON Level_FungusFighter03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_FungusFighter03_Night 正式
+35941 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_LostSamachurl 正式 3,776 3
+35942 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_LostSamachurl 正式 3,776 3
+35943 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 LevelEntity_Activity_LostSamachurl 正式 3,776 3
+35950 SCENE_DUNGEON Level_SlimeCannon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_SlimeCannon01 LevelEntity_Activity_SlimeCannon 正式
+35951 SCENE_DUNGEON Level_SlimeCannon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_SlimeCannon01 LevelEntity_Activity_SlimeCannon 正式
+35952 SCENE_DUNGEON Level_SlimeCannon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_SlimeCannon01 LevelEntity_Activity_SlimeCannon 正式
+35953 SCENE_DUNGEON Level_SlimeCannon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_SlimeCannon01 LevelEntity_Activity_SlimeCannon 正式
+35954 SCENE_DUNGEON Level_SlimeCannon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_SlimeCannon01 LevelEntity_Activity_SlimeCannon 正式
+35955 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_BigWorld 正式 3 VISION_LEVEL_REMOTE
+35956 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_BigWorld 正式 3 VISION_LEVEL_REMOTE
+35957 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Ly_General Level_BigWorld 正式 3 VISION_LEVEL_REMOTE
+35958 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Dq_General Level_BigWorld 正式 3 VISION_LEVEL_REMOTE
+35961 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35962 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35963 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35964 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35965 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35966 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35967 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35968 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm35_GeneralCopyWorld01 正式 3,776 24 3
+35971 SCENE_DUNGEON Level_MvM01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster 正式
+35972 SCENE_DUNGEON Level_MvM01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35972 正式
+35973 SCENE_DUNGEON Level_MvM01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35973 正式
+35974 SCENE_DUNGEON Level_MvM01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35974 正式
+35975 SCENE_DUNGEON Level_MvM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35975 正式
+35976 SCENE_DUNGEON Level_MvM01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35976 正式
+35977 SCENE_DUNGEON Level_MvM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM01 LevelEntity_Activity_V4_7_MonsterVsMonster_35977 正式
+35981 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35981 正式
+35982 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35982 正式
+35983 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35983 正式
+35984 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35984 正式
+35985 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35985 正式
+35986 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35986 正式
+35987 SCENE_DUNGEON Level_MvM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du47_MvM03 LevelEntity_Activity_V4_7_MonsterVsMonster_35987 正式
+40001 SCENE_DUNGEON NotUse Level_UCDungeon02 测试
+40002 SCENE_DUNGEON NotUse Level_UCDungeon01 测试
+40003 SCENE_DUNGEON NotUse Level_UCDungeon01 测试
+40004 SCENE_DUNGEON Level_KaeyaTutorialMission02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_KaeyaTutorialMission02 正式
+40005 SCENE_DUNGEON NotUse Level_KaeyaTutorialMission01 测试
+40006 SCENE_DUNGEON NotUse Level_KaeyaTutorialMission01 测试
+40007 SCENE_DUNGEON Level_PFDungeon01 正式
+40008 SCENE_DUNGEON Level_KaeyaTutorialMission02 正式
+40009 SCENE_DUNGEON Level_AmborTutorialMission01 正式
+40010 SCENE_DUNGEON Level_AmborTutorialMission01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AmborTutorialMission01 正式
+40012 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40013 SCENE_DUNGEON Level_AmborTutorialMission01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_AmborTutorialMission01 正式
+40014 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40015 SCENE_DUNGEON Level_FCdungeon_Kettle01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Kettle01 正式
+40016 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+40017 SCENE_DUNGEON NotUse Level_FCdungeon_Cloud01 测试
+40018 SCENE_DUNGEON NotUse Level_FCdungeon_Kettle01 测试
+40019 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+40020 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+40021 SCENE_DUNGEON NotUse Level_Challenge_Thunder01 测试
+40022 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+40023 SCENE_DUNGEON Level_ActivityBoss01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40024 SCENE_DUNGEON Level_ActivityBoss01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock 正式
+40025 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+40026 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40027 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+40028 SCENE_DUNGEON Level_ActivityBoss01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40029 SCENE_DUNGEON Level_ActivityBoss01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock 正式
+40030 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40031 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40032 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40033 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40034 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40035 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40036 SCENE_DUNGEON Level_LisaTutorialMission03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_LisaTutorialMission 正式
+40037 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+40038 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+40039 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+40040 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+40041 SCENE_DUNGEON Level_ActivityBoss02_Water 正式
+40042 SCENE_DUNGEON Level_ActivityBoss02_Water 正式
+40043 SCENE_DUNGEON Level_ActivityBoss02_Water 正式
+40044 SCENE_DUNGEON Level_HFDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon01 正式
+40045 SCENE_DUNGEON Level_HFDungeon02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon02 正式
+40046 SCENE_DUNGEON Level_Tower_Element_Water_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Element_Water_01 正式
+40047 SCENE_DUNGEON Level_HFDungeon02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon02 正式
+40048 SCENE_DUNGEON Level_HFDungeon01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon01 正式
+40049 SCENE_DUNGEON Level_HFDungeon02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon02 正式
+40050 SCENE_DUNGEON Level_HFDungeon_wq Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFDungeon02 正式
+40051 SCENE_DUNGEON Level_XMDungeon_WQ01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01 Level_Dungeon 正式
+40052 SCENE_DUNGEON Level_XMDungeon_WQ03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01_03 Level_Dungeon 正式
+40053 SCENE_DUNGEON Level_XMDungeon_WQ01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01 Level_Dungeon 正式
+40054 SCENE_DUNGEON Level_XMDungeon_WQ04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_XMdungeon_WQ01_02 Level_Dungeon 正式
+40055 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40056 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40057 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40058 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40059 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40060 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40061 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40062 SCENE_DUNGEON Level_ActivityBoss01_Wind Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallenge 正式
+40063 SCENE_DUNGEON Level_Smr_LostCity Level_Dungeon 正式
+40064 SCENE_DUNGEON Level_Smr_LostCity Level_Dungeon 正式
+40065 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+40066 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+40067 SCENE_DUNGEON Level_Tower_Moon_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallengeV4_40067 正式
+40068 SCENE_DUNGEON Level_Tower_Moon_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallengeV4_40068 正式
+40069 SCENE_DUNGEON Level_Tower_Moon_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallengeV4_40069 正式
+40070 SCENE_DUNGEON Level_Tower_Moon_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 Level_EffigyChallengeV4_40070 正式
+40100 SCENE_DUNGEON Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 正式
+40101 SCENE_DUNGEON Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 正式
+40102 SCENE_DUNGEON Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 正式
+40103 SCENE_DUNGEON NotUse Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 测试
+40104 SCENE_DUNGEON NotUse Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 测试
+40105 SCENE_DUNGEON Level_CycleDungeon01_Fire Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Fire 正式
+40200 SCENE_DUNGEON Level_CycleDungeon01_Ice Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Ice 正式
+40201 SCENE_DUNGEON Level_CycleDungeon01_Ice Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Ice 正式
+40202 SCENE_DUNGEON Level_CycleDungeon01_Ice Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Ice 正式
+40203 SCENE_DUNGEON Level_CycleDungeon01_Ice Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Ice 正式
+40300 SCENE_DUNGEON Level_CycleDungeon01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Water 正式
+40301 SCENE_DUNGEON Level_CycleDungeon01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Water 正式
+40302 SCENE_DUNGEON Level_CycleDungeon01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Water 正式
+40303 SCENE_DUNGEON Level_CycleDungeon01_Water Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Water 正式
+40400 SCENE_DUNGEON Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40401 SCENE_DUNGEON Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40402 SCENE_DUNGEON Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40403 SCENE_DUNGEON Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 正式
+40404 SCENE_DUNGEON Level_CycleDungeon01_Snow Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Snow 正式
+40405 SCENE_DUNGEON NotUse Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 测试
+40406 SCENE_DUNGEON NotUse Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 测试
+40407 SCENE_DUNGEON NotUse Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 测试
+40408 SCENE_DUNGEON Level_CycleDungeon01_Snow Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Snow 正式
+40409 SCENE_DUNGEON Level_CycleDungeon01_Snow Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Snow 正式
+40410 SCENE_DUNGEON Level_CycleDungeon01_Snow Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Snow 正式
+40500 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40501 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40502 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40503 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40504 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40505 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40506 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40507 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+40508 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40509 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40510 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40511 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40512 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40513 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+40514 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40515 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40516 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40517 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40600 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40601 SCENE_DUNGEON Level_CycleDungeon02_Morning Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Morning 正式
+40602 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40603 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40604 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40605 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40606 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+40607 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40608 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40609 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40610 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40611 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+40612 SCENE_DUNGEON Level_CycleDungeon02_Dusk Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Dusk 正式
+40613 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40614 SCENE_DUNGEON Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Night 正式
+40615 SCENE_DUNGEON NotUse Level_CycleDungeon02_Night Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Water 测试
+40616 SCENE_DUNGEON NotUse Level_Daily_Water 测试
+40617 SCENE_DUNGEON Level_CycleDungeon02_Chasm Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Chasm 正式
+40618 SCENE_DUNGEON Level_CycleDungeon02_Chasm Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Chasm 正式
+40619 SCENE_DUNGEON Level_CycleDungeon02_Chasm Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Chasm 正式
+40620 SCENE_DUNGEON Level_CycleDungeon02_Chasm Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_Chasm 正式
+40650 SCENE_DUNGEON Level_Cycle01_XM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM03 正式
+40651 SCENE_DUNGEON Level_Cycle01_XM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM03 正式
+40652 SCENE_DUNGEON Level_Cycle01_XM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM03 正式
+40653 SCENE_DUNGEON Level_Cycle01_XM03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM03 正式
+40660 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40661 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40662 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40663 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40664 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40665 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40666 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40667 SCENE_DUNGEON Level_Cycle01_XM04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Xm_Cycle01_XM04 正式
+40700 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40701 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40702 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40703 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40750 SCENE_DUNGEON Level_Cycle02_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle02_XM02 正式
+40751 SCENE_DUNGEON Level_Cycle02_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle02_XM02 正式
+40752 SCENE_DUNGEON Level_Cycle02_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle02_XM02 正式
+40753 SCENE_DUNGEON Level_Cycle02_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle02_XM02 正式
+40754 SCENE_DUNGEON Level_Cycle01_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM02 正式
+40755 SCENE_DUNGEON Level_Cycle01_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM02 正式
+40756 SCENE_DUNGEON Level_Cycle01_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM02 正式
+40757 SCENE_DUNGEON Level_Cycle01_XM02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Cycle01_XM02 正式
+40760 SCENE_DUNGEON Level_Cycle_Fontaine01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine01 正式
+40761 SCENE_DUNGEON Level_Cycle_Fontaine01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine01 正式
+40762 SCENE_DUNGEON Level_Cycle_Fontaine01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine01 正式
+40763 SCENE_DUNGEON Level_Cycle_Fontaine01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine01 正式
+40770 SCENE_DUNGEON Level_Cycle_Fontaine02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine02 正式
+40771 SCENE_DUNGEON Level_Cycle_Fontaine02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine02 正式
+40772 SCENE_DUNGEON Level_Cycle_Fontaine02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine02 正式
+40773 SCENE_DUNGEON Level_Cycle_Fontaine02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine02 正式
+40780 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40781 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40782 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40783 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40784 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40785 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40786 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40787 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40788 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40789 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40790 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40791 SCENE_DUNGEON Level_Cycle_Fontaine03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Fd_CycleDungeon_Fontaine03 正式
+40800 SCENE_DUNGEON NotUse Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 测试
+40801 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40802 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40803 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40804 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40805 SCENE_DUNGEON NotUse Level_CycleDungeon01_Thunder Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder 测试
+40806 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40807 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40808 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40809 SCENE_DUNGEON Level_CycleDungeon02_ThunderCave_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon02_ThunderCave_Dq 正式
+40900 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40901 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40902 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40903 SCENE_DUNGEON Level_CycleDungeon01_Rock Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Rock TestLevel_Element_Evn_Rock 正式
+40950 SCENE_DUNGEON Level_CycleDungeon01_Thunder_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder_Dq 正式
+40951 SCENE_DUNGEON Level_CycleDungeon01_Thunder_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder_Dq 正式
+40952 SCENE_DUNGEON Level_CycleDungeon01_Thunder_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder_Dq 正式
+40953 SCENE_DUNGEON Level_CycleDungeon01_Thunder_Dq Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Thunder_Dq 正式
+41000 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41001 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41002 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41003 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41004 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41005 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41006 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41007 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41008 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41009 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41010 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41011 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41012 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41013 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41014 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41015 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41016 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41017 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41018 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41019 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41020 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41021 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41022 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41023 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41024 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41025 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41026 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41027 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41028 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41029 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41030 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41031 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41032 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41033 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41034 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41035 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41036 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41037 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41038 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41039 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41040 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41041 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41042 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41043 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41044 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41045 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41046 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41047 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41048 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41049 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41050 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41051 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41052 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41053 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41054 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41055 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41056 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41057 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41058 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41059 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41060 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41061 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41062 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41063 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41064 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41065 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41066 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41067 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41068 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41069 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41070 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41071 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41072 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41073 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41074 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41075 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41076 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41077 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41078 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41079 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41080 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41081 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41082 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41083 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41084 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41085 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41086 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41087 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41088 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41089 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41090 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41091 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41092 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41093 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41094 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41095 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41096 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41097 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41098 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41099 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41100 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41101 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41102 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41103 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41104 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41105 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+41106 SCENE_DUNGEON Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+42001 SCENE_DUNGEON Level_PFDungeon02_Active01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42002 SCENE_DUNGEON Level_PFDungeon02_Active02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42003 SCENE_DUNGEON Level_PFDungeon02_Active07 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42004 SCENE_DUNGEON Level_PFDungeon02_Active06 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42005 SCENE_DUNGEON Level_PFDungeon02_Active05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42006 SCENE_DUNGEON Level_PFDungeon02_Active03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42007 SCENE_DUNGEON Level_PFDungeon02_Active04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42008 SCENE_DUNGEON Level_PFDungeon02_Active07 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42009 SCENE_DUNGEON Level_PFDungeon02_Active02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42010 SCENE_DUNGEON Level_PFDungeon02_Active01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42011 SCENE_DUNGEON Level_PFDungeon02_Active05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42012 SCENE_DUNGEON Level_PFDungeon02_Active04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42013 SCENE_DUNGEON Level_PFDungeon02_Active07 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+42014 SCENE_DUNGEON Level_PFDungeon02_Active03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+43001 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43002 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43003 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43004 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43005 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43006 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43007 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43008 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43009 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43010 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43011 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43012 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+43013 SCENE_DUNGEON Level_FCdungeon_MistTrial 正式
+44001 SCENE_DUNGEON Level_PFDungeon01 正式
+44002 SCENE_DUNGEON Level_KaeyaTutorialMission02 正式
+44003 SCENE_DUNGEON PlotLevel_XiangLingLevel_Xyd 正式
+44004 SCENE_DUNGEON Level_Tower_Dusk_01 正式
+44005 SCENE_DUNGEON Level_Tower_Moon_01 正式
+44006 SCENE_DUNGEON Level_Tower_Element_Thunder_01 正式
+44007 SCENE_DUNGEON Level_Tower_Universe_01 正式
+44011 SCENE_DUNGEON Level_Tower_Moon_01 正式
+44012 SCENE_DUNGEON Level_Tower_Night_01 正式
+44013 SCENE_DUNGEON Level_Tower_Moon_01 正式
+45000 SCENE_DUNGEON Level_PFDungeon02_ReActive02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45001 SCENE_DUNGEON Level_PFDungeon02_ReActive01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45002 SCENE_DUNGEON Level_PFDungeon02_ReActive02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45003 SCENE_DUNGEON Level_PFDungeon02_ReActive03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45004 SCENE_DUNGEON Level_PFDungeon02_ReActive04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45005 SCENE_DUNGEON Level_PFDungeon02_ReActive05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45006 SCENE_DUNGEON Level_PFDungeon02_ReActive06 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45007 SCENE_DUNGEON Level_PFDungeon02_ReActive05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45008 SCENE_DUNGEON Level_PFDungeon02_ReActive01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45009 SCENE_DUNGEON Level_PFDungeon02_ReActive02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45010 SCENE_DUNGEON Level_PFDungeon02_ReActive03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45011 SCENE_DUNGEON Level_PFDungeon02_ReActive04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45012 SCENE_DUNGEON Level_PFDungeon02_ReActive05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45013 SCENE_DUNGEON Level_PFDungeon02_Active08 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45014 SCENE_DUNGEON Level_PFDungeon02_Active02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45015 SCENE_DUNGEON Level_PFDungeon02_Active03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45016 SCENE_DUNGEON Level_PFDungeon02_Active04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45017 SCENE_DUNGEON Level_PFDungeon02_Active08 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45018 SCENE_DUNGEON Level_PFDungeon02_Active02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45019 SCENE_DUNGEON Level_PFDungeon02_Active03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45020 SCENE_DUNGEON Level_PFDungeon02_Active04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_PFDungeon02_Active01 正式
+45050 SCENE_DUNGEON Client Level_CustomLevel_A_01 Level_UGC_Dungeon 正式
+45051 SCENE_DUNGEON Client Level_CustomLevel_A_02 Level_UGC_Dungeon 正式
+45052 SCENE_DUNGEON Client Level_CustomLevel_A_03 Level_UGC_Dungeon 正式
+45053 SCENE_DUNGEON Client Level_CustomLevel_A_04 Level_UGC_Dungeon 正式
+45054 SCENE_DUNGEON Client Level_CustomLevel_A_05 Level_UGC_Dungeon 正式
+45055 SCENE_DUNGEON Level_CustomLevel_A_01 Level_UGC_Dungeon 正式
+45056 SCENE_DUNGEON Level_CustomLevel_A_02 Level_UGC_Dungeon 正式
+45057 SCENE_DUNGEON Level_CustomLevel_A_03 Level_UGC_Dungeon 正式
+45058 SCENE_DUNGEON Level_CustomLevel_A_04 Level_UGC_Dungeon 正式
+45059 SCENE_DUNGEON Level_CustomLevel_A_05 Level_UGC_Dungeon 正式
+46001 SCENE_DUNGEON Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 正式
+46101 SCENE_DUNGEON Level_HFDungeon_Prison01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 正式
+46201 SCENE_DUNGEON Level_CYDungeon_ActivityRouge01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CYDungeon_Activy01 LevelEntity_Activity_V2_7_CYRogue_46201 正式
+46202 SCENE_DUNGEON Level_CYDungeon_Activy02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CYDungeon_Activy02 LevelEntity_Activity_V2_7_CYRogue_46202 正式
+46203 SCENE_DUNGEON Level_CYDungeon_Activy03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 LevelEntity_Activity_V2_7_CYRogue_46203 正式
+46300 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+46301 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46302 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+46303 SCENE_DUNGEON Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 正式
+46304 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46305 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46306 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46310 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46311 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46312 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46313 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+46320 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+46321 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+46322 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+46323 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+46324 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+47001 SCENE_DUNGEON Level_OnmyoMaze_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_FirstStage 正式
+47002 SCENE_DUNGEON Level_OnmyoMaze_05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_SecondStage 正式
+47003 SCENE_DUNGEON Level_OnmyoMaze_03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_TheThirdPhase 正式
+47004 SCENE_DUNGEON Level_OnmyoMaze_04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_FirstStage 正式
+47005 SCENE_DUNGEON Level_OnmyoMaze_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_SecondStage 正式
+47006 SCENE_DUNGEON Level_OnmyoMaze_06 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_TheThirdPhase 正式
+47007 SCENE_DUNGEON Level_OnmyoMaze_07 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_FirstStage 正式
+47008 SCENE_DUNGEON Level_OnmyoMaze_08 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_TheThirdPhase 正式
+47009 SCENE_DUNGEON Level_OnmyoMaze_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_FirstStage 正式
+47010 SCENE_DUNGEON Level_OnmyoMaze_05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_SecondStage 正式
+47011 SCENE_DUNGEON NotUse Level_OnmyoMaze_05 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_SecondStage 测试
+47012 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_SLL03 测试
+47013 SCENE_DUNGEON NotUse Level_OnmyoMaze_03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_OnmyoMaze01_TheThirdPhase 测试
+47014 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_SLL05 测试
+47015 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_SLL06 测试
+47016 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_LX01 测试
+47017 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_LX02 测试
+47018 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_LX03 测试
+47019 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_LX04 测试
+47020 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_LX05 测试
+47021 SCENE_DUNGEON Level_WindDungeon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindDungeon_01 正式
+47022 SCENE_DUNGEON Level_WindDungeon_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindDungeon_02 正式
+47023 SCENE_DUNGEON Level_WindDungeon_03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindDungeon_03 正式
+47024 SCENE_DUNGEON Level_WindDungeon_04 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindDungeon_04 正式
+47025 SCENE_DUNGEON Level_WindDungeon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_WindDungeon_01 正式
+47101 SCENE_DUNGEON Level_FungusFighter Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter LevelEntity_Activity_V3_2_MushroomBeastBattle 正式
+47102 SCENE_DUNGEON Level_FungusFighter Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter LevelEntity_Activity_V3_2_MushroomBeastBattle 正式
+47103 SCENE_DUNGEON Level_FungusFighter Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter LevelEntity_Activity_V3_2_MushroomBeastBattle 正式
+47201 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47201 正式
+47202 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47202 正式
+47203 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47203 正式
+47204 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47204 正式
+47205 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47205 正式
+47206 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47206 正式
+47207 SCENE_DUNGEON Level_Smr_LostCity LevelEntity_Activity_V3_3_LostCity_47207 正式
+47301 SCENE_DUNGEON Level_ContestBattle01 正式
+47302 SCENE_DUNGEON Level_ContestBattle01 正式
+47303 SCENE_DUNGEON Level_ContestBattle01 正式
+47304 SCENE_DUNGEON Level_ContestBattle01 正式
+47305 SCENE_DUNGEON Level_ContestBattle01 正式
+47306 SCENE_DUNGEON Level_ContestBattle01 正式
+47307 SCENE_DUNGEON Level_ContestBattle01 正式
+47401 SCENE_DUNGEON Level_PacMan_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35_ActivityPacMan_01_Day 正式
+47402 SCENE_DUNGEON Level_PacMan_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35_ActivityPacMan_02_Day 正式
+47403 SCENE_DUNGEON Level_PacMan_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35_ActivityPacMan_01_Day 正式
+47404 SCENE_DUNGEON Level_PacMan_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35_ActivityPacMan_02_Day 正式
+47405 SCENE_DUNGEON Level_PacMan_03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35__ActivityPacMan_01_Night_Light 正式
+47406 SCENE_DUNGEON Level_PacMan_03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du35__ActivityPacMan_01_Night_Fog 正式
+47501 SCENE_DUNGEON Level_Custom_Play01 Level_UGC_Dungeon_02 正式 SCENE_SUB_TYPE_UGC_PLAY VISION_LEVEL_LITTLE_REMOTE
+47502 SCENE_DUNGEON NotUse Level_Custom_Edit01 正式 VISION_LEVEL_LITTLE_REMOTE
+47601 SCENE_DUNGEON Level_CloudCombat_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du37_CloudCombat_01 正式
+47602 SCENE_DUNGEON Level_OnmyoCombat_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du37_OnmyoCombat_01 正式
+47603 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47604 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47605 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47606 SCENE_DUNGEON Level_OnmyoCombat_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du37_OnmyoCombat_01 正式
+47607 SCENE_DUNGEON Level_CloudCombat_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du37_CloudCombat_01 正式
+47608 SCENE_DUNGEON Level_Carnival02 Level_CharAmusement_Dungeon 正式
+47610 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47611 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47612 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+47613 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+47614 SCENE_DUNGEON Level_OnmyoCombat_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du37_OnmyoCombat_01 正式
+47615 SCENE_DUNGEON Level_XM_BigLeaf Data/Environment/EnviroSystemProfile/BigWorld/ESP_XM_FungusFighter 正式
+47616 SCENE_DUNGEON Level_FCdungeon_Cloud01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Cloud01 正式
+47617 SCENE_DUNGEON Level_FDBattle_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01 正式
+47701 SCENE_DUNGEON NotUse Level_Sniper01 Data/Environment/EnviroSystemProfile/BigWorld/ESP_Xm_City_General 测试
+47711 SCENE_DUNGEON Level_FilmfestBallGame Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_FilmfestBallGame LevelEntity_Activity_FilmfestBallGame 正式
+47712 SCENE_DUNGEON Level_FilmfestBallGame Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_FilmfestBallGame LevelEntity_Activity_FilmfestBallGame_02 正式
+47713 SCENE_DUNGEON Level_FilmfestBallGame Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_FilmfestBallGame LevelEntity_Activity_FilmfestBallGame_03 正式
+47714 SCENE_DUNGEON Level_FilmfestBallGame Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_FilmfestBallGame LevelEntity_Activity_FilmfestBallGame_04 正式
+47715 SCENE_DUNGEON Level_FilmfestBallGame Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_FilmfestBallGame LevelEntity_Activity_FilmfestBallGame_05 正式
+47716 SCENE_DUNGEON Level_FDBattle_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_02 LevelEntity_ClearLocalGadgets 正式
+47717 SCENE_DUNGEON Level_FDBattle_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_02 LevelEntity_ClearLocalGadgets 正式
+47718 SCENE_DUNGEON Level_FDBattle_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_02 LevelEntity_ClearLocalGadgets 正式
+47719 SCENE_DUNGEON Level_FDBattle_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_02 LevelEntity_ClearLocalGadgets 正式
+47720 SCENE_DUNGEON Level_FDBattle_02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_02 LevelEntity_ClearLocalGadgets 正式
+47721 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47722 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47723 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47724 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47725 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47726 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47727 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47728 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio LevelEntity_ClearLocalGadgets 正式
+47730 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_01 正式
+47731 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_02 正式
+47732 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_03 正式
+47733 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_04 正式
+47734 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_05 正式
+47735 SCENE_DUNGEON NotUse Level_Carnival02 LevelBuff_ActivityAbility_BulletHell_06 正式
+47801 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47802 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47803 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47804 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47805 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47806 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47807 SCENE_DUNGEON Level_FD_MistTrial Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du42_MistTrial_Indoor 正式
+47808 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio 正式
+47809 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio 正式
+47810 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio 正式
+47811 SCENE_DUNGEON Level_Combat_Fd_Studio Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du43_Level_Combat_Fd_Studio 正式
+47812 SCENE_DUNGEON Level_FDBattle_01b Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01B 正式
+47813 SCENE_DUNGEON Level_FDBattle_01b Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01B 正式
+47814 SCENE_DUNGEON Level_FDBattle_01b Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01B 正式
+47815 SCENE_DUNGEON Level_FDBattle_01b Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01B 正式
+47816 SCENE_DUNGEON Level_FDBattle_01b Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du41_FDBattle_01B 正式
+47901 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47901 正式
+47902 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47902 正式
+47903 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47903 正式
+47904 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47904 正式
+47905 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47905 正式
+47906 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47906 正式
+47907 SCENE_DUNGEON Level_FD_MistTrial LevelEntity_Activity_V4_2_LostCity_47907 正式
+47911 SCENE_DUNGEON Level_LostSamachurlBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_Level_LostSamachurlBoss Level_LostSamachurl_BossBattle 正式
+47912 SCENE_DUNGEON Level_LostSamachurlBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_Level_LostSamachurlBoss 正式
+47913 SCENE_DUNGEON Level_LostSamachurlBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_Level_LostSamachurlBoss 正式
+47914 SCENE_DUNGEON Level_LostSamachurlBoss Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du44_Level_LostSamachurlBoss 正式
+47921 SCENE_DUNGEON Level_LanternParty01 LevelEntity_Activity_LanternRite_PartyLion_CoinBattle 正式
+47922 SCENE_DUNGEON Level_LanternParty02 LevelEntity_Activity_LanternRite_PartyLion_Crown 正式
+47923 SCENE_DUNGEON Level_LanternParty03 LevelEntity_Activity_LanternRite_PartyLion_Survival 正式
+48000 SCENE_DUNGEON Level_TowerV2_Lounge01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_TowerV2_Lounge01 LevelEntity_Activity_RoleCombat_RestRoom 正式
+48001 SCENE_DUNGEON Level_TowerV2_Combat01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_TowerV2_Auditorium LevelEntity_Activity_RoleCombat_BattleRoom 正式
+48002 SCENE_DUNGEON Level_TowerV2_Combat02 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_TowerV2_Combat02 LevelEntity_Activity_RoleCombat_BattleRoom 正式
+48003 SCENE_DUNGEON Level_TowerV2_Combat03 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Du45_TowerV2_Combat03 LevelEntity_Activity_RoleCombat_BattleRoom 正式
+48010 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_EffigyV5 正式 3
+48011 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_EffigyV5 正式 3
+48012 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_EffigyV5 正式 3
+48013 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_EffigyV5 正式 3
+50002 SCENE_DUNGEON NotUse TestLevel_Cold_LYX TestLevel_Cold 测试
+50003 SCENE_DUNGEON NotUse TestLevel_Battle_CLX 测试
+50004 SCENE_DUNGEON NotUse Level_PowerCharge_Test 测试
+50005 SCENE_DUNGEON NotUse Level_ElementGameplay_Test 测试
+50006 SCENE_DUNGEON NotUse Level_KaeyaTutorialMission02 测试
+50007 SCENE_DUNGEON NotUse Level_PowerCharge_Test Level_ClimbTest1 测试
+50008 SCENE_DUNGEON NotUse Level_Function_BlackBox_Test 测试
+50009 SCENE_DUNGEON NotUse TestLevelGameplay_CX 测试
+50010 SCENE_DUNGEON NotUse TestLevelGameplay_LSA 测试
+50011 SCENE_DUNGEON NotUse Level_CycleDungeon01_Fire Level_Explode_Test 测试
+50012 SCENE_DUNGEON NotUse Level_CycleDungeon01_Ice Level_Swril_Test 测试
+50013 SCENE_DUNGEON NotUse Level_CycleDungeon01_Fire Level_Melt_Test 测试
+50014 SCENE_DUNGEON NotUse Monster_StrategyTest_LTJ 测试
+50015 SCENE_DUNGEON NotUse LevelTestRooms 测试
+50016 SCENE_DUNGEON NotUse Level_CharactersPattern_Test 测试
+50017 SCENE_DUNGEON NotUse Level_Tower_Moon_01 测试
+50018 SCENE_DUNGEON NotUse TestLevel_Protect_MC 测试
+50019 SCENE_DUNGEON NotUse TestLevel_Protect_MC TestLevel_Element_Evn_Rock 测试
+50020 SCENE_WORLD NotUse ClimbTest1 测试
+50021 SCENE_DUNGEON NotUse LevelTest_TestTest_WG 测试
+50022 SCENE_DUNGEON NotUse TestLevel_PFDungeon01_ZHT 测试
+50023 SCENE_DUNGEON NotUse Level_Tower_Dusk_01 测试
+50024 SCENE_DUNGEON NotUse Level_Tower_Dusk_01 LevelEntity_TowerBuff_ElementReactionHurt_Melt 测试
+50025 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+50026 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+50027 SCENE_DUNGEON NotUse Level_CycleDungeon02_Normal 测试
+50028 SCENE_DUNGEON NotUse TestLevel_CycleFire_YQT 测试
+50029 SCENE_DUNGEON NotUse Level_TdGameplay_Test 测试
+50030 SCENE_DUNGEON NotUse Level_PFDungeon02_Active01 测试
+50031 SCENE_DUNGEON NotUse Level_FCdungeon_DragonBoss 测试
+50032 SCENE_DUNGEON NotUse Level_PFDungeon02_Active03 测试
+50033 SCENE_DUNGEON NotUse Level_PFDungeon02_Active04 测试
+50034 SCENE_DUNGEON NotUse Level_PFDungeon02_Active05 测试
+50041 SCENE_DUNGEON NotUse TestLevel_SZ_LX Level_Dungeon 测试
+50042 SCENE_DUNGEON NotUse TestLevel_MD_YQT 测试
+50043 SCENE_DUNGEON NotUse TestLevel_MD_YQT 测试
+50044 SCENE_DUNGEON NotUse TestLevel_SZ_LX 测试
+50045 SCENE_DUNGEON NotUse Level_CycleDungeon_WindFlower 测试
+50046 SCENE_DUNGEON NotUse Level_Challenge_Thunder01 测试
+50047 SCENE_DUNGEON NotUse Level_CycleDungeon_WindFlower 测试
+50048 SCENE_DUNGEON NotUse Level_CycleDungeon_WindFlower 测试
+50049 SCENE_DUNGEON NotUse Level_CycleDungeon_WindFlower 测试
+50050 SCENE_DUNGEON NotUse Level_Tower_Morning_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Morning_01 测试
+50051 SCENE_DUNGEON NotUse Level_FCdungeon_MistTrial 测试
+50052 SCENE_DUNGEON NotUse Level_Tower_01_Open 测试
+50053 SCENE_DUNGEON NotUse Level_LadyBoss01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_CycleDungeon01_Snow 测试
+50054 SCENE_DUNGEON NotUse Level_ActivityBoss02_Water 测试
+50055 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge 测试
+50056 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_YQT01 测试
+50057 SCENE_DUNGEON NotUse TestLevel_Dq_Rouge_YQT02 测试
+50058 SCENE_DUNGEON NotUse Level_Dq_Void02 Level_Monster_Shougun_Setting 测试
+50059 SCENE_DUNGEON NotUse TestLevelSLL_SpringFestival Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_FatOtaku Level_Monster_Shougun_Setting 测试
+50060 SCENE_DUNGEON NotUse TestLevel_Dq_UGC_LX01 测试
+50061 SCENE_DUNGEON NotUse Level_Tower_Universe_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Universe_01 测试
+50062 SCENE_DUNGEON NotUse TestLevel_Dq_UGC_LX02 测试
+50063 SCENE_DUNGEON NotUse TestLevel_Dq_UGC_LX03 测试
+50064 SCENE_DUNGEON NotUse TestLevel_Dq_UGC_LX04 测试
+50065 SCENE_DUNGEON NotUse TestLevel_Dq_UGC_LX05 测试
+50066 SCENE_DUNGEON NotUse TestLevel_FCdungeon_ShenheCloud01 测试
+50067 SCENE_DUNGEON NotUse TestLevel_WB_Z 测试
+50068 SCENE_DUNGEON NotUse Level_Tower_01_Open Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 测试
+50069 SCENE_WORLD NotUse TestLevel_ClimbBox 测试
+50070 SCENE_DUNGEON NotUse TestLevel_APA_ZQQ Data/Environment/EnviroSystemProfile/Dungeon/ESP_HFdungeon_Prison01 测试
+50071 SCENE_WORLD NotUse TestWorld_APA_ZQQ 测试
+50072 SCENE_DUNGEON NotUse Level_TD_V3_Gameplay_Test 测试
+50073 SCENE_WORLD NotUse PerformanceTest_LevelStreaming LevelEntity_DungeonDive 测试
+50074 SCENE_DUNGEON NotUse Level_SmrDungeon_Tinali 测试
+50075 SCENE_DUNGEON NotUse Level_SmrDungeon_BigTree 测试
+50076 SCENE_DUNGEON NotUse Level_XMDungeon_GrassDragon 测试
+50077 SCENE_DUNGEON Level_Tower_Moon_01 正式
+50078 SCENE_DUNGEON NotUse Level_DreamIsland_Xinyan01 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50079 SCENE_DUNGEON NotUse Level_DreamIsland_Mona01 Level_DreamDungeon_Mona 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50080 SCENE_DUNGEON NotUse Level_DreamIsland_Kazuha02 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50081 SCENE_DUNGEON NotUse Level_DreamIsland_Mona02 Level_DreamDungeon_Mona 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50082 SCENE_DUNGEON NotUse Level_DreamIsland_Fischl01 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50083 SCENE_DUNGEON NotUse Level_DreamIsland_Fischl02 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50084 SCENE_DUNGEON NotUse Level_DreamIsland_Fischl03 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50085 SCENE_DUNGEON NotUse Level_DreamIsland_Kazuha03 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50086 SCENE_DUNGEON NotUse Level_DreamIsland_Fischllibrary 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50087 SCENE_DUNGEON NotUse Level_DreamIsland_Kazuha01 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50088 SCENE_DUNGEON NotUse Level_DreamIsland_Fischlroom 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50089 SCENE_DUNGEON NotUse Level_DreamIsland_Fischlcorridor 测试 SCENE_SUB_TYPE_PERSISTENT_DUNGEON
+50090 SCENE_DUNGEON NotUse TestLevel_WhiteBox_Xm_03 测试
+50091 SCENE_DUNGEON NotUse Level_DahakaBoss01 测试
+79999 SCENE_DUNGEON NotUse GcgCardTest 10000005,10000007 正式 1
+50092 SCENE_DUNGEON NotUse WindPuzzle_WhiteboxSll01 测试
+50093 SCENE_DUNGEON NotUse WindPuzzle_WhiteboxSll04 测试
+50094 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50095 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50096 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50097 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50098 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50099 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+50100 SCENE_DUNGEON NotUse FdWaterTest Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd_ShallowWater_Hallway 测试
+50101 SCENE_DUNGEON NotUse FdWaterTest02 Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General 测试
+50102 SCENE_DUNGEON NotUse FdWaterFlowTest Data/Environment/EnviroSystemProfile/BigWorld/ESP_Fd_ShallowWater_Hallway 测试
+51000 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51001 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51002 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51003 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51004 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51005 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51006 SCENE_DUNGEON NotUse TestLevel_TestBox_GJH 测试
+51007 SCENE_DUNGEON BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_BigWorld 正式 3
+51008 SCENE_DUNGEON Level_Carnival Level_CharAmusement_Dungeon 正式
+51009 SCENE_DUNGEON NotUse Level_SmrDungeon_BigTree Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower LevelEntity_Activity_V3_2_MushroomBeastBattle 测试
+51010 SCENE_DUNGEON NotUse TestLevel_TestBox_LCM 测试
+51011 SCENE_DUNGEON NotUse TestLevel_WhiteBox_Xm_04 测试
+51012 SCENE_DUNGEON NotUse TestLevel_Xm_CircusTent 测试
+51013 SCENE_DUNGEON NotUse Level_Xm_Alhaitham_01 测试
+51014 SCENE_DUNGEON NotUse Level_Cycle01_XM04 测试
+51015 SCENE_DUNGEON NotUse Level_TestLevel_Pacman_Sll Data/Environment/EnviroSystemProfile/Dungeon/ESP_FCdungeon_Hutao_01 测试
+51016 SCENE_DUNGEON NotUse TestLevel_FD_4.6_YYL 测试
+51017 SCENE_DUNGEON NotUse Level_Cycle01_XM04 测试
+51018 SCENE_DUNGEON NotUse TestLevel_Dehya_GJH 测试
+51019 SCENE_DUNGEON NotUse TestLevel_WhiteBox_Xm_05 测试
+51020 SCENE_DUNGEON NotUse TestLevel_3.7UGC_GJH 测试
+51021 SCENE_DUNGEON NotUse Level_CustomLevel_A_05 测试
+51022 SCENE_DUNGEON NotUse Level_CustomLevel_A_05 测试
+51023 SCENE_DUNGEON NotUse TestLevel_WhiteBox_Fd_01 测试
+51024 SCENE_DUNGEON NotUse TestLevel_WhiteBox_3.7UGC 测试
+51025 SCENE_DUNGEON NotUse TestLevel_4.1BoxMatch_WZK LevelEntity_Activity_V4_1_BoxMatch 测试
+51026 SCENE_DUNGEON NotUse TestLevel_WhiteBox_UGC_TowerDefence 测试
+51027 SCENE_DUNGEON NotUse TestLevel_WhiteBox_UGC_Survival 测试
+51028 SCENE_DUNGEON NotUse TestLevel_WhiteBox_UGC_CampEnhancer 测试
+51029 SCENE_DUNGEON NotUse Level_Cycle01_XM04 Level_Dungeon 测试
+51030 SCENE_DUNGEON NotUse BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General Level_V4_4_Test 测试 3
+51031 SCENE_DUNGEON NotUse Level_SmrDungeon_Challenge Data/Environment/EnviroSystemProfile/Dungeon/ESP_SmrDungeon_BigTree_Flower 测试
+51032 SCENE_DUNGEON NotUse TestLevel_Whitebox_MQL 测试
+51034 SCENE_DUNGEON NotUse TestLevel_WhiteBox_NataDino 测试
+51037 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51038 SCENE_DUNGEON Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 正式
+51039 SCENE_DUNGEON NotUse Level_Tower_Moon_01 Data/Environment/EnviroSystemProfile/Dungeon/ESP_Tower_Night_01 测试
+51040 SCENE_DUNGEON NotUse Level_FDBattle_02 测试
+51041 SCENE_DUNGEON NotUse Level_Custom_Play01 测试
+51046 SCENE_DUNGEON NotUse BigWorld_LevelStreaming Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General 测试 3
+51050 SCENE_DUNGEON NotUse ClimbTestStage_AvatarTest Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General 测试
+51051 SCENE_WORLD NotUse ClimbTestStage_AvatarTest Data/Environment/EnviroSystemProfile/BigWorld/ESP_Md_General 测试
+51053 SCENE_DUNGEON NotUse Level_Carnival02 Level_CharAmusement_Dungeon 测试
+51054 SCENE_DUNGEON NotUse QA_3DTest_New Data/Environment/EnviroSystemProfile/BigWorld/ESP_Default 测试
\ No newline at end of file
diff --git a/data/txt/WorldData.txt b/data/txt/WorldData.txt
new file mode 100644
index 0000000..92815ca
--- /dev/null
+++ b/data/txt/WorldData.txt
@@ -0,0 +1,3 @@
+id type mainSceneId subSceneIdVec
+1 WORLD_PLAYER 3 1004,1008,1009,1018,1033,1034,1035,1057,1060,1061,1063,1064,1066,1072,1073,1074,1075,1076,1077,1078,1079,1082,1083,1084,1085,1086,1087,1088,1089,1093,1094
+2 WORLD_HOME 2001 2201,2202
\ No newline at end of file
diff --git a/dbgate/Cargo.toml b/dbgate/Cargo.toml
new file mode 100644
index 0000000..1431a66
--- /dev/null
+++ b/dbgate/Cargo.toml
@@ -0,0 +1,29 @@
+[package]
+name = "dbgate"
+edition = "2021"
+version.workspace = true
+
+[dependencies]
+env_logger.workspace = true
+
+sqlx.workspace = true
+serde.workspace = true
+serde_json.workspace = true
+toml.workspace = true
+
+tokio.workspace = true
+tokio-util.workspace = true
+
+tracing.workspace = true
+tracing-futures.workspace = true
+tracing-log.workspace = true
+tracing-subscriber.workspace = true
+tracing-bunyan-formatter.workspace = true
+
+paste.workspace = true
+prost.workspace = true
+hex.workspace = true
+rbase64.workspace = true
+proto.workspace = true
+
+common.workspace = true
diff --git a/dbgate/dbgate.toml b/dbgate/dbgate.toml
new file mode 100644
index 0000000..0168dc2
--- /dev/null
+++ b/dbgate/dbgate.toml
@@ -0,0 +1,25 @@
+app_id = 3
+
+[[applications.Dispatch]]
+app_id = 1
+inner_ip = "127.0.0.1:22001"
+
+[[applications.Gateserver]]
+app_id = 2
+inner_ip = "127.0.0.1:22002"
+
+[[applications.Dbgate]]
+app_id = 3
+inner_ip = "127.0.0.1:22003"
+
+[[applications.Gameserver]]
+app_id = 4
+inner_ip = "127.0.0.1:22004"
+
+[region]
+name = "dev_mualani"
+dev_sdk_account = true
+
+[database]
+connection_string = "postgres://postgres:@localhost:5432/hk4e"
+redis_url = "redis://127.0.0.1/"
diff --git a/dbgate/src/config.rs b/dbgate/src/config.rs
new file mode 100644
index 0000000..ef6eba3
--- /dev/null
+++ b/dbgate/src/config.rs
@@ -0,0 +1,28 @@
+use std::collections::BTreeMap;
+
+use common::{
+ config::{AppConfig, DatabaseConfig, RegionConfig},
+ net::ServiceType,
+};
+use serde::Deserialize;
+
+const DEFAULT_TOML: &str = include_str!("../dbgate.toml");
+
+#[derive(Deserialize, Clone)]
+pub struct DbgateConfig {
+ pub app_id: u32,
+ pub applications: BTreeMap>,
+ pub database: DatabaseConfig,
+ #[allow(dead_code)]
+ pub region: RegionConfig,
+}
+
+pub fn load() -> Option {
+ match common::config::load_or_create_config("dbgate.toml", DEFAULT_TOML) {
+ Ok(config) => Some(config),
+ Err(err) => {
+ tracing::error!("Failed to load config: {err}");
+ None
+ }
+ }
+}
diff --git a/dbgate/src/main.rs b/dbgate/src/main.rs
new file mode 100644
index 0000000..60dcaea
--- /dev/null
+++ b/dbgate/src/main.rs
@@ -0,0 +1,25 @@
+use std::{error::Error, sync::OnceLock};
+
+use common::log;
+use service::DbgateService;
+
+mod config;
+mod network;
+mod service;
+
+static SERVICE: OnceLock = OnceLock::new();
+
+#[tokio::main]
+async fn main() -> Result<(), Box> {
+ log::init_tracing();
+ let config = config::load().unwrap();
+ let service = DbgateService::new(config).await?;
+ let service = SERVICE.get_or_init(|| service);
+ service.run().await;
+
+ Ok(())
+}
+
+fn dbgate_service() -> &'static DbgateService {
+ SERVICE.get().unwrap()
+}
diff --git a/dbgate/src/network/mod.rs b/dbgate/src/network/mod.rs
new file mode 100644
index 0000000..1f6a787
--- /dev/null
+++ b/dbgate/src/network/mod.rs
@@ -0,0 +1,2 @@
+mod network_mgr;
+pub use network_mgr::NetworkMgr;
diff --git a/dbgate/src/network/network_mgr.rs b/dbgate/src/network/network_mgr.rs
new file mode 100644
index 0000000..6c4bc38
--- /dev/null
+++ b/dbgate/src/network/network_mgr.rs
@@ -0,0 +1,103 @@
+use prost::Message;
+use proto::{PlayerData, SavePlayerDataReq};
+use std::error::Error;
+
+use common::{
+ impl_net_service,
+ net::{tools::Packet, AServer, NetError, ServiceType},
+ rpc_handlers, ServiceQualifier,
+};
+
+use crate::{config::DbgateConfig, dbgate_service};
+
+pub struct NetworkMgr {
+ server: AServer,
+}
+
+impl NetworkMgr {
+ pub async fn new(config: &DbgateConfig) -> Result {
+ let inner_ip = config
+ .applications
+ .get(&ServiceType::Dbgate)
+ .unwrap()
+ .iter()
+ .find(|a| a.app_id == config.app_id)
+ .unwrap()
+ .inner_ip
+ .clone();
+
+ Ok(Self {
+ server: AServer::bind(inner_ip).await?,
+ })
+ }
+
+ pub async fn run(&self) {
+ loop {
+ let Ok(mut packets) = self.server.recv().await else {
+ continue;
+ };
+
+ while let Some(packet) = packets.pop_front() {
+ if let Err(err) = self.on_recv(packet).await {
+ tracing::warn!("on_recv fail: {err}");
+ }
+ }
+ }
+ }
+
+ pub async fn send_rsp(&self, packet: Packet) -> Result<(), NetError> {
+ dbgate_service()
+ .service_box
+ .push_packet_to_service(ServiceQualifier::AppId(packet.head.rpc_id), packet)
+ .await
+ }
+
+ rpc_handlers! {
+ GetPlayerTokenReq;
+ PlayerLoginReq;
+ SavePlayerDataReq;
+ }
+
+ async fn on_get_player_token_req(&self, packet: Packet) -> Result<(), Box> {
+ dbgate_service()
+ .login_handler
+ .on_get_player_token_req(packet)
+ .await
+ }
+
+ async fn on_player_login_req(&self, packet: Packet) -> Result<(), Box> {
+ dbgate_service()
+ .login_handler
+ .on_player_login_req(packet)
+ .await
+ }
+
+ async fn on_save_player_data_req(&self, packet: Packet) -> Result<(), Box> {
+ let req = packet.get_proto::()?;
+ let Ok(player_data) = PlayerData::decode(&*req.player_data) else {
+ tracing::error!(
+ "on_save_player_data_req: PlayerData::decode failed, uid: {}",
+ packet.head.user_id
+ );
+ return Ok(());
+ };
+
+ dbgate_service()
+ .sql_op_player_data
+ .update_player_data_by_uid(
+ player_data.uid as i32,
+ player_data.nickname,
+ player_data.level as i32,
+ player_data.exp as i32,
+ player_data.bin,
+ )
+ .await?;
+ Ok(())
+ }
+
+ pub async fn default_packet_process_func(&self, _packet: Packet) -> Result<(), Box> {
+ Ok(())
+ }
+}
+
+impl_net_service!(Dbgate);
diff --git a/dbgate/src/service/dbgate_service.rs b/dbgate/src/service/dbgate_service.rs
new file mode 100644
index 0000000..30b0415
--- /dev/null
+++ b/dbgate/src/service/dbgate_service.rs
@@ -0,0 +1,39 @@
+use std::error::Error;
+
+use common::{
+ db::{self, SqlOpPlayerData},
+ ServiceBox,
+};
+
+use crate::{config::DbgateConfig, network::NetworkMgr};
+
+use super::LoginHandler;
+
+pub struct DbgateService {
+ pub config: DbgateConfig,
+ pub network_mgr: NetworkMgr,
+ pub service_box: ServiceBox,
+ pub login_handler: LoginHandler,
+ pub sql_op_player_data: SqlOpPlayerData,
+}
+
+impl DbgateService {
+ pub async fn new(config: DbgateConfig) -> Result> {
+ let network_mgr = NetworkMgr::new(&config).await?;
+ let service_box = ServiceBox::new(config.app_id, &config.applications);
+ let db = db::connect(&config.database.connection_string).await?;
+ let sql_op_player_data = SqlOpPlayerData::new(db);
+
+ Ok(Self {
+ config,
+ network_mgr,
+ service_box,
+ login_handler: LoginHandler,
+ sql_op_player_data,
+ })
+ }
+
+ pub async fn run(&self) {
+ self.network_mgr.run().await
+ }
+}
diff --git a/dbgate/src/service/login_handler.rs b/dbgate/src/service/login_handler.rs
new file mode 100644
index 0000000..93df966
--- /dev/null
+++ b/dbgate/src/service/login_handler.rs
@@ -0,0 +1,153 @@
+use std::error::Error;
+
+use common::net::tools::Packet;
+use proto::{
+ CmdID, GetPlayerTokenReq, GetPlayerTokenRsp, PacketHead, PlayerData, PlayerLoginReq,
+ PlayerLoginRsp,
+};
+
+use prost::Message;
+
+use crate::dbgate_service;
+
+pub struct LoginHandler;
+
+impl LoginHandler {
+ pub async fn on_get_player_token_req(&self, packet: Packet) -> Result<(), Box> {
+ let Ok(req) = packet.get_proto::() else {
+ tracing::warn!("get proto failed");
+ return Ok(());
+ };
+
+ let mut rsp = GetPlayerTokenRsp {
+ retcode: -1,
+ server_rand_key: req.client_rand_key.clone(),
+ account_uid: req.account_uid.clone(),
+ token: req.account_token.clone(),
+ platform_type: req.platform_type,
+ key_id: req.key_id,
+ ..Default::default()
+ };
+
+ let retcode = self.check_login_account_condition(&req);
+ if retcode != 0 {
+ tracing::info!("[LOGIN] check_account_condition failed, account_uid:{} account_token: {} retcode:{}", &req.account_uid, "", retcode);
+ rsp.retcode = retcode;
+ } else {
+ let sql_op_player_data = &dbgate_service().sql_op_player_data;
+ let player_uid = match sql_op_player_data
+ .select_player_uid_by_account(req.account_uid.clone())
+ .await
+ {
+ Ok(Some(row)) => row.uid,
+ Ok(None) => {
+ sql_op_player_data
+ .insert_player_uid_by_account(req.account_uid.clone(), req.platform_type)
+ .await?
+ }
+ Err(_) => {
+ tracing::warn!(
+ "[LOGIN] on_get_player_token failed, account_uid:{}",
+ &req.account_uid
+ );
+ rsp.retcode = -1;
+ return Ok(());
+ }
+ };
+
+ rsp.uid = player_uid as u32;
+ rsp.retcode = 0;
+ }
+
+ let packet = Packet {
+ cmd_id: rsp.get_cmd_id(),
+ head: PacketHead {
+ rpc_id: packet.head.sender_app_id,
+ ..packet.head
+ },
+ recv_vec: rsp.encode_to_vec(),
+ };
+
+ tracing::info!(
+ "[LOGIN] OnGetPlayerToken account_uid: {} uid: {} ip: {} retcode: {}",
+ &rsp.account_uid,
+ rsp.uid,
+ packet.get_user_ip(),
+ rsp.retcode
+ );
+
+ dbgate_service().network_mgr.send_rsp(packet).await?;
+ Ok(())
+ }
+
+ pub async fn on_player_login_req(&self, packet: Packet) -> Result<(), Box> {
+ let Ok(req) = packet.get_proto::() else {
+ tracing::error!("get proto failed");
+ return Ok(());
+ };
+
+ let uid = packet.head.user_id;
+ let Ok(result) = dbgate_service()
+ .sql_op_player_data
+ .select_player_data_by_uid(uid as i32)
+ .await
+ else {
+ tracing::error!("select_player_data_by_uid failed, uid:{uid}");
+ return Ok(());
+ };
+
+ let is_new_player = result.is_none();
+ let player_data = match result {
+ Some(data) => PlayerData {
+ uid: data.uid as u32,
+ nickname: data.nickname,
+ bin: data.bin_data,
+ extra_bin_data: data.extra_bin_data.unwrap_or_default(),
+ json_data: data.json_data,
+ ..Default::default()
+ },
+ None => PlayerData {
+ uid,
+ ..Default::default()
+ },
+ };
+
+ if is_new_player {
+ dbgate_service()
+ .sql_op_player_data
+ .insert_player_data_by_uid(uid as i32, &player_data)
+ .await?;
+ }
+
+ let rsp = PlayerLoginRsp {
+ is_new_player,
+ player_data: player_data.encode_to_vec(),
+ login_rand: req.login_rand,
+ ..Default::default()
+ };
+
+ dbgate_service()
+ .network_mgr
+ .send_rsp(Packet {
+ cmd_id: rsp.get_cmd_id(),
+ head: PacketHead {
+ rpc_id: packet.head.sender_app_id,
+ ..packet.head
+ },
+ recv_vec: rsp.encode_to_vec(),
+ })
+ .await?;
+
+ tracing::info!("[LOGIN] onPlayerLoginReq uid:{uid}");
+ Ok(())
+ }
+
+ fn check_login_account_condition(&self, req: &GetPlayerTokenReq) -> i32 {
+ if !req.account_uid.is_empty() {
+ 0
+ } else {
+ tracing::warn!("req.account_uid is empty() token: {}", "");
+ -1
+ }
+ }
+}
diff --git a/dbgate/src/service/mod.rs b/dbgate/src/service/mod.rs
new file mode 100644
index 0000000..c18fd39
--- /dev/null
+++ b/dbgate/src/service/mod.rs
@@ -0,0 +1,5 @@
+mod dbgate_service;
+mod login_handler;
+
+pub use dbgate_service::DbgateService;
+pub use login_handler::LoginHandler;
diff --git a/dispatch/Cargo.toml b/dispatch/Cargo.toml
new file mode 100644
index 0000000..eb3d9bb
--- /dev/null
+++ b/dispatch/Cargo.toml
@@ -0,0 +1,33 @@
+[package]
+name = "dispatch"
+edition = "2021"
+version.workspace = true
+
+[dependencies]
+env_logger.workspace = true
+
+axum.workspace = true
+axum-server.workspace = true
+
+sqlx.workspace = true
+serde.workspace = true
+serde_json.workspace = true
+toml.workspace = true
+
+tokio.workspace = true
+tokio-util.workspace = true
+
+tracing.workspace = true
+tracing-futures.workspace = true
+tracing-log.workspace = true
+tracing-subscriber.workspace = true
+tracing-bunyan-formatter.workspace = true
+
+dashmap.workspace = true
+paste.workspace = true
+prost.workspace = true
+hex.workspace = true
+rbase64.workspace = true
+proto.workspace = true
+
+common.workspace = true
diff --git a/dispatch/dispatch.toml b/dispatch/dispatch.toml
new file mode 100644
index 0000000..f934af1
--- /dev/null
+++ b/dispatch/dispatch.toml
@@ -0,0 +1,29 @@
+app_id = 1
+forbid_first_dispatch = false
+
+[[applications.Dispatch]]
+app_id = 1
+inner_ip = "127.0.0.1:22001"
+
+[[applications.Gateserver]]
+app_id = 2
+inner_ip = "127.0.0.1:22002"
+
+[[applications.Dbgate]]
+app_id = 3
+inner_ip = "127.0.0.1:22003"
+
+[[applications.Gameserver]]
+app_id = 4
+inner_ip = "127.0.0.1:22004"
+
+[region]
+name = "dev_mualani"
+dev_sdk_account = true
+
+[net.http]
+bind_host = "0.0.0.0:21041"
+
+[database]
+connection_string = "postgres://postgres:@localhost:5432/hk4e"
+redis_url = "redis://127.0.0.1/"
diff --git a/dispatch/src/config.rs b/dispatch/src/config.rs
new file mode 100644
index 0000000..bf0440c
--- /dev/null
+++ b/dispatch/src/config.rs
@@ -0,0 +1,39 @@
+use std::collections::BTreeMap;
+
+use common::{
+ config::{AppConfig, DatabaseConfig, RegionConfig},
+ net::ServiceType,
+};
+use serde::Deserialize;
+
+const DEFAULT_TOML: &str = include_str!("../dispatch.toml");
+
+#[derive(Deserialize)]
+pub struct HttpServerConfig {
+ pub bind_host: String,
+}
+
+#[derive(Deserialize)]
+pub struct NetConfig {
+ pub http: HttpServerConfig,
+}
+
+#[derive(Deserialize)]
+pub struct DispatchConfig {
+ pub app_id: u32,
+ pub applications: BTreeMap>,
+ pub net: NetConfig,
+ pub database: DatabaseConfig,
+ pub region: RegionConfig,
+ pub forbid_first_dispatch: bool,
+}
+
+pub fn load() -> Option {
+ match common::config::load_or_create_config("dispatch.toml", DEFAULT_TOML) {
+ Ok(config) => Some(config),
+ Err(err) => {
+ tracing::error!("Failed to load config: {err}");
+ None
+ }
+ }
+}
diff --git a/dispatch/src/dispatch_service.rs b/dispatch/src/dispatch_service.rs
new file mode 100644
index 0000000..f991609
--- /dev/null
+++ b/dispatch/src/dispatch_service.rs
@@ -0,0 +1,48 @@
+use std::error::Error;
+
+use axum::{extract::Request, ServiceExt};
+use common::db::{self, DbDeployConfigMgr};
+use tokio::net::TcpListener;
+
+use crate::{
+ config::DispatchConfig,
+ dispatch_service,
+ gateserver_mgr::GateserverMgr,
+ network::{self, NetworkMgr},
+};
+
+pub struct DispatchService {
+ pub config: DispatchConfig,
+ pub network_mgr: NetworkMgr,
+ pub db_deploy_config_mgr: DbDeployConfigMgr,
+ pub gateserver_mgr: GateserverMgr,
+}
+
+impl DispatchService {
+ pub async fn new(config: DispatchConfig) -> Result> {
+ let db_pool = db::connect(&config.database.connection_string).await?;
+ let network_mgr = NetworkMgr::new(&config).await?;
+ let gateserver_mgr = GateserverMgr::new();
+
+ Ok(Self {
+ config,
+ network_mgr,
+ gateserver_mgr,
+ db_deploy_config_mgr: DbDeployConfigMgr::new(db_pool),
+ })
+ }
+
+ pub async fn run(&self) {
+ tokio::spawn(async {
+ let router = network::http_handlers::make_routes();
+
+ let listener = TcpListener::bind(&dispatch_service().config.net.http.bind_host)
+ .await
+ .unwrap();
+
+ axum::serve(listener, ServiceExt::::into_make_service(router)).await
+ });
+
+ self.network_mgr.run().await
+ }
+}
diff --git a/dispatch/src/gateserver_mgr.rs b/dispatch/src/gateserver_mgr.rs
new file mode 100644
index 0000000..6f8baa5
--- /dev/null
+++ b/dispatch/src/gateserver_mgr.rs
@@ -0,0 +1,81 @@
+use std::{collections::BTreeMap, sync::Mutex};
+
+#[derive(Clone)]
+pub struct GateserverInfo {
+ pub app_id: u32,
+ #[allow(dead_code)]
+ pub inner_ip: String,
+ pub outer_ip: String,
+ pub listen_port: u16,
+ pub use_domain_name: bool,
+ pub domain_name: String,
+ pub load: u32,
+}
+
+pub struct GateserverMgr {
+ gateserver_map: Mutex>,
+}
+
+impl GateserverMgr {
+ pub fn new() -> Self {
+ Self {
+ gateserver_map: Mutex::new(BTreeMap::new()),
+ }
+ }
+
+ pub fn add_gateserver(
+ &self,
+ app_id: u32,
+ inner_ip: String,
+ outer_ip: String,
+ listen_port: u16,
+ use_domain_name: bool,
+ domain_name: String,
+ load: u32,
+ ) {
+ let mut gateserver_map = self.gateserver_map.lock().unwrap();
+ gateserver_map.insert(
+ app_id,
+ GateserverInfo {
+ app_id,
+ inner_ip: inner_ip.clone(),
+ outer_ip: outer_ip.clone(),
+ listen_port,
+ use_domain_name,
+ domain_name: domain_name.clone(),
+ load,
+ },
+ );
+
+ tracing::info!("add gateserver app_id={}, inner_ip={}, outer_ip={}, listen_port={} use_domain_name={} domain_name={}. cur_total_server_count={}", app_id, inner_ip, outer_ip, listen_port, use_domain_name, domain_name, gateserver_map.len());
+ }
+
+ pub fn get_gateserver(&self, uid: u32) -> Option {
+ let gateserver_map = self.gateserver_map.lock().unwrap();
+ match gateserver_map
+ .values()
+ .min_by_key(|g| g.load)
+ .map(|g| g.clone())
+ {
+ Some(info) => {
+ tracing::info!("get gateserver {} app_id: to uid={uid}", info.app_id);
+ Some(info)
+ }
+ None => None,
+ }
+ }
+
+ pub fn sync_gateserver_load(&self, app_id: u32, load: u32) {
+ let mut gateserver_map = self.gateserver_map.lock().unwrap();
+
+ let Some(info) = gateserver_map.get_mut(&app_id) else {
+ tracing::warn!("fail to find gateserver app_id={app_id}");
+ return;
+ };
+
+ if info.load != load {
+ info.load = load;
+ tracing::info!("sync gateserver load app_id={app_id}, load={load}");
+ }
+ }
+}
diff --git a/dispatch/src/main.rs b/dispatch/src/main.rs
new file mode 100644
index 0000000..f47f303
--- /dev/null
+++ b/dispatch/src/main.rs
@@ -0,0 +1,26 @@
+use std::{error::Error, sync::OnceLock};
+
+use common::log;
+use dispatch_service::DispatchService;
+
+mod config;
+mod dispatch_service;
+mod gateserver_mgr;
+mod network;
+
+static SERVICE: OnceLock = OnceLock::new();
+
+#[tokio::main]
+async fn main() -> Result<(), Box> {
+ log::init_tracing();
+ let config = config::load().unwrap();
+ let service = DispatchService::new(config).await?;
+ let service = SERVICE.get_or_init(|| service);
+ service.run().await;
+
+ Ok(())
+}
+
+fn dispatch_service() -> &'static DispatchService {
+ SERVICE.get().unwrap()
+}
diff --git a/dispatch/src/network/gateserver_session.rs b/dispatch/src/network/gateserver_session.rs
new file mode 100644
index 0000000..3499ffe
--- /dev/null
+++ b/dispatch/src/network/gateserver_session.rs
@@ -0,0 +1,72 @@
+use std::{error::Error, net::Ipv4Addr};
+
+use common::{
+ config::IpString,
+ net::{tools::Packet, AServerSession, NetError, ServiceType},
+ rpc_handlers,
+};
+
+use paste::paste;
+use proto::AddGateserverNotify;
+
+use crate::dispatch_service;
+
+pub struct GateserverSession {
+ server_session: AServerSession,
+}
+
+impl GateserverSession {
+ pub async fn new(app_id: u32, service_ip: IpString, cur_app_id: u32) -> Result {
+ Ok(Self {
+ server_session: AServerSession::new(app_id, service_ip, cur_app_id),
+ })
+ }
+
+ async fn on_add_gateserver_notify(&self, packet: Packet) -> Result<(), Box> {
+ let service = dispatch_service();
+ let Some(inner_ip) = service
+ .config
+ .applications
+ .get(&ServiceType::Gateserver)
+ .unwrap()
+ .iter()
+ .find(|a| a.app_id == packet.head.sender_app_id)
+ .map(|a| a.inner_ip.clone())
+ else {
+ tracing::error!("app_id {} not found!", packet.head.sender_app_id);
+ return Ok(());
+ };
+
+ let proto = packet.get_proto::()?;
+ let outer_ip = Ipv4Addr::from(proto.outer_ip);
+
+ service.gateserver_mgr.add_gateserver(
+ packet.head.sender_app_id,
+ inner_ip.0.to_string(),
+ outer_ip.to_string(),
+ proto.listen_port as u16,
+ proto.use_domain_name,
+ proto.domain_name,
+ 0,
+ );
+
+ Ok(())
+ }
+
+ async fn on_keep_alive_notify(&self, packet: Packet) -> Result<(), Box> {
+ dispatch_service()
+ .gateserver_mgr
+ .sync_gateserver_load(self.server_session.app_id, packet.head.sender_load);
+
+ Ok(())
+ }
+
+ rpc_handlers! {
+ AddGateserverNotify;
+ KeepAliveNotify;
+ }
+
+ async fn default_packet_process_func(&self, _packet: Packet) -> Result<(), Box> {
+ Ok(())
+ }
+}
diff --git a/dispatch/src/network/http_handlers.rs b/dispatch/src/network/http_handlers.rs
new file mode 100644
index 0000000..033570e
--- /dev/null
+++ b/dispatch/src/network/http_handlers.rs
@@ -0,0 +1,248 @@
+use axum::{extract::Query, routing::get, Router};
+use prost::Message;
+use proto::{QueryCurrRegionHttpRsp, QueryRegionListHttpRsp, RegionInfo, RegionSimpleInfo};
+use serde::Deserialize;
+use serde_json::json;
+
+use crate::{config::DispatchConfig, dispatch_service, gateserver_mgr::GateserverMgr};
+use common::{
+ crypto::{rsa_utils, MhyXorpad},
+ db::DbDeployConfigMgr,
+};
+
+const ALIVE_RSP: &str = "{\"retcode\":\"0\", \"msg\":\"alive ok\"}";
+const FALLBACK_RSP: &str = "{\"retcode\":\"-1\", \"msg\":\"system error\"}";
+
+pub fn make_routes() -> Router {
+ Router::new()
+ .route("/alive", get(|| async { ALIVE_RSP }))
+ .route("/query_region_list", get(query_region_list))
+ .route("/query_cur_region", get(query_curr_region))
+ .route("/query_gateserver", get(query_curr_region))
+ .fallback(|| async { FALLBACK_RSP })
+}
+
+#[derive(Deserialize)]
+#[allow(unused)]
+struct QueryRegionListParams {
+ pub channel_id: i32,
+ pub version: String,
+ pub lang: i32,
+ pub platform: i32,
+ pub binary: u8,
+ pub time: u32,
+}
+
+#[derive(Deserialize)]
+#[allow(unused)]
+struct QueryCurrRegionParams {
+ pub channel_id: i32,
+ pub version: String,
+ pub lang: i32,
+ pub platform: i32,
+ pub binary: u8,
+ pub time: u32,
+ #[serde(rename = "dispatchSeed")]
+ pub dispatch_seed: String,
+ pub aid: u32,
+ pub key_id: Option,
+}
+
+async fn query_region_list(params: Query) -> String {
+ let service = dispatch_service();
+ let rsp = if service.config.forbid_first_dispatch {
+ tracing::warn!("query_region_list is forbidden in this dispatch");
+
+ QueryRegionListHttpRsp {
+ retcode: 8,
+ ..Default::default()
+ }
+ } else {
+ match build_query_region_list_rsp(&service.db_deploy_config_mgr, ¶ms.0).await {
+ Some(rsp) => rsp,
+ None => QueryRegionListHttpRsp {
+ retcode: -1,
+ ..Default::default()
+ },
+ }
+ };
+
+ rbase64::encode(&rsp.encode_to_vec())
+}
+
+async fn query_curr_region(params: Query) -> String {
+ let service = dispatch_service();
+ let rsp = match get_curr_region_info(
+ &service.gateserver_mgr,
+ &service.db_deploy_config_mgr,
+ &service.config,
+ ¶ms.0,
+ )
+ .await
+ {
+ Some(rsp) => rsp,
+ None => QueryCurrRegionHttpRsp {
+ retcode: -1,
+ ..Default::default()
+ },
+ };
+
+ if params.key_id.is_some() {
+ encrypt_region_info(
+ &service.db_deploy_config_mgr,
+ &service.config,
+ ¶ms.0,
+ rsp.encode_to_vec(),
+ )
+ .await
+ .unwrap()
+ .to_string()
+ } else {
+ rbase64::encode(&rsp.encode_to_vec())
+ }
+}
+
+async fn encrypt_region_info(
+ deploy_config_mgr: &DbDeployConfigMgr,
+ config: &DispatchConfig,
+ params: &QueryCurrRegionParams,
+ rsp_vec: Vec,
+) -> Option {
+ let key_id = params.key_id.unwrap();
+
+ let region = deploy_config_mgr
+ .find_db_region_config(config.region.name.clone())
+ .await?;
+
+ if !region.is_key_allowed(key_id as u32) {
+ tracing::warn!("this region doesn't allow key_id: {}", key_id);
+ return None;
+ }
+
+ let rsakey = deploy_config_mgr.find_db_rsakey_config(key_id).await?;
+
+ let sign = rsa_utils::private_sign(&rsakey.server_private_key, &rsp_vec)?;
+ let cipher = rsa_utils::public_encrypt(&rsakey.client_public_key, &rsp_vec)?;
+
+ Some(json! ({
+ "content": rbase64::encode(&cipher),
+ "sign": rbase64::encode(&sign)
+ }))
+}
+
+#[tracing::instrument(skip_all)]
+async fn get_curr_region_info(
+ gateserver_mgr: &GateserverMgr,
+ deploy_config_mgr: &DbDeployConfigMgr,
+ config: &DispatchConfig,
+ params: &QueryCurrRegionParams,
+) -> Option {
+ tracing::info!(
+ "request version: {} lang: {} platform: {} channel_id: {} dispatch_seed: {}",
+ params.version,
+ params.lang,
+ params.platform,
+ params.channel_id,
+ params.dispatch_seed
+ );
+
+ let region = deploy_config_mgr
+ .find_db_region_config(config.region.name.clone())
+ .await?;
+
+ let client_config = deploy_config_mgr
+ .find_db_client_config(params.version.clone())
+ .await?;
+
+ if client_config.dispatch_seed.len() > 0 {
+ if params.dispatch_seed != client_config.dispatch_seed {
+ tracing::warn!(
+ "expected dispatch seed: {} get: {}",
+ client_config.dispatch_seed,
+ params.dispatch_seed
+ );
+
+ return Some(QueryCurrRegionHttpRsp {
+ retcode: 1,
+ ..Default::default()
+ });
+ }
+ }
+
+ let Some(gateserver) = gateserver_mgr.get_gateserver(params.aid) else {
+ tracing::warn!("get_gateserver failed for uid: {}", params.aid);
+
+ return Some(QueryCurrRegionHttpRsp {
+ retcode: -1,
+ msg: String::from("Not found Gateserver"),
+ ..Default::default()
+ });
+ };
+
+ let mut rsp = QueryCurrRegionHttpRsp {
+ client_secret_key: region.client_secret_key.clone(),
+ region_info: Some(RegionInfo {
+ gateserver_ip: gateserver.outer_ip,
+ gateserver_port: gateserver.listen_port as u32,
+ use_gateserver_domain_name: gateserver.use_domain_name,
+ gateserver_domain_name: gateserver.domain_name,
+ area_type: region.area_type.clone(),
+ ..Default::default()
+ }),
+ ..Default::default()
+ };
+
+ if let Some(client_region_config) = deploy_config_mgr
+ .find_db_client_region_config(params.version.clone(), region.name.clone())
+ .await
+ {
+ if client_region_config.client_region_custom_config.len() > 0 {
+ let mut client_region_custom_config = client_region_config
+ .client_region_custom_config
+ .into_bytes();
+ let xorpad = MhyXorpad::from_ec2b(®ion.client_secret_key);
+ xorpad.xor(&mut client_region_custom_config);
+ rsp.client_region_custom_config_encrypted = client_region_custom_config;
+ }
+ }
+
+ Some(rsp)
+}
+
+#[tracing::instrument(skip_all)]
+async fn build_query_region_list_rsp(
+ deploy_config_mgr: &DbDeployConfigMgr,
+ params: &QueryRegionListParams,
+) -> Option {
+ let binds = deploy_config_mgr
+ .find_bind_region_config_vec(params.version.clone())
+ .await;
+
+ let regions = deploy_config_mgr.fetch_region_list(&binds).await;
+ let enable_login_pc = deploy_config_mgr.enable_login_pc(params.channel_id).await?;
+
+ let client_secret_key = regions.first()?.client_secret_key.clone();
+ let client_config = deploy_config_mgr
+ .find_db_client_config(params.version.clone())
+ .await?;
+
+ let mut client_custom_config = client_config.client_custom_config_str.into_bytes();
+ let xorpad = MhyXorpad::from_ec2b(&client_secret_key);
+ xorpad.xor(&mut client_custom_config);
+
+ Some(QueryRegionListHttpRsp {
+ retcode: 0,
+ enable_login_pc,
+ client_secret_key,
+ client_custom_config_encrypted: client_custom_config,
+ region_list: regions
+ .iter()
+ .map(|r| RegionSimpleInfo {
+ name: r.name.clone(),
+ title: r.title.clone(),
+ r#type: r.region_type.clone(),
+ dispatch_url: r.dispatch_url.clone(),
+ })
+ .collect(),
+ })
+}
diff --git a/dispatch/src/network/mod.rs b/dispatch/src/network/mod.rs
new file mode 100644
index 0000000..8fe6ebd
--- /dev/null
+++ b/dispatch/src/network/mod.rs
@@ -0,0 +1,5 @@
+mod gateserver_session;
+pub mod http_handlers;
+mod network_mgr;
+
+pub use network_mgr::NetworkMgr;
diff --git a/dispatch/src/network/network_mgr.rs b/dispatch/src/network/network_mgr.rs
new file mode 100644
index 0000000..6b64cee
--- /dev/null
+++ b/dispatch/src/network/network_mgr.rs
@@ -0,0 +1,64 @@
+use std::error::Error;
+
+use common::{
+ base::NetService,
+ impl_net_service,
+ net::{tools::Packet, AServer, NetError, ServiceType},
+ rpc_handlers, services,
+};
+use dashmap::DashMap;
+
+use crate::{config::DispatchConfig, dispatch_service};
+use paste::paste;
+
+use super::gateserver_session::GateserverSession;
+
+pub struct NetworkMgr {
+ server: AServer,
+ gateserver_sessions: DashMap,
+}
+
+impl NetworkMgr {
+ pub async fn new(config: &DispatchConfig) -> Result {
+ let app_config = config
+ .applications
+ .get(&ServiceType::Dispatch)
+ .unwrap()
+ .iter()
+ .find(|a| a.app_id == config.app_id)
+ .expect("Failed to get applications.Dispatch entry");
+
+ let server = AServer::bind(app_config.inner_ip.clone()).await?;
+
+ Ok(Self {
+ server,
+ gateserver_sessions: DashMap::new(),
+ })
+ }
+
+ pub async fn run(&self) {
+ loop {
+ let Ok(mut packets) = self.server.recv().await else {
+ continue;
+ };
+
+ while let Some(packet) = packets.pop_front() {
+ if let Err(err) = self.on_recv_to_svc(packet).await {
+ tracing::warn!("Packet processing error: {err}");
+ }
+ }
+ }
+ }
+
+ rpc_handlers! {}
+
+ services! {
+ Gateserver;
+ }
+
+ pub async fn default_packet_process_func(&self, _: Packet) -> Result<(), Box> {
+ Ok(())
+ }
+}
+
+impl_net_service!(Dispatch);
diff --git a/framework/common/Cargo.toml b/framework/common/Cargo.toml
new file mode 100644
index 0000000..8524c11
--- /dev/null
+++ b/framework/common/Cargo.toml
@@ -0,0 +1,32 @@
+[package]
+name = "common"
+edition = "2021"
+version.workspace = true
+
+[dependencies]
+bytes.workspace = true
+env_logger.workspace = true
+
+serde.workspace = true
+serde_json.workspace = true
+toml.workspace = true
+
+rand.workspace = true
+rand_mt.workspace = true
+rsa.workspace = true
+
+thiserror.workspace = true
+tokio.workspace = true
+tracing.workspace = true
+sqlx.workspace = true
+redis.workspace = true
+zeromq.workspace = true
+dashmap.workspace = true
+
+rbase64.workspace = true
+prost.workspace = true
+proto.workspace = true
+mhy-kcp.workspace = true
+
+[target.'cfg(target_os = "windows")'.dependencies]
+ansi_term = "0.12.1"
diff --git a/framework/common/migrations/001_tables.sql b/framework/common/migrations/001_tables.sql
new file mode 100644
index 0000000..d2cff37
--- /dev/null
+++ b/framework/common/migrations/001_tables.sql
@@ -0,0 +1,110 @@
+create function unhex(text) returns text language sql immutable strict as $$
+ select encode(decode($1, 'hex'), 'escape')
+$$;
+
+CREATE TABLE t_sdk_account (
+ uid int primary key generated always as identity,
+ token varchar(64) NOT NULL,
+ username varchar(40) NOT NULL,
+ password varchar(256) NOT NULL,
+ UNIQUE(username)
+);
+
+CREATE TABLE t_combo_token (
+ account_uid varchar(32) primary key,
+ token varchar(64) NOT NULL,
+ device_id varchar(128) NOT NULL,
+ UNIQUE(account_uid, device_id)
+);
+
+CREATE TABLE t_client_config (
+ id bigint primary key,
+ version varchar(64) NOT NULL DEFAULT '',
+ name varchar(64) NOT NULL DEFAULT '',
+ stop_server_config_str varchar(512) NOT NULL DEFAULT '',
+ client_custom_config_str varchar(512) NOT NULL DEFAULT '',
+ dispatch_seed varchar(512) NOT NULL DEFAULT '',
+ UNIQUE(version)
+);
+
+INSERT INTO t_client_config VALUES
+(1, 'OSCBWin4.8.50', '', '', '{\"codeSwitch\":[4334],\"sdkenv\":2,\"checkdevice\":false,\"loadPatch\":false,\"showexception\":false,\"regionConfig\":\"pm|fk|add\",\"downloadMode\":0}', '');
+
+CREATE TABLE t_region_config (
+ id bigint primary key,
+ name varchar(64) NOT NULL DEFAULT '',
+ title varchar(128) NOT NULL DEFAULT '',
+ region_type varchar(64) NOT NULL DEFAULT '',
+ area_type varchar(64) NOT NULL DEFAULT '',
+ dispatch_url varchar(64) NOT NULL DEFAULT '',
+ sdk_env int NOT NULL,
+ client_secret_key bytea NOT NULL DEFAULT '',
+ rsa_key_list varchar(128) NOT NULL DEFAULT '',
+ UNIQUE(name)
+);
+
+INSERT INTO t_region_config VALUES
+(1, 'dev_mualani', 'dev_mualani', 'DEV_PUBLIC', 'global', 'http://127.0.0.1:21041/query_cur_region', 2, decode('456332621000000083FD4642C3298A7CBB33E0A04332058300080000BBFA992CD5433217198CB083995F29C7DD0CF0E30414DD89E70A3716B9EACB3935ADD70A8C6777E6BA31CEB50BDDDA259E8E104A8BBB0EE900DA167628EA277BE0365354C5F211051301202DA77ADBF26B792B3601E2E191E26B2EE31860EF8C7230373628A0CD0BA3AAA5FA6BA5BC78C46A7AD671287D64BDE6098CE62108D74D3C12C27F2F03495D60A6F7A55179FF0ED710EC708C225F0BB15F17C0D16FA990BEB3D08C35DE2E457685ACBE2FE1E32A73872DE59345E31623B3192AD0EC365D8A6F111EBC7374DA167FD7374952952738677F00D2E7D622A6718AAF647F461C27636F21E46D932C27CC148B1206E3A306A882A3B66288F96C5B3DBDB78A0699CEA20153CD494EB617C5FB04521E389338B6075EAE179368502EFF0FAF7FC57A5832266151D68129295E2C4B6476A8744BD8F066BB825DE45301DA8189CA956F89CA166D14DD3A6C2F75B91990B3201CDADA86BDE390632DA8633BCC301E28F60F60C71C0397CD4093DDDA51F0AD6C666B5EE7E7CD789260CED2941CD701296003E2926281472EAA56EA9256387A365A9171DBDA10BBB428DE396371E24F620A2656C0026B96E49C872DB31A9FDA82FA5082A3B9B1B94BEA2DBD6A4ECC94821A8C63D6181FFD733261A8A73902BF68EB8A5E9F87DEDD7C65EA3E521E04008B2C40FE138C9D1E1C61E376E9051DC4651ED94B2B91C330DDA6F816CAABE12E0A87F9748DBDCDA66E6DA7307CB8894EBF77B346D5F9543D45F5A21CD5966E6426B2DCB20F2D796079C86F881C5EB5A612068C1C04AEB87775D2A33F4862AA94CD26DBB66846972F3C2B41552D46ED18514FE0F0FA83473A024D0B2561417D4A6FDBB68F6F09FA130057A3048ADDCB745FB108AF6A9091F5A6872E668FF83F5C68445EB99B28F1AF515F8BD9365683AB819B275151F969BC15BA33C16B0714F15B19EE08540C971979A122BF2D598BDC5A8CAADDEEBFE9DA4EB15B16940213E38D79E1AB952E76A627647DD5ECED8C638D717BD05858DD377FFD62558DE398E2975286E73873AB32E94E65231B3C42DEF1D661D466E162DE5CA2FA82FB13379AA2587D723005C7FAF9DE64CE1D9ADC705BB62603591B1C3ACA8DE407827D1AC61B0414BBC660B13E8AC948623B061E154AA8FBC7EDAAC00FDB99289F6F000B50C70F4E4969AE40FA0EBDF202427EBB55119A3131DB0758DF3BE956CE7838DB638CA4E1224546EFA34466017652E96E20DD76EEE8C96793EE96426785E9D219096CB91F2521DDF125007A2DB3DD2B784BBA1653B0F590A29F12C467A7595D203971F80C1BF92E517EA648383D34468FD40CCC5A207FB33A03869E884F878C997BDEC8DA2805C823D2F56505B70A7813F48AC177D780D70CD810938F9B41346F8379DF9073B23342CE38940730D5EAB1E7C43464B387EFAB49BE5AD6FFA4C44014D4128DCB74E4A2A6F1C13C5F3C4F79767203C8B8AED90AF270BA64A4BF83A5B172C3E01C7BC00126F0B19DA32D159602D77019B51959ABB7A588822896BD9AC54D7E4EE00601792FDF2D4AE0F18EDF99D45BC73400CB541D70690776EB676ED14F88228FB908059D45EC75F203AEC210B6E8A529874387CED25F384C2A9489FAAF0DB23813799EBC2DFA8EDEE42C70AD36D7919FBD5299927264EF36973C3FCCBBFF26B28C51F872E6C28BC4BA5B6DC0BD907C3E3A4F07F4201612E696144A19A9FF329A15390DD975D5C6723EF4EE0F7627BD5DDEE7AF819DB1D4A65D3233D6DF7D55F2A7952FF2DC4761CAD105047B41DB7845BBCFA7A291190F528409028A78F813E96C80E943CD4A6036513171D0ACEADE80C1A68E68112F8841F94D1CB01D0E6678EBD844E73D3066B9D53AD66F0B2381CB25A8F8676C7443C8A729C668861E62B6BB130B574853F2B4B2B7D73521C1D0FF16C1DAF6A4C42B143F4A3C3AF5FD819D49A70ED918C159C572A9A1C56E23F7945FD76FEAF95EA882A438C5197934BAF26DD5E2C702C14AA3556181B61240CF6001F37D62A40FC97721BC777A73E79FAAB902B29337E6A97DD60DFD402DAEC9C0D109A5985DA86DE967F35BDF2A6D35487D7557EA70C08403009D4E3C70C6266D6D909C7DD63A64D3FABC8FA067CB768746A90FC1078EE26F94BEFC1FA8639CF9CA02A171D4FAA8FFA3E1FB41727045DC6AC36DD28C1816B376C18D9FC2D766A2997F2A4802B7557D5228A89BA830F251C01B16E072F60F8E48CE613F495B130C322A692F22C1A653C6CA8650A96384F53D86427F47A84C56BC88F69812BFB23B332DD97E7B9F200FCAFFA4FC8E56B047239B5510679C8A51ACB95A2165CECFD18883868710A68D1CA7B07BC221534D356986F383C094582C8FC4326FA84DB89989A15F4320232D6F2936F8F06DC9D512993888D818EC4EFD30D77D27721572BD53082BFCD20DDCAEC50B8AA66457F0A00F283835F8D732DA4E3FEF7AB5204E8241A6FBE176E655456AEEAC5ACEDF24BC98FE84BBB13D224B407A44137A2F5D0832A46202D390A840BC89B16D282E8B0B4485F2E02CF62F82D71FAE36BE921C1D8DFEFB60BA3D774985D23D8F6476A8B4E92AD15E1E9054BA139D7B3C0B8C2DCE59F13E4A134F0BAFAE8EDBDC4613C22F95C5AC54811D54DF44717B29F64204229BA73BB9E8703ADF8363688B24F45BEDD266DE6EE71597B79A1A644E57C5CA4BBB4A04AA78817566E790875AF6C171A164ED955581329006AAEC6EE08B3172F193C8BDDC14743F538320AAAC74EF8AFE92B1FB117A581758F01EC0A9F050885820B50C88DEB4A8037ADA2D64B48E09F0C785BDAB98DF6D5193C08110508D2C6353A6617B31084BEC5D026459CF747B245A27FD77EB7E8C5FB89876A9EF58C452D3AB90A411B2E8239AFCEB56B3', 'hex'), '5');
+
+CREATE TABLE t_bind_config (
+ id bigint primary key,
+ client_version varchar(64) NOT NULL,
+ region_name varchar(64) NOT NULL,
+ channel_id int NOT NULL
+);
+
+INSERT INTO t_bind_config VALUES
+(1, 'OSCBWin4.8.50', 'dev_mualani', 1);
+
+CREATE TABLE t_channel_id_config (
+ id bigint primary key,
+ channel_id int NOT NULL,
+ enable_login_pc bool
+);
+
+INSERT INTO t_channel_id_config VALUES
+(1, 1, TRUE);
+
+CREATE TABLE t_client_region_config (
+ id bigint primary key,
+ client_version varchar(64) NOT NULL,
+ region_name varchar(64) NOT NULL,
+ client_region_custom_config varchar(512) NOT NULL
+);
+
+INSERT INTO t_client_region_config VALUES
+(1, 'OSCBWin4.8.50', 'dev_mualani', '');
+
+CREATE TABLE t_rsakey_config (
+ id bigint primary key,
+ client_public_key varchar(4096) NOT NULL,
+ server_private_key varchar(4096) NOT NULL
+);
+
+INSERT INTO t_rsakey_config VALUES
+(5, E'-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsJbFp3WcsiojjdQtVnTu\nvtawL2m4XxK93F6lCnFwcZqUP39txFGGlrogHMqreyawIUN7E5shtwGzigzjW8Ly\n5CryBJpXP3ehNTqJS7emb+9LlC19Oxa1eQuUQnatgcsd16DPH7kJ5JzN3vXnhvUy\nk4Qficdmm0uk7FRaNYFi7EJs4xyqFTrp3rDZ0dzBHumlIeK1om7FNt6Nyivgp+Uy\nbO7kl0NLFEeSlV4S+7ofitWQsO5xYqKAzSzz+KIRQcxJidGBlZ1JN/g5DPDpx/zt\nvOWYUlM7TYk6xN3focZpU0kBzAw/rn94yW9z8jpXfzk+MvWzVL/HAcPy4ySwkay0\nNwIDAQAB\n-----END PUBLIC KEY-----', E'-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAxbbx2m1feHyrQ7jP+8mtDF/pyYLrJWKWAdEv3wZrOtjOZzeL\nGPzsmkcgncgoRhX4dT+1itSMR9j9m0/OwsH2UoF6U32LxCOQWQD1AMgIZjAkJeJv\nFTrtn8fMQ1701CkbaLTVIjRMlTw8kNXvNA/A9UatoiDmi4TFG6mrxTKZpIcTInvP\nEpkK2A7Qsp1E4skFK8jmysy7uRhMaYHtPTsBvxP0zn3lhKB3W+HTqpneewXWHjCD\nfL7Nbby91jbz5EKPZXWLuhXIvR1Cu4tiruorwXJxmXaP1HQZonytECNU/UOzP6GN\nLdq0eFDE4b04Wjp396551G99YiFP2nqHVJ5OMQIDAQABAoIBAQDEeYZhjyq+avUu\neSuFhOaIU4/ZhlXycsOqzpwJvzEz61tBSvrZPA5LSb9pzAvpic+7hDH94jX89+8d\nNfO7qlADsVNEQJBxuv2o1MCjpCRkmBZz506IBGU60Kt1j5kwdCEergTW1q375z4w\nl8f7LmSL2U6WvKcdojTVxohBkIUJ7shtmmukDi2YnMfe6T/2JuXDDL8rvIcnfr5E\nMCgPQs+xLeLEGrIJdpUy1iIYZYrzvrpJwf9EJL3D0e7jkpbvAQZ8EF9YhEizJhOm\ndzTqW4PgW2yUaHYd3q5QjiILy7AC+oOYoTZln3RfjPOxl+bYjeMOWlqkgtpPQkAE\n4I64w8RZAoGBAPLR44pEkmTdfIIF8ZtzBiVfDZ29bT96J0CWXGVzp8x6bSu5J5jl\ns7sP8DEcjGZ6vHsLGOvkcNxzcnR3l/5HOz6TIuvVuUm36b1jHltq1xZStjGeKZs1\nihhJSu2lIA+TrK8FCRnKARJ0ughXGNZFItgeM230Sgjp2RL4ISXJ724XAoGBANBy\nS2RwNpUYvkCSZHSFnQM/jq1jldxw+0p4jAGpWLilEaA/8xWUnZrnCrPFF/t9llpb\ndTR/dCI8ntIMAy2dH4IUHyYKUahyHSzCAUNKpS0s433kn5hy9tGvn7jyuOJ4dk9F\no1PIZM7qfzmkdCBbX3NF2TGpzOvbYGJHHC3ssVr3AoGBANHJDopN9iDYzpJTaktA\nVEYDWnM2zmUyNylw/sDT7FwYRaup2xEZG2/5NC5qGM8NKTww+UYMZom/4FnJXXLd\nvcyxOFGCpAORtoreUMLwioWJzkkN+apT1kxnPioVKJ7smhvYAOXcBZMZcAR2o0m0\nD4eiiBJuJWyQBPCDmbfZQFffAoGBAKpcr4ewOrwS0/O8cgPV7CTqfjbyDFp1sLwF\n2A/Hk66dotFBUvBRXZpruJCCxn4R/59r3lgAzy7oMrnjfXl7UHQk8+xIRMMSOQwK\np7OSv3szk96hy1pyo41vJ3CmWDsoTzGs7bcdMl72wvKemRaU92ckMEZpzAT8cEMC\ncWKLb8yzAoGAMibG8IyHSo7CJz82+7UHm98jNOlg6s73CEjp0W/+FL45Ka7MF/lp\nxtR3eSmxltvwvjQoti3V4Qboqtc2IPCt+EtapTM7Wo41wlLCWCNx4u25pZPH/c8g\n1yQ+OvH+xOYG+SeO98Phw/8d3IRfR83aqisQHv5upo2Rozzo0Kh3OsE=\n-----END RSA PRIVATE KEY-----');
+
+CREATE TABLE t_user_uid (
+ uid int primary key NOT NULL,
+ account_uid varchar(128) NOT NULL,
+ ext varchar(512) NOT NULL DEFAULT '',
+ tag int NOT NULL DEFAULT 0,
+ UNIQUE(account_uid)
+);
+
+CREATE TABLE t_player_data (
+ uid int primary key,
+ nickname varchar(128) NOT NULL DEFAULT '0',
+ level int NOT NULL DEFAULT 0,
+ exp int NOT NULL DEFAULT 0,
+ vip_point int NOT NULL DEFAULT 0,
+ json_data varchar(512) NOT NULL DEFAULT '',
+ bin_data bytea NOT NULL,
+ extra_bin_data bytea DEFAULT NULL,
+ tag_list varchar(128) NOT NULL DEFAULT '',
+ is_delete bool,
+ reserved_1 int,
+ reserved_2 int,
+ before_login_bin_data bytea DEFAULT NULL
+);
+
diff --git a/framework/common/src/base/mod.rs b/framework/common/src/base/mod.rs
new file mode 100644
index 0000000..71b2edf
--- /dev/null
+++ b/framework/common/src/base/mod.rs
@@ -0,0 +1,3 @@
+mod service_base;
+
+pub use service_base::NetService;
diff --git a/framework/common/src/base/service_base.rs b/framework/common/src/base/service_base.rs
new file mode 100644
index 0000000..76a34fd
--- /dev/null
+++ b/framework/common/src/base/service_base.rs
@@ -0,0 +1,92 @@
+use std::collections::BTreeMap;
+
+use crate::{config::AppConfig, net::ServiceType};
+
+pub trait NetService {
+ fn app_id(&self) -> u32;
+ fn get_service_type(&self) -> ServiceType;
+ fn app_map(&self) -> &'static BTreeMap>;
+
+ fn get_app_config(&self, ty: ServiceType, app_id: u32) -> Option {
+ self.app_map()
+ .get(&ty)?
+ .iter()
+ .find(|a| a.app_id == app_id)
+ .cloned()
+ }
+
+ fn get_service_type_by_app_id(&self, app_id: u32) -> Option {
+ for (ty, apps) in self.app_map() {
+ if apps.iter().any(|a| a.app_id == app_id) {
+ return Some(*ty);
+ }
+ }
+
+ None
+ }
+}
+
+#[macro_export]
+macro_rules! impl_net_service {
+ ($name: ident) => {
+ impl ::common::base::NetService for NetworkMgr {
+ ::paste::paste! {
+ fn app_id(&self) -> u32 {
+ crate::[<$name:lower _service>]().config.app_id
+ }
+
+ fn get_service_type(&self) -> ::common::net::ServiceType {
+ ::common::net::ServiceType::$name
+ }
+
+ fn app_map(&self) -> &'static ::std::collections::BTreeMap<::common::net::ServiceType, Vec<::common::config::AppConfig>> {
+ &[<$name:lower _service>]().config.applications
+ }
+ }
+ }
+ };
+}
+
+#[macro_export]
+macro_rules! services {
+ ($($name: ident;)*) => {
+ async fn on_recv_to_svc(
+ &self,
+ packet: ::common::net::tools::Packet,
+ ) -> Result<(), Box> {
+ let Some(app_type) = self.get_service_type_by_app_id(packet.head.sender_app_id) else {
+ return Ok(());
+ };
+
+ paste! { match app_type {
+ $(ServiceType::$name => self.[](packet).await,)*
+ _ => self.on_recv(packet).await,
+ }}
+ }
+
+ paste! {
+ $(
+ async fn [](
+ &self,
+ packet: ::common::net::tools::Packet,
+ ) -> Result<(), Box> {
+ let sessions = &self.[<$name:snake _sessions>];
+
+ if let Some(session) = sessions.get(&packet.head.sender_app_id) {
+ session.on_recv(packet).await
+ } else {
+ let Some(config) = self.get_app_config(ServiceType::$name, packet.head.sender_app_id) else {
+ tracing::warn!("config for app_id:{} not found", packet.head.sender_app_id);
+ return Ok(());
+ };
+ let session = [<$name Session>]::new(packet.head.sender_app_id, config.inner_ip.clone(), self.app_id()).await?;
+ let session = sessions
+ .insert(packet.head.sender_app_id, session);
+
+ sessions.get(&packet.head.sender_app_id).unwrap().on_recv(packet).await
+ }
+ }
+ )*
+ }
+ };
+}
diff --git a/framework/common/src/config/mod.rs b/framework/common/src/config/mod.rs
new file mode 100644
index 0000000..b53753b
--- /dev/null
+++ b/framework/common/src/config/mod.rs
@@ -0,0 +1,40 @@
+use std::sync::Arc;
+
+use serde::{de::DeserializeOwned, Deserialize};
+use toml::de::Error;
+
+#[derive(Deserialize, Clone)]
+pub struct DatabaseConfig {
+ pub connection_string: String,
+ pub redis_url: String,
+}
+
+#[derive(Deserialize, Clone)]
+pub struct RegionConfig {
+ pub name: String,
+ pub dev_sdk_account: bool,
+}
+
+#[derive(Deserialize, Clone)]
+pub struct IpString(pub Arc);
+
+#[derive(Deserialize, Clone)]
+pub struct AppConfig {
+ pub app_id: u32,
+ pub inner_ip: IpString,
+}
+
+pub fn load_or_create_config(path: &str, defaults: &str) -> Result
+where
+ T: DeserializeOwned,
+{
+ let data = std::fs::read_to_string(path).map_or_else(
+ |_| {
+ std::fs::write(path, defaults).unwrap();
+ defaults.to_string()
+ },
+ |data| data,
+ );
+
+ toml::from_str(&data)
+}
diff --git a/framework/common/src/crypto/aes.rs b/framework/common/src/crypto/aes.rs
new file mode 100644
index 0000000..b04c381
--- /dev/null
+++ b/framework/common/src/crypto/aes.rs
@@ -0,0 +1,173 @@
+use super::magic::*;
+
+fn xorr(a: &mut [u8], b: &[u8], n: usize) {
+ (0..n).for_each(|i| a[i] ^= b[i])
+}
+
+fn xor_round_key(state: &mut [u8], keys: &[u8], round: usize) {
+ xorr(state, &keys[round * 16..], 16)
+}
+
+fn sub_bytes(a: &mut [u8], n: usize) {
+ (0..n).for_each(|i| a[i] = LOOKUP_SBOX[a[i] as usize])
+}
+
+fn sub_bytes_inv(a: &mut [u8], n: usize) {
+ (0..n).for_each(|i| a[i] = LOOKUP_SBOX_INV[a[i] as usize])
+}
+
+fn key_schedule_core(a: &mut [u8], i: usize) {
+ let temp = a[0];
+ a[0] = a[1];
+ a[1] = a[2];
+ a[2] = a[3];
+ a[3] = temp;
+ sub_bytes(a, 4);
+ a[0] ^= LOOKUP_RCON[i];
+}
+
+fn oqs_aes128_load_schedule_c(key: &[u8]) -> [u8; 176] {
+ let mut schedule = [0u8; 176];
+
+ let mut bytes = 16;
+ let mut i = 1;
+ let mut t = [0u8; 4];
+
+ schedule[0..16].copy_from_slice(key);
+
+ while bytes < 176 {
+ t.copy_from_slice(&schedule[bytes - 4..]);
+ key_schedule_core(&mut t, i);
+ i += 1;
+ xorr(&mut schedule[bytes..], &t, 4);
+ schedule[bytes..].copy_from_slice(&t);
+ bytes += 4;
+
+ for _ in 0..3 {
+ t.copy_from_slice(&schedule[bytes - 4..]);
+ xorr(&mut t, &schedule[bytes - 16..], 4);
+ schedule[bytes..].copy_from_slice(&t);
+ bytes += 4;
+ }
+ }
+
+ schedule
+}
+
+fn shift_rows(state: &mut [u8]) {
+ let temp = state.to_vec();
+ (0..16).for_each(|i| state[i] = temp[SHIFT_ROWS_TABLE[i] as usize]);
+}
+
+fn shift_rows_inv(state: &mut [u8]) {
+ let temp = state.to_vec();
+ (0..16).for_each(|i| state[i] = temp[SHIFT_ROWS_TABLE_INV[i] as usize]);
+}
+
+fn mix_col(state: &mut [u8]) {
+ let (a0, a1, a2, a3) = (state[0], state[1], state[2], state[3]);
+
+ state[0] = LOOKUP_G2[a0 as usize] ^ LOOKUP_G3[a1 as usize] ^ a2 ^ a3;
+ state[1] = LOOKUP_G2[a1 as usize] ^ LOOKUP_G3[a2 as usize] ^ a3 ^ a0;
+ state[2] = LOOKUP_G2[a2 as usize] ^ LOOKUP_G3[a3 as usize] ^ a0 ^ a1;
+ state[3] = LOOKUP_G2[a3 as usize] ^ LOOKUP_G3[a0 as usize] ^ a1 ^ a2;
+}
+
+fn mix_cols(state: &mut [u8]) {
+ mix_col(&mut state[0..4]);
+ mix_col(&mut state[4..8]);
+ mix_col(&mut state[8..12]);
+ mix_col(&mut state[12..16]);
+}
+
+fn mix_col_inv(state: &mut [u8]) {
+ let (a0, a1, a2, a3) = (state[0], state[1], state[2], state[3]);
+
+ state[0] = LOOKUP_G14[a0 as usize]
+ ^ LOOKUP_G9[a3 as usize]
+ ^ LOOKUP_G13[a2 as usize]
+ ^ LOOKUP_G11[a1 as usize];
+ state[1] = LOOKUP_G14[a1 as usize]
+ ^ LOOKUP_G9[a0 as usize]
+ ^ LOOKUP_G13[a3 as usize]
+ ^ LOOKUP_G11[a2 as usize];
+ state[2] = LOOKUP_G14[a2 as usize]
+ ^ LOOKUP_G9[a1 as usize]
+ ^ LOOKUP_G13[a0 as usize]
+ ^ LOOKUP_G11[a3 as usize];
+ state[3] = LOOKUP_G14[a3 as usize]
+ ^ LOOKUP_G9[a2 as usize]
+ ^ LOOKUP_G13[a1 as usize]
+ ^ LOOKUP_G11[a0 as usize];
+}
+
+fn mix_cols_inv(state: &mut [u8]) {
+ mix_col_inv(&mut state[0..4]);
+ mix_col_inv(&mut state[4..8]);
+ mix_col_inv(&mut state[8..12]);
+ mix_col_inv(&mut state[12..16]);
+}
+
+fn oqs_aes128_enc_c(plaintext: &[u8], schedule: &[u8], ciphertext: &mut [u8]) {
+ ciphertext.copy_from_slice(&plaintext[..16]);
+ xor_round_key(ciphertext, schedule, 0);
+
+ for i in 1..10 {
+ sub_bytes(ciphertext, 16);
+ shift_rows(ciphertext);
+ mix_cols(ciphertext);
+ xor_round_key(ciphertext, schedule, i);
+ }
+
+ sub_bytes(ciphertext, 16);
+ shift_rows(ciphertext);
+ xor_round_key(ciphertext, schedule, 10);
+}
+
+pub fn oqs_mhy128_enc_c(plaintext: &[u8], schedule: &[u8], ciphertext: &mut [u8]) {
+ ciphertext.copy_from_slice(&plaintext[..16]);
+ xor_round_key(ciphertext, schedule, 0);
+
+ for i in 1..10 {
+ sub_bytes_inv(ciphertext, 16);
+ shift_rows_inv(ciphertext);
+ mix_cols_inv(ciphertext);
+ xor_round_key(ciphertext, schedule, i);
+ }
+
+ sub_bytes_inv(ciphertext, 16);
+ shift_rows_inv(ciphertext);
+ xor_round_key(ciphertext, schedule, 10);
+}
+
+fn oqs_aes128_dec_c(ciphertext: &[u8], schedule: &[u8], plaintext: &mut [u8]) {
+ plaintext.copy_from_slice(&ciphertext[..16]);
+ xor_round_key(plaintext, schedule, 10);
+ shift_rows_inv(plaintext);
+ sub_bytes_inv(plaintext, 16);
+
+ for i in 0..9 {
+ xor_round_key(plaintext, schedule, 9 - i);
+ mix_cols_inv(plaintext);
+ shift_rows_inv(plaintext);
+ sub_bytes_inv(plaintext, 16);
+ }
+
+ xor_round_key(plaintext, schedule, 0);
+}
+
+fn oqs_mhy128_dec_c(ciphertext: &[u8], schedule: &[u8], plaintext: &mut [u8]) {
+ plaintext.copy_from_slice(&ciphertext[..16]);
+ xor_round_key(plaintext, schedule, 10);
+ shift_rows(plaintext);
+ sub_bytes(plaintext, 16);
+
+ for i in 0..9 {
+ xor_round_key(plaintext, schedule, 9 - i);
+ mix_cols(plaintext);
+ shift_rows(plaintext);
+ sub_bytes(plaintext, 16);
+ }
+
+ xor_round_key(plaintext, schedule, 0);
+}
diff --git a/framework/common/src/crypto/magic.rs b/framework/common/src/crypto/magic.rs
new file mode 100644
index 0000000..23b0a31
--- /dev/null
+++ b/framework/common/src/crypto/magic.rs
@@ -0,0 +1,534 @@
+pub const SHIFT_ROWS_TABLE: [u8; 16] = [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11];
+pub const SHIFT_ROWS_TABLE_INV: [u8; 16] = [0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3];
+pub const LOOKUP_RCON: [u8; 16] = [
+ 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,
+];
+pub const LOOKUP_SBOX: [u8; 256] = [
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16,
+];
+pub const LOOKUP_SBOX_INV: [u8; 256] = [
+ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
+ 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
+ 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
+ 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
+ 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
+ 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
+ 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
+ 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
+ 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
+ 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
+ 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
+];
+pub const LOOKUP_G2: [u8; 256] = [
+ 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
+ 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
+ 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
+ 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
+ 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
+ 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
+ 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
+ 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
+ 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
+ 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
+ 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
+ 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
+ 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
+ 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
+ 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
+ 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5,
+];
+pub const LOOKUP_G3: [u8; 256] = [
+ 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
+ 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
+ 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
+ 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41,
+ 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1,
+ 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
+ 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1,
+ 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81,
+ 0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
+ 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba,
+ 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea,
+ 0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
+ 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a,
+ 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a,
+ 0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
+ 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a,
+];
+pub const LOOKUP_G9: [u8; 256] = [
+ 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
+ 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
+ 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
+ 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc,
+ 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01,
+ 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
+ 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a,
+ 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa,
+ 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
+ 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b,
+ 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0,
+ 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
+ 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
+ 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
+ 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
+ 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46,
+];
+pub const LOOKUP_G11: [u8; 256] = [
+ 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
+ 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
+ 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
+ 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2,
+ 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f,
+ 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
+ 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4,
+ 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54,
+ 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
+ 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e,
+ 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5,
+ 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
+ 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
+ 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
+ 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
+ 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3,
+];
+pub const LOOKUP_G13: [u8; 256] = [
+ 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
+ 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
+ 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
+ 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20,
+ 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26,
+ 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
+ 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d,
+ 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d,
+ 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
+ 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41,
+ 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a,
+ 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
+ 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
+ 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
+ 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
+ 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97,
+];
+pub const LOOKUP_G14: [u8; 256] = [
+ 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
+ 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
+ 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
+ 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61,
+ 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7,
+ 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
+ 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c,
+ 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc,
+ 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
+ 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb,
+ 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0,
+ 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
+ 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
+ 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
+ 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
+ 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d,
+];
+pub const KEY_XORPAD_TABLE: [u8; 16] = [
+ 0xA2, 0x25, 0x25, 0x99, 0xB7, 0x62, 0xF4, 0x39, 0x28, 0xE1, 0xB7, 0x73, 0x91, 0x05, 0x25, 0x87,
+];
+pub const AES_XORPAD_TABLE: [[u8; 2816]; 2] = [
+ [
+ 0xDE, 0xAD, 0xCA, 0xFE, 0xFA, 0xCE, 0xB0, 0x0C, 0xDE, 0xAD, 0xCA, 0xFE, 0xFA, 0xCE, 0xB0,
+ 0x0C, 0x3A, 0xE6, 0xDE, 0x9C, 0x81, 0xBA, 0x7C, 0xC6, 0x12, 0x1B, 0xAF, 0xD2, 0x8A, 0xBA,
+ 0xF5, 0xE6, 0x41, 0xDF, 0x71, 0xBA, 0x37, 0x11, 0x50, 0xF3, 0xF3, 0x62, 0x6E, 0x04, 0xF1,
+ 0x14, 0xFC, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x7B, 0x52, 0x7C,
+ 0x19, 0x98, 0x35, 0x96, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0,
+ 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6,
+ 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81,
+ 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A,
+ 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A,
+ 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB,
+ 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A,
+ 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1,
+ 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA,
+ 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE,
+ 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0,
+ 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B,
+ 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC,
+ 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71,
+ 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25,
+ 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E,
+ 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76,
+ 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18,
+ 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E,
+ 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69,
+ 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47,
+ 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62,
+ 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8,
+ 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0,
+ 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3,
+ 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E,
+ 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48,
+ 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33,
+ 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78,
+ 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B,
+ 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E,
+ 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71,
+ 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53,
+ 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA,
+ 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18,
+ 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5,
+ 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0,
+ 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82,
+ 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73,
+ 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2,
+ 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE,
+ 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7,
+ 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F,
+ 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C,
+ 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2,
+ 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E,
+ 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF,
+ 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC,
+ 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E,
+ 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00,
+ 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8,
+ 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92,
+ 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35,
+ 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93,
+ 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67,
+ 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C,
+ 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC,
+ 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6,
+ 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2,
+ 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56,
+ 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37,
+ 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A,
+ 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA,
+ 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9,
+ 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0,
+ 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6,
+ 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81,
+ 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A,
+ 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A,
+ 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB,
+ 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A,
+ 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1,
+ 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA,
+ 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE,
+ 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0,
+ 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B,
+ 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC,
+ 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71,
+ 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25,
+ 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E,
+ 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76,
+ 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18,
+ 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E,
+ 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69,
+ 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47,
+ 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62,
+ 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8,
+ 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0,
+ 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3,
+ 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E,
+ 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48,
+ 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33,
+ 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78,
+ 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B,
+ 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E,
+ 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71,
+ 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53,
+ 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA,
+ 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18,
+ 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5,
+ 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0,
+ 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82,
+ 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73,
+ 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2,
+ 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE,
+ 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7,
+ 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F,
+ 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C,
+ 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2,
+ 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E,
+ 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF,
+ 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC,
+ 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E,
+ 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00,
+ 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8,
+ 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92,
+ 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35,
+ 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93,
+ 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67,
+ 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C,
+ 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC,
+ 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6,
+ 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2,
+ 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56,
+ 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37,
+ 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A,
+ 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA,
+ 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9,
+ 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0,
+ 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6,
+ 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81,
+ 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A,
+ 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A,
+ 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB,
+ 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A,
+ 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1,
+ 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA,
+ 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE,
+ 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0,
+ 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B,
+ 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC,
+ 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71,
+ 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25,
+ 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E,
+ 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76,
+ 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18,
+ 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E,
+ 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69,
+ 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47,
+ 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62,
+ 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8,
+ 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0,
+ 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3,
+ 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E,
+ 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48,
+ 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33,
+ 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78,
+ 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B,
+ 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E,
+ 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71,
+ 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53,
+ 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA,
+ 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18,
+ 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5,
+ 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0,
+ 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82,
+ 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73,
+ 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2,
+ 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE,
+ 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7,
+ 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F,
+ 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C,
+ 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2,
+ 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E,
+ 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF,
+ 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92, 0x18, 0x18, 0xE0, 0xAC,
+ 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35, 0xB5, 0x0E, 0xB6, 0x3E,
+ 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93, 0xD0, 0x69, 0x81, 0x00,
+ 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67, 0x82, 0x47, 0x6A, 0xB8,
+ 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56, 0x1F, 0x8E, 0xFA, 0x3C, 0x73, 0x62, 0x6A, 0x92,
+ 0x18, 0x18, 0xE0, 0xAC, 0x9E, 0x71, 0x37, 0x3C, 0x48, 0xDE, 0xDC, 0xA2, 0xE8, 0xBB, 0x35,
+ 0xB5, 0x0E, 0xB6, 0x3E, 0x71, 0x25, 0x8A, 0xF2, 0x33, 0xE0, 0xD6, 0xBE, 0xF0, 0x3A, 0x93,
+ 0xD0, 0x69, 0x81, 0x00, 0x53, 0x7E, 0xCA, 0x4E, 0x78, 0x4B, 0xA2, 0xF7, 0xB3, 0xF1, 0x67,
+ 0x82, 0x47, 0x6A, 0xB8, 0xAA, 0x76, 0xF9, 0xDF, 0x3B, 0xEC, 0x56,
+ ],
+ [
+ 0xC3, 0x20, 0x20, 0xB4, 0xAF, 0x0E, 0x82, 0x2E, 0xEF, 0x29, 0xFE, 0x75, 0x1D, 0xDB, 0x4B,
+ 0x86, 0x86, 0x23, 0x28, 0x72, 0xA3, 0xF4, 0x1B, 0x4F, 0x5F, 0x0E, 0x02, 0xB1, 0xAC, 0x0D,
+ 0xE6, 0x4F, 0x8B, 0x0B, 0x3F, 0xF3, 0x5F, 0xB5, 0x09, 0x7E, 0x3B, 0xE9, 0x93, 0x29, 0x55,
+ 0xE1, 0xB4, 0x9B, 0xCC, 0xCE, 0x37, 0xFC, 0xAB, 0x6B, 0xA4, 0x05, 0xE6, 0xC7, 0x45, 0x34,
+ 0xC0, 0xFF, 0x7C, 0x24, 0x89, 0x36, 0xBF, 0x17, 0xAB, 0x91, 0xCA, 0x49, 0xF2, 0x74, 0x80,
+ 0xB6, 0x90, 0x60, 0xFF, 0xD2, 0xA9, 0xE5, 0xC9, 0x64, 0xBC, 0x38, 0x40, 0x98, 0xB3, 0xBA,
+ 0x8F, 0x8B, 0xBA, 0x9D, 0xF3, 0xCF, 0x57, 0xBA, 0xAC, 0x18, 0xE7, 0xD3, 0x03, 0x01, 0x48,
+ 0x29, 0x41, 0xF6, 0x2F, 0x89, 0xD4, 0x9F, 0xD7, 0xD3, 0x05, 0x71, 0x63, 0x30, 0x4E, 0xBB,
+ 0xF7, 0xB0, 0x99, 0xFF, 0x43, 0xDA, 0x87, 0xCA, 0xA7, 0x48, 0x92, 0x9E, 0x76, 0xA6, 0xEE,
+ 0x48, 0x1C, 0x96, 0x28, 0x8E, 0x54, 0x30, 0xD6, 0xA5, 0xD3, 0x22, 0xA2, 0x30, 0xCB, 0x6A,
+ 0x85, 0x26, 0x69, 0xE1, 0x7C, 0xEC, 0xDC, 0xD4, 0x89, 0x2A, 0xB8, 0xAE, 0xDF, 0x12, 0x6E,
+ 0x39, 0x8A, 0x9B, 0x48, 0x61, 0xF9, 0x4B, 0x34, 0xD0, 0xF1, 0x60, 0x87, 0xBA, 0x88, 0x86,
+ 0x68, 0x8C, 0xBE, 0xC1, 0x9C, 0xAE, 0x30, 0xBC, 0xE6, 0x62, 0xFF, 0xEB, 0xBB, 0x88, 0x7C,
+ 0xD2, 0xBB, 0x57, 0xB4, 0x02, 0x82, 0x06, 0x72, 0xD2, 0x94, 0x60, 0x86, 0x4A, 0x29, 0xF0,
+ 0xEA, 0xD3, 0x88, 0x92, 0xF1, 0x22, 0xD1, 0x5C, 0x88, 0x65, 0xE6, 0xFB, 0xEE, 0x28, 0x79,
+ 0x86, 0x68, 0x7D, 0xA6, 0x5A, 0xBF, 0xBD, 0x7D, 0x15, 0xEF, 0x05, 0xF6, 0xF9, 0xE0, 0x11,
+ 0xD6, 0x30, 0x94, 0xF2, 0x6C, 0x3D, 0x0A, 0xDB, 0xC5, 0x0E, 0xDC, 0xF2, 0xFD, 0x1F, 0x61,
+ 0x91, 0x5D, 0x80, 0x69, 0xA3, 0xDB, 0x35, 0x98, 0x4E, 0x4A, 0xC1, 0x49, 0x76, 0xAB, 0xC0,
+ 0x67, 0x36, 0x3F, 0xA4, 0xC6, 0xE8, 0xCA, 0x25, 0x44, 0x63, 0x23, 0xB5, 0xC8, 0xBB, 0x3A,
+ 0xAC, 0xA1, 0x09, 0xC3, 0x10, 0x57, 0xA5, 0x5B, 0x3B, 0x33, 0x21, 0xCD, 0x3C, 0x88, 0xAE,
+ 0x1E, 0x8F, 0xC1, 0xD6, 0xFB, 0x94, 0x61, 0x38, 0xAB, 0xF1, 0x9C, 0x06, 0xCB, 0x89, 0x58,
+ 0x9A, 0xF4, 0xF4, 0x33, 0x80, 0x66, 0x13, 0xC0, 0xFD, 0xE2, 0x16, 0xE0, 0x89, 0x65, 0xE2,
+ 0xC1, 0xA6, 0xE3, 0x74, 0xD2, 0x5F, 0xA0, 0x76, 0xAD, 0xF5, 0x6B, 0x4F, 0xE0, 0xF7, 0x52,
+ 0xB0, 0xB1, 0x48, 0xDD, 0xEE, 0xB6, 0x01, 0x9A, 0x90, 0x91, 0x18, 0xEC, 0xCB, 0xCB, 0xAD,
+ 0x04, 0xB6, 0x73, 0xCF, 0x7F, 0xF3, 0xAC, 0xBE, 0xEC, 0x91, 0x44, 0x56, 0x81, 0xB8, 0x74,
+ 0xAE, 0x28, 0x5D, 0xC7, 0x5C, 0xAB, 0x8B, 0x56, 0x21, 0x32, 0x91, 0xB9, 0x9E, 0x70, 0xF6,
+ 0x9B, 0xAC, 0x50, 0x0B, 0x2E, 0x4B, 0x8B, 0xA2, 0xA5, 0x24, 0x5B, 0x91, 0xDF, 0x24, 0xA7,
+ 0xB0, 0x79, 0xA7, 0x16, 0x54, 0x44, 0x2E, 0xBC, 0x48, 0xCD, 0x87, 0xBA, 0xAF, 0xD4, 0xB9,
+ 0x1C, 0x0F, 0xAA, 0xFA, 0x3A, 0x3F, 0x3A, 0x3D, 0x68, 0x5A, 0xAE, 0xAC, 0xBA, 0xBE, 0xA3,
+ 0x92, 0x6E, 0x38, 0x8E, 0x33, 0x3E, 0x0A, 0xCC, 0xF6, 0xE3, 0x26, 0x57, 0xEC, 0x8E, 0x63,
+ 0x31, 0x27, 0xBA, 0x20, 0x4E, 0x7F, 0x34, 0xE5, 0x19, 0xFE, 0x7F, 0xA6, 0x97, 0x90, 0xD6,
+ 0x29, 0x1C, 0x3F, 0x8C, 0x3F, 0x81, 0x62, 0x3D, 0xF5, 0x00, 0xD4, 0xC5, 0xE2, 0xE1, 0x42,
+ 0x42, 0x8C, 0x65, 0x8F, 0x5A, 0x66, 0x59, 0xE1, 0xDD, 0xEC, 0xDC, 0x1B, 0x4E, 0x63, 0x82,
+ 0xFF, 0x02, 0x9D, 0x53, 0xDE, 0xBD, 0xB4, 0x80, 0xCF, 0x2B, 0xB7, 0xDE, 0x69, 0x5D, 0x1B,
+ 0xCA, 0xFB, 0xB3, 0xF9, 0xBE, 0xD0, 0xF5, 0x79, 0x86, 0x2F, 0x0E, 0xB6, 0xA9, 0x87, 0xF4,
+ 0x68, 0xC1, 0xBF, 0x4F, 0xB8, 0xA6, 0x2D, 0x03, 0xA9, 0x72, 0x04, 0xCA, 0x37, 0x6D, 0x1B,
+ 0x90, 0xDD, 0xBC, 0x52, 0xAE, 0xF3, 0xFF, 0x08, 0xDD, 0x4B, 0x46, 0xD0, 0xCD, 0xB1, 0x8A,
+ 0x35, 0x9A, 0x02, 0x64, 0x64, 0x2F, 0x57, 0xA5, 0x7B, 0x9A, 0x0D, 0x2B, 0x55, 0x11, 0x3C,
+ 0xC0, 0x35, 0x74, 0x69, 0xD9, 0x7B, 0x43, 0x1D, 0xAC, 0xB2, 0xC2, 0x8A, 0xBE, 0x22, 0x45,
+ 0x46, 0x76, 0xA9, 0x8A, 0x49, 0xB2, 0x5F, 0xC0, 0xB8, 0xBC, 0xCD, 0x27, 0xF8, 0x14, 0xB2,
+ 0xA9, 0x6D, 0x5A, 0x1F, 0xA4, 0x43, 0x1E, 0x0F, 0xDB, 0xA4, 0x9E, 0x2B, 0xCA, 0xFC, 0x98,
+ 0x7F, 0xF1, 0x18, 0x87, 0x5B, 0x11, 0x2D, 0xC5, 0xE4, 0x91, 0x20, 0xA9, 0x6A, 0x2D, 0xAC,
+ 0xA8, 0xFA, 0x94, 0x57, 0x7F, 0x30, 0x73, 0x08, 0xE8, 0x49, 0xF0, 0xC8, 0x63, 0xDA, 0x83,
+ 0x87, 0x2A, 0xC3, 0x31, 0x1A, 0xFC, 0xB7, 0x57, 0xB2, 0x40, 0x46, 0x09, 0x6D, 0x84, 0xB4,
+ 0x66, 0xF1, 0x13, 0x16, 0x3A, 0x3A, 0xFB, 0xC6, 0x6E, 0xB0, 0x71, 0xB8, 0x23, 0x74, 0x22,
+ 0x89, 0xFC, 0xBE, 0x34, 0xB3, 0x17, 0xB6, 0xC9, 0x68, 0x53, 0x64, 0x47, 0xAF, 0xCA, 0x1D,
+ 0x5F, 0xB4, 0x74, 0xA3, 0x77, 0xB5, 0xFB, 0x77, 0xD9, 0x69, 0x2B, 0x3A, 0xAA, 0xAE, 0xE4,
+ 0x03, 0x81, 0x6B, 0x3A, 0x35, 0x9C, 0x45, 0x50, 0x9C, 0x76, 0xCE, 0xE3, 0x7F, 0x64, 0x4B,
+ 0x9F, 0x83, 0x7B, 0x72, 0xBC, 0x02, 0x1E, 0x94, 0x99, 0xC1, 0x1C, 0x45, 0x19, 0x1D, 0x56,
+ 0x74, 0x73, 0xE7, 0xFC, 0x58, 0x72, 0x2D, 0xE3, 0x50, 0xA4, 0x21, 0xBE, 0x81, 0xDF, 0x80,
+ 0xDA, 0x40, 0xDB, 0x79, 0x67, 0x0E, 0x94, 0xA3, 0x05, 0xDD, 0xF7, 0x14, 0x28, 0xD6, 0xC4,
+ 0x2B, 0xF3, 0xCF, 0x36, 0x08, 0x84, 0xF3, 0xC8, 0x8C, 0xAD, 0xCE, 0x7F, 0x7C, 0x0F, 0xC6,
+ 0xFE, 0x05, 0x54, 0x4B, 0x17, 0xA1, 0x83, 0x65, 0x97, 0x29, 0x01, 0x70, 0xC1, 0x16, 0xAE,
+ 0x69, 0xA4, 0x90, 0xB9, 0xBE, 0x17, 0x05, 0x50, 0xF1, 0x65, 0x07, 0x23, 0x76, 0x64, 0x84,
+ 0x2D, 0x40, 0x34, 0xFD, 0xDF, 0x62, 0x7E, 0x4C, 0x85, 0xD2, 0x6D, 0x17, 0xE1, 0x41, 0x12,
+ 0xC6, 0x3E, 0xD6, 0x14, 0xB8, 0x5F, 0x8F, 0x39, 0x65, 0xC2, 0x62, 0x21, 0x06, 0x5C, 0xC9,
+ 0xB8, 0x99, 0xA5, 0x00, 0xE3, 0x9C, 0x73, 0xAB, 0xB9, 0x76, 0x12, 0xD2, 0xFA, 0x7F, 0x7D,
+ 0x64, 0x63, 0x9E, 0x26, 0xAA, 0x89, 0x85, 0x3A, 0xC9, 0x94, 0x04, 0x97, 0xEC, 0xFD, 0xC5,
+ 0xA3, 0xB1, 0x7D, 0xD6, 0x07, 0x9C, 0x47, 0x30, 0x9C, 0x64, 0x97, 0x0E, 0xC6, 0xFC, 0x0B,
+ 0xFF, 0xA7, 0xF9, 0x46, 0x5B, 0x2B, 0xDB, 0x9E, 0x1C, 0x85, 0x3A, 0x75, 0xD6, 0xEB, 0x9B,
+ 0x15, 0x36, 0xD7, 0x1A, 0x3D, 0xFC, 0x0B, 0x75, 0x08, 0x5E, 0x32, 0x23, 0xE0, 0xA5, 0xAD,
+ 0x0F, 0x45, 0xB3, 0x78, 0x20, 0x22, 0x24, 0x64, 0x0C, 0xCF, 0xD6, 0x3C, 0xA4, 0x48, 0xC7,
+ 0xB3, 0x6E, 0x02, 0xE2, 0x0A, 0xAB, 0x92, 0xFC, 0x40, 0x7D, 0xF5, 0x02, 0x61, 0x56, 0xAB,
+ 0xC5, 0x68, 0x38, 0xE0, 0x01, 0xF1, 0x94, 0x73, 0xC6, 0xFE, 0xC2, 0x34, 0x67, 0x8E, 0xB1,
+ 0x73, 0x72, 0xD4, 0x3B, 0xFD, 0x1F, 0xE2, 0xA8, 0xED, 0x20, 0x14, 0x0A, 0x60, 0x6D, 0xD1,
+ 0x85, 0x14, 0x05, 0x54, 0x96, 0xC6, 0x3D, 0xB5, 0x1B, 0x37, 0x56, 0x24, 0xF7, 0x7C, 0x0F,
+ 0x55, 0xC6, 0xAA, 0x7E, 0x33, 0x2D, 0xE1, 0x97, 0x74, 0xA8, 0xDC, 0xC5, 0xA1, 0xEC, 0x8C,
+ 0xEF, 0x28, 0x3B, 0x49, 0x8B, 0x00, 0xED, 0x8B, 0xD9, 0xE9, 0x65, 0xD5, 0x05, 0x7B, 0x6D,
+ 0x20, 0xCA, 0x8F, 0x93, 0xB4, 0xCA, 0x36, 0x34, 0x8E, 0x16, 0x46, 0xCE, 0x02, 0x23, 0x43,
+ 0x22, 0xF6, 0xBD, 0x10, 0xCC, 0xD0, 0xA3, 0xB0, 0x42, 0xA5, 0xAF, 0x59, 0x72, 0x97, 0x0B,
+ 0xAE, 0x80, 0x8D, 0x19, 0xD0, 0x1D, 0x7D, 0x30, 0x4E, 0x5B, 0x46, 0xC0, 0xC2, 0x5C, 0x40,
+ 0xFC, 0xF3, 0xEF, 0x05, 0x84, 0xE8, 0x0C, 0x80, 0xD7, 0x37, 0xA1, 0x6F, 0xC1, 0x8C, 0xE0,
+ 0xBA, 0xA1, 0x88, 0x7B, 0xE7, 0x20, 0xBF, 0x18, 0x02, 0x40, 0x9F, 0x6F, 0x23, 0x11, 0x78,
+ 0x07, 0xD0, 0x92, 0x87, 0x2D, 0xB5, 0xE0, 0xE9, 0xE9, 0xAA, 0x32, 0x88, 0x57, 0xF8, 0x9B,
+ 0x01, 0x93, 0x2D, 0x07, 0x77, 0x68, 0x86, 0xAD, 0x06, 0xDE, 0x57, 0xA9, 0xA4, 0x96, 0x33,
+ 0x42, 0xF8, 0xFB, 0x23, 0x1F, 0x99, 0xB6, 0x62, 0x93, 0x6B, 0x12, 0xBE, 0x72, 0x9F, 0x96,
+ 0x1A, 0xDA, 0x05, 0x60, 0xF1, 0xD5, 0x40, 0x9F, 0x75, 0xF3, 0x1D, 0xBE, 0xD7, 0x87, 0x5D,
+ 0x3A, 0x55, 0xF0, 0x9B, 0xBF, 0xE8, 0xB9, 0x72, 0xC2, 0xDD, 0x4D, 0x27, 0xF6, 0xA9, 0x37,
+ 0x96, 0x7E, 0x6E, 0x6E, 0x64, 0x37, 0x4E, 0x2E, 0x3F, 0xFD, 0x3C, 0xF4, 0xA6, 0xF5, 0x22,
+ 0xA8, 0x43, 0xF4, 0x13, 0x21, 0xB5, 0x4E, 0xA8, 0x6D, 0x50, 0x0A, 0xB3, 0xFE, 0x9F, 0x5C,
+ 0xE7, 0x1A, 0xCF, 0x36, 0x42, 0x30, 0x1C, 0x88, 0x7F, 0x29, 0xE9, 0xCD, 0x96, 0xF2, 0x6A,
+ 0x52, 0xB2, 0x25, 0x87, 0x63, 0xDC, 0xFC, 0x72, 0xE4, 0xF8, 0x5E, 0xB1, 0x97, 0xB4, 0x1E,
+ 0x08, 0x90, 0x68, 0x10, 0x73, 0x7F, 0x94, 0x61, 0x48, 0x49, 0x36, 0x9B, 0x7D, 0xBD, 0xDF,
+ 0xCD, 0xB1, 0xA3, 0x7D, 0xFB, 0xDD, 0x97, 0x8A, 0x0D, 0xFC, 0x9A, 0xB8, 0xA9, 0x33, 0xB5,
+ 0x4E, 0x50, 0x3D, 0x60, 0x90, 0xEB, 0xAB, 0xB8, 0xCB, 0x6E, 0x32, 0xE4, 0x6B, 0xB0, 0x3F,
+ 0x57, 0xB8, 0xA4, 0x6A, 0x7C, 0x00, 0x66, 0x39, 0xB1, 0x22, 0xE2, 0x04, 0x26, 0xA1, 0x5A,
+ 0x17, 0xAA, 0x80, 0xB6, 0xC0, 0xF6, 0xCF, 0x7A, 0xF8, 0x60, 0xE9, 0x52, 0xB8, 0x0E, 0x08,
+ 0xC0, 0xD5, 0x1F, 0xAB, 0x61, 0x62, 0x1A, 0x83, 0xD1, 0x92, 0xE1, 0x4D, 0x6D, 0xDF, 0x27,
+ 0x0E, 0xFF, 0xF9, 0xA3, 0x36, 0xFF, 0x73, 0xEF, 0x1D, 0xAB, 0xAC, 0xBF, 0xA7, 0xB3, 0x29,
+ 0xD2, 0xB2, 0x37, 0xAB, 0x08, 0x7D, 0xB6, 0x7E, 0x0D, 0x25, 0xAA, 0x49, 0x29, 0x9F, 0x61,
+ 0x52, 0x44, 0x19, 0x1C, 0x51, 0x95, 0x74, 0xB9, 0x3D, 0xDD, 0x95, 0x2C, 0x4F, 0x30, 0x56,
+ 0xC9, 0xEF, 0x3D, 0x87, 0x90, 0x1E, 0xF8, 0x69, 0xFF, 0x37, 0x06, 0x27, 0xDB, 0x72, 0x82,
+ 0x2C, 0xDE, 0xB8, 0x39, 0x0B, 0x78, 0xB1, 0x1F, 0x37, 0x54, 0xBF, 0x21, 0x32, 0x87, 0xB4,
+ 0xD9, 0x49, 0x2D, 0x29, 0x19, 0x43, 0x01, 0xD4, 0xC0, 0xA3, 0xFF, 0x09, 0x6F, 0x69, 0xC8,
+ 0x5D, 0x35, 0x1D, 0x10, 0x09, 0x91, 0xB6, 0x12, 0xEC, 0x04, 0xA6, 0x61, 0xEF, 0x73, 0xC7,
+ 0x4C, 0x04, 0x8E, 0x3E, 0xAE, 0xD7, 0xC2, 0x84, 0x48, 0xAB, 0x99, 0x96, 0x75, 0xD8, 0xAD,
+ 0xA7, 0x5B, 0xDE, 0x72, 0x44, 0x96, 0xC5, 0xB3, 0xEB, 0x8E, 0xED, 0xD6, 0x69, 0x81, 0xE6,
+ 0x07, 0x3A, 0x15, 0x0D, 0x66, 0x5F, 0x36, 0xA9, 0xAB, 0x53, 0x82, 0x47, 0x98, 0x27, 0xF2,
+ 0x16, 0x95, 0x05, 0x0B, 0xAE, 0xF1, 0x04, 0x92, 0x80, 0x20, 0xA4, 0x9B, 0x43, 0x66, 0x70,
+ 0x7F, 0x45, 0x0B, 0x4B, 0x85, 0x95, 0x10, 0x09, 0xC8, 0xD9, 0xF9, 0x5D, 0x40, 0x6D, 0x07,
+ 0x69, 0x18, 0xF3, 0xD6, 0x98, 0x61, 0x25, 0x8E, 0xA1, 0xE2, 0x24, 0xBD, 0xF0, 0xFA, 0x89,
+ 0xD8, 0x68, 0xB2, 0x03, 0x81, 0x63, 0xF9, 0x42, 0xD4, 0x1A, 0xD9, 0x4D, 0xCD, 0x30, 0x36,
+ 0x2D, 0xB1, 0x63, 0xFC, 0xA3, 0x2B, 0xA7, 0x07, 0x50, 0xBC, 0x67, 0xAB, 0x7D, 0x33, 0x1D,
+ 0xEC, 0x62, 0xFE, 0xD2, 0x65, 0xAA, 0xBA, 0x37, 0xC9, 0x7F, 0x67, 0x26, 0x9D, 0x8A, 0x8B,
+ 0x63, 0x0B, 0xE0, 0x30, 0x65, 0x07, 0x8C, 0xF3, 0xD1, 0xCF, 0x0D, 0xB4, 0x1E, 0xF3, 0x29,
+ 0xBE, 0x43, 0x1F, 0x34, 0x1E, 0x52, 0x02, 0xA7, 0x8D, 0x30, 0x2E, 0x3E, 0x39, 0x00, 0xB6,
+ 0x7B, 0x5C, 0x29, 0x39, 0xC0, 0x0D, 0xAB, 0xA0, 0x6D, 0x77, 0x3C, 0xB2, 0x18, 0x42, 0x57,
+ 0x63, 0xDA, 0x9E, 0xF5, 0xE0, 0x42, 0x43, 0xF6, 0x50, 0xFD, 0x71, 0x9B, 0x30, 0xE0, 0x92,
+ 0x8B, 0xD1, 0xE1, 0xC4, 0x96, 0xC9, 0xF5, 0x14, 0xB6, 0xF7, 0xA5, 0x10, 0x77, 0xF4, 0xF9,
+ 0xAC, 0xDC, 0x45, 0xE1, 0x3C, 0xD6, 0x0B, 0xA5, 0xE2, 0x58, 0x01, 0x19, 0x39, 0x14, 0x68,
+ 0x96, 0xC0, 0xCE, 0xA9, 0xDE, 0x84, 0x22, 0x59, 0x87, 0x70, 0xFD, 0x8A, 0x71, 0x64, 0x79,
+ 0x16, 0x37, 0x80, 0x83, 0xFD, 0x9C, 0x73, 0xE6, 0x9C, 0x8B, 0xCD, 0xC0, 0x69, 0x66, 0x90,
+ 0x45, 0x0A, 0xC9, 0x81, 0x4A, 0xDA, 0x26, 0xDA, 0xA1, 0x70, 0x03, 0x6C, 0x36, 0x9D, 0xAD,
+ 0xD7, 0xE2, 0x1F, 0x27, 0xBE, 0xBB, 0xEC, 0x63, 0xD9, 0xC2, 0x2A, 0x56, 0x4D, 0x63, 0xCD,
+ 0x92, 0xEE, 0xAF, 0xCA, 0xD0, 0x11, 0x35, 0x2F, 0x1D, 0xF1, 0x96, 0xD1, 0xAA, 0xDC, 0xF6,
+ 0x14, 0x3F, 0xA0, 0xEE, 0x90, 0x83, 0x9F, 0x42, 0x40, 0xE6, 0x2C, 0x10, 0x23, 0x00, 0x23,
+ 0x18, 0x8C, 0xA1, 0x26, 0x4B, 0x22, 0xE1, 0x36, 0x07, 0x55, 0xCB, 0xC3, 0xD2, 0xDD, 0x12,
+ 0x58, 0x19, 0x75, 0x03, 0xC6, 0xD8, 0x2E, 0xCE, 0x87, 0x1C, 0xC3, 0x15, 0x44, 0x2A, 0x30,
+ 0x00, 0x52, 0x39, 0x31, 0x13, 0xF4, 0x25, 0x75, 0x74, 0x15, 0x6C, 0xC5, 0xC1, 0xD2, 0x33,
+ 0x75, 0xC2, 0x41, 0x22, 0x28, 0x95, 0xDF, 0x97, 0x6C, 0x31, 0xF8, 0x35, 0xA6, 0x54, 0x29,
+ 0x5C, 0xF4, 0x20, 0x97, 0x69, 0xE5, 0x46, 0xFF, 0x34, 0x24, 0x73, 0x12, 0xB8, 0x61, 0x25,
+ 0x46, 0xB3, 0x8F, 0xBA, 0x3C, 0xFA, 0x06, 0xFF, 0x3F, 0x66, 0x9D, 0x22, 0x55, 0x46, 0x2F,
+ 0xFF, 0x44, 0xDB, 0x25, 0x29, 0xE0, 0x16, 0x6E, 0xEC, 0x87, 0x97, 0x92, 0x37, 0x23, 0x0E,
+ 0x52, 0x4E, 0xBB, 0x10, 0xBB, 0x1C, 0x73, 0x75, 0xD1, 0x31, 0xC3, 0xAD, 0xFE, 0xB8, 0x12,
+ 0x50, 0xA0, 0x69, 0x91, 0x36, 0xEA, 0x5F, 0x0D, 0xEC, 0x1A, 0x23, 0x4A, 0x7D, 0x94, 0x84,
+ 0xC8, 0x4A, 0x58, 0x6A, 0xA1, 0xA3, 0x75, 0xCA, 0x85, 0xE7, 0x96, 0x91, 0x07, 0x05, 0x3A,
+ 0x57, 0x61, 0x6A, 0x6F, 0xF1, 0xEF, 0xF7, 0xB3, 0xB1, 0x09, 0xB8, 0x91, 0xA8, 0xF9, 0x57,
+ 0xB8, 0x63, 0x95, 0xFF, 0xB4, 0x1C, 0x96, 0xE7, 0xE5, 0xEC, 0x06, 0x3A, 0x11, 0xE6, 0x81,
+ 0xAB, 0x23, 0xE4, 0x5E, 0x5A, 0xB6, 0x6B, 0x69, 0x62, 0x6F, 0x9D, 0xC4, 0x08, 0x6F, 0xA6,
+ 0xBE, 0x4D, 0x09, 0x12, 0x77, 0xCA, 0xDD, 0xB5, 0x2D, 0x66, 0xCB, 0x4F, 0x4F, 0x11, 0xF2,
+ 0x3A, 0x1A, 0x97, 0x1F, 0xFE, 0x50, 0x2F, 0x19, 0x32, 0x05, 0x45, 0xA0, 0x50, 0x60, 0x58,
+ 0x40, 0x40, 0x3D, 0xF6, 0xC3, 0x6F, 0x07, 0xC8, 0x26, 0x26, 0x0E, 0x42, 0x22, 0x96, 0x6D,
+ 0xFE, 0x95, 0x53, 0x70, 0xDC, 0x92, 0x12, 0x63, 0xFD, 0xA3, 0x7D, 0x6E, 0x44, 0xCD, 0x11,
+ 0x2C, 0x51, 0x6F, 0xBC, 0x50, 0xFC, 0x1C, 0xC8, 0x3A, 0x28, 0xF5, 0x39, 0xF8, 0x8C, 0x60,
+ 0x5D, 0xA5, 0x4A, 0xFA, 0xAB, 0x04, 0x7F, 0x34, 0x91, 0x53, 0xE7, 0x6C, 0x56, 0xC6, 0x14,
+ 0xE4, 0xCC, 0xE4, 0xBB, 0x6E, 0x47, 0x7A, 0x46, 0x6B, 0xE2, 0x88, 0xA0, 0xBD, 0xBD, 0xCC,
+ 0x51, 0xF3, 0x37, 0x4B, 0xB3, 0xA0, 0x19, 0x92, 0x48, 0x35, 0xBB, 0xBC, 0x79, 0x78, 0xFF,
+ 0x49, 0xC1, 0x2B, 0x93, 0xDF, 0x75, 0xA7, 0xFB, 0x94, 0x89, 0xAF, 0x50, 0x5E, 0x2D, 0xE1,
+ 0x78, 0x60, 0x0C, 0xDF, 0xF8, 0x7C, 0xFD, 0xCD, 0x2D, 0xE2, 0xFF, 0xD3, 0xA3, 0x4A, 0x48,
+ 0x0D, 0x40, 0x8F, 0x03, 0x4F, 0x2C, 0xBD, 0xFA, 0x2E, 0x16, 0xC3, 0xD4, 0xFD, 0x0B, 0xB3,
+ 0xBD, 0x4F, 0x30, 0xAD, 0xD0, 0xAE, 0xCA, 0x77, 0x9D, 0xDD, 0x3D, 0xA3, 0x66, 0xD0, 0xC1,
+ 0x6D, 0xCC, 0x3B, 0x56, 0x81, 0x5D, 0x80, 0x07, 0xD8, 0x84, 0x46, 0x71, 0x40, 0x57, 0xB3,
+ 0x44, 0x85, 0x63, 0x4E, 0x17, 0x2C, 0xB0, 0x21, 0x98, 0x43, 0x42, 0x04, 0x18, 0x84, 0xFA,
+ 0xB1, 0xD7, 0xC5, 0x5C, 0xCA, 0x25, 0x8B, 0x1A, 0x7A, 0x50, 0x60, 0x68, 0x4A, 0x30, 0xEA,
+ 0xE6, 0xDE, 0x19, 0xBB, 0x9F, 0x47, 0xEF, 0xDB, 0xC5, 0x81, 0x72, 0xF0, 0x8D, 0xBA, 0x74,
+ 0x3A, 0xD1, 0xD5, 0xC6, 0xD1, 0xE0, 0xAE, 0x28, 0x2A, 0x65, 0xE5, 0x0B, 0x09, 0xFA, 0xEA,
+ 0x5B, 0xA6, 0xDB, 0x38, 0xD8, 0x67, 0xC0, 0xBE, 0xA1, 0x12, 0x1C, 0x03, 0xB1, 0x81, 0xB8,
+ 0x95, 0xDD, 0x78, 0xF8, 0x16, 0x6E, 0xAB, 0xBB, 0xAA, 0x33, 0x54, 0x0E, 0x39, 0x83, 0x24,
+ 0x17, 0xB3, 0x0B, 0x3C, 0xA1, 0x62, 0x21, 0xB2, 0xA0, 0xF8, 0x49, 0xAB, 0x8B, 0x80, 0xC6,
+ 0x3D, 0xF1, 0x2E, 0x18, 0x44, 0x74, 0x5F, 0x98, 0x92, 0x33, 0xFB, 0xB2, 0x52, 0x6B, 0x97,
+ 0xE9, 0x48, 0x12, 0x91, 0x32, 0x50, 0x21, 0x75, 0x74, 0x69, 0x88, 0x54, 0xC6, 0xF3, 0xC9,
+ 0x37, 0x3C, 0xB3, 0x89, 0xAB, 0x33, 0x1F, 0x79, 0x57, 0xF7, 0xE4, 0xB5, 0x87, 0x0C, 0xA4,
+ 0x99, 0x48, 0x89, 0x63, 0x5F, 0x72, 0xA1, 0xBC, 0xFF, 0xFE, 0xF8, 0xB3, 0xF1, 0x00, 0xE4,
+ 0xD4, 0x01, 0x9B, 0xB7, 0x2E, 0x4F, 0xA0, 0x90, 0xE4, 0x9B, 0x6A, 0xA8, 0xBA, 0xE1, 0xD3,
+ 0xD5, 0xBC, 0xEB, 0xC5, 0xB2, 0x89, 0xB4, 0xE9, 0x4D, 0x3F, 0x4C, 0xFA, 0x8C, 0xCB, 0xCD,
+ 0x22, 0x08, 0xB8, 0xC7, 0xB3, 0xA3, 0xED, 0x6B, 0xAC, 0xF3, 0x2D, 0x98, 0x70, 0x41, 0x47,
+ 0x85, 0xE8, 0x6E, 0x31, 0x0A, 0xC2, 0x3E, 0x51, 0x39, 0x55, 0xF8, 0x4A, 0xE9, 0x48, 0x64,
+ 0x01, 0xDB, 0x8D, 0xE3, 0xAF, 0xA4, 0xB9, 0xD8, 0x19, 0xCA, 0x86, 0xCA, 0xA1, 0x6C, 0x1C,
+ 0x12, 0x3D, 0xA1, 0x02, 0x23, 0x1D, 0x29, 0x5D, 0x94, 0x04, 0xC6, 0x51, 0x01, 0x40, 0x0B,
+ 0xB3, 0x69, 0x25, 0x45, 0xEF, 0x43, 0x81, 0x4F, 0x97, 0x57, 0x0D, 0xA1, 0xA5, 0xC9, 0x9D,
+ 0xE6, 0x56, 0xB9, 0x38, 0x93, 0xA1, 0x78, 0xC5, 0xBF, 0x75, 0xFE, 0x81, 0x6A, 0x35, 0x64,
+ 0x89, 0x64, 0x43, 0x75, 0xFD, 0x29, 0x63, 0xD1, 0x15, 0xAB, 0x43, 0x60, 0x65, 0xDC, 0x98,
+ 0xD5, 0xC7, 0x6E, 0xF9, 0xB2, 0x38, 0xFB, 0x6E, 0xB0, 0x34, 0x9C, 0xA3, 0x73, 0x61, 0xF5,
+ 0x51, 0xFF, 0x1F, 0xCE, 0xB0, 0x08, 0x83, 0x29, 0xB3, 0x82, 0x07, 0xFA, 0xC4, 0xE5, 0x21,
+ 0xD3, 0xA0, 0xD4, 0xC0, 0xF8, 0x1A, 0x65, 0x9B, 0x35, 0x7A, 0xE3, 0x32, 0xA5, 0x4D, 0x77,
+ 0x1F, 0x23, 0x19, 0xCC, 0xE1, 0xB3, 0x50, 0x0D, 0xE8, 0x2F, 0x8B, 0x18, 0x89, 0x61, 0xCB,
+ 0x22, 0xBA, 0xE0, 0x4A, 0xA2, 0x7F, 0xA5, 0x1B, 0x45, 0x59, 0x33, 0xC4, 0x73, 0xDF, 0x42,
+ 0xC6, 0x00, 0x11, 0x37, 0xF2, 0x3C, 0x1B, 0xF4, 0x26, 0xD1, 0x6D, 0x93, 0xC1, 0x94, 0xD2,
+ 0x60, 0xE5, 0xF3, 0x91, 0x66, 0x92, 0x3C, 0x65, 0x27, 0xC1, 0x83, 0x13, 0x76, 0x5A, 0x88,
+ 0xEC, 0xB2, 0x59, 0x95, 0x18, 0x81, 0x2E, 0x94, 0x96, 0x53, 0x17, 0xB6, 0xFD, 0x8C, 0xCC,
+ 0xBE, 0x8D, 0x36, 0xB3, 0xC8, 0xF2, 0xB2, 0xBE, 0x0F, 0x12, 0x99, 0xFF, 0xFA, 0xF9, 0x18,
+ 0xAB, 0x30, 0xFA, 0xB1, 0x5B, 0xF2, 0xEE, 0xCA, 0x6E, 0xA1, 0xD9, 0xCE, 0xCC, 0x60, 0xA0,
+ 0x4D, 0xFD, 0x7C, 0xAD, 0x4D, 0x50, 0xB6, 0x88, 0x0D, 0x88, 0x3B, 0x28, 0x7F, 0xA1, 0x28,
+ 0x41, 0x0A, 0x43, 0xAD, 0xCC, 0x08, 0x14, 0xF3, 0xF2, 0x43, 0xE7, 0xCF, 0x6A, 0x5C, 0x11,
+ 0xD0, 0x6D, 0x99, 0xC8, 0x4F, 0xB1, 0x14, 0x06, 0xBC, 0x68, 0x6D, 0xBE, 0xCD, 0xD7, 0x58,
+ 0xA2, 0x17, 0xF5, 0x9E, 0xFD, 0xDA, 0xFA, 0xBF, 0x73, 0x57, 0x4A, 0xF8, 0xF3, 0xA9, 0x94,
+ 0xB3, 0x01, 0xE9, 0xA3, 0xDA, 0xEA, 0xC1, 0x40, 0x33, 0xAA, 0x3F, 0xE6, 0x0D, 0x6A, 0xE2,
+ 0xF3, 0x74, 0xE8, 0x1B, 0x3C, 0x2B, 0x25, 0x44, 0x8E, 0x1C, 0x36, 0xBE, 0xA9, 0x27, 0x6E,
+ 0x6A, 0x48, 0x8E, 0x2F, 0x2C, 0x9D, 0x71, 0x66, 0x23, 0x7C, 0x7A, 0x74, 0x93, 0x46, 0x2D,
+ 0xCA, 0x6B, 0xC6, 0x33, 0xDA, 0x1E, 0x1E, 0x44, 0x07, 0xFD, 0x89, 0x5D, 0x30, 0x02, 0x4C,
+ 0xB1, 0x73, 0xC0, 0x91, 0xEB, 0xA5, 0x61, 0x89, 0xA4, 0x04, 0xFD, 0xD5, 0x5F, 0x54, 0x59,
+ 0x81, 0xC3, 0x2A, 0x13, 0x89, 0xDA, 0x68, 0xB6, 0x3A, 0x9C, 0x70, 0x6F, 0x48, 0xB4, 0x3C,
+ 0xF8, 0x9B, 0xF8, 0xF2, 0x59, 0xBF, 0xF4, 0x8D, 0x06, 0x58, 0xEA, 0xA2, 0xA6, 0xB4, 0x70,
+ 0x08, 0x80, 0x2B, 0x50, 0x13, 0x36, 0x79, 0x17, 0x0B, 0x94, 0x0E, 0x4D, 0xF5, 0xC8, 0x14,
+ 0xB9, 0x02, 0x7D, 0xEE, 0x6B, 0xBD, 0x10, 0xB4, 0x85, 0x74, 0xA1, 0xB9, 0x84, 0x67, 0xC6,
+ 0x2C, 0xDB, 0xDA, 0x55, 0x54, 0x16, 0xDA, 0x02, 0xB6, 0xDA, 0x2A, 0x9B, 0x51, 0xD6, 0xDC,
+ 0x87, 0x80, 0xC1, 0xB8, 0x6F, 0x0C, 0xEF, 0x4B, 0xD1, 0x1A, 0x9F, 0x36, 0x2E, 0x9C, 0x7E,
+ 0x5F, 0x17, 0xE2, 0xC1, 0x82, 0x0C, 0x42, 0x0D, 0x15, 0x18, 0xCA,
+ ],
+];
diff --git a/framework/common/src/crypto/mod.rs b/framework/common/src/crypto/mod.rs
new file mode 100644
index 0000000..e8e59e5
--- /dev/null
+++ b/framework/common/src/crypto/mod.rs
@@ -0,0 +1,87 @@
+#![allow(dead_code)]
+
+mod aes;
+mod magic;
+
+pub mod rsa_utils;
+
+use aes::*;
+use magic::*;
+use rand_mt::Mt64;
+
+pub struct MhyXorpad([u8; 4096]);
+
+impl MhyXorpad {
+ pub fn from_ec2b(ec2b: &[u8]) -> Self {
+ let ec2b_magic = u32::from_be_bytes(ec2b[0..4].try_into().unwrap());
+ assert_eq!(ec2b_magic, 0x45633262); // "Ec2b"
+
+ let key_len = u32::from_le_bytes(ec2b[4..8].try_into().unwrap());
+ assert_eq!(key_len, 16);
+
+ let data_len = u32::from_le_bytes(ec2b[24..28].try_into().unwrap());
+ assert_eq!(data_len, 2048);
+
+ let mut key: [u8; 16] = ec2b[8..24].try_into().unwrap();
+ let data = &ec2b[28..2048 + 28];
+
+ key_scramble(&mut key);
+ (0..16).for_each(|i| key[i] ^= KEY_XORPAD_TABLE[i]);
+
+ Self(get_decrypt_vector(&mut key, data))
+ }
+
+ pub fn from_seed(seed: u64) -> Self {
+ let mut mt = Mt64::new(seed);
+ let new_seed = mt.next_u64();
+ mt.reseed(new_seed);
+ mt.next_u64();
+
+ let mut buf = Vec::with_capacity(4096);
+ (0..512).for_each(|_| buf.extend(mt.next_u64().to_be_bytes()));
+
+ Self(buf.try_into().unwrap())
+ }
+
+ pub fn xor(&self, data: &mut [u8]) {
+ for (i, b) in data.iter_mut().enumerate() {
+ *b ^= self.0[i % 4096]
+ }
+ }
+}
+
+fn key_scramble(key: &mut [u8]) {
+ let mut round_keys = [0u8; 176];
+ for round in 0..11 {
+ for i in 0..16 {
+ for j in 0..16 {
+ let idx = (round << 8) + (i * 16) + j;
+ round_keys[round * 16 + i] ^= AES_XORPAD_TABLE[1][idx] ^ AES_XORPAD_TABLE[0][idx];
+ }
+ }
+ }
+
+ let mut chip = [0u8; 16];
+ oqs_mhy128_enc_c(key, &round_keys, &mut chip);
+
+ key.copy_from_slice(&chip);
+}
+
+fn get_decrypt_vector(key: &mut [u8], crypt: &[u8]) -> [u8; 4096] {
+ let mut output = Vec::with_capacity(4096);
+
+ let val = crypt
+ .chunks_exact(8)
+ .map(|chunk| u64::from_le_bytes(chunk.try_into().unwrap()))
+ .fold(0xFFFFFFFFFFFFFFFF, |val, i| val ^ i);
+
+ let key_qword_0 = u64::from_le_bytes(key[0..8].try_into().unwrap());
+ let key_qword_1 = u64::from_le_bytes(key[8..16].try_into().unwrap());
+
+ let mut mt = Mt64::new(key_qword_1 ^ 0xCEAC3B5A867837AC ^ val ^ key_qword_0);
+ for _ in 0..512 {
+ output.extend(mt.next_u64().to_le_bytes());
+ }
+
+ output.try_into().unwrap()
+}
diff --git a/framework/common/src/crypto/rsa_utils.rs b/framework/common/src/crypto/rsa_utils.rs
new file mode 100644
index 0000000..113530c
--- /dev/null
+++ b/framework/common/src/crypto/rsa_utils.rs
@@ -0,0 +1,44 @@
+use rsa::{
+ pkcs1v15::SigningKey,
+ sha2::Sha256,
+ signature::{RandomizedSigner, SignatureEncoding},
+ Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey,
+};
+
+const RSA_CHUNK_SIZE: usize = 245;
+
+#[must_use]
+pub fn public_encrypt(public_key: &str, data: &[u8]) -> Option> {
+ let public_key: RsaPublicKey =
+ rsa::pkcs8::DecodePublicKey::from_public_key_pem(public_key).ok()?;
+ let mut rng = rand::thread_rng();
+
+ let mut result: Vec = Vec::new();
+ for chunk in data.chunks(RSA_CHUNK_SIZE) {
+ let encrypted_chunk = public_key.encrypt(&mut rng, Pkcs1v15Encrypt, chunk).ok()?;
+ result.extend(encrypted_chunk);
+ }
+
+ Some(result)
+}
+
+#[must_use]
+pub fn private_sign(private_key: &str, data: &[u8]) -> Option> {
+ let private_key = rsa::pkcs1::DecodeRsaPrivateKey::from_pkcs1_pem(private_key).ok()?;
+ let signing_key = SigningKey::::new(private_key);
+
+ let mut rng = rand::thread_rng();
+ Some(
+ signing_key
+ .sign_with_rng(&mut rng, data)
+ .to_bytes()
+ .to_vec(),
+ )
+}
+
+#[must_use]
+pub fn private_decrypt(private_key: &str, cipher: &[u8]) -> Option> {
+ let private_key: RsaPrivateKey =
+ rsa::pkcs1::DecodeRsaPrivateKey::from_pkcs1_pem(private_key).ok()?;
+ private_key.decrypt(Pkcs1v15Encrypt, cipher).ok()
+}
diff --git a/framework/common/src/db/data.rs b/framework/common/src/db/data.rs
new file mode 100644
index 0000000..4298264
--- /dev/null
+++ b/framework/common/src/db/data.rs
@@ -0,0 +1,96 @@
+use serde::{Deserialize, Serialize};
+use sqlx::FromRow;
+
+#[derive(Debug, FromRow)]
+pub struct DbClientConfig {
+ pub id: i64,
+ pub version: String,
+ pub name: String,
+ pub stop_server_config_str: String,
+ pub client_custom_config_str: String,
+ pub dispatch_seed: String,
+}
+
+#[derive(Debug, FromRow)]
+pub struct DbRegionConfig {
+ pub id: i64,
+ pub name: String,
+ pub title: String,
+ pub region_type: String,
+ pub area_type: String,
+ pub dispatch_url: String,
+ pub sdk_env: i32,
+ pub client_secret_key: Vec,
+ pub rsa_key_list: String,
+}
+
+impl DbRegionConfig {
+ pub fn is_key_allowed(&self, key_id: u32) -> bool {
+ self.rsa_key_list
+ .split(',')
+ .map(|s| s.parse::())
+ .flatten()
+ .find(|i| key_id == *i)
+ .is_some()
+ }
+}
+
+#[derive(Debug, FromRow)]
+pub struct DbBindConfig {
+ pub id: i64,
+ pub client_version: String,
+ pub region_name: String,
+ pub channel_id: i32,
+}
+
+#[derive(Debug, FromRow)]
+pub struct DbChannelIdConfig {
+ pub id: i64,
+ pub channel_id: i32,
+ pub enable_login_pc: bool,
+}
+
+#[derive(Debug, FromRow)]
+pub struct DbClientRegionConfig {
+ pub id: i64,
+ pub client_version: String,
+ pub region_name: String,
+ pub client_region_custom_config: String,
+}
+
+#[derive(Debug, FromRow)]
+pub struct DbRsakeyConfig {
+ pub id: i64,
+ pub client_public_key: String,
+ pub server_private_key: String,
+}
+
+#[derive(Deserialize, Serialize)]
+pub struct PlayerExtJsonData {
+ pub reg_platform: u32,
+}
+
+#[derive(FromRow, Debug)]
+pub struct DbPlayerUidRow {
+ pub uid: i32,
+ pub account_uid: String,
+ pub ext: String,
+ pub tag: i32,
+}
+
+#[derive(FromRow, Debug)]
+pub struct DbPlayerDataRow {
+ pub uid: i32,
+ pub nickname: String,
+ pub level: i32,
+ pub exp: i32,
+ pub vip_point: i32,
+ pub json_data: String,
+ pub bin_data: Vec,
+ pub extra_bin_data: Option>,
+ pub tag_list: String,
+ pub is_delete: bool,
+ pub reserved_1: i32,
+ pub reserved_2: i32,
+ pub before_login_bin_data: Option>,
+}
diff --git a/framework/common/src/db/deploy_config_mgr.rs b/framework/common/src/db/deploy_config_mgr.rs
new file mode 100644
index 0000000..de470a1
--- /dev/null
+++ b/framework/common/src/db/deploy_config_mgr.rs
@@ -0,0 +1,88 @@
+use super::data::*;
+use sqlx::{query_as, PgPool, Postgres, QueryBuilder};
+
+#[derive(Clone)]
+pub struct DbDeployConfigMgr(PgPool);
+
+impl DbDeployConfigMgr {
+ pub fn new(pool: PgPool) -> Self {
+ Self(pool)
+ }
+
+ pub async fn find_db_client_config(&self, version: String) -> Option {
+ query_as("SELECT * from t_client_config where version = ($1)")
+ .bind(version)
+ .fetch_one(&self.0)
+ .await
+ .ok()
+ }
+
+ pub async fn enable_login_pc(&self, channel_id: i32) -> Option {
+ Some(
+ query_as::<_, DbChannelIdConfig>(
+ "SELECT * from t_channel_id_config where channel_id = ($1)",
+ )
+ .bind(channel_id)
+ .fetch_one(&self.0)
+ .await
+ .ok()?
+ .enable_login_pc,
+ )
+ }
+
+ pub async fn find_bind_region_config_vec(&self, client_version: String) -> Vec {
+ query_as("SELECT * from t_bind_config where client_version = ($1)")
+ .bind(client_version)
+ .fetch_all(&self.0)
+ .await
+ .unwrap_or_default()
+ }
+
+ pub async fn find_db_client_region_config(
+ &self,
+ client_version: String,
+ region_name: String,
+ ) -> Option {
+ query_as("SELECT * from t_client_region_config where client_version = ($1) and region_name = ($2)")
+ .bind(client_version)
+ .bind(region_name)
+ .fetch_one(&self.0)
+ .await
+ .ok()
+ }
+
+ pub async fn find_db_region_config(&self, name: String) -> Option {
+ query_as("SELECT * from t_region_config where name = ($1)")
+ .bind(name)
+ .fetch_one(&self.0)
+ .await
+ .ok()
+ }
+
+ pub async fn find_db_rsakey_config(&self, id: i64) -> Option {
+ query_as("SELECT * from t_rsakey_config where id = ($1)")
+ .bind(id)
+ .fetch_one(&self.0)
+ .await
+ .ok()
+ }
+
+ pub async fn fetch_region_list(&self, binds: &[DbBindConfig]) -> Vec {
+ let mut regions_query =
+ QueryBuilder::::new("SELECT * from t_region_config where name in (");
+
+ binds.iter().enumerate().for_each(|(i, b)| {
+ regions_query.push_bind(b.region_name.clone());
+ if binds.len() > i + 1 {
+ regions_query.push(",");
+ }
+ });
+
+ regions_query
+ .push(")")
+ .build_query_as()
+ .fetch_all(&self.0)
+ .await
+ .unwrap_or_default()
+ }
+}
diff --git a/framework/common/src/db/error.rs b/framework/common/src/db/error.rs
new file mode 100644
index 0000000..74b2bb5
--- /dev/null
+++ b/framework/common/src/db/error.rs
@@ -0,0 +1,9 @@
+use thiserror::Error;
+
+#[derive(Debug, Error)]
+pub enum DbError {
+ #[error("Failed to connect to database")]
+ ConnectionFailed,
+ #[error("Failed to run initial migration: {0}")]
+ StartupMigrationFailed(#[from] sqlx::migrate::MigrateError),
+}
diff --git a/framework/common/src/db/mod.rs b/framework/common/src/db/mod.rs
new file mode 100644
index 0000000..e619ece
--- /dev/null
+++ b/framework/common/src/db/mod.rs
@@ -0,0 +1,24 @@
+use sqlx::{migrate, PgPool};
+
+pub mod data;
+mod deploy_config_mgr;
+mod error;
+mod redis_mgr;
+mod sql_op_player_data;
+pub use deploy_config_mgr::DbDeployConfigMgr;
+pub use error::DbError;
+pub use redis_mgr::RedisMgr;
+pub use sql_op_player_data::SqlOpPlayerData;
+
+pub async fn connect(connection_string: &str) -> Result {
+ let pool = PgPool::connect(connection_string)
+ .await
+ .map_err(|_| DbError::ConnectionFailed)?;
+
+ migrate!("./migrations")
+ .run(&pool)
+ .await
+ .map_err(|err| DbError::from(err))?;
+
+ Ok(pool)
+}
diff --git a/framework/common/src/db/redis_mgr.rs b/framework/common/src/db/redis_mgr.rs
new file mode 100644
index 0000000..497ed70
--- /dev/null
+++ b/framework/common/src/db/redis_mgr.rs
@@ -0,0 +1,58 @@
+use std::time::Duration;
+
+use prost::Message;
+use proto::PlayerStatusRedisData;
+use redis::{aio::MultiplexedConnection, AsyncCommands, Client, RedisError};
+use tokio::sync::Mutex;
+
+pub struct RedisMgr(Mutex);
+
+impl RedisMgr {
+ pub async fn new(redis_conn_str: &str) -> Result {
+ let client = Client::open(redis_conn_str)?;
+ let connection = client
+ .get_multiplexed_tokio_connection_with_response_timeouts(
+ Duration::from_secs(1),
+ Duration::from_secs(1),
+ )
+ .await?;
+
+ Ok(Self(Mutex::new(connection)))
+ }
+
+ pub async fn get_player_status(&self, uid: u32) -> Option {
+ match self
+ .0
+ .lock()
+ .await
+ .get::>(format!("player:status:{uid}"))
+ .await
+ {
+ Ok(Some(proto_str)) => {
+ let data = rbase64::decode(&proto_str).ok()?;
+ Some(PlayerStatusRedisData::decode(&*data).ok()?)
+ }
+ Ok(None) => Some(PlayerStatusRedisData::default()),
+ Err(_) => None,
+ }
+ }
+
+ pub async fn compare_and_modify_player_status(
+ &self,
+ uid: u32,
+ _last_login_rand: u64,
+ new_data: PlayerStatusRedisData,
+ ) {
+ let data = new_data.encode_to_vec();
+
+ let _ = self
+ .0
+ .lock()
+ .await
+ .set::, Option>(
+ format!("player:status:{uid}"),
+ Some(rbase64::encode(&data)),
+ )
+ .await;
+ }
+}
diff --git a/framework/common/src/db/sql_op_player_data.rs b/framework/common/src/db/sql_op_player_data.rs
new file mode 100644
index 0000000..6aea7d6
--- /dev/null
+++ b/framework/common/src/db/sql_op_player_data.rs
@@ -0,0 +1,105 @@
+use std::error::Error;
+
+use super::data::*;
+use proto::PlayerData;
+use sqlx::{query, query_as, PgPool, Row};
+
+pub struct SqlOpPlayerData(PgPool);
+
+impl SqlOpPlayerData {
+ pub fn new(pool: PgPool) -> Self {
+ Self(pool)
+ }
+
+ pub async fn select_player_uid_by_account(
+ &self,
+ account_uid: String,
+ ) -> Result