diff --git a/dbcs/definitions/client/unused/AuctionHouse.xml b/dbcs/definitions/client/AuctionHouse.xml
similarity index 100%
rename from dbcs/definitions/client/unused/AuctionHouse.xml
rename to dbcs/definitions/client/AuctionHouse.xml
diff --git a/dbcs/definitions/client/unused/CreatureFamily.xml b/dbcs/definitions/client/CreatureFamily.xml
similarity index 100%
rename from dbcs/definitions/client/unused/CreatureFamily.xml
rename to dbcs/definitions/client/CreatureFamily.xml
diff --git a/dbcs/definitions/client/unused/Emotes.xml b/dbcs/definitions/client/Emotes.xml
similarity index 98%
rename from dbcs/definitions/client/unused/Emotes.xml
rename to dbcs/definitions/client/Emotes.xml
index 0b63237a4..c65750f4d 100644
--- a/dbcs/definitions/client/unused/Emotes.xml
+++ b/dbcs/definitions/client/Emotes.xml
@@ -24,7 +24,7 @@
-
+
int32
EmoteFlags
@@ -34,7 +34,7 @@
-
+
EmoteFlags
diff --git a/dbcs/definitions/client/unused/ItemSet.xml b/dbcs/definitions/client/ItemSet.xml
similarity index 100%
rename from dbcs/definitions/client/unused/ItemSet.xml
rename to dbcs/definitions/client/ItemSet.xml
diff --git a/dbcs/definitions/client/unused/Languages.xml b/dbcs/definitions/client/Languages.xml
similarity index 100%
rename from dbcs/definitions/client/unused/Languages.xml
rename to dbcs/definitions/client/Languages.xml
diff --git a/dbcs/definitions/client/unused/PageTextMaterial.xml b/dbcs/definitions/client/PageTextMaterial.xml
similarity index 100%
rename from dbcs/definitions/client/unused/PageTextMaterial.xml
rename to dbcs/definitions/client/PageTextMaterial.xml
diff --git a/schemas/world/message.schema.json b/schemas/world/message.schema.json
index b7149ed9d..c345b720e 100644
--- a/schemas/world/message.schema.json
+++ b/schemas/world/message.schema.json
@@ -59,7 +59,8 @@
"items": {
"oneOf": [
{ "$ref": "#/$defs/field" },
- { "$ref": "#/$defs/group" }
+ { "$ref": "#/$defs/group" },
+ { "$ref": "#/$defs/if_chain" }
]
},
"minItems": 1,
@@ -74,6 +75,11 @@
"type": {
"$ref": "#/$defs/field_type"
},
+ "as": {
+ "type": "string",
+ "description": "Semantic type exposed in the generated struct. The on-wire representation is still `type`; reads/writes cast between the two. Must be a declared enum/flags whose underlying matches `type` OR a declared struct whose layout is equivalent.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
+ },
"when": {
"$ref": "#/$defs/condition"
},
@@ -86,15 +92,17 @@
},
"array": {
"type": "object",
- "description": "Marks the field as either a fixed-size array (size) or a dynamic vector sized by a prior field (count_field)",
+ "description": "Marks the field as a fixed-size array (size), a dynamic vector sized by a prior field (count_field), or an unbounded vector read until the stream is drained (until_end).",
"properties": {
"size": { "type": "integer", "minimum": 1 },
- "count_field": { "type": "string" }
+ "count_field": { "type": "string" },
+ "until_end": { "const": true }
},
"additionalProperties": false,
"oneOf": [
- { "required": ["size"], "not": { "required": ["count_field"] } },
- { "required": ["count_field"], "not": { "required": ["size"] } }
+ { "required": ["size"], "not": { "anyOf": [ { "required": ["count_field"] }, { "required": ["until_end"] } ] } },
+ { "required": ["count_field"], "not": { "anyOf": [ { "required": ["size"] }, { "required": ["until_end"] } ] } },
+ { "required": ["until_end"], "not": { "anyOf": [ { "required": ["size"] }, { "required": ["count_field"] } ] } }
]
},
"group": {
@@ -114,6 +122,29 @@
"required": ["type", "fields"],
"additionalProperties": false
},
+ "if_chain": {
+ "type": "object",
+ "description": "if / else-if / else cascade. Branches are evaluated in order; the first `when` that matches selects a body. The optional `else` body runs when none of the branches matched. Semantically identical to a sequence of `group` entries, but the generator emits `if / else if / else` instead of independent `if` blocks (clearer code and one compile-time check per chain).",
+ "properties": {
+ "type": { "const": "if_chain" },
+ "branches": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "required": ["when", "fields"],
+ "additionalProperties": false,
+ "properties": {
+ "when": { "$ref": "#/$defs/condition" },
+ "fields": { "$ref": "#/$defs/fields" }
+ }
+ }
+ },
+ "else": { "$ref": "#/$defs/fields" }
+ },
+ "required": ["type", "branches"],
+ "additionalProperties": false
+ },
"value_ref": {
"type": "object",
"description": "Right-hand side of a comparison referring to another prior field (optionally negated with `!`)",
diff --git a/schemas/world/packets/cmsg_accept_trade.json b/schemas/world/packets/cmsg_accept_trade.json
index e0ee370e9..d8d838bdb 100644
--- a/schemas/world/packets/cmsg_accept_trade.json
+++ b/schemas/world/packets/cmsg_accept_trade.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "unknown", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_activatetaxi.json b/schemas/world/packets/cmsg_activatetaxi.json
index 6afa57483..3624310e5 100644
--- a/schemas/world/packets/cmsg_activatetaxi.json
+++ b/schemas/world/packets/cmsg_activatetaxi.json
@@ -3,8 +3,8 @@
"opcode": "cmsg_activatetaxi",
"direction": "client",
"fields": [
- { "name": "guid", "type": "uint64" },
- { "name": "source_node", "type": "uint32" },
+ { "name": "guid", "type": "uint64" },
+ { "name": "source_node", "type": "uint32" },
{ "name": "destination_node", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_activatetaxiexpress.json b/schemas/world/packets/cmsg_activatetaxiexpress.json
new file mode 100644
index 000000000..ab7eea784
--- /dev/null
+++ b/schemas/world/packets/cmsg_activatetaxiexpress.json
@@ -0,0 +1,11 @@
+{
+ "name": "Activatetaxiexpress",
+ "opcode": "cmsg_activatetaxiexpress",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "total_cost", "type": "uint32" },
+ { "name": "node_count", "type": "uint32" },
+ { "name": "nodes", "type": "uint32", "array": {"count_field": "node_count"} }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_add_friend.json b/schemas/world/packets/cmsg_add_friend.json
index 849f6e432..030fbb682 100644
--- a/schemas/world/packets/cmsg_add_friend.json
+++ b/schemas/world/packets/cmsg_add_friend.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_add_ignore.json b/schemas/world/packets/cmsg_add_ignore.json
index c04ef017c..b6025ee0c 100644
--- a/schemas/world/packets/cmsg_add_ignore.json
+++ b/schemas/world/packets/cmsg_add_ignore.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_area_spirit_healer_query.json b/schemas/world/packets/cmsg_area_spirit_healer_query.json
index cc8888691..91cd6baa6 100644
--- a/schemas/world/packets/cmsg_area_spirit_healer_query.json
+++ b/schemas/world/packets/cmsg_area_spirit_healer_query.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_area_spirit_healer_queue.json b/schemas/world/packets/cmsg_area_spirit_healer_queue.json
index f048f89c0..abf41a37e 100644
--- a/schemas/world/packets/cmsg_area_spirit_healer_queue.json
+++ b/schemas/world/packets/cmsg_area_spirit_healer_queue.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_areatrigger.json b/schemas/world/packets/cmsg_areatrigger.json
index 99a4bb5c1..c803fdfef 100644
--- a/schemas/world/packets/cmsg_areatrigger.json
+++ b/schemas/world/packets/cmsg_areatrigger.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "trigger_id", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_attackswing.json b/schemas/world/packets/cmsg_attackswing.json
index 8207bae4c..ce6635fbd 100644
--- a/schemas/world/packets/cmsg_attackswing.json
+++ b/schemas/world/packets/cmsg_attackswing.json
@@ -3,6 +3,6 @@
"opcode": "cmsg_attackswing",
"direction": "client",
"fields": [
- { "name": "guid", "type": "uint64" } // todo, guid
+ { "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_auction_hello_client.json b/schemas/world/packets/cmsg_auction_hello_client.json
new file mode 100644
index 000000000..fcde406eb
--- /dev/null
+++ b/schemas/world/packets/cmsg_auction_hello_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "AuctionHelloClient",
+ "opcode": "cmsg_auction_hello_client",
+ "direction": "client",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_auction_list_bidder_items.json b/schemas/world/packets/cmsg_auction_list_bidder_items.json
new file mode 100644
index 000000000..94569cade
--- /dev/null
+++ b/schemas/world/packets/cmsg_auction_list_bidder_items.json
@@ -0,0 +1,11 @@
+{
+ "name": "AuctionListBidderItems",
+ "opcode": "cmsg_auction_list_bidder_items",
+ "direction": "client",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "start_from_page", "type": "uint32" },
+ { "name": "amount_of_outbid_items", "type": "uint32" },
+ { "name": "outbid_item_ids", "type": "uint32", "array": {"count_field": "amount_of_outbid_items"} }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_auction_list_items.json b/schemas/world/packets/cmsg_auction_list_items.json
new file mode 100644
index 000000000..eebb384c5
--- /dev/null
+++ b/schemas/world/packets/cmsg_auction_list_items.json
@@ -0,0 +1,17 @@
+{
+ "name": "AuctionListItems",
+ "opcode": "cmsg_auction_list_items",
+ "direction": "client",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "list_start_item", "type": "uint32" },
+ { "name": "searched_name", "type": "CString" },
+ { "name": "minimum_level", "type": "uint8" },
+ { "name": "maximum_level", "type": "uint8" },
+ { "name": "auction_slot_id", "type": "uint32" },
+ { "name": "auction_main_category", "type": "uint32" },
+ { "name": "auction_sub_category", "type": "uint32" },
+ { "name": "auction_quality", "type": "uint32" },
+ { "name": "usable", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_auction_list_owner_items.json b/schemas/world/packets/cmsg_auction_list_owner_items.json
new file mode 100644
index 000000000..9648abe49
--- /dev/null
+++ b/schemas/world/packets/cmsg_auction_list_owner_items.json
@@ -0,0 +1,9 @@
+{
+ "name": "AuctionListOwnerItems",
+ "opcode": "cmsg_auction_list_owner_items",
+ "direction": "client",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "list_from", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_auction_place_bid.json b/schemas/world/packets/cmsg_auction_place_bid.json
new file mode 100644
index 000000000..772a8647d
--- /dev/null
+++ b/schemas/world/packets/cmsg_auction_place_bid.json
@@ -0,0 +1,10 @@
+{
+ "name": "AuctionPlaceBid",
+ "opcode": "cmsg_auction_place_bid",
+ "direction": "client",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "auction_id", "type": "uint32" },
+ { "name": "price", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_auction_remove_item.json b/schemas/world/packets/cmsg_auction_remove_item.json
index 79da36a0b..40df811b0 100644
--- a/schemas/world/packets/cmsg_auction_remove_item.json
+++ b/schemas/world/packets/cmsg_auction_remove_item.json
@@ -3,7 +3,7 @@
"opcode": "cmsg_auction_remove_item",
"direction": "client",
"fields": [
- { "name": "auctioneer", "type": "uint64" }, // todo, guid
+ { "name": "auctioneer", "type": "uint64" },
{ "name": "guid", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_auction_sell_item.json b/schemas/world/packets/cmsg_auction_sell_item.json
index 8601f9747..f3a160161 100644
--- a/schemas/world/packets/cmsg_auction_sell_item.json
+++ b/schemas/world/packets/cmsg_auction_sell_item.json
@@ -3,25 +3,10 @@
"opcode": "cmsg_auction_sell_item",
"direction": "client",
"fields": [
- {
- "name": "auctioneer",
- "type": "uint64" // guid, todo
- },
- {
- "name": "item",
- "type": "uint64" // guid, todo
- },
- {
- "name": "starting_bid",
- "type": "uint32"
- },
- {
- "name": "buyout",
- "type": "uint32"
- },
- {
- "name": "auction_duration_mins",
- "type": "uint32"
- }
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "item", "type": "uint64" },
+ { "name": "starting_bid", "type": "uint32" },
+ { "name": "buyout", "type": "uint32" },
+ { "name": "auction_duration_mins", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_autobank_item.json b/schemas/world/packets/cmsg_autobank_item.json
index 12a9247be..f3647717b 100644
--- a/schemas/world/packets/cmsg_autobank_item.json
+++ b/schemas/world/packets/cmsg_autobank_item.json
@@ -6,4 +6,4 @@
{ "name": "bag_index", "type": "uint8" },
{ "name": "slot_index", "type": "uint8" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_autoequip_item.json b/schemas/world/packets/cmsg_autoequip_item.json
new file mode 100644
index 000000000..620d6c05d
--- /dev/null
+++ b/schemas/world/packets/cmsg_autoequip_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "AutoequipItem",
+ "opcode": "cmsg_autoequip_item",
+ "direction": "client",
+ "fields": [
+ { "name": "source_bag", "type": "uint8" },
+ { "name": "source_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_autoequip_item_slot.json b/schemas/world/packets/cmsg_autoequip_item_slot.json
new file mode 100644
index 000000000..f17c4e9b9
--- /dev/null
+++ b/schemas/world/packets/cmsg_autoequip_item_slot.json
@@ -0,0 +1,9 @@
+{
+ "name": "AutoequipItemSlot",
+ "opcode": "cmsg_autoequip_item_slot",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "destination_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_autostore_bag_item.json b/schemas/world/packets/cmsg_autostore_bag_item.json
new file mode 100644
index 000000000..0870ce4bb
--- /dev/null
+++ b/schemas/world/packets/cmsg_autostore_bag_item.json
@@ -0,0 +1,10 @@
+{
+ "name": "AutostoreBagItem",
+ "opcode": "cmsg_autostore_bag_item",
+ "direction": "client",
+ "fields": [
+ { "name": "source_bag", "type": "uint8" },
+ { "name": "source_slot", "type": "uint8" },
+ { "name": "destination_bag", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_autostore_bank_item.json b/schemas/world/packets/cmsg_autostore_bank_item.json
new file mode 100644
index 000000000..3e65e8ef4
--- /dev/null
+++ b/schemas/world/packets/cmsg_autostore_bank_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "AutostoreBankItem",
+ "opcode": "cmsg_autostore_bank_item",
+ "direction": "client",
+ "fields": [
+ { "name": "bag_index", "type": "uint8" },
+ { "name": "slot_index", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_autostore_loot_item.json b/schemas/world/packets/cmsg_autostore_loot_item.json
new file mode 100644
index 000000000..871520a6d
--- /dev/null
+++ b/schemas/world/packets/cmsg_autostore_loot_item.json
@@ -0,0 +1,8 @@
+{
+ "name": "AutostoreLootItem",
+ "opcode": "cmsg_autostore_loot_item",
+ "direction": "client",
+ "fields": [
+ { "name": "item_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_banker_activate.json b/schemas/world/packets/cmsg_banker_activate.json
new file mode 100644
index 000000000..0071433a5
--- /dev/null
+++ b/schemas/world/packets/cmsg_banker_activate.json
@@ -0,0 +1,8 @@
+{
+ "name": "BankerActivate",
+ "opcode": "cmsg_banker_activate",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_battlefield_join.json b/schemas/world/packets/cmsg_battlefield_join.json
new file mode 100644
index 000000000..3203c9206
--- /dev/null
+++ b/schemas/world/packets/cmsg_battlefield_join.json
@@ -0,0 +1,8 @@
+{
+ "name": "BattlefieldJoin",
+ "opcode": "cmsg_battlefield_join",
+ "direction": "client",
+ "fields": [
+ { "name": "map", "type": "Map" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_battlefield_list.json b/schemas/world/packets/cmsg_battlefield_list.json
new file mode 100644
index 000000000..f99578f15
--- /dev/null
+++ b/schemas/world/packets/cmsg_battlefield_list.json
@@ -0,0 +1,8 @@
+{
+ "name": "BattlefieldList",
+ "opcode": "cmsg_battlefield_list",
+ "direction": "client",
+ "fields": [
+ { "name": "map", "type": "Map" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_battlefield_port.json b/schemas/world/packets/cmsg_battlefield_port.json
new file mode 100644
index 000000000..29ded88ac
--- /dev/null
+++ b/schemas/world/packets/cmsg_battlefield_port.json
@@ -0,0 +1,9 @@
+{
+ "name": "BattlefieldPort",
+ "opcode": "cmsg_battlefield_port",
+ "direction": "client",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "action", "type": "BattlefieldPortAction" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_battlefield_status.json b/schemas/world/packets/cmsg_battlefield_status.json
index c2f9234a0..501be1a8f 100644
--- a/schemas/world/packets/cmsg_battlefield_status.json
+++ b/schemas/world/packets/cmsg_battlefield_status.json
@@ -2,4 +2,4 @@
"name": "BattlefieldStatus",
"opcode": "cmsg_battlefield_status",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_battleground_player_positions_client.json b/schemas/world/packets/cmsg_battleground_player_positions_client.json
new file mode 100644
index 000000000..8727a7486
--- /dev/null
+++ b/schemas/world/packets/cmsg_battleground_player_positions_client.json
@@ -0,0 +1,5 @@
+{
+ "name": "BattlegroundPlayerPositionsClient",
+ "opcode": "cmsg_battleground_player_positions_client",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_battlemaster_hello.json b/schemas/world/packets/cmsg_battlemaster_hello.json
new file mode 100644
index 000000000..f8114f29a
--- /dev/null
+++ b/schemas/world/packets/cmsg_battlemaster_hello.json
@@ -0,0 +1,8 @@
+{
+ "name": "BattlemasterHello",
+ "opcode": "cmsg_battlemaster_hello",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_battlemaster_join.json b/schemas/world/packets/cmsg_battlemaster_join.json
new file mode 100644
index 000000000..5fec79b84
--- /dev/null
+++ b/schemas/world/packets/cmsg_battlemaster_join.json
@@ -0,0 +1,11 @@
+{
+ "name": "BattlemasterJoin",
+ "opcode": "cmsg_battlemaster_join",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "map", "type": "Map" },
+ { "name": "instance_id", "type": "uint32" },
+ { "name": "join_as_group", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_begin_trade.json b/schemas/world/packets/cmsg_begin_trade.json
new file mode 100644
index 000000000..ba85a76ff
--- /dev/null
+++ b/schemas/world/packets/cmsg_begin_trade.json
@@ -0,0 +1,5 @@
+{
+ "name": "BeginTrade",
+ "opcode": "cmsg_begin_trade",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_binder_activate.json b/schemas/world/packets/cmsg_binder_activate.json
new file mode 100644
index 000000000..5d3af1c4b
--- /dev/null
+++ b/schemas/world/packets/cmsg_binder_activate.json
@@ -0,0 +1,8 @@
+{
+ "name": "BinderActivate",
+ "opcode": "cmsg_binder_activate",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_bootme.json b/schemas/world/packets/cmsg_bootme.json
new file mode 100644
index 000000000..36cd354e2
--- /dev/null
+++ b/schemas/world/packets/cmsg_bootme.json
@@ -0,0 +1,5 @@
+{
+ "name": "Bootme",
+ "opcode": "cmsg_bootme",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_bug.json b/schemas/world/packets/cmsg_bug.json
index fa5150cc2..23eb1ed1f 100644
--- a/schemas/world/packets/cmsg_bug.json
+++ b/schemas/world/packets/cmsg_bug.json
@@ -7,4 +7,4 @@
{ "name": "content", "type": "PrefixedString32" },
{ "name": "bug_type", "type": "PrefixedString32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_busy_trade.json b/schemas/world/packets/cmsg_busy_trade.json
new file mode 100644
index 000000000..ca8b29a5b
--- /dev/null
+++ b/schemas/world/packets/cmsg_busy_trade.json
@@ -0,0 +1,5 @@
+{
+ "name": "BusyTrade",
+ "opcode": "cmsg_busy_trade",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_buy_bank_slot.json b/schemas/world/packets/cmsg_buy_bank_slot.json
new file mode 100644
index 000000000..9cd777282
--- /dev/null
+++ b/schemas/world/packets/cmsg_buy_bank_slot.json
@@ -0,0 +1,8 @@
+{
+ "name": "BuyBankSlot",
+ "opcode": "cmsg_buy_bank_slot",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_buy_item.json b/schemas/world/packets/cmsg_buy_item.json
new file mode 100644
index 000000000..d9ff65002
--- /dev/null
+++ b/schemas/world/packets/cmsg_buy_item.json
@@ -0,0 +1,11 @@
+{
+ "name": "BuyItem",
+ "opcode": "cmsg_buy_item",
+ "direction": "client",
+ "fields": [
+ { "name": "vendor", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "amount", "type": "uint8" },
+ { "name": "unknown1", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_buy_item_in_slot.json b/schemas/world/packets/cmsg_buy_item_in_slot.json
new file mode 100644
index 000000000..ba5fd1a23
--- /dev/null
+++ b/schemas/world/packets/cmsg_buy_item_in_slot.json
@@ -0,0 +1,12 @@
+{
+ "name": "BuyItemInSlot",
+ "opcode": "cmsg_buy_item_in_slot",
+ "direction": "client",
+ "fields": [
+ { "name": "vendor", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "bag", "type": "uint64" },
+ { "name": "bag_slot", "type": "uint8" },
+ { "name": "amount", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_buy_stable_slot.json b/schemas/world/packets/cmsg_buy_stable_slot.json
new file mode 100644
index 000000000..90daa4cb0
--- /dev/null
+++ b/schemas/world/packets/cmsg_buy_stable_slot.json
@@ -0,0 +1,8 @@
+{
+ "name": "BuyStableSlot",
+ "opcode": "cmsg_buy_stable_slot",
+ "direction": "client",
+ "fields": [
+ { "name": "npc", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_buyback_item.json b/schemas/world/packets/cmsg_buyback_item.json
new file mode 100644
index 000000000..14442d166
--- /dev/null
+++ b/schemas/world/packets/cmsg_buyback_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "BuybackItem",
+ "opcode": "cmsg_buyback_item",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "slot", "type": "BuybackSlot" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_cancel_aura.json b/schemas/world/packets/cmsg_cancel_aura.json
index 758fe7f7a..7ffeb7638 100644
--- a/schemas/world/packets/cmsg_cancel_aura.json
+++ b/schemas/world/packets/cmsg_cancel_aura.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "spell_id", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cancel_auto_repeat_spell.json b/schemas/world/packets/cmsg_cancel_auto_repeat_spell.json
index 5e4f02767..59e4b1631 100644
--- a/schemas/world/packets/cmsg_cancel_auto_repeat_spell.json
+++ b/schemas/world/packets/cmsg_cancel_auto_repeat_spell.json
@@ -2,4 +2,4 @@
"name": "CancelAutoRepeatSpell",
"opcode": "cmsg_cancel_auto_repeat_spell",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cancel_cast.json b/schemas/world/packets/cmsg_cancel_cast.json
index 6eeb29b8a..3aaa12fe8 100644
--- a/schemas/world/packets/cmsg_cancel_cast.json
+++ b/schemas/world/packets/cmsg_cancel_cast.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "spell_id", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cancel_channelling.json b/schemas/world/packets/cmsg_cancel_channelling.json
index b2a6c640a..2a663b0a4 100644
--- a/schemas/world/packets/cmsg_cancel_channelling.json
+++ b/schemas/world/packets/cmsg_cancel_channelling.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "spell_id", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cancel_growth_aura.json b/schemas/world/packets/cmsg_cancel_growth_aura.json
index 0341fdf40..b6228e807 100644
--- a/schemas/world/packets/cmsg_cancel_growth_aura.json
+++ b/schemas/world/packets/cmsg_cancel_growth_aura.json
@@ -2,4 +2,4 @@
"name": "CancelGrowthAura",
"opcode": "cmsg_cancel_growthaura",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cancel_temp_enchantment.json b/schemas/world/packets/cmsg_cancel_temp_enchantment.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/cmsg_cancel_temp_enchantment.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/cmsg_cancel_trade.json b/schemas/world/packets/cmsg_cancel_trade.json
index 2123e5390..8c6f550b6 100644
--- a/schemas/world/packets/cmsg_cancel_trade.json
+++ b/schemas/world/packets/cmsg_cancel_trade.json
@@ -2,4 +2,4 @@
"name": "CancelTrade",
"opcode": "cmsg_cancel_trade",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_cast_spell.json b/schemas/world/packets/cmsg_cast_spell.json
new file mode 100644
index 000000000..3862514ba
--- /dev/null
+++ b/schemas/world/packets/cmsg_cast_spell.json
@@ -0,0 +1,9 @@
+{
+ "name": "CastSpell",
+ "opcode": "cmsg_cast_spell",
+ "direction": "client",
+ "fields": [
+ { "name": "spell", "type": "uint32" },
+ { "name": "targets", "type": "SpellCastTargets" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_channel_announcements.json b/schemas/world/packets/cmsg_channel_announcements.json
index 52533c313..ebf853d61 100644
--- a/schemas/world/packets/cmsg_channel_announcements.json
+++ b/schemas/world/packets/cmsg_channel_announcements.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "channel_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_ban.json b/schemas/world/packets/cmsg_channel_ban.json
index 3b0820335..199e6bb0a 100644
--- a/schemas/world/packets/cmsg_channel_ban.json
+++ b/schemas/world/packets/cmsg_channel_ban.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_invite.json b/schemas/world/packets/cmsg_channel_invite.json
index 2021f7d33..9f91387e7 100644
--- a/schemas/world/packets/cmsg_channel_invite.json
+++ b/schemas/world/packets/cmsg_channel_invite.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_kick.json b/schemas/world/packets/cmsg_channel_kick.json
index be177444c..8abe8941a 100644
--- a/schemas/world/packets/cmsg_channel_kick.json
+++ b/schemas/world/packets/cmsg_channel_kick.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_list.json b/schemas/world/packets/cmsg_channel_list.json
index f0139b8d2..cfad3dc39 100644
--- a/schemas/world/packets/cmsg_channel_list.json
+++ b/schemas/world/packets/cmsg_channel_list.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "channel_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_moderate.json b/schemas/world/packets/cmsg_channel_moderate.json
index 12505d0fa..394ff741a 100644
--- a/schemas/world/packets/cmsg_channel_moderate.json
+++ b/schemas/world/packets/cmsg_channel_moderate.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "channel_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_moderator.json b/schemas/world/packets/cmsg_channel_moderator.json
index b8aed1175..002463d49 100644
--- a/schemas/world/packets/cmsg_channel_moderator.json
+++ b/schemas/world/packets/cmsg_channel_moderator.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_mute.json b/schemas/world/packets/cmsg_channel_mute.json
index 8ec0dbb7a..99d22067d 100644
--- a/schemas/world/packets/cmsg_channel_mute.json
+++ b/schemas/world/packets/cmsg_channel_mute.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_owner.json b/schemas/world/packets/cmsg_channel_owner.json
index 0dcb11e19..9218ee7bb 100644
--- a/schemas/world/packets/cmsg_channel_owner.json
+++ b/schemas/world/packets/cmsg_channel_owner.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "channel_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_password.json b/schemas/world/packets/cmsg_channel_password.json
index fb3dc5cbf..4159cc2c4 100644
--- a/schemas/world/packets/cmsg_channel_password.json
+++ b/schemas/world/packets/cmsg_channel_password.json
@@ -3,7 +3,7 @@
"opcode": "cmsg_channel_password",
"direction": "client",
"fields": [
- { "name": "channel_name", "type": "CString" },
- { "name": "channel_password", "type": "CString" }
+ { "name": "channel_name", "type": "CString" },
+ { "name": "channel_password", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_set_owner.json b/schemas/world/packets/cmsg_channel_set_owner.json
index 371addd65..b691a4771 100644
--- a/schemas/world/packets/cmsg_channel_set_owner.json
+++ b/schemas/world/packets/cmsg_channel_set_owner.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "new_owner", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_unban.json b/schemas/world/packets/cmsg_channel_unban.json
index 898ec7c89..51d8be059 100644
--- a/schemas/world/packets/cmsg_channel_unban.json
+++ b/schemas/world/packets/cmsg_channel_unban.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_unmoderator.json b/schemas/world/packets/cmsg_channel_unmoderator.json
index c834c0ad7..eede8be48 100644
--- a/schemas/world/packets/cmsg_channel_unmoderator.json
+++ b/schemas/world/packets/cmsg_channel_unmoderator.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_channel_unmute.json b/schemas/world/packets/cmsg_channel_unmute.json
index ce9e70165..a29649a57 100644
--- a/schemas/world/packets/cmsg_channel_unmute.json
+++ b/schemas/world/packets/cmsg_channel_unmute.json
@@ -6,4 +6,4 @@
{ "name": "channel_name", "type": "CString" },
{ "name": "player_name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_char_create.json b/schemas/world/packets/cmsg_char_create.json
new file mode 100644
index 000000000..1803a5726
--- /dev/null
+++ b/schemas/world/packets/cmsg_char_create.json
@@ -0,0 +1,17 @@
+{
+ "name": "CharCreate",
+ "opcode": "cmsg_char_create",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" },
+ { "name": "race", "type": "Race" },
+ { "name": "class", "type": "Class" },
+ { "name": "gender", "type": "Gender" },
+ { "name": "skin_color", "type": "uint8" },
+ { "name": "face", "type": "uint8" },
+ { "name": "hair_style", "type": "uint8" },
+ { "name": "hair_color", "type": "uint8" },
+ { "name": "facial_hair", "type": "uint8" },
+ { "name": "outfit_id", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_char_delete.json b/schemas/world/packets/cmsg_char_delete.json
new file mode 100644
index 000000000..c41696cad
--- /dev/null
+++ b/schemas/world/packets/cmsg_char_delete.json
@@ -0,0 +1,8 @@
+{
+ "name": "CharDelete",
+ "opcode": "cmsg_char_delete",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_char_enum.json b/schemas/world/packets/cmsg_char_enum.json
new file mode 100644
index 000000000..2c5dd4f1e
--- /dev/null
+++ b/schemas/world/packets/cmsg_char_enum.json
@@ -0,0 +1,5 @@
+{
+ "name": "CharEnum",
+ "opcode": "cmsg_char_enum",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_char_rename.json b/schemas/world/packets/cmsg_char_rename.json
index 3cfa75109..cbb1fd8a9 100644
--- a/schemas/world/packets/cmsg_char_rename.json
+++ b/schemas/world/packets/cmsg_char_rename.json
@@ -3,7 +3,7 @@
"opcode": "cmsg_char_rename",
"direction": "client",
"fields": [
- { "name": "id", "type": "uint64" },
+ { "name": "id", "type": "uint64" },
{ "name": "name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_chat_ignored.json b/schemas/world/packets/cmsg_chat_ignored.json
new file mode 100644
index 000000000..63446da62
--- /dev/null
+++ b/schemas/world/packets/cmsg_chat_ignored.json
@@ -0,0 +1,8 @@
+{
+ "name": "ChatIgnored",
+ "opcode": "cmsg_chat_ignored",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_clear_trade_item.json b/schemas/world/packets/cmsg_clear_trade_item.json
new file mode 100644
index 000000000..7df217715
--- /dev/null
+++ b/schemas/world/packets/cmsg_clear_trade_item.json
@@ -0,0 +1,8 @@
+{
+ "name": "ClearTradeItem",
+ "opcode": "cmsg_clear_trade_item",
+ "direction": "client",
+ "fields": [
+ { "name": "trade_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_complete_cinematic.json b/schemas/world/packets/cmsg_complete_cinematic.json
index 49e0eff9d..d9142eb13 100644
--- a/schemas/world/packets/cmsg_complete_cinematic.json
+++ b/schemas/world/packets/cmsg_complete_cinematic.json
@@ -2,4 +2,4 @@
"name": "CompleteCinematic",
"opcode": "cmsg_complete_cinematic",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_corpse_query_client.json b/schemas/world/packets/cmsg_corpse_query_client.json
new file mode 100644
index 000000000..c43988dab
--- /dev/null
+++ b/schemas/world/packets/cmsg_corpse_query_client.json
@@ -0,0 +1,5 @@
+{
+ "name": "CorpseQueryClient",
+ "opcode": "cmsg_corpse_query_client",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_creature_query.json b/schemas/world/packets/cmsg_creature_query.json
new file mode 100644
index 000000000..e7c2b147e
--- /dev/null
+++ b/schemas/world/packets/cmsg_creature_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "CreatureQuery",
+ "opcode": "cmsg_creature_query",
+ "direction": "client",
+ "fields": [
+ { "name": "creature", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_dblookup.json b/schemas/world/packets/cmsg_dblookup.json
index 0fdf75cb0..32e6e8fe5 100644
--- a/schemas/world/packets/cmsg_dblookup.json
+++ b/schemas/world/packets/cmsg_dblookup.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "query", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_del_friend.json b/schemas/world/packets/cmsg_del_friend.json
index 2249fc6c8..861f508a5 100644
--- a/schemas/world/packets/cmsg_del_friend.json
+++ b/schemas/world/packets/cmsg_del_friend.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_del_ignore.json b/schemas/world/packets/cmsg_del_ignore.json
index fd4f99e2f..fd2e76d07 100644
--- a/schemas/world/packets/cmsg_del_ignore.json
+++ b/schemas/world/packets/cmsg_del_ignore.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_destroyitem.json b/schemas/world/packets/cmsg_destroyitem.json
index 30ca15603..57752203f 100644
--- a/schemas/world/packets/cmsg_destroyitem.json
+++ b/schemas/world/packets/cmsg_destroyitem.json
@@ -10,4 +10,4 @@
{ "name": "unknown2", "type": "uint8" },
{ "name": "unknown3", "type": "uint8" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_duel_accepted.json b/schemas/world/packets/cmsg_duel_accepted.json
new file mode 100644
index 000000000..72aca74d5
--- /dev/null
+++ b/schemas/world/packets/cmsg_duel_accepted.json
@@ -0,0 +1,8 @@
+{
+ "name": "DuelAccepted",
+ "opcode": "cmsg_duel_accepted",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_duel_cancelled.json b/schemas/world/packets/cmsg_duel_cancelled.json
new file mode 100644
index 000000000..31a597f72
--- /dev/null
+++ b/schemas/world/packets/cmsg_duel_cancelled.json
@@ -0,0 +1,8 @@
+{
+ "name": "DuelCancelled",
+ "opcode": "cmsg_duel_cancelled",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_emote.json b/schemas/world/packets/cmsg_emote.json
new file mode 100644
index 000000000..677cc218d
--- /dev/null
+++ b/schemas/world/packets/cmsg_emote.json
@@ -0,0 +1,8 @@
+{
+ "name": "Emote",
+ "opcode": "cmsg_emote",
+ "direction": "client",
+ "fields": [
+ { "name": "emote", "type": "Emote" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_far_sight.json b/schemas/world/packets/cmsg_far_sight.json
new file mode 100644
index 000000000..e56459dcd
--- /dev/null
+++ b/schemas/world/packets/cmsg_far_sight.json
@@ -0,0 +1,8 @@
+{
+ "name": "FarSight",
+ "opcode": "cmsg_far_sight",
+ "direction": "client",
+ "fields": [
+ { "name": "operation", "type": "FarSightOperation" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_move_root_ack.json b/schemas/world/packets/cmsg_force_move_root_ack.json
new file mode 100644
index 000000000..86510a1b6
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_move_root_ack.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceMoveRootAck",
+ "opcode": "cmsg_force_move_root_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_move_unroot_ack.json b/schemas/world/packets/cmsg_force_move_unroot_ack.json
new file mode 100644
index 000000000..558271361
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_move_unroot_ack.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceMoveUnrootAck",
+ "opcode": "cmsg_force_move_unroot_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_run_back_speed_change_ack.json b/schemas/world/packets/cmsg_force_run_back_speed_change_ack.json
new file mode 100644
index 000000000..45d93414f
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_run_back_speed_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceRunBackSpeedChangeAck",
+ "opcode": "cmsg_force_run_back_speed_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_run_speed_change_ack.json b/schemas/world/packets/cmsg_force_run_speed_change_ack.json
new file mode 100644
index 000000000..47233129c
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_run_speed_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceRunSpeedChangeAck",
+ "opcode": "cmsg_force_run_speed_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_swim_back_speed_change_ack.json b/schemas/world/packets/cmsg_force_swim_back_speed_change_ack.json
new file mode 100644
index 000000000..b06813d03
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_swim_back_speed_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceSwimBackSpeedChangeAck",
+ "opcode": "cmsg_force_swim_back_speed_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_swim_speed_change_ack.json b/schemas/world/packets/cmsg_force_swim_speed_change_ack.json
new file mode 100644
index 000000000..a4f87f057
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_swim_speed_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceSwimSpeedChangeAck",
+ "opcode": "cmsg_force_swim_speed_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_turn_rate_change_ack.json b/schemas/world/packets/cmsg_force_turn_rate_change_ack.json
new file mode 100644
index 000000000..4b51a5d06
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_turn_rate_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceTurnRateChangeAck",
+ "opcode": "cmsg_force_turn_rate_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_force_walk_speed_change_ack.json b/schemas/world/packets/cmsg_force_walk_speed_change_ack.json
new file mode 100644
index 000000000..9019d6cf2
--- /dev/null
+++ b/schemas/world/packets/cmsg_force_walk_speed_change_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "ForceWalkSpeedChangeAck",
+ "opcode": "cmsg_force_walk_speed_change_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "new_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_friend_list.json b/schemas/world/packets/cmsg_friend_list.json
new file mode 100644
index 000000000..80d7ce8d1
--- /dev/null
+++ b/schemas/world/packets/cmsg_friend_list.json
@@ -0,0 +1,5 @@
+{
+ "name": "FriendList",
+ "opcode": "cmsg_friend_list",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_gameobj_use.json b/schemas/world/packets/cmsg_gameobj_use.json
new file mode 100644
index 000000000..107a2be7c
--- /dev/null
+++ b/schemas/world/packets/cmsg_gameobj_use.json
@@ -0,0 +1,8 @@
+{
+ "name": "GameobjUse",
+ "opcode": "cmsg_gameobj_use",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_gameobject_query.json b/schemas/world/packets/cmsg_gameobject_query.json
new file mode 100644
index 000000000..71797416f
--- /dev/null
+++ b/schemas/world/packets/cmsg_gameobject_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "GameobjectQuery",
+ "opcode": "cmsg_gameobject_query",
+ "direction": "client",
+ "fields": [
+ { "name": "entry_id", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_get_mail_list.json b/schemas/world/packets/cmsg_get_mail_list.json
new file mode 100644
index 000000000..46013d711
--- /dev/null
+++ b/schemas/world/packets/cmsg_get_mail_list.json
@@ -0,0 +1,8 @@
+{
+ "name": "GetMailList",
+ "opcode": "cmsg_get_mail_list",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_gmsurvey_submit.json b/schemas/world/packets/cmsg_gmsurvey_submit.json
new file mode 100644
index 000000000..a85f5eb72
--- /dev/null
+++ b/schemas/world/packets/cmsg_gmsurvey_submit.json
@@ -0,0 +1,10 @@
+{
+ "name": "GmsurveySubmit",
+ "opcode": "cmsg_gmsurvey_submit",
+ "direction": "client",
+ "fields": [
+ { "name": "survey_id", "type": "uint32" },
+ { "name": "questions", "type": "GmSurveyQuestion", "array": {"size": 10} },
+ { "name": "answer_comment", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_gmticket_deleteticket.json b/schemas/world/packets/cmsg_gmticket_deleteticket.json
new file mode 100644
index 000000000..283072cbe
--- /dev/null
+++ b/schemas/world/packets/cmsg_gmticket_deleteticket.json
@@ -0,0 +1,5 @@
+{
+ "name": "GmticketDeleteticket",
+ "opcode": "cmsg_gmticket_deleteticket",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_gmticket_getticket.json b/schemas/world/packets/cmsg_gmticket_getticket.json
index 66d041430..96b933f24 100644
--- a/schemas/world/packets/cmsg_gmticket_getticket.json
+++ b/schemas/world/packets/cmsg_gmticket_getticket.json
@@ -2,4 +2,4 @@
"name": "GMTicketGetTicket",
"opcode": "cmsg_gmticket_getticket",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_gmticket_systemstatus.json b/schemas/world/packets/cmsg_gmticket_systemstatus.json
new file mode 100644
index 000000000..b6b66d0ec
--- /dev/null
+++ b/schemas/world/packets/cmsg_gmticket_systemstatus.json
@@ -0,0 +1,5 @@
+{
+ "name": "GmticketSystemstatus",
+ "opcode": "cmsg_gmticket_systemstatus",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_gmticket_updatetext.json b/schemas/world/packets/cmsg_gmticket_updatetext.json
new file mode 100644
index 000000000..9875e4397
--- /dev/null
+++ b/schemas/world/packets/cmsg_gmticket_updatetext.json
@@ -0,0 +1,9 @@
+{
+ "name": "GmticketUpdatetext",
+ "opcode": "cmsg_gmticket_updatetext",
+ "direction": "client",
+ "fields": [
+ { "name": "ticket_type", "type": "GmTicketType" },
+ { "name": "message", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_gossip_hello.json b/schemas/world/packets/cmsg_gossip_hello.json
new file mode 100644
index 000000000..28cff4aa2
--- /dev/null
+++ b/schemas/world/packets/cmsg_gossip_hello.json
@@ -0,0 +1,8 @@
+{
+ "name": "GossipHello",
+ "opcode": "cmsg_gossip_hello",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_gossip_select_option.json b/schemas/world/packets/cmsg_gossip_select_option.json
new file mode 100644
index 000000000..d807011d6
--- /dev/null
+++ b/schemas/world/packets/cmsg_gossip_select_option.json
@@ -0,0 +1,16 @@
+{
+ "name": "GossipSelectOption",
+ "opcode": "cmsg_gossip_select_option",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "gossip_list_id", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "code", "type": "CString" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_accept.json b/schemas/world/packets/cmsg_group_accept.json
new file mode 100644
index 000000000..e489b9c44
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_accept.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupAccept",
+ "opcode": "cmsg_group_accept",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_group_assistant_leader.json b/schemas/world/packets/cmsg_group_assistant_leader.json
new file mode 100644
index 000000000..d4ee35862
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_assistant_leader.json
@@ -0,0 +1,9 @@
+{
+ "name": "GroupAssistantLeader",
+ "opcode": "cmsg_group_assistant_leader",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "set_assistant", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_change_sub_group.json b/schemas/world/packets/cmsg_group_change_sub_group.json
new file mode 100644
index 000000000..09d3b79d3
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_change_sub_group.json
@@ -0,0 +1,9 @@
+{
+ "name": "GroupChangeSubGroup",
+ "opcode": "cmsg_group_change_sub_group",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" },
+ { "name": "group_number", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_decline.json b/schemas/world/packets/cmsg_group_decline.json
new file mode 100644
index 000000000..9c3f6ca4d
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_decline.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupDecline",
+ "opcode": "cmsg_group_decline",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_group_disband.json b/schemas/world/packets/cmsg_group_disband.json
new file mode 100644
index 000000000..b978995f0
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_disband.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupDisband",
+ "opcode": "cmsg_group_disband",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_group_invite.json b/schemas/world/packets/cmsg_group_invite.json
new file mode 100644
index 000000000..1c3647d07
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_invite.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupInvite",
+ "opcode": "cmsg_group_invite",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_raid_convert.json b/schemas/world/packets/cmsg_group_raid_convert.json
new file mode 100644
index 000000000..a4c685698
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_raid_convert.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupRaidConvert",
+ "opcode": "cmsg_group_raid_convert",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_group_set_leader.json b/schemas/world/packets/cmsg_group_set_leader.json
new file mode 100644
index 000000000..3a7b586bb
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_set_leader.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupSetLeader",
+ "opcode": "cmsg_group_set_leader",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_swap_sub_group.json b/schemas/world/packets/cmsg_group_swap_sub_group.json
new file mode 100644
index 000000000..88e64f344
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_swap_sub_group.json
@@ -0,0 +1,9 @@
+{
+ "name": "GroupSwapSubGroup",
+ "opcode": "cmsg_group_swap_sub_group",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" },
+ { "name": "swap_with_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_uninvite.json b/schemas/world/packets/cmsg_group_uninvite.json
new file mode 100644
index 000000000..72e476c9b
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_uninvite.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupUninvite",
+ "opcode": "cmsg_group_uninvite",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_group_uninvite_guid.json b/schemas/world/packets/cmsg_group_uninvite_guid.json
new file mode 100644
index 000000000..271a9af4f
--- /dev/null
+++ b/schemas/world/packets/cmsg_group_uninvite_guid.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupUninviteGuid",
+ "opcode": "cmsg_group_uninvite_guid",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_accept.json b/schemas/world/packets/cmsg_guild_accept.json
new file mode 100644
index 000000000..8482ed67b
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_accept.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildAccept",
+ "opcode": "cmsg_guild_accept",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_add_rank.json b/schemas/world/packets/cmsg_guild_add_rank.json
new file mode 100644
index 000000000..1983fe5df
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_add_rank.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildAddRank",
+ "opcode": "cmsg_guild_add_rank",
+ "direction": "client",
+ "fields": [
+ { "name": "rank_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_create.json b/schemas/world/packets/cmsg_guild_create.json
new file mode 100644
index 000000000..2e41d43b4
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_create.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildCreate",
+ "opcode": "cmsg_guild_create",
+ "direction": "client",
+ "fields": [
+ { "name": "guild_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_decline.json b/schemas/world/packets/cmsg_guild_decline.json
new file mode 100644
index 000000000..b236cb0f0
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_decline.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildDecline",
+ "opcode": "cmsg_guild_decline",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_del_rank.json b/schemas/world/packets/cmsg_guild_del_rank.json
new file mode 100644
index 000000000..9b2f4fb64
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_del_rank.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildDelRank",
+ "opcode": "cmsg_guild_del_rank",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_demote.json b/schemas/world/packets/cmsg_guild_demote.json
new file mode 100644
index 000000000..ca3250a33
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_demote.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildDemote",
+ "opcode": "cmsg_guild_demote",
+ "direction": "client",
+ "fields": [
+ { "name": "player_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_disband.json b/schemas/world/packets/cmsg_guild_disband.json
new file mode 100644
index 000000000..94974970a
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_disband.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildDisband",
+ "opcode": "cmsg_guild_disband",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_info.json b/schemas/world/packets/cmsg_guild_info.json
new file mode 100644
index 000000000..0174823ae
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_info.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildInfo",
+ "opcode": "cmsg_guild_info",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_info_text.json b/schemas/world/packets/cmsg_guild_info_text.json
new file mode 100644
index 000000000..0d7ae21ff
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_info_text.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildInfoText",
+ "opcode": "cmsg_guild_info_text",
+ "direction": "client",
+ "fields": [
+ { "name": "guild_info", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_invite.json b/schemas/world/packets/cmsg_guild_invite.json
new file mode 100644
index 000000000..92870ea33
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_invite.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildInvite",
+ "opcode": "cmsg_guild_invite",
+ "direction": "client",
+ "fields": [
+ { "name": "invited_player", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_leader.json b/schemas/world/packets/cmsg_guild_leader.json
new file mode 100644
index 000000000..d2050c2d0
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_leader.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildLeader",
+ "opcode": "cmsg_guild_leader",
+ "direction": "client",
+ "fields": [
+ { "name": "new_guild_leader_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_leave.json b/schemas/world/packets/cmsg_guild_leave.json
new file mode 100644
index 000000000..fef4048eb
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_leave.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildLeave",
+ "opcode": "cmsg_guild_leave",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_motd.json b/schemas/world/packets/cmsg_guild_motd.json
new file mode 100644
index 000000000..f10a7124b
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_motd.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildMotd",
+ "opcode": "cmsg_guild_motd",
+ "direction": "client",
+ "fields": [
+ { "name": "message_of_the_day", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_promote.json b/schemas/world/packets/cmsg_guild_promote.json
new file mode 100644
index 000000000..0ab337578
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_promote.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildPromote",
+ "opcode": "cmsg_guild_promote",
+ "direction": "client",
+ "fields": [
+ { "name": "player_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_query.json b/schemas/world/packets/cmsg_guild_query.json
new file mode 100644
index 000000000..86f2731e5
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_query.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildQuery",
+ "opcode": "cmsg_guild_query",
+ "direction": "client",
+ "fields": [
+ { "name": "guild_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_rank.json b/schemas/world/packets/cmsg_guild_rank.json
new file mode 100644
index 000000000..58ed70938
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_rank.json
@@ -0,0 +1,10 @@
+{
+ "name": "GuildRank",
+ "opcode": "cmsg_guild_rank",
+ "direction": "client",
+ "fields": [
+ { "name": "rank_id", "type": "uint32" },
+ { "name": "rights", "type": "uint32" },
+ { "name": "rank_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_remove.json b/schemas/world/packets/cmsg_guild_remove.json
new file mode 100644
index 000000000..b885a531a
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_remove.json
@@ -0,0 +1,8 @@
+{
+ "name": "GuildRemove",
+ "opcode": "cmsg_guild_remove",
+ "direction": "client",
+ "fields": [
+ { "name": "player_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_roster.json b/schemas/world/packets/cmsg_guild_roster.json
new file mode 100644
index 000000000..b9692f8cc
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_roster.json
@@ -0,0 +1,5 @@
+{
+ "name": "GuildRoster",
+ "opcode": "cmsg_guild_roster",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_guild_set_officer_note.json b/schemas/world/packets/cmsg_guild_set_officer_note.json
new file mode 100644
index 000000000..d34975652
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_set_officer_note.json
@@ -0,0 +1,9 @@
+{
+ "name": "GuildSetOfficerNote",
+ "opcode": "cmsg_guild_set_officer_note",
+ "direction": "client",
+ "fields": [
+ { "name": "player_name", "type": "CString" },
+ { "name": "note", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_guild_set_public_note.json b/schemas/world/packets/cmsg_guild_set_public_note.json
new file mode 100644
index 000000000..5400be36f
--- /dev/null
+++ b/schemas/world/packets/cmsg_guild_set_public_note.json
@@ -0,0 +1,9 @@
+{
+ "name": "GuildSetPublicNote",
+ "opcode": "cmsg_guild_set_public_note",
+ "direction": "client",
+ "fields": [
+ { "name": "player_name", "type": "CString" },
+ { "name": "note", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_ignore_trade.json b/schemas/world/packets/cmsg_ignore_trade.json
new file mode 100644
index 000000000..20d0572be
--- /dev/null
+++ b/schemas/world/packets/cmsg_ignore_trade.json
@@ -0,0 +1,5 @@
+{
+ "name": "IgnoreTrade",
+ "opcode": "cmsg_ignore_trade",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_initiate_trade.json b/schemas/world/packets/cmsg_initiate_trade.json
new file mode 100644
index 000000000..c6ef259c5
--- /dev/null
+++ b/schemas/world/packets/cmsg_initiate_trade.json
@@ -0,0 +1,8 @@
+{
+ "name": "InitiateTrade",
+ "opcode": "cmsg_initiate_trade",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_inspect.json b/schemas/world/packets/cmsg_inspect.json
new file mode 100644
index 000000000..2c9bccba5
--- /dev/null
+++ b/schemas/world/packets/cmsg_inspect.json
@@ -0,0 +1,8 @@
+{
+ "name": "Inspect",
+ "opcode": "cmsg_inspect",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_inspect_honor_stats_client.json b/schemas/world/packets/cmsg_inspect_honor_stats_client.json
new file mode 100644
index 000000000..33bc34356
--- /dev/null
+++ b/schemas/world/packets/cmsg_inspect_honor_stats_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "InspectHonorStatsClient",
+ "opcode": "cmsg_inspect_honor_stats_client",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_item_name_query.json b/schemas/world/packets/cmsg_item_name_query.json
new file mode 100644
index 000000000..e103637ab
--- /dev/null
+++ b/schemas/world/packets/cmsg_item_name_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "ItemNameQuery",
+ "opcode": "cmsg_item_name_query",
+ "direction": "client",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_item_query_single.json b/schemas/world/packets/cmsg_item_query_single.json
index 83c91c3f5..e1c04185f 100644
--- a/schemas/world/packets/cmsg_item_query_single.json
+++ b/schemas/world/packets/cmsg_item_query_single.json
@@ -3,7 +3,7 @@
"opcode": "cmsg_item_query_single",
"direction": "client",
"fields": [
- { "name": "item", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
{ "name": "query", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_item_text_query.json b/schemas/world/packets/cmsg_item_text_query.json
new file mode 100644
index 000000000..b0bec1f22
--- /dev/null
+++ b/schemas/world/packets/cmsg_item_text_query.json
@@ -0,0 +1,10 @@
+{
+ "name": "ItemTextQuery",
+ "opcode": "cmsg_item_text_query",
+ "direction": "client",
+ "fields": [
+ { "name": "item_text_id", "type": "uint32" },
+ { "name": "mail_id", "type": "uint32" },
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_join_channel.json b/schemas/world/packets/cmsg_join_channel.json
index 08c3bbee4..271629b23 100644
--- a/schemas/world/packets/cmsg_join_channel.json
+++ b/schemas/world/packets/cmsg_join_channel.json
@@ -6,4 +6,4 @@
{ "name": "name", "type": "CString" },
{ "name": "password", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_learn_talent.json b/schemas/world/packets/cmsg_learn_talent.json
new file mode 100644
index 000000000..6a7b65449
--- /dev/null
+++ b/schemas/world/packets/cmsg_learn_talent.json
@@ -0,0 +1,9 @@
+{
+ "name": "LearnTalent",
+ "opcode": "cmsg_learn_talent",
+ "direction": "client",
+ "fields": [
+ { "name": "talent", "type": "Talent" },
+ { "name": "requested_rank", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_leave_battlefield.json b/schemas/world/packets/cmsg_leave_battlefield.json
new file mode 100644
index 000000000..d3a512b7d
--- /dev/null
+++ b/schemas/world/packets/cmsg_leave_battlefield.json
@@ -0,0 +1,8 @@
+{
+ "name": "LeaveBattlefield",
+ "opcode": "cmsg_leave_battlefield",
+ "direction": "client",
+ "fields": [
+ { "name": "map", "type": "Map" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_leave_channel.json b/schemas/world/packets/cmsg_leave_channel.json
new file mode 100644
index 000000000..f793828d6
--- /dev/null
+++ b/schemas/world/packets/cmsg_leave_channel.json
@@ -0,0 +1,8 @@
+{
+ "name": "LeaveChannel",
+ "opcode": "cmsg_leave_channel",
+ "direction": "client",
+ "fields": [
+ { "name": "channel_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_list_inventory.json b/schemas/world/packets/cmsg_list_inventory.json
new file mode 100644
index 000000000..51580e3fa
--- /dev/null
+++ b/schemas/world/packets/cmsg_list_inventory.json
@@ -0,0 +1,8 @@
+{
+ "name": "ListInventory",
+ "opcode": "cmsg_list_inventory",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_list_stabled_pets_client.json b/schemas/world/packets/cmsg_list_stabled_pets_client.json
new file mode 100644
index 000000000..0298e1e0c
--- /dev/null
+++ b/schemas/world/packets/cmsg_list_stabled_pets_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "ListStabledPetsClient",
+ "opcode": "cmsg_list_stabled_pets_client",
+ "direction": "client",
+ "fields": [
+ { "name": "npc", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_logout_cancel.json b/schemas/world/packets/cmsg_logout_cancel.json
new file mode 100644
index 000000000..681ca3adb
--- /dev/null
+++ b/schemas/world/packets/cmsg_logout_cancel.json
@@ -0,0 +1,5 @@
+{
+ "name": "LogoutCancel",
+ "opcode": "cmsg_logout_cancel",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_logout_request.json b/schemas/world/packets/cmsg_logout_request.json
new file mode 100644
index 000000000..40d0f155c
--- /dev/null
+++ b/schemas/world/packets/cmsg_logout_request.json
@@ -0,0 +1,5 @@
+{
+ "name": "LogoutRequest",
+ "opcode": "cmsg_logout_request",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_looking_for_group_client.json b/schemas/world/packets/cmsg_looking_for_group_client.json
new file mode 100644
index 000000000..c0c6fc35a
--- /dev/null
+++ b/schemas/world/packets/cmsg_looking_for_group_client.json
@@ -0,0 +1,5 @@
+{
+ "name": "LookingForGroupClient",
+ "opcode": "cmsg_looking_for_group_client",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_loot.json b/schemas/world/packets/cmsg_loot.json
new file mode 100644
index 000000000..cb1361cf7
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot.json
@@ -0,0 +1,8 @@
+{
+ "name": "Loot",
+ "opcode": "cmsg_loot",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_loot_master_give.json b/schemas/world/packets/cmsg_loot_master_give.json
new file mode 100644
index 000000000..b8714fce2
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot_master_give.json
@@ -0,0 +1,10 @@
+{
+ "name": "LootMasterGive",
+ "opcode": "cmsg_loot_master_give",
+ "direction": "client",
+ "fields": [
+ { "name": "loot", "type": "uint64" },
+ { "name": "slot_id", "type": "uint8" },
+ { "name": "player", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_loot_method.json b/schemas/world/packets/cmsg_loot_method.json
new file mode 100644
index 000000000..5a84195e1
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot_method.json
@@ -0,0 +1,10 @@
+{
+ "name": "LootMethod",
+ "opcode": "cmsg_loot_method",
+ "direction": "client",
+ "fields": [
+ { "name": "loot_setting", "type": "uint32" },
+ { "name": "loot_master", "type": "uint64" },
+ { "name": "loot_threshold", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_loot_money.json b/schemas/world/packets/cmsg_loot_money.json
new file mode 100644
index 000000000..bd8d38b17
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot_money.json
@@ -0,0 +1,5 @@
+{
+ "name": "LootMoney",
+ "opcode": "cmsg_loot_money",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_loot_release.json b/schemas/world/packets/cmsg_loot_release.json
new file mode 100644
index 000000000..0955b0125
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot_release.json
@@ -0,0 +1,8 @@
+{
+ "name": "LootRelease",
+ "opcode": "cmsg_loot_release",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_loot_roll.json b/schemas/world/packets/cmsg_loot_roll.json
new file mode 100644
index 000000000..38fdbd3a0
--- /dev/null
+++ b/schemas/world/packets/cmsg_loot_roll.json
@@ -0,0 +1,10 @@
+{
+ "name": "LootRoll",
+ "opcode": "cmsg_loot_roll",
+ "direction": "client",
+ "fields": [
+ { "name": "item", "type": "uint64" },
+ { "name": "item_slot", "type": "uint32" },
+ { "name": "vote", "type": "RollVote" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_create_text_item.json b/schemas/world/packets/cmsg_mail_create_text_item.json
new file mode 100644
index 000000000..9869af370
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_create_text_item.json
@@ -0,0 +1,10 @@
+{
+ "name": "MailCreateTextItem",
+ "opcode": "cmsg_mail_create_text_item",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" },
+ { "name": "mail_template_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_delete.json b/schemas/world/packets/cmsg_mail_delete.json
new file mode 100644
index 000000000..38a0b618b
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_delete.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailDelete",
+ "opcode": "cmsg_mail_delete",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox_id", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_mark_as_read.json b/schemas/world/packets/cmsg_mail_mark_as_read.json
new file mode 100644
index 000000000..9dc652d62
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_mark_as_read.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailMarkAsRead",
+ "opcode": "cmsg_mail_mark_as_read",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_return_to_sender.json b/schemas/world/packets/cmsg_mail_return_to_sender.json
new file mode 100644
index 000000000..e97ed3d95
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_return_to_sender.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailReturnToSender",
+ "opcode": "cmsg_mail_return_to_sender",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox_id", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_take_item.json b/schemas/world/packets/cmsg_mail_take_item.json
new file mode 100644
index 000000000..4f0d300a7
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_take_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailTakeItem",
+ "opcode": "cmsg_mail_take_item",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mail_take_money.json b/schemas/world/packets/cmsg_mail_take_money.json
new file mode 100644
index 000000000..b7dc2d9ef
--- /dev/null
+++ b/schemas/world/packets/cmsg_mail_take_money.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailTakeMoney",
+ "opcode": "cmsg_mail_take_money",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" },
+ { "name": "mail_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_meetingstone_info.json b/schemas/world/packets/cmsg_meetingstone_info.json
index 5462ca68c..d6b92aac4 100644
--- a/schemas/world/packets/cmsg_meetingstone_info.json
+++ b/schemas/world/packets/cmsg_meetingstone_info.json
@@ -2,4 +2,4 @@
"name": "MeetingStoneInfo",
"opcode": "cmsg_meetingstone_info",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_meetingstone_join.json b/schemas/world/packets/cmsg_meetingstone_join.json
new file mode 100644
index 000000000..517f3dff6
--- /dev/null
+++ b/schemas/world/packets/cmsg_meetingstone_join.json
@@ -0,0 +1,8 @@
+{
+ "name": "MeetingstoneJoin",
+ "opcode": "cmsg_meetingstone_join",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_meetingstone_leave.json b/schemas/world/packets/cmsg_meetingstone_leave.json
new file mode 100644
index 000000000..455a43915
--- /dev/null
+++ b/schemas/world/packets/cmsg_meetingstone_leave.json
@@ -0,0 +1,5 @@
+{
+ "name": "MeetingstoneLeave",
+ "opcode": "cmsg_meetingstone_leave",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_messagechat.json b/schemas/world/packets/cmsg_messagechat.json
new file mode 100644
index 000000000..32fa5e1e4
--- /dev/null
+++ b/schemas/world/packets/cmsg_messagechat.json
@@ -0,0 +1,27 @@
+{
+ "name": "Messagechat",
+ "opcode": "cmsg_messagechat",
+ "direction": "client",
+ "fields": [
+ { "name": "chat_type", "type": "uint32" },
+ { "name": "language", "type": "Language" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "chat_type", "value": 6 },
+ "fields": [
+ { "name": "target_player", "type": "CString" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "chat_type", "value": 14 },
+ "fields": [
+ { "name": "channel", "type": "CString" }
+ ]
+ }
+ ]
+ },
+ { "name": "message", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_minimap_ping_client.json b/schemas/world/packets/cmsg_minimap_ping_client.json
new file mode 100644
index 000000000..b1a7308e2
--- /dev/null
+++ b/schemas/world/packets/cmsg_minimap_ping_client.json
@@ -0,0 +1,9 @@
+{
+ "name": "MinimapPingClient",
+ "opcode": "cmsg_minimap_ping_client",
+ "direction": "client",
+ "fields": [
+ { "name": "position_x", "type": "float" },
+ { "name": "position_y", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_mountspecial_anim.json b/schemas/world/packets/cmsg_mountspecial_anim.json
new file mode 100644
index 000000000..759c9e7fd
--- /dev/null
+++ b/schemas/world/packets/cmsg_mountspecial_anim.json
@@ -0,0 +1,5 @@
+{
+ "name": "MountspecialAnim",
+ "opcode": "cmsg_mountspecial_anim",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_move_fall_land_client.json b/schemas/world/packets/cmsg_move_fall_land_client.json
new file mode 100644
index 000000000..b748bc313
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_fall_land_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveFallLandClient",
+ "opcode": "cmsg_move_fall_land_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_fall_reset.json b/schemas/world/packets/cmsg_move_fall_reset.json
new file mode 100644
index 000000000..b941ca59e
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_fall_reset.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveFallReset",
+ "opcode": "cmsg_move_fall_reset",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_feather_fall_ack.json b/schemas/world/packets/cmsg_move_feather_fall_ack.json
new file mode 100644
index 000000000..2da600cfc
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_feather_fall_ack.json
@@ -0,0 +1,11 @@
+{
+ "name": "MoveFeatherFallAck",
+ "opcode": "cmsg_move_feather_fall_ack",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "apply", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_heartbeat_client.json b/schemas/world/packets/cmsg_move_heartbeat_client.json
new file mode 100644
index 000000000..7f910f0be
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_heartbeat_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveHeartbeatClient",
+ "opcode": "cmsg_move_heartbeat_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_jump_client.json b/schemas/world/packets/cmsg_move_jump_client.json
new file mode 100644
index 000000000..f953ab0da
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_jump_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveJumpClient",
+ "opcode": "cmsg_move_jump_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_set_facing_client.json b/schemas/world/packets/cmsg_move_set_facing_client.json
new file mode 100644
index 000000000..0ad1c14ec
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_set_facing_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveSetFacingClient",
+ "opcode": "cmsg_move_set_facing_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_set_pitch_client.json b/schemas/world/packets/cmsg_move_set_pitch_client.json
new file mode 100644
index 000000000..f344f097b
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_set_pitch_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveSetPitchClient",
+ "opcode": "cmsg_move_set_pitch_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_set_raw_position.json b/schemas/world/packets/cmsg_move_set_raw_position.json
new file mode 100644
index 000000000..12041f82b
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_set_raw_position.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetRawPosition",
+ "opcode": "cmsg_move_set_raw_position",
+ "direction": "client",
+ "fields": [
+ { "name": "position", "type": "Vector3" },
+ { "name": "orientation", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_set_run_mode_client.json b/schemas/world/packets/cmsg_move_set_run_mode_client.json
new file mode 100644
index 000000000..cdb765de9
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_set_run_mode_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveSetRunModeClient",
+ "opcode": "cmsg_move_set_run_mode_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_set_walk_mode_client.json b/schemas/world/packets/cmsg_move_set_walk_mode_client.json
new file mode 100644
index 000000000..0f320c367
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_set_walk_mode_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveSetWalkModeClient",
+ "opcode": "cmsg_move_set_walk_mode_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_spline_done.json b/schemas/world/packets/cmsg_move_spline_done.json
new file mode 100644
index 000000000..b0232dccc
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_spline_done.json
@@ -0,0 +1,10 @@
+{
+ "name": "MoveSplineDone",
+ "opcode": "cmsg_move_spline_done",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_backward_client.json b/schemas/world/packets/cmsg_move_start_backward_client.json
new file mode 100644
index 000000000..18efde5a4
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_backward_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartBackwardClient",
+ "opcode": "cmsg_move_start_backward_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_forward_client.json b/schemas/world/packets/cmsg_move_start_forward_client.json
new file mode 100644
index 000000000..041dbd12e
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_forward_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartForwardClient",
+ "opcode": "cmsg_move_start_forward_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_pitch_down_client.json b/schemas/world/packets/cmsg_move_start_pitch_down_client.json
new file mode 100644
index 000000000..870c6cf73
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_pitch_down_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartPitchDownClient",
+ "opcode": "cmsg_move_start_pitch_down_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_pitch_up_client.json b/schemas/world/packets/cmsg_move_start_pitch_up_client.json
new file mode 100644
index 000000000..f0179dcac
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_pitch_up_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartPitchUpClient",
+ "opcode": "cmsg_move_start_pitch_up_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_strafe_left_client.json b/schemas/world/packets/cmsg_move_start_strafe_left_client.json
new file mode 100644
index 000000000..7575a1eb5
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_strafe_left_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartStrafeLeftClient",
+ "opcode": "cmsg_move_start_strafe_left_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_strafe_right_client.json b/schemas/world/packets/cmsg_move_start_strafe_right_client.json
new file mode 100644
index 000000000..d56f80af0
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_strafe_right_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartStrafeRightClient",
+ "opcode": "cmsg_move_start_strafe_right_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_swim_client.json b/schemas/world/packets/cmsg_move_start_swim_client.json
new file mode 100644
index 000000000..f2e12853b
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_swim_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartSwimClient",
+ "opcode": "cmsg_move_start_swim_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_turn_left_client.json b/schemas/world/packets/cmsg_move_start_turn_left_client.json
new file mode 100644
index 000000000..d49f79bb7
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_turn_left_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartTurnLeftClient",
+ "opcode": "cmsg_move_start_turn_left_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_start_turn_right_client.json b/schemas/world/packets/cmsg_move_start_turn_right_client.json
new file mode 100644
index 000000000..5000146c8
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_start_turn_right_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStartTurnRightClient",
+ "opcode": "cmsg_move_start_turn_right_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_stop_client.json b/schemas/world/packets/cmsg_move_stop_client.json
new file mode 100644
index 000000000..af6386623
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_stop_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStopClient",
+ "opcode": "cmsg_move_stop_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_stop_pitch_client.json b/schemas/world/packets/cmsg_move_stop_pitch_client.json
new file mode 100644
index 000000000..dffb28c9e
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_stop_pitch_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStopPitchClient",
+ "opcode": "cmsg_move_stop_pitch_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_stop_strafe_client.json b/schemas/world/packets/cmsg_move_stop_strafe_client.json
new file mode 100644
index 000000000..35cd5c25d
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_stop_strafe_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStopStrafeClient",
+ "opcode": "cmsg_move_stop_strafe_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_stop_swim_client.json b/schemas/world/packets/cmsg_move_stop_swim_client.json
new file mode 100644
index 000000000..8ded0cf8f
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_stop_swim_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStopSwimClient",
+ "opcode": "cmsg_move_stop_swim_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_stop_turn_client.json b/schemas/world/packets/cmsg_move_stop_turn_client.json
new file mode 100644
index 000000000..f040110d6
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_stop_turn_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "MoveStopTurnClient",
+ "opcode": "cmsg_move_stop_turn_client",
+ "direction": "client",
+ "fields": [
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_teleport_ack_client.json b/schemas/world/packets/cmsg_move_teleport_ack_client.json
new file mode 100644
index 000000000..87f274365
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_teleport_ack_client.json
@@ -0,0 +1,10 @@
+{
+ "name": "MoveTeleportAckClient",
+ "opcode": "cmsg_move_teleport_ack_client",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_move_time_skipped.json b/schemas/world/packets/cmsg_move_time_skipped.json
new file mode 100644
index 000000000..c0d65029c
--- /dev/null
+++ b/schemas/world/packets/cmsg_move_time_skipped.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveTimeSkipped",
+ "opcode": "cmsg_move_time_skipped",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "lag", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_name_query.json b/schemas/world/packets/cmsg_name_query.json
index a83a26f32..fbfb31e9c 100644
--- a/schemas/world/packets/cmsg_name_query.json
+++ b/schemas/world/packets/cmsg_name_query.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "guid", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_next_cinematic_camera.json b/schemas/world/packets/cmsg_next_cinematic_camera.json
index a5a626d4c..700036deb 100644
--- a/schemas/world/packets/cmsg_next_cinematic_camera.json
+++ b/schemas/world/packets/cmsg_next_cinematic_camera.json
@@ -2,4 +2,4 @@
"name": "NextCinematicCamera",
"opcode": "cmsg_next_cinematic_camera",
"direction": "client"
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_npc_text_query.json b/schemas/world/packets/cmsg_npc_text_query.json
new file mode 100644
index 000000000..6504255e9
--- /dev/null
+++ b/schemas/world/packets/cmsg_npc_text_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "NpcTextQuery",
+ "opcode": "cmsg_npc_text_query",
+ "direction": "client",
+ "fields": [
+ { "name": "text_id", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_offer_petition.json b/schemas/world/packets/cmsg_offer_petition.json
new file mode 100644
index 000000000..ffcdfbbf0
--- /dev/null
+++ b/schemas/world/packets/cmsg_offer_petition.json
@@ -0,0 +1,9 @@
+{
+ "name": "OfferPetition",
+ "opcode": "cmsg_offer_petition",
+ "direction": "client",
+ "fields": [
+ { "name": "petition", "type": "uint64" },
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_open_item.json b/schemas/world/packets/cmsg_open_item.json
new file mode 100644
index 000000000..86da4f68f
--- /dev/null
+++ b/schemas/world/packets/cmsg_open_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "OpenItem",
+ "opcode": "cmsg_open_item",
+ "direction": "client",
+ "fields": [
+ { "name": "bag_index", "type": "uint8" },
+ { "name": "slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_page_text_query.json b/schemas/world/packets/cmsg_page_text_query.json
new file mode 100644
index 000000000..6f0eb484e
--- /dev/null
+++ b/schemas/world/packets/cmsg_page_text_query.json
@@ -0,0 +1,8 @@
+{
+ "name": "PageTextQuery",
+ "opcode": "cmsg_page_text_query",
+ "direction": "client",
+ "fields": [
+ { "name": "page_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_abandon.json b/schemas/world/packets/cmsg_pet_abandon.json
new file mode 100644
index 000000000..21d167011
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_abandon.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetAbandon",
+ "opcode": "cmsg_pet_abandon",
+ "direction": "client",
+ "fields": [
+ { "name": "pet", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_action.json b/schemas/world/packets/cmsg_pet_action.json
new file mode 100644
index 000000000..f75e4619e
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_action.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetAction",
+ "opcode": "cmsg_pet_action",
+ "direction": "client",
+ "fields": [
+ { "name": "pet", "type": "uint64" },
+ { "name": "data", "type": "uint32" },
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_cancel_aura.json b/schemas/world/packets/cmsg_pet_cancel_aura.json
new file mode 100644
index 000000000..e0ee0c9dc
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_cancel_aura.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetCancelAura",
+ "opcode": "cmsg_pet_cancel_aura",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_cast_spell.json b/schemas/world/packets/cmsg_pet_cast_spell.json
new file mode 100644
index 000000000..7479c24d5
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_cast_spell.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetCastSpell",
+ "opcode": "cmsg_pet_cast_spell",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" },
+ { "name": "targets", "type": "SpellCastTargets" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_name_query.json b/schemas/world/packets/cmsg_pet_name_query.json
new file mode 100644
index 000000000..e2a716f83
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_name_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetNameQuery",
+ "opcode": "cmsg_pet_name_query",
+ "direction": "client",
+ "fields": [
+ { "name": "pet_number", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_rename.json b/schemas/world/packets/cmsg_pet_rename.json
new file mode 100644
index 000000000..30a5b73ac
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_rename.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetRename",
+ "opcode": "cmsg_pet_rename",
+ "direction": "client",
+ "fields": [
+ { "name": "pet", "type": "uint64" },
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_set_action.json b/schemas/world/packets/cmsg_pet_set_action.json
new file mode 100644
index 000000000..2da3b7416
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_set_action.json
@@ -0,0 +1,18 @@
+{
+ "name": "PetSetAction",
+ "opcode": "cmsg_pet_set_action",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "position1", "type": "uint32" },
+ { "name": "data1", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "position2", "type": "uint32" },
+ { "name": "data2", "type": "uint32" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_spell_autocast.json b/schemas/world/packets/cmsg_pet_spell_autocast.json
new file mode 100644
index 000000000..348c36d9c
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_spell_autocast.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetSpellAutocast",
+ "opcode": "cmsg_pet_spell_autocast",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" },
+ { "name": "autocast_enabled", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_stop_attack.json b/schemas/world/packets/cmsg_pet_stop_attack.json
new file mode 100644
index 000000000..b76a7c71d
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_stop_attack.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetStopAttack",
+ "opcode": "cmsg_pet_stop_attack",
+ "direction": "client",
+ "fields": [
+ { "name": "pet", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pet_unlearn.json b/schemas/world/packets/cmsg_pet_unlearn.json
new file mode 100644
index 000000000..04f37fbc9
--- /dev/null
+++ b/schemas/world/packets/cmsg_pet_unlearn.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetUnlearn",
+ "opcode": "cmsg_pet_unlearn",
+ "direction": "client",
+ "fields": [
+ { "name": "pet", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_petition_buy.json b/schemas/world/packets/cmsg_petition_buy.json
new file mode 100644
index 000000000..53b3479ec
--- /dev/null
+++ b/schemas/world/packets/cmsg_petition_buy.json
@@ -0,0 +1,25 @@
+{
+ "name": "PetitionBuy",
+ "opcode": "cmsg_petition_buy",
+ "direction": "client",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "unknown2", "type": "uint64" },
+ { "name": "name", "type": "CString" },
+ { "name": "unknown3", "type": "uint32" },
+ { "name": "unknown4", "type": "uint32" },
+ { "name": "unknown5", "type": "uint32" },
+ { "name": "unknown6", "type": "uint32" },
+ { "name": "unknown7", "type": "uint32" },
+ { "name": "unknown8", "type": "uint32" },
+ { "name": "unknown9", "type": "uint32" },
+ { "name": "unknown10", "type": "uint32" },
+ { "name": "unknown11", "type": "uint32" },
+ { "name": "unknown12", "type": "uint32" },
+ { "name": "unknown13", "type": "uint16" },
+ { "name": "unknown14", "type": "uint8" },
+ { "name": "index", "type": "uint32" },
+ { "name": "unknown15", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_petition_query.json b/schemas/world/packets/cmsg_petition_query.json
new file mode 100644
index 000000000..2830f7634
--- /dev/null
+++ b/schemas/world/packets/cmsg_petition_query.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetitionQuery",
+ "opcode": "cmsg_petition_query",
+ "direction": "client",
+ "fields": [
+ { "name": "guild_id", "type": "uint32" },
+ { "name": "petition", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_petition_show_signatures.json b/schemas/world/packets/cmsg_petition_show_signatures.json
new file mode 100644
index 000000000..eafe3cd53
--- /dev/null
+++ b/schemas/world/packets/cmsg_petition_show_signatures.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetitionShowSignatures",
+ "opcode": "cmsg_petition_show_signatures",
+ "direction": "client",
+ "fields": [
+ { "name": "item", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_petition_showlist.json b/schemas/world/packets/cmsg_petition_showlist.json
new file mode 100644
index 000000000..d8f528a12
--- /dev/null
+++ b/schemas/world/packets/cmsg_petition_showlist.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetitionShowlist",
+ "opcode": "cmsg_petition_showlist",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_petition_sign.json b/schemas/world/packets/cmsg_petition_sign.json
new file mode 100644
index 000000000..106b604e7
--- /dev/null
+++ b/schemas/world/packets/cmsg_petition_sign.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetitionSign",
+ "opcode": "cmsg_petition_sign",
+ "direction": "client",
+ "fields": [
+ { "name": "petition", "type": "uint64" },
+ { "name": "unknown1", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_ping.json b/schemas/world/packets/cmsg_ping.json
index 42f9e3f0c..8f24de2ea 100644
--- a/schemas/world/packets/cmsg_ping.json
+++ b/schemas/world/packets/cmsg_ping.json
@@ -6,4 +6,4 @@
{ "name": "sequence_id", "type": "uint32" },
{ "name": "latency", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_played_time.json b/schemas/world/packets/cmsg_played_time.json
new file mode 100644
index 000000000..85f15c187
--- /dev/null
+++ b/schemas/world/packets/cmsg_played_time.json
@@ -0,0 +1,5 @@
+{
+ "name": "PlayedTime",
+ "opcode": "cmsg_played_time",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_player_login.json b/schemas/world/packets/cmsg_player_login.json
index 4c96e6104..28b2d1e02 100644
--- a/schemas/world/packets/cmsg_player_login.json
+++ b/schemas/world/packets/cmsg_player_login.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "character_id", "type": "uint64" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_player_logout.json b/schemas/world/packets/cmsg_player_logout.json
new file mode 100644
index 000000000..6a3f8e906
--- /dev/null
+++ b/schemas/world/packets/cmsg_player_logout.json
@@ -0,0 +1,5 @@
+{
+ "name": "PlayerLogout",
+ "opcode": "cmsg_player_logout",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_pushquesttoparty.json b/schemas/world/packets/cmsg_pushquesttoparty.json
new file mode 100644
index 000000000..ac5de02be
--- /dev/null
+++ b/schemas/world/packets/cmsg_pushquesttoparty.json
@@ -0,0 +1,8 @@
+{
+ "name": "Pushquesttoparty",
+ "opcode": "cmsg_pushquesttoparty",
+ "direction": "client",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_pvp_log_data_client.json b/schemas/world/packets/cmsg_pvp_log_data_client.json
new file mode 100644
index 000000000..ae2fff32e
--- /dev/null
+++ b/schemas/world/packets/cmsg_pvp_log_data_client.json
@@ -0,0 +1,5 @@
+{
+ "name": "PvpLogDataClient",
+ "opcode": "cmsg_pvp_log_data_client",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_query_next_mail_time_client.json b/schemas/world/packets/cmsg_query_next_mail_time_client.json
new file mode 100644
index 000000000..bd232a6c3
--- /dev/null
+++ b/schemas/world/packets/cmsg_query_next_mail_time_client.json
@@ -0,0 +1,5 @@
+{
+ "name": "QueryNextMailTimeClient",
+ "opcode": "cmsg_query_next_mail_time_client",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_query_time.json b/schemas/world/packets/cmsg_query_time.json
new file mode 100644
index 000000000..0463e35fc
--- /dev/null
+++ b/schemas/world/packets/cmsg_query_time.json
@@ -0,0 +1,5 @@
+{
+ "name": "QueryTime",
+ "opcode": "cmsg_query_time",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_quest_confirm_accept.json b/schemas/world/packets/cmsg_quest_confirm_accept.json
new file mode 100644
index 000000000..44ff5cdaa
--- /dev/null
+++ b/schemas/world/packets/cmsg_quest_confirm_accept.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestConfirmAccept",
+ "opcode": "cmsg_quest_confirm_accept",
+ "direction": "client",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_quest_query.json b/schemas/world/packets/cmsg_quest_query.json
new file mode 100644
index 000000000..236b68edb
--- /dev/null
+++ b/schemas/world/packets/cmsg_quest_query.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestQuery",
+ "opcode": "cmsg_quest_query",
+ "direction": "client",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_accept_quest.json b/schemas/world/packets/cmsg_questgiver_accept_quest.json
new file mode 100644
index 000000000..36f6214cc
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_accept_quest.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestgiverAcceptQuest",
+ "opcode": "cmsg_questgiver_accept_quest",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_cancel.json b/schemas/world/packets/cmsg_questgiver_cancel.json
new file mode 100644
index 000000000..1e42c2539
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_cancel.json
@@ -0,0 +1,5 @@
+{
+ "name": "QuestgiverCancel",
+ "opcode": "cmsg_questgiver_cancel",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_questgiver_choose_reward.json b/schemas/world/packets/cmsg_questgiver_choose_reward.json
new file mode 100644
index 000000000..4a32a7156
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_choose_reward.json
@@ -0,0 +1,10 @@
+{
+ "name": "QuestgiverChooseReward",
+ "opcode": "cmsg_questgiver_choose_reward",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "reward", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_complete_quest.json b/schemas/world/packets/cmsg_questgiver_complete_quest.json
new file mode 100644
index 000000000..341250a85
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_complete_quest.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestgiverCompleteQuest",
+ "opcode": "cmsg_questgiver_complete_quest",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_hello.json b/schemas/world/packets/cmsg_questgiver_hello.json
new file mode 100644
index 000000000..271309b0e
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_hello.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestgiverHello",
+ "opcode": "cmsg_questgiver_hello",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_query_quest.json b/schemas/world/packets/cmsg_questgiver_query_quest.json
new file mode 100644
index 000000000..bc6d73aa1
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_query_quest.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestgiverQueryQuest",
+ "opcode": "cmsg_questgiver_query_quest",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_quest_autolaunch.json b/schemas/world/packets/cmsg_questgiver_quest_autolaunch.json
new file mode 100644
index 000000000..3d0ec1163
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_quest_autolaunch.json
@@ -0,0 +1,5 @@
+{
+ "name": "QuestgiverQuestAutolaunch",
+ "opcode": "cmsg_questgiver_quest_autolaunch",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_questgiver_request_reward.json b/schemas/world/packets/cmsg_questgiver_request_reward.json
new file mode 100644
index 000000000..3b07dc0b4
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_request_reward.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestgiverRequestReward",
+ "opcode": "cmsg_questgiver_request_reward",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questgiver_status_query.json b/schemas/world/packets/cmsg_questgiver_status_query.json
new file mode 100644
index 000000000..1c16d3002
--- /dev/null
+++ b/schemas/world/packets/cmsg_questgiver_status_query.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestgiverStatusQuery",
+ "opcode": "cmsg_questgiver_status_query",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questlog_remove_quest.json b/schemas/world/packets/cmsg_questlog_remove_quest.json
new file mode 100644
index 000000000..9a9e6df28
--- /dev/null
+++ b/schemas/world/packets/cmsg_questlog_remove_quest.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestlogRemoveQuest",
+ "opcode": "cmsg_questlog_remove_quest",
+ "direction": "client",
+ "fields": [
+ { "name": "slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_questlog_swap_quest.json b/schemas/world/packets/cmsg_questlog_swap_quest.json
new file mode 100644
index 000000000..44c500d5e
--- /dev/null
+++ b/schemas/world/packets/cmsg_questlog_swap_quest.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestlogSwapQuest",
+ "opcode": "cmsg_questlog_swap_quest",
+ "direction": "client",
+ "fields": [
+ { "name": "slot1", "type": "uint8" },
+ { "name": "slot2", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_raid_ready_check_client.json b/schemas/world/packets/cmsg_raid_ready_check_client.json
new file mode 100644
index 000000000..a7201c1be
--- /dev/null
+++ b/schemas/world/packets/cmsg_raid_ready_check_client.json
@@ -0,0 +1,14 @@
+{
+ "name": "RaidReadyCheckClient",
+ "opcode": "cmsg_raid_ready_check_client",
+ "direction": "client",
+ "fields": [
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "state", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_raid_target_update_client.json b/schemas/world/packets/cmsg_raid_target_update_client.json
new file mode 100644
index 000000000..bb9f7909d
--- /dev/null
+++ b/schemas/world/packets/cmsg_raid_target_update_client.json
@@ -0,0 +1,15 @@
+{
+ "name": "RaidTargetUpdateClient",
+ "opcode": "cmsg_raid_target_update_client",
+ "direction": "client",
+ "fields": [
+ { "name": "target_index", "type": "RaidTargetIndex" },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "target_index", "value": "request_icons" },
+ "fields": [
+ { "name": "target", "type": "uint64" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_random_roll_client.json b/schemas/world/packets/cmsg_random_roll_client.json
new file mode 100644
index 000000000..18a62e4e5
--- /dev/null
+++ b/schemas/world/packets/cmsg_random_roll_client.json
@@ -0,0 +1,9 @@
+{
+ "name": "RandomRollClient",
+ "opcode": "cmsg_random_roll_client",
+ "direction": "client",
+ "fields": [
+ { "name": "minimum", "type": "uint32" },
+ { "name": "maximum", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_read_item.json b/schemas/world/packets/cmsg_read_item.json
new file mode 100644
index 000000000..815a1f2e6
--- /dev/null
+++ b/schemas/world/packets/cmsg_read_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "ReadItem",
+ "opcode": "cmsg_read_item",
+ "direction": "client",
+ "fields": [
+ { "name": "bag_index", "type": "uint8" },
+ { "name": "slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_reclaim_corpse.json b/schemas/world/packets/cmsg_reclaim_corpse.json
new file mode 100644
index 000000000..fb90222f4
--- /dev/null
+++ b/schemas/world/packets/cmsg_reclaim_corpse.json
@@ -0,0 +1,8 @@
+{
+ "name": "ReclaimCorpse",
+ "opcode": "cmsg_reclaim_corpse",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_repair_item.json b/schemas/world/packets/cmsg_repair_item.json
new file mode 100644
index 000000000..4f8d6aa67
--- /dev/null
+++ b/schemas/world/packets/cmsg_repair_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "RepairItem",
+ "opcode": "cmsg_repair_item",
+ "direction": "client",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "item", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_repop_request.json b/schemas/world/packets/cmsg_repop_request.json
new file mode 100644
index 000000000..28495417d
--- /dev/null
+++ b/schemas/world/packets/cmsg_repop_request.json
@@ -0,0 +1,5 @@
+{
+ "name": "RepopRequest",
+ "opcode": "cmsg_repop_request",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_request_account_data.json b/schemas/world/packets/cmsg_request_account_data.json
new file mode 100644
index 000000000..700984d93
--- /dev/null
+++ b/schemas/world/packets/cmsg_request_account_data.json
@@ -0,0 +1,8 @@
+{
+ "name": "RequestAccountData",
+ "opcode": "cmsg_request_account_data",
+ "direction": "client",
+ "fields": [
+ { "name": "data_type", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_request_party_member_stats.json b/schemas/world/packets/cmsg_request_party_member_stats.json
new file mode 100644
index 000000000..b20bdfd4a
--- /dev/null
+++ b/schemas/world/packets/cmsg_request_party_member_stats.json
@@ -0,0 +1,8 @@
+{
+ "name": "RequestPartyMemberStats",
+ "opcode": "cmsg_request_party_member_stats",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_request_pet_info.json b/schemas/world/packets/cmsg_request_pet_info.json
new file mode 100644
index 000000000..2930b06dc
--- /dev/null
+++ b/schemas/world/packets/cmsg_request_pet_info.json
@@ -0,0 +1,5 @@
+{
+ "name": "RequestPetInfo",
+ "opcode": "cmsg_request_pet_info",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_request_raid_info.json b/schemas/world/packets/cmsg_request_raid_info.json
new file mode 100644
index 000000000..76db496f1
--- /dev/null
+++ b/schemas/world/packets/cmsg_request_raid_info.json
@@ -0,0 +1,5 @@
+{
+ "name": "RequestRaidInfo",
+ "opcode": "cmsg_request_raid_info",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_reset_instances.json b/schemas/world/packets/cmsg_reset_instances.json
new file mode 100644
index 000000000..9a7e41a8f
--- /dev/null
+++ b/schemas/world/packets/cmsg_reset_instances.json
@@ -0,0 +1,5 @@
+{
+ "name": "ResetInstances",
+ "opcode": "cmsg_reset_instances",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_resurrect_response.json b/schemas/world/packets/cmsg_resurrect_response.json
new file mode 100644
index 000000000..bfb188688
--- /dev/null
+++ b/schemas/world/packets/cmsg_resurrect_response.json
@@ -0,0 +1,9 @@
+{
+ "name": "ResurrectResponse",
+ "opcode": "cmsg_resurrect_response",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "status", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_save_guild_emblem_client.json b/schemas/world/packets/cmsg_save_guild_emblem_client.json
new file mode 100644
index 000000000..91f1c2826
--- /dev/null
+++ b/schemas/world/packets/cmsg_save_guild_emblem_client.json
@@ -0,0 +1,13 @@
+{
+ "name": "SaveGuildEmblemClient",
+ "opcode": "cmsg_save_guild_emblem_client",
+ "direction": "client",
+ "fields": [
+ { "name": "vendor", "type": "uint64" },
+ { "name": "emblem_style", "type": "uint32" },
+ { "name": "emblem_color", "type": "uint32" },
+ { "name": "border_style", "type": "uint32" },
+ { "name": "border_color", "type": "uint32" },
+ { "name": "background_color", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_self_res.json b/schemas/world/packets/cmsg_self_res.json
new file mode 100644
index 000000000..2cf50c77e
--- /dev/null
+++ b/schemas/world/packets/cmsg_self_res.json
@@ -0,0 +1,5 @@
+{
+ "name": "SelfRes",
+ "opcode": "cmsg_self_res",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_sell_item.json b/schemas/world/packets/cmsg_sell_item.json
new file mode 100644
index 000000000..852041e67
--- /dev/null
+++ b/schemas/world/packets/cmsg_sell_item.json
@@ -0,0 +1,10 @@
+{
+ "name": "SellItem",
+ "opcode": "cmsg_sell_item",
+ "direction": "client",
+ "fields": [
+ { "name": "vendor", "type": "uint64" },
+ { "name": "item", "type": "uint64" },
+ { "name": "amount", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_send_mail.json b/schemas/world/packets/cmsg_send_mail.json
new file mode 100644
index 000000000..239dce87a
--- /dev/null
+++ b/schemas/world/packets/cmsg_send_mail.json
@@ -0,0 +1,18 @@
+{
+ "name": "SendMail",
+ "opcode": "cmsg_send_mail",
+ "direction": "client",
+ "fields": [
+ { "name": "mailbox", "type": "uint64" },
+ { "name": "receiver", "type": "CString" },
+ { "name": "subject", "type": "CString" },
+ { "name": "body", "type": "CString" },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "unknown2", "type": "uint32" },
+ { "name": "item", "type": "uint64" },
+ { "name": "money", "type": "uint32" },
+ { "name": "cash_on_delivery_amount", "type": "uint32" },
+ { "name": "unknown3", "type": "uint32" },
+ { "name": "unknown4", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_action_button.json b/schemas/world/packets/cmsg_set_action_button.json
new file mode 100644
index 000000000..588ff1b56
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_action_button.json
@@ -0,0 +1,11 @@
+{
+ "name": "SetActionButton",
+ "opcode": "cmsg_set_action_button",
+ "direction": "client",
+ "fields": [
+ { "name": "button", "type": "uint8" },
+ { "name": "action", "type": "uint16" },
+ { "name": "misc", "type": "uint8" },
+ { "name": "action_type", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_actionbar_toggles.json b/schemas/world/packets/cmsg_set_actionbar_toggles.json
new file mode 100644
index 000000000..baf3b30c5
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_actionbar_toggles.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetActionbarToggles",
+ "opcode": "cmsg_set_actionbar_toggles",
+ "direction": "client",
+ "fields": [
+ { "name": "action_bar", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_active_mover.json b/schemas/world/packets/cmsg_set_active_mover.json
new file mode 100644
index 000000000..3b1757a49
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_active_mover.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetActiveMover",
+ "opcode": "cmsg_set_active_mover",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_ammo.json b/schemas/world/packets/cmsg_set_ammo.json
new file mode 100644
index 000000000..e1f56e549
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_ammo.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetAmmo",
+ "opcode": "cmsg_set_ammo",
+ "direction": "client",
+ "fields": [
+ { "name": "item", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_faction_atwar.json b/schemas/world/packets/cmsg_set_faction_atwar.json
new file mode 100644
index 000000000..cf839b973
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_faction_atwar.json
@@ -0,0 +1,9 @@
+{
+ "name": "SetFactionAtwar",
+ "opcode": "cmsg_set_faction_atwar",
+ "direction": "client",
+ "fields": [
+ { "name": "faction", "type": "uint16" },
+ { "name": "flags", "type": "FactionFlag" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_faction_inactive.json b/schemas/world/packets/cmsg_set_faction_inactive.json
new file mode 100644
index 000000000..d6b459e04
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_faction_inactive.json
@@ -0,0 +1,9 @@
+{
+ "name": "SetFactionInactive",
+ "opcode": "cmsg_set_faction_inactive",
+ "direction": "client",
+ "fields": [
+ { "name": "faction", "type": "uint16" },
+ { "name": "inactive", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_selection.json b/schemas/world/packets/cmsg_set_selection.json
new file mode 100644
index 000000000..99372a097
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_selection.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetSelection",
+ "opcode": "cmsg_set_selection",
+ "direction": "client",
+ "fields": [
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_target_obsolete.json b/schemas/world/packets/cmsg_set_target_obsolete.json
new file mode 100644
index 000000000..112db5665
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_target_obsolete.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetTargetObsolete",
+ "opcode": "cmsg_set_target_obsolete",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_trade_gold.json b/schemas/world/packets/cmsg_set_trade_gold.json
new file mode 100644
index 000000000..0956f50b1
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_trade_gold.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetTradeGold",
+ "opcode": "cmsg_set_trade_gold",
+ "direction": "client",
+ "fields": [
+ { "name": "gold", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_trade_item.json b/schemas/world/packets/cmsg_set_trade_item.json
new file mode 100644
index 000000000..83d25ea47
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_trade_item.json
@@ -0,0 +1,10 @@
+{
+ "name": "SetTradeItem",
+ "opcode": "cmsg_set_trade_item",
+ "direction": "client",
+ "fields": [
+ { "name": "trade_slot", "type": "uint8" },
+ { "name": "bag", "type": "uint8" },
+ { "name": "slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_set_watched_faction.json b/schemas/world/packets/cmsg_set_watched_faction.json
new file mode 100644
index 000000000..450729931
--- /dev/null
+++ b/schemas/world/packets/cmsg_set_watched_faction.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetWatchedFaction",
+ "opcode": "cmsg_set_watched_faction",
+ "direction": "client",
+ "fields": [
+ { "name": "faction", "type": "uint16" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_setsheathed.json b/schemas/world/packets/cmsg_setsheathed.json
new file mode 100644
index 000000000..a9a655a05
--- /dev/null
+++ b/schemas/world/packets/cmsg_setsheathed.json
@@ -0,0 +1,8 @@
+{
+ "name": "Setsheathed",
+ "opcode": "cmsg_setsheathed",
+ "direction": "client",
+ "fields": [
+ { "name": "sheathed", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_spirit_healer_activate.json b/schemas/world/packets/cmsg_spirit_healer_activate.json
new file mode 100644
index 000000000..30448e3e0
--- /dev/null
+++ b/schemas/world/packets/cmsg_spirit_healer_activate.json
@@ -0,0 +1,8 @@
+{
+ "name": "SpiritHealerActivate",
+ "opcode": "cmsg_spirit_healer_activate",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_split_item.json b/schemas/world/packets/cmsg_split_item.json
new file mode 100644
index 000000000..26de1936b
--- /dev/null
+++ b/schemas/world/packets/cmsg_split_item.json
@@ -0,0 +1,12 @@
+{
+ "name": "SplitItem",
+ "opcode": "cmsg_split_item",
+ "direction": "client",
+ "fields": [
+ { "name": "source_bag", "type": "uint8" },
+ { "name": "source_slot", "type": "uint8" },
+ { "name": "destination_bag", "type": "uint8" },
+ { "name": "destination_slot", "type": "uint8" },
+ { "name": "amount", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_stable_pet.json b/schemas/world/packets/cmsg_stable_pet.json
new file mode 100644
index 000000000..dd2a39fca
--- /dev/null
+++ b/schemas/world/packets/cmsg_stable_pet.json
@@ -0,0 +1,8 @@
+{
+ "name": "StablePet",
+ "opcode": "cmsg_stable_pet",
+ "direction": "client",
+ "fields": [
+ { "name": "stable_master", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_stable_swap_pet.json b/schemas/world/packets/cmsg_stable_swap_pet.json
new file mode 100644
index 000000000..b44d7deec
--- /dev/null
+++ b/schemas/world/packets/cmsg_stable_swap_pet.json
@@ -0,0 +1,9 @@
+{
+ "name": "StableSwapPet",
+ "opcode": "cmsg_stable_swap_pet",
+ "direction": "client",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "pet_slot", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_standstatechange.json b/schemas/world/packets/cmsg_standstatechange.json
new file mode 100644
index 000000000..ff11b6309
--- /dev/null
+++ b/schemas/world/packets/cmsg_standstatechange.json
@@ -0,0 +1,8 @@
+{
+ "name": "Standstatechange",
+ "opcode": "cmsg_standstatechange",
+ "direction": "client",
+ "fields": [
+ { "name": "animation_state", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_summon_response.json b/schemas/world/packets/cmsg_summon_response.json
new file mode 100644
index 000000000..f62ff271a
--- /dev/null
+++ b/schemas/world/packets/cmsg_summon_response.json
@@ -0,0 +1,8 @@
+{
+ "name": "SummonResponse",
+ "opcode": "cmsg_summon_response",
+ "direction": "client",
+ "fields": [
+ { "name": "summoner", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_swap_inv_item.json b/schemas/world/packets/cmsg_swap_inv_item.json
new file mode 100644
index 000000000..83a728fb5
--- /dev/null
+++ b/schemas/world/packets/cmsg_swap_inv_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "SwapInvItem",
+ "opcode": "cmsg_swap_inv_item",
+ "direction": "client",
+ "fields": [
+ { "name": "source_slot", "type": "ItemSlot" },
+ { "name": "destination_slot", "type": "ItemSlot" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_swap_item.json b/schemas/world/packets/cmsg_swap_item.json
new file mode 100644
index 000000000..09405b2f5
--- /dev/null
+++ b/schemas/world/packets/cmsg_swap_item.json
@@ -0,0 +1,11 @@
+{
+ "name": "SwapItem",
+ "opcode": "cmsg_swap_item",
+ "direction": "client",
+ "fields": [
+ { "name": "destination_bag", "type": "uint8" },
+ { "name": "destionation_slot", "type": "uint8" },
+ { "name": "source_bag", "type": "uint8" },
+ { "name": "source_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_talent_wipe_confirm_client.json b/schemas/world/packets/cmsg_talent_wipe_confirm_client.json
new file mode 100644
index 000000000..056bcc39e
--- /dev/null
+++ b/schemas/world/packets/cmsg_talent_wipe_confirm_client.json
@@ -0,0 +1,8 @@
+{
+ "name": "TalentWipeConfirmClient",
+ "opcode": "cmsg_talent_wipe_confirm_client",
+ "direction": "client",
+ "fields": [
+ { "name": "wiping_npc", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_taxinode_status_query.json b/schemas/world/packets/cmsg_taxinode_status_query.json
new file mode 100644
index 000000000..2954efd59
--- /dev/null
+++ b/schemas/world/packets/cmsg_taxinode_status_query.json
@@ -0,0 +1,8 @@
+{
+ "name": "TaxinodeStatusQuery",
+ "opcode": "cmsg_taxinode_status_query",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_taxiqueryavailablenodes.json b/schemas/world/packets/cmsg_taxiqueryavailablenodes.json
new file mode 100644
index 000000000..b9034c64a
--- /dev/null
+++ b/schemas/world/packets/cmsg_taxiqueryavailablenodes.json
@@ -0,0 +1,8 @@
+{
+ "name": "Taxiqueryavailablenodes",
+ "opcode": "cmsg_taxiqueryavailablenodes",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_teleport_to_unit.json b/schemas/world/packets/cmsg_teleport_to_unit.json
new file mode 100644
index 000000000..c7e338887
--- /dev/null
+++ b/schemas/world/packets/cmsg_teleport_to_unit.json
@@ -0,0 +1,8 @@
+{
+ "name": "TeleportToUnit",
+ "opcode": "cmsg_teleport_to_unit",
+ "direction": "client",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_text_emote.json b/schemas/world/packets/cmsg_text_emote.json
new file mode 100644
index 000000000..8f23de07c
--- /dev/null
+++ b/schemas/world/packets/cmsg_text_emote.json
@@ -0,0 +1,10 @@
+{
+ "name": "TextEmote",
+ "opcode": "cmsg_text_emote",
+ "direction": "client",
+ "fields": [
+ { "name": "text_emote", "type": "TextEmote" },
+ { "name": "emote", "type": "uint32" },
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_toggle_cloak.json b/schemas/world/packets/cmsg_toggle_cloak.json
new file mode 100644
index 000000000..e6c209306
--- /dev/null
+++ b/schemas/world/packets/cmsg_toggle_cloak.json
@@ -0,0 +1,5 @@
+{
+ "name": "ToggleCloak",
+ "opcode": "cmsg_toggle_cloak",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_toggle_helm.json b/schemas/world/packets/cmsg_toggle_helm.json
new file mode 100644
index 000000000..00f38ed8c
--- /dev/null
+++ b/schemas/world/packets/cmsg_toggle_helm.json
@@ -0,0 +1,5 @@
+{
+ "name": "ToggleHelm",
+ "opcode": "cmsg_toggle_helm",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_toggle_pvp.json b/schemas/world/packets/cmsg_toggle_pvp.json
new file mode 100644
index 000000000..4c944457b
--- /dev/null
+++ b/schemas/world/packets/cmsg_toggle_pvp.json
@@ -0,0 +1,14 @@
+{
+ "name": "TogglePvp",
+ "opcode": "cmsg_toggle_pvp",
+ "direction": "client",
+ "fields": [
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "enable_pvp", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_trainer_buy_spell.json b/schemas/world/packets/cmsg_trainer_buy_spell.json
new file mode 100644
index 000000000..9f584cad7
--- /dev/null
+++ b/schemas/world/packets/cmsg_trainer_buy_spell.json
@@ -0,0 +1,9 @@
+{
+ "name": "TrainerBuySpell",
+ "opcode": "cmsg_trainer_buy_spell",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_trainer_list.json b/schemas/world/packets/cmsg_trainer_list.json
new file mode 100644
index 000000000..3a335dc2f
--- /dev/null
+++ b/schemas/world/packets/cmsg_trainer_list.json
@@ -0,0 +1,8 @@
+{
+ "name": "TrainerList",
+ "opcode": "cmsg_trainer_list",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_turn_in_petition.json b/schemas/world/packets/cmsg_turn_in_petition.json
new file mode 100644
index 000000000..c3e3ed9c9
--- /dev/null
+++ b/schemas/world/packets/cmsg_turn_in_petition.json
@@ -0,0 +1,8 @@
+{
+ "name": "TurnInPetition",
+ "opcode": "cmsg_turn_in_petition",
+ "direction": "client",
+ "fields": [
+ { "name": "petition", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_tutorial_clear.json b/schemas/world/packets/cmsg_tutorial_clear.json
new file mode 100644
index 000000000..4be4094d8
--- /dev/null
+++ b/schemas/world/packets/cmsg_tutorial_clear.json
@@ -0,0 +1,5 @@
+{
+ "name": "TutorialClear",
+ "opcode": "cmsg_tutorial_clear",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_tutorial_flag.json b/schemas/world/packets/cmsg_tutorial_flag.json
new file mode 100644
index 000000000..092f9aa28
--- /dev/null
+++ b/schemas/world/packets/cmsg_tutorial_flag.json
@@ -0,0 +1,8 @@
+{
+ "name": "TutorialFlag",
+ "opcode": "cmsg_tutorial_flag",
+ "direction": "client",
+ "fields": [
+ { "name": "tutorial_flag", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_tutorial_reset.json b/schemas/world/packets/cmsg_tutorial_reset.json
new file mode 100644
index 000000000..5faa21665
--- /dev/null
+++ b/schemas/world/packets/cmsg_tutorial_reset.json
@@ -0,0 +1,5 @@
+{
+ "name": "TutorialReset",
+ "opcode": "cmsg_tutorial_reset",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_unaccept_trade.json b/schemas/world/packets/cmsg_unaccept_trade.json
new file mode 100644
index 000000000..f875143d5
--- /dev/null
+++ b/schemas/world/packets/cmsg_unaccept_trade.json
@@ -0,0 +1,5 @@
+{
+ "name": "UnacceptTrade",
+ "opcode": "cmsg_unaccept_trade",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/cmsg_unlearn_skill.json b/schemas/world/packets/cmsg_unlearn_skill.json
new file mode 100644
index 000000000..76751c0e4
--- /dev/null
+++ b/schemas/world/packets/cmsg_unlearn_skill.json
@@ -0,0 +1,8 @@
+{
+ "name": "UnlearnSkill",
+ "opcode": "cmsg_unlearn_skill",
+ "direction": "client",
+ "fields": [
+ { "name": "skill", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_unstable_pet.json b/schemas/world/packets/cmsg_unstable_pet.json
new file mode 100644
index 000000000..2fa28826d
--- /dev/null
+++ b/schemas/world/packets/cmsg_unstable_pet.json
@@ -0,0 +1,9 @@
+{
+ "name": "UnstablePet",
+ "opcode": "cmsg_unstable_pet",
+ "direction": "client",
+ "fields": [
+ { "name": "stable_master", "type": "uint64" },
+ { "name": "pet_number", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_update_account_data.json b/schemas/world/packets/cmsg_update_account_data.json
index 692744160..9f40e2769 100644
--- a/schemas/world/packets/cmsg_update_account_data.json
+++ b/schemas/world/packets/cmsg_update_account_data.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "data_type", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/cmsg_use_item.json b/schemas/world/packets/cmsg_use_item.json
new file mode 100644
index 000000000..789e93e22
--- /dev/null
+++ b/schemas/world/packets/cmsg_use_item.json
@@ -0,0 +1,11 @@
+{
+ "name": "UseItem",
+ "opcode": "cmsg_use_item",
+ "direction": "client",
+ "fields": [
+ { "name": "bag_index", "type": "uint8" },
+ { "name": "bag_slot", "type": "uint8" },
+ { "name": "spell_index", "type": "uint8" },
+ { "name": "targets", "type": "SpellCastTargets" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_warden_data.json b/schemas/world/packets/cmsg_warden_data.json
new file mode 100644
index 000000000..a34493515
--- /dev/null
+++ b/schemas/world/packets/cmsg_warden_data.json
@@ -0,0 +1,8 @@
+{
+ "name": "WardenData",
+ "opcode": "cmsg_warden_data",
+ "direction": "client",
+ "fields": [
+ { "name": "encrypted_data", "type": "uint8", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_who.json b/schemas/world/packets/cmsg_who.json
new file mode 100644
index 000000000..99a676617
--- /dev/null
+++ b/schemas/world/packets/cmsg_who.json
@@ -0,0 +1,17 @@
+{
+ "name": "Who",
+ "opcode": "cmsg_who",
+ "direction": "client",
+ "fields": [
+ { "name": "minimum_level", "type": "uint32" },
+ { "name": "maximum_level", "type": "uint32" },
+ { "name": "player_name", "type": "CString" },
+ { "name": "guild_name", "type": "CString" },
+ { "name": "race_mask", "type": "uint32" },
+ { "name": "class_mask", "type": "uint32" },
+ { "name": "amount_of_zones", "type": "uint32" },
+ { "name": "zones", "type": "uint32", "array": {"count_field": "amount_of_zones"} },
+ { "name": "amount_of_strings", "type": "uint32" },
+ { "name": "search_strings", "type": "CString", "array": {"count_field": "amount_of_strings"} }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_whois.json b/schemas/world/packets/cmsg_whois.json
new file mode 100644
index 000000000..ab1700bf6
--- /dev/null
+++ b/schemas/world/packets/cmsg_whois.json
@@ -0,0 +1,8 @@
+{
+ "name": "Whois",
+ "opcode": "cmsg_whois",
+ "direction": "client",
+ "fields": [
+ { "name": "character", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_world_teleport.json b/schemas/world/packets/cmsg_world_teleport.json
new file mode 100644
index 000000000..96359fd65
--- /dev/null
+++ b/schemas/world/packets/cmsg_world_teleport.json
@@ -0,0 +1,11 @@
+{
+ "name": "WorldTeleport",
+ "opcode": "cmsg_world_teleport",
+ "direction": "client",
+ "fields": [
+ { "name": "time", "type": "uint32" },
+ { "name": "map", "type": "Map" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "orientation", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_wrap_item.json b/schemas/world/packets/cmsg_wrap_item.json
new file mode 100644
index 000000000..e72ecfb22
--- /dev/null
+++ b/schemas/world/packets/cmsg_wrap_item.json
@@ -0,0 +1,11 @@
+{
+ "name": "WrapItem",
+ "opcode": "cmsg_wrap_item",
+ "direction": "client",
+ "fields": [
+ { "name": "gift_bag_index", "type": "uint8" },
+ { "name": "gift_slot", "type": "uint8" },
+ { "name": "item_bag_index", "type": "uint8" },
+ { "name": "item_slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/cmsg_zoneupdate.json b/schemas/world/packets/cmsg_zoneupdate.json
index db51194d8..c728c532b 100644
--- a/schemas/world/packets/cmsg_zoneupdate.json
+++ b/schemas/world/packets/cmsg_zoneupdate.json
@@ -3,6 +3,6 @@
"opcode": "cmsg_zoneupdate",
"direction": "client",
"fields": [
- { "name": "area", "type": "uint32" }
+ { "name": "area", "type": "Area" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/msg_move_water_walk.json b/schemas/world/packets/msg_move_water_walk.json
new file mode 100644
index 000000000..c25256da8
--- /dev/null
+++ b/schemas/world/packets/msg_move_water_walk.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveWaterWalk",
+ "opcode": "msg_move_water_walk",
+ "direction": "client",
+ "fields": [
+ { "name": "player", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/msg_move_worldport_ack.json b/schemas/world/packets/msg_move_worldport_ack.json
new file mode 100644
index 000000000..9b86ec656
--- /dev/null
+++ b/schemas/world/packets/msg_move_worldport_ack.json
@@ -0,0 +1,5 @@
+{
+ "name": "MoveWorldportAck",
+ "opcode": "msg_move_worldport_ack",
+ "direction": "client"
+}
diff --git a/schemas/world/packets/msg_petition_decline.json b/schemas/world/packets/msg_petition_decline.json
new file mode 100644
index 000000000..2895862b4
--- /dev/null
+++ b/schemas/world/packets/msg_petition_decline.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetitionDecline",
+ "opcode": "msg_petition_decline",
+ "direction": "client",
+ "fields": [
+ { "name": "petition", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/msg_petition_rename.json b/schemas/world/packets/msg_petition_rename.json
new file mode 100644
index 000000000..6562eb05a
--- /dev/null
+++ b/schemas/world/packets/msg_petition_rename.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetitionRename",
+ "opcode": "msg_petition_rename",
+ "direction": "client",
+ "fields": [
+ { "name": "petition", "type": "uint64" },
+ { "name": "new_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/msg_quest_push_result.json b/schemas/world/packets/msg_quest_push_result.json
new file mode 100644
index 000000000..f3031313d
--- /dev/null
+++ b/schemas/world/packets/msg_quest_push_result.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestPushResult",
+ "opcode": "msg_quest_push_result",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "message", "type": "QuestPartyMessage" }
+ ]
+}
diff --git a/schemas/world/packets/msg_tabardvendor_activate.json b/schemas/world/packets/msg_tabardvendor_activate.json
new file mode 100644
index 000000000..38affd429
--- /dev/null
+++ b/schemas/world/packets/msg_tabardvendor_activate.json
@@ -0,0 +1,8 @@
+{
+ "name": "TabardvendorActivate",
+ "opcode": "msg_tabardvendor_activate",
+ "direction": "client",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_account_data_times.json b/schemas/world/packets/smsg_account_data_times.json
index 6e04e7c06..3350f5ba8 100644
--- a/schemas/world/packets/smsg_account_data_times.json
+++ b/schemas/world/packets/smsg_account_data_times.json
@@ -3,6 +3,6 @@
"opcode": "smsg_account_data_times",
"direction": "server",
"fields": [
- { "name": "data", "type": "uint32", "array": { "size": 32 } }
+ { "name": "data", "type": "uint32", "array": {"size": 32} }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/smsg_action_buttons.json b/schemas/world/packets/smsg_action_buttons.json
new file mode 100644
index 000000000..9df4719ab
--- /dev/null
+++ b/schemas/world/packets/smsg_action_buttons.json
@@ -0,0 +1,8 @@
+{
+ "name": "ActionButtons",
+ "opcode": "smsg_action_buttons",
+ "direction": "server",
+ "fields": [
+ { "name": "data", "type": "uint32", "array": {"size": 120} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_activatetaxireply.json b/schemas/world/packets/smsg_activatetaxireply.json
new file mode 100644
index 000000000..2cdf9a651
--- /dev/null
+++ b/schemas/world/packets/smsg_activatetaxireply.json
@@ -0,0 +1,8 @@
+{
+ "name": "Activatetaxireply",
+ "opcode": "smsg_activatetaxireply",
+ "direction": "server",
+ "fields": [
+ { "name": "reply", "type": "ActivateTaxiReply" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_addon_info.json b/schemas/world/packets/smsg_addon_info.json
new file mode 100644
index 000000000..c03600721
--- /dev/null
+++ b/schemas/world/packets/smsg_addon_info.json
@@ -0,0 +1,8 @@
+{
+ "name": "AddonInfo",
+ "opcode": "smsg_addon_info",
+ "direction": "server",
+ "fields": [
+ { "name": "addons", "type": "Addon", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_ai_reaction.json b/schemas/world/packets/smsg_ai_reaction.json
new file mode 100644
index 000000000..838ed8b18
--- /dev/null
+++ b/schemas/world/packets/smsg_ai_reaction.json
@@ -0,0 +1,9 @@
+{
+ "name": "AiReaction",
+ "opcode": "smsg_ai_reaction",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "reaction", "type": "AiReaction" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_area_spirit_healer_time.json b/schemas/world/packets/smsg_area_spirit_healer_time.json
new file mode 100644
index 000000000..fb8ea3913
--- /dev/null
+++ b/schemas/world/packets/smsg_area_spirit_healer_time.json
@@ -0,0 +1,9 @@
+{
+ "name": "AreaSpiritHealerTime",
+ "opcode": "smsg_area_spirit_healer_time",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "next_resurrect_time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_area_trigger_message.json b/schemas/world/packets/smsg_area_trigger_message.json
new file mode 100644
index 000000000..977e90cba
--- /dev/null
+++ b/schemas/world/packets/smsg_area_trigger_message.json
@@ -0,0 +1,8 @@
+{
+ "name": "AreaTriggerMessage",
+ "opcode": "smsg_area_trigger_message",
+ "direction": "server",
+ "fields": [
+ { "name": "message", "type": "PrefixedString32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_attackerstateupdate.json b/schemas/world/packets/smsg_attackerstateupdate.json
new file mode 100644
index 000000000..a4884f894
--- /dev/null
+++ b/schemas/world/packets/smsg_attackerstateupdate.json
@@ -0,0 +1,17 @@
+{
+ "name": "Attackerstateupdate",
+ "opcode": "smsg_attackerstateupdate",
+ "direction": "server",
+ "fields": [
+ { "name": "hit_info", "type": "HitInfo" },
+ { "name": "attacker", "type": "PackedGuid" },
+ { "name": "target", "type": "PackedGuid" },
+ { "name": "total_damage", "type": "uint32" },
+ { "name": "amount_of_damages", "type": "uint8" },
+ { "name": "damages", "type": "DamageInfo", "array": {"count_field": "amount_of_damages"} },
+ { "name": "damage_state", "type": "uint32" },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "spell_id", "type": "uint32" },
+ { "name": "blocked_amount", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_attackstart.json b/schemas/world/packets/smsg_attackstart.json
new file mode 100644
index 000000000..d408db9c3
--- /dev/null
+++ b/schemas/world/packets/smsg_attackstart.json
@@ -0,0 +1,9 @@
+{
+ "name": "Attackstart",
+ "opcode": "smsg_attackstart",
+ "direction": "server",
+ "fields": [
+ { "name": "attacker", "type": "uint64" },
+ { "name": "victim", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_attackstop.json b/schemas/world/packets/smsg_attackstop.json
new file mode 100644
index 000000000..4f63b4383
--- /dev/null
+++ b/schemas/world/packets/smsg_attackstop.json
@@ -0,0 +1,10 @@
+{
+ "name": "Attackstop",
+ "opcode": "smsg_attackstop",
+ "direction": "server",
+ "fields": [
+ { "name": "player", "type": "PackedGuid" },
+ { "name": "enemy", "type": "PackedGuid" },
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_attackswing_badfacing.json b/schemas/world/packets/smsg_attackswing_badfacing.json
new file mode 100644
index 000000000..829a7ae55
--- /dev/null
+++ b/schemas/world/packets/smsg_attackswing_badfacing.json
@@ -0,0 +1,5 @@
+{
+ "name": "AttackswingBadfacing",
+ "opcode": "smsg_attackswing_badfacing",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_attackswing_cant_attack.json b/schemas/world/packets/smsg_attackswing_cant_attack.json
new file mode 100644
index 000000000..053a2010e
--- /dev/null
+++ b/schemas/world/packets/smsg_attackswing_cant_attack.json
@@ -0,0 +1,5 @@
+{
+ "name": "AttackswingCantAttack",
+ "opcode": "smsg_attackswing_cant_attack",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_attackswing_deadtarget.json b/schemas/world/packets/smsg_attackswing_deadtarget.json
new file mode 100644
index 000000000..53f550475
--- /dev/null
+++ b/schemas/world/packets/smsg_attackswing_deadtarget.json
@@ -0,0 +1,5 @@
+{
+ "name": "AttackswingDeadtarget",
+ "opcode": "smsg_attackswing_deadtarget",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_attackswing_notinrange.json b/schemas/world/packets/smsg_attackswing_notinrange.json
new file mode 100644
index 000000000..31f2fafeb
--- /dev/null
+++ b/schemas/world/packets/smsg_attackswing_notinrange.json
@@ -0,0 +1,5 @@
+{
+ "name": "AttackswingNotinrange",
+ "opcode": "smsg_attackswing_notinrange",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_attackswing_notstanding.json b/schemas/world/packets/smsg_attackswing_notstanding.json
new file mode 100644
index 000000000..d7c8edf67
--- /dev/null
+++ b/schemas/world/packets/smsg_attackswing_notstanding.json
@@ -0,0 +1,5 @@
+{
+ "name": "AttackswingNotstanding",
+ "opcode": "smsg_attackswing_notstanding",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_auction_bidder_list_result.json b/schemas/world/packets/smsg_auction_bidder_list_result.json
new file mode 100644
index 000000000..ef4c44e4f
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_bidder_list_result.json
@@ -0,0 +1,10 @@
+{
+ "name": "AuctionBidderListResult",
+ "opcode": "smsg_auction_bidder_list_result",
+ "direction": "server",
+ "fields": [
+ { "name": "count", "type": "uint32" },
+ { "name": "auctions", "type": "AuctionListItem", "array": {"count_field": "count"} },
+ { "name": "total_amount_of_auctions", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_bidder_notification.json b/schemas/world/packets/smsg_auction_bidder_notification.json
new file mode 100644
index 000000000..2d4af7a26
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_bidder_notification.json
@@ -0,0 +1,14 @@
+{
+ "name": "AuctionBidderNotification",
+ "opcode": "smsg_auction_bidder_notification",
+ "direction": "server",
+ "fields": [
+ { "name": "auction_house", "type": "AuctionHouse" },
+ { "name": "auction_id", "type": "uint32" },
+ { "name": "bidder", "type": "uint64" },
+ { "name": "won", "type": "uint32" },
+ { "name": "out_bid", "type": "uint32" },
+ { "name": "item_template", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_command_result.json b/schemas/world/packets/smsg_auction_command_result.json
new file mode 100644
index 000000000..30aff80ab
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_command_result.json
@@ -0,0 +1,64 @@
+{
+ "name": "AuctionCommandResult",
+ "opcode": "smsg_auction_command_result",
+ "direction": "server",
+ "fields": [
+ { "name": "auction_id", "type": "uint32" },
+ { "name": "action", "type": "AuctionCommandAction" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "action", "value": "bid_placed" },
+ "fields": [
+ { "name": "result", "type": "AuctionCommandResult" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "ok" },
+ "fields": [
+ { "name": "auction_outbid1", "type": "uint32" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "result", "value": "err_inventory" },
+ "fields": [
+ { "name": "inventory_result", "type": "InventoryResult" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "result", "value": "err_higher_bid" },
+ "fields": [
+ { "name": "higher_bidder", "type": "uint64" },
+ { "name": "new_bid", "type": "uint32" },
+ { "name": "auction_outbid2", "type": "uint32" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "else": [
+ { "name": "result2", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "result2", "value": 1 },
+ "fields": [
+ { "name": "inventory_result2", "type": "uint8" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "result2", "value": 5 },
+ "fields": [
+ { "name": "higher_bidder2", "type": "uint64" },
+ { "name": "new_bid2", "type": "uint32" },
+ { "name": "auction_outbid3", "type": "uint32" }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_hello_server.json b/schemas/world/packets/smsg_auction_hello_server.json
new file mode 100644
index 000000000..f08e95da7
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_hello_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "AuctionHelloServer",
+ "opcode": "smsg_auction_hello_server",
+ "direction": "server",
+ "fields": [
+ { "name": "auctioneer", "type": "uint64" },
+ { "name": "auction_house", "type": "AuctionHouse" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_list_result.json b/schemas/world/packets/smsg_auction_list_result.json
new file mode 100644
index 000000000..cbaedcac4
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_list_result.json
@@ -0,0 +1,10 @@
+{
+ "name": "AuctionListResult",
+ "opcode": "smsg_auction_list_result",
+ "direction": "server",
+ "fields": [
+ { "name": "count", "type": "uint32" },
+ { "name": "auctions", "type": "AuctionListItem", "array": {"count_field": "count"} },
+ { "name": "total_amount_of_auctions", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_owner_list_result.json b/schemas/world/packets/smsg_auction_owner_list_result.json
new file mode 100644
index 000000000..f2e501907
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_owner_list_result.json
@@ -0,0 +1,10 @@
+{
+ "name": "AuctionOwnerListResult",
+ "opcode": "smsg_auction_owner_list_result",
+ "direction": "server",
+ "fields": [
+ { "name": "count", "type": "uint32" },
+ { "name": "auctions", "type": "AuctionListItem", "array": {"count_field": "count"} },
+ { "name": "total_amount_of_auctions", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_owner_notification.json b/schemas/world/packets/smsg_auction_owner_notification.json
new file mode 100644
index 000000000..4683f4dcc
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_owner_notification.json
@@ -0,0 +1,13 @@
+{
+ "name": "AuctionOwnerNotification",
+ "opcode": "smsg_auction_owner_notification",
+ "direction": "server",
+ "fields": [
+ { "name": "auction_id", "type": "uint32" },
+ { "name": "bid", "type": "uint32" },
+ { "name": "auction_out_bid", "type": "uint32" },
+ { "name": "bidder", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auction_removed_notification.json b/schemas/world/packets/smsg_auction_removed_notification.json
new file mode 100644
index 000000000..08a2f47ac
--- /dev/null
+++ b/schemas/world/packets/smsg_auction_removed_notification.json
@@ -0,0 +1,10 @@
+{
+ "name": "AuctionRemovedNotification",
+ "opcode": "smsg_auction_removed_notification",
+ "direction": "server",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ { "name": "item_template", "type": "uint32" },
+ { "name": "random_property_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_auth_challenge.json b/schemas/world/packets/smsg_auth_challenge.json
index 451cbbb31..1ef0cce0b 100644
--- a/schemas/world/packets/smsg_auth_challenge.json
+++ b/schemas/world/packets/smsg_auth_challenge.json
@@ -1 +1,8 @@
-{}
+{
+ "name": "AuthChallenge",
+ "opcode": "smsg_auth_challenge",
+ "direction": "server",
+ "fields": [
+ { "name": "seed", "type": "uint32" }
+ ]
+}
\ No newline at end of file
diff --git a/schemas/world/packets/smsg_auth_response.json b/schemas/world/packets/smsg_auth_response.json
index 0a9cd3edd..05f5c1ba8 100644
--- a/schemas/world/packets/smsg_auth_response.json
+++ b/schemas/world/packets/smsg_auth_response.json
@@ -5,19 +5,22 @@
"fields": [
{ "name": "result", "type": "Result" },
{
- "type": "group",
- "when": { "op": "eq", "field": "result", "value": "auth_wait_queue" },
- "fields": [
- { "name": "queue_position", "type": "uint32" }
- ]
- },
- {
- "type": "group",
- "when": { "op": "eq", "field": "result", "value": "auth_ok" },
- "fields": [
- { "name": "billing_time", "type": "uint32" },
- { "name": "billing_flags", "type": "uint8" },
- { "name": "billing_rested", "type": "uint32" }
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "auth_wait_queue" },
+ "fields": [
+ { "name": "queue_position", "type": "uint32" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "result", "value": "auth_ok" },
+ "fields": [
+ { "name": "billing_time", "type": "uint32" },
+ { "name": "billing_flags", "type": "uint8" },
+ { "name": "billing_rested", "type": "uint32" }
+ ]
+ }
]
}
]
diff --git a/schemas/world/packets/smsg_battlefield_list.json b/schemas/world/packets/smsg_battlefield_list.json
new file mode 100644
index 000000000..823642d2b
--- /dev/null
+++ b/schemas/world/packets/smsg_battlefield_list.json
@@ -0,0 +1,12 @@
+{
+ "name": "BattlefieldList",
+ "opcode": "smsg_battlefield_list",
+ "direction": "server",
+ "fields": [
+ { "name": "battlemaster", "type": "uint64" },
+ { "name": "map", "type": "Map" },
+ { "name": "bracket", "type": "BattlegroundBracket" },
+ { "name": "number_of_battlegrounds", "type": "uint32" },
+ { "name": "battlegrounds", "type": "uint32", "array": {"count_field": "number_of_battlegrounds"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_battlefield_status.json b/schemas/world/packets/smsg_battlefield_status.json
index 395225d5a..90c439843 100644
--- a/schemas/world/packets/smsg_battlefield_status.json
+++ b/schemas/world/packets/smsg_battlefield_status.json
@@ -4,7 +4,7 @@
"direction": "server",
"fields": [
{ "name": "position", "type": "uint32" },
- { "name": "map", "type": "uint32" },
+ { "name": "map", "type": "Map" },
{
"type": "group",
"when": { "op": "neq", "field": "map", "value": 0 },
@@ -20,21 +20,24 @@
]
},
{
- "type": "group",
- "when": { "op": "eq", "field": "status", "value": "wait_join" },
- "fields": [
- { "name": "time_to_remove_in_queue_ms", "type": "uint32" }
- ]
- },
- {
- "type": "group",
- "when": { "op": "eq", "field": "status", "value": "in_progress" },
- "fields": [
- { "name": "time_to_bg_autoleave_ms", "type": "uint32" },
- { "name": "time_to_bg_start_ms", "type": "uint32" }
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "status", "value": "wait_join" },
+ "fields": [
+ { "name": "time_to_remove_in_queue_ms", "type": "uint32" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "status", "value": "in_progress" },
+ "fields": [
+ { "name": "time_to_bg_autoleave_ms", "type": "uint32" },
+ { "name": "time_to_bg_start_ms", "type": "uint32" }
+ ]
+ }
]
}
]
}
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/smsg_battleground_player_joined.json b/schemas/world/packets/smsg_battleground_player_joined.json
new file mode 100644
index 000000000..8dbaaa088
--- /dev/null
+++ b/schemas/world/packets/smsg_battleground_player_joined.json
@@ -0,0 +1,8 @@
+{
+ "name": "BattlegroundPlayerJoined",
+ "opcode": "smsg_battleground_player_joined",
+ "direction": "server",
+ "fields": [
+ { "name": "player", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_battleground_player_left.json b/schemas/world/packets/smsg_battleground_player_left.json
new file mode 100644
index 000000000..93f869d9e
--- /dev/null
+++ b/schemas/world/packets/smsg_battleground_player_left.json
@@ -0,0 +1,8 @@
+{
+ "name": "BattlegroundPlayerLeft",
+ "opcode": "smsg_battleground_player_left",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_battleground_player_positions_server.json b/schemas/world/packets/smsg_battleground_player_positions_server.json
new file mode 100644
index 000000000..ad64458f7
--- /dev/null
+++ b/schemas/world/packets/smsg_battleground_player_positions_server.json
@@ -0,0 +1,11 @@
+{
+ "name": "BattlegroundPlayerPositionsServer",
+ "opcode": "smsg_battleground_player_positions_server",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_teammates", "type": "uint32" },
+ { "name": "teammates", "type": "BattlegroundPlayerPosition", "array": {"count_field": "amount_of_teammates"} },
+ { "name": "amount_of_carriers", "type": "uint8" },
+ { "name": "carriers", "type": "BattlegroundPlayerPosition", "array": {"count_field": "amount_of_carriers"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_binder_confirm.json b/schemas/world/packets/smsg_binder_confirm.json
new file mode 100644
index 000000000..e9b14a06e
--- /dev/null
+++ b/schemas/world/packets/smsg_binder_confirm.json
@@ -0,0 +1,8 @@
+{
+ "name": "BinderConfirm",
+ "opcode": "smsg_binder_confirm",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_bindpointupdate.json b/schemas/world/packets/smsg_bindpointupdate.json
new file mode 100644
index 000000000..98af3f9c7
--- /dev/null
+++ b/schemas/world/packets/smsg_bindpointupdate.json
@@ -0,0 +1,10 @@
+{
+ "name": "Bindpointupdate",
+ "opcode": "smsg_bindpointupdate",
+ "direction": "server",
+ "fields": [
+ { "name": "position", "type": "Vector3" },
+ { "name": "map", "type": "Map" },
+ { "name": "area", "type": "Area" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_buy_bank_slot_result.json b/schemas/world/packets/smsg_buy_bank_slot_result.json
new file mode 100644
index 000000000..6fd14e948
--- /dev/null
+++ b/schemas/world/packets/smsg_buy_bank_slot_result.json
@@ -0,0 +1,8 @@
+{
+ "name": "BuyBankSlotResult",
+ "opcode": "smsg_buy_bank_slot_result",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "BuyBankSlotResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_buy_failed.json b/schemas/world/packets/smsg_buy_failed.json
new file mode 100644
index 000000000..8d509a491
--- /dev/null
+++ b/schemas/world/packets/smsg_buy_failed.json
@@ -0,0 +1,10 @@
+{
+ "name": "BuyFailed",
+ "opcode": "smsg_buy_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "result", "type": "BuyResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_buy_item.json b/schemas/world/packets/smsg_buy_item.json
new file mode 100644
index 000000000..64ccdca72
--- /dev/null
+++ b/schemas/world/packets/smsg_buy_item.json
@@ -0,0 +1,11 @@
+{
+ "name": "BuyItem",
+ "opcode": "smsg_buy_item",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "vendor_slot", "type": "uint32" },
+ { "name": "amount_for_sale", "type": "uint32" },
+ { "name": "amount_bought", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_cancel_auto_repeat.json b/schemas/world/packets/smsg_cancel_auto_repeat.json
new file mode 100644
index 000000000..079c98d11
--- /dev/null
+++ b/schemas/world/packets/smsg_cancel_auto_repeat.json
@@ -0,0 +1,5 @@
+{
+ "name": "CancelAutoRepeat",
+ "opcode": "smsg_cancel_auto_repeat",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_cancel_combat.json b/schemas/world/packets/smsg_cancel_combat.json
new file mode 100644
index 000000000..b66d2fe49
--- /dev/null
+++ b/schemas/world/packets/smsg_cancel_combat.json
@@ -0,0 +1,5 @@
+{
+ "name": "CancelCombat",
+ "opcode": "smsg_cancel_combat",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_cast_result.json b/schemas/world/packets/smsg_cast_result.json
new file mode 100644
index 000000000..cce60c025
--- /dev/null
+++ b/schemas/world/packets/smsg_cast_result.json
@@ -0,0 +1,41 @@
+{
+ "name": "CastResult",
+ "opcode": "smsg_cast_result",
+ "direction": "server",
+ "fields": [
+ { "name": "spell", "type": "uint32" },
+ { "name": "result", "type": "SimpleSpellCastResult" },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "result", "value": "failure" },
+ "fields": [
+ { "name": "reason", "type": "CastFailureReason" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "reason", "value": "requires_spell_focus" },
+ "fields": [
+ { "name": "required_spell_focus", "type": "uint32" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "reason", "value": "requires_area" },
+ "fields": [
+ { "name": "area", "type": "Area" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "reason", "value": "equipped_item_class" },
+ "fields": [
+ { "name": "equipped_item_class", "type": "uint32" },
+ { "name": "equipped_item_subclass_mask", "type": "uint32" },
+ { "name": "equipped_item_inventory_type_mask", "type": "uint32" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_channel_list.json b/schemas/world/packets/smsg_channel_list.json
new file mode 100644
index 000000000..849d4f9d8
--- /dev/null
+++ b/schemas/world/packets/smsg_channel_list.json
@@ -0,0 +1,11 @@
+{
+ "name": "ChannelList",
+ "opcode": "smsg_channel_list",
+ "direction": "server",
+ "fields": [
+ { "name": "channel_name", "type": "CString" },
+ { "name": "channel_flags", "type": "ChannelFlags" },
+ { "name": "amount_of_members", "type": "uint32" },
+ { "name": "members", "type": "ChannelMember", "array": {"count_field": "amount_of_members"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_channel_notify.json b/schemas/world/packets/smsg_channel_notify.json
new file mode 100644
index 000000000..4056fee91
--- /dev/null
+++ b/schemas/world/packets/smsg_channel_notify.json
@@ -0,0 +1,9 @@
+{
+ "name": "ChannelNotify",
+ "opcode": "smsg_channel_notify",
+ "direction": "server",
+ "fields": [
+ { "name": "notify_type", "type": "ChatNotify" },
+ { "name": "channel_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_channel_start_server.json b/schemas/world/packets/smsg_channel_start_server.json
new file mode 100644
index 000000000..9f361f6bd
--- /dev/null
+++ b/schemas/world/packets/smsg_channel_start_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "ChannelStartServer",
+ "opcode": "smsg_channel_start_server",
+ "direction": "server",
+ "fields": [
+ { "name": "spell", "type": "uint32" },
+ { "name": "duration", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_channel_update_server.json b/schemas/world/packets/smsg_channel_update_server.json
new file mode 100644
index 000000000..0b6d4b8ae
--- /dev/null
+++ b/schemas/world/packets/smsg_channel_update_server.json
@@ -0,0 +1,8 @@
+{
+ "name": "ChannelUpdateServer",
+ "opcode": "smsg_channel_update_server",
+ "direction": "server",
+ "fields": [
+ { "name": "time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_char_create.json b/schemas/world/packets/smsg_char_create.json
new file mode 100644
index 000000000..19a96d928
--- /dev/null
+++ b/schemas/world/packets/smsg_char_create.json
@@ -0,0 +1,8 @@
+{
+ "name": "CharCreate",
+ "opcode": "smsg_char_create",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "Result" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_char_delete.json b/schemas/world/packets/smsg_char_delete.json
new file mode 100644
index 000000000..4f741e8aa
--- /dev/null
+++ b/schemas/world/packets/smsg_char_delete.json
@@ -0,0 +1,8 @@
+{
+ "name": "CharDelete",
+ "opcode": "smsg_char_delete",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "Result" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_char_enum.json b/schemas/world/packets/smsg_char_enum.json
new file mode 100644
index 000000000..269ec6c2e
--- /dev/null
+++ b/schemas/world/packets/smsg_char_enum.json
@@ -0,0 +1,9 @@
+{
+ "name": "CharEnum",
+ "opcode": "smsg_char_enum",
+ "direction": "server",
+ "fields": [
+ { "name": "count", "type": "uint8" },
+ { "name": "characters", "type": "Character", "array": {"count_field": "count"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_char_rename.json b/schemas/world/packets/smsg_char_rename.json
index 6cf523c44..b47f4b080 100644
--- a/schemas/world/packets/smsg_char_rename.json
+++ b/schemas/world/packets/smsg_char_rename.json
@@ -3,8 +3,8 @@
"opcode": "smsg_char_rename",
"direction": "server",
"fields": [
- { "name": "result", "type": "Result" },
- { "name": "id", "type": "uint64" },
+ { "name": "result", "type": "Result" },
+ { "name": "id", "type": "uint64" },
{ "name": "name", "type": "CString" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/smsg_character_login_failed.json b/schemas/world/packets/smsg_character_login_failed.json
new file mode 100644
index 000000000..d4725bb1c
--- /dev/null
+++ b/schemas/world/packets/smsg_character_login_failed.json
@@ -0,0 +1,8 @@
+{
+ "name": "CharacterLoginFailed",
+ "opcode": "smsg_character_login_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "Result" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_chat_player_not_found.json b/schemas/world/packets/smsg_chat_player_not_found.json
new file mode 100644
index 000000000..4e047a3be
--- /dev/null
+++ b/schemas/world/packets/smsg_chat_player_not_found.json
@@ -0,0 +1,8 @@
+{
+ "name": "ChatPlayerNotFound",
+ "opcode": "smsg_chat_player_not_found",
+ "direction": "server",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_chat_restricted.json b/schemas/world/packets/smsg_chat_restricted.json
new file mode 100644
index 000000000..6e581a969
--- /dev/null
+++ b/schemas/world/packets/smsg_chat_restricted.json
@@ -0,0 +1,5 @@
+{
+ "name": "ChatRestricted",
+ "opcode": "smsg_chat_restricted",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_chat_wrong_faction.json b/schemas/world/packets/smsg_chat_wrong_faction.json
new file mode 100644
index 000000000..a595e53b6
--- /dev/null
+++ b/schemas/world/packets/smsg_chat_wrong_faction.json
@@ -0,0 +1,5 @@
+{
+ "name": "ChatWrongFaction",
+ "opcode": "smsg_chat_wrong_faction",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_clear_cooldown.json b/schemas/world/packets/smsg_clear_cooldown.json
new file mode 100644
index 000000000..7dd6363be
--- /dev/null
+++ b/schemas/world/packets/smsg_clear_cooldown.json
@@ -0,0 +1,9 @@
+{
+ "name": "ClearCooldown",
+ "opcode": "smsg_clear_cooldown",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_client_control_update.json b/schemas/world/packets/smsg_client_control_update.json
new file mode 100644
index 000000000..0eaccbf10
--- /dev/null
+++ b/schemas/world/packets/smsg_client_control_update.json
@@ -0,0 +1,9 @@
+{
+ "name": "ClientControlUpdate",
+ "opcode": "smsg_client_control_update",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "allow_movement", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_cooldown_event.json b/schemas/world/packets/smsg_cooldown_event.json
new file mode 100644
index 000000000..ac822f27a
--- /dev/null
+++ b/schemas/world/packets/smsg_cooldown_event.json
@@ -0,0 +1,9 @@
+{
+ "name": "CooldownEvent",
+ "opcode": "smsg_cooldown_event",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_corpse_query_server.json b/schemas/world/packets/smsg_corpse_query_server.json
new file mode 100644
index 000000000..6a5ff6808
--- /dev/null
+++ b/schemas/world/packets/smsg_corpse_query_server.json
@@ -0,0 +1,17 @@
+{
+ "name": "CorpseQueryServer",
+ "opcode": "smsg_corpse_query_server",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "CorpseQueryResult" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "result", "value": "found" },
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "corpse_map", "type": "Map" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_corpse_reclaim_delay.json b/schemas/world/packets/smsg_corpse_reclaim_delay.json
new file mode 100644
index 000000000..752426e1f
--- /dev/null
+++ b/schemas/world/packets/smsg_corpse_reclaim_delay.json
@@ -0,0 +1,8 @@
+{
+ "name": "CorpseReclaimDelay",
+ "opcode": "smsg_corpse_reclaim_delay",
+ "direction": "server",
+ "fields": [
+ { "name": "delay", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_creature_query_response.json b/schemas/world/packets/smsg_creature_query_response.json
new file mode 100644
index 000000000..f133b6eda
--- /dev/null
+++ b/schemas/world/packets/smsg_creature_query_response.json
@@ -0,0 +1,28 @@
+{
+ "name": "CreatureQueryResponse",
+ "opcode": "smsg_creature_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "creature_entry", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "name1", "type": "CString" },
+ { "name": "name2", "type": "CString" },
+ { "name": "name3", "type": "CString" },
+ { "name": "name4", "type": "CString" },
+ { "name": "sub_name", "type": "CString" },
+ { "name": "type_flags", "type": "uint32" },
+ { "name": "creature_type", "type": "uint32" },
+ { "name": "creature_family", "type": "uint32" },
+ { "name": "creature_rank", "type": "uint32" },
+ { "name": "unknown0", "type": "uint32" },
+ { "name": "spell_data_id", "type": "uint32" },
+ { "name": "display_id", "type": "uint32" },
+ { "name": "civilian", "type": "uint8" },
+ { "name": "racial_leader", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_defense_message.json b/schemas/world/packets/smsg_defense_message.json
new file mode 100644
index 000000000..e94f8355a
--- /dev/null
+++ b/schemas/world/packets/smsg_defense_message.json
@@ -0,0 +1,9 @@
+{
+ "name": "DefenseMessage",
+ "opcode": "smsg_defense_message",
+ "direction": "server",
+ "fields": [
+ { "name": "area", "type": "Area" },
+ { "name": "message", "type": "PrefixedString32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_destroy_object.json b/schemas/world/packets/smsg_destroy_object.json
new file mode 100644
index 000000000..055611c02
--- /dev/null
+++ b/schemas/world/packets/smsg_destroy_object.json
@@ -0,0 +1,8 @@
+{
+ "name": "DestroyObject",
+ "opcode": "smsg_destroy_object",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_dismountresult.json b/schemas/world/packets/smsg_dismountresult.json
new file mode 100644
index 000000000..9c937338d
--- /dev/null
+++ b/schemas/world/packets/smsg_dismountresult.json
@@ -0,0 +1,8 @@
+{
+ "name": "Dismountresult",
+ "opcode": "smsg_dismountresult",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "DismountResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_dispel_failed.json b/schemas/world/packets/smsg_dispel_failed.json
new file mode 100644
index 000000000..914cba492
--- /dev/null
+++ b/schemas/world/packets/smsg_dispel_failed.json
@@ -0,0 +1,10 @@
+{
+ "name": "DispelFailed",
+ "opcode": "smsg_dispel_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "uint64" },
+ { "name": "target", "type": "uint64" },
+ { "name": "spells", "type": "uint32", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_duel_complete.json b/schemas/world/packets/smsg_duel_complete.json
new file mode 100644
index 000000000..568c4c42d
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_complete.json
@@ -0,0 +1,8 @@
+{
+ "name": "DuelComplete",
+ "opcode": "smsg_duel_complete",
+ "direction": "server",
+ "fields": [
+ { "name": "ended_without_interruption", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_duel_countdown.json b/schemas/world/packets/smsg_duel_countdown.json
new file mode 100644
index 000000000..f19ed766a
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_countdown.json
@@ -0,0 +1,8 @@
+{
+ "name": "DuelCountdown",
+ "opcode": "smsg_duel_countdown",
+ "direction": "server",
+ "fields": [
+ { "name": "time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_duel_inbounds.json b/schemas/world/packets/smsg_duel_inbounds.json
new file mode 100644
index 000000000..9e4827c09
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_inbounds.json
@@ -0,0 +1,5 @@
+{
+ "name": "DuelInbounds",
+ "opcode": "smsg_duel_inbounds",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_duel_outofbounds.json b/schemas/world/packets/smsg_duel_outofbounds.json
new file mode 100644
index 000000000..052c17833
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_outofbounds.json
@@ -0,0 +1,5 @@
+{
+ "name": "DuelOutofbounds",
+ "opcode": "smsg_duel_outofbounds",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_duel_requested.json b/schemas/world/packets/smsg_duel_requested.json
new file mode 100644
index 000000000..9e01a859f
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_requested.json
@@ -0,0 +1,9 @@
+{
+ "name": "DuelRequested",
+ "opcode": "smsg_duel_requested",
+ "direction": "server",
+ "fields": [
+ { "name": "initiator", "type": "uint64" },
+ { "name": "target", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_duel_winner.json b/schemas/world/packets/smsg_duel_winner.json
new file mode 100644
index 000000000..e85c8363a
--- /dev/null
+++ b/schemas/world/packets/smsg_duel_winner.json
@@ -0,0 +1,10 @@
+{
+ "name": "DuelWinner",
+ "opcode": "smsg_duel_winner",
+ "direction": "server",
+ "fields": [
+ { "name": "reason", "type": "DuelWinnerReason" },
+ { "name": "opponent_name", "type": "CString" },
+ { "name": "initiator_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_durability_damage_death.json b/schemas/world/packets/smsg_durability_damage_death.json
new file mode 100644
index 000000000..1bbc40529
--- /dev/null
+++ b/schemas/world/packets/smsg_durability_damage_death.json
@@ -0,0 +1,5 @@
+{
+ "name": "DurabilityDamageDeath",
+ "opcode": "smsg_durability_damage_death",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_emote.json b/schemas/world/packets/smsg_emote.json
new file mode 100644
index 000000000..020b0297e
--- /dev/null
+++ b/schemas/world/packets/smsg_emote.json
@@ -0,0 +1,9 @@
+{
+ "name": "Emote",
+ "opcode": "smsg_emote",
+ "direction": "server",
+ "fields": [
+ { "name": "emote", "type": "Emote" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_enchantmentlog.json b/schemas/world/packets/smsg_enchantmentlog.json
new file mode 100644
index 000000000..6b42d9e81
--- /dev/null
+++ b/schemas/world/packets/smsg_enchantmentlog.json
@@ -0,0 +1,12 @@
+{
+ "name": "Enchantmentlog",
+ "opcode": "smsg_enchantmentlog",
+ "direction": "server",
+ "fields": [
+ { "name": "target", "type": "uint64" },
+ { "name": "caster", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "show_affiliation", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_environmental_damage_log.json b/schemas/world/packets/smsg_environmental_damage_log.json
new file mode 100644
index 000000000..7327ee8cf
--- /dev/null
+++ b/schemas/world/packets/smsg_environmental_damage_log.json
@@ -0,0 +1,12 @@
+{
+ "name": "EnvironmentalDamageLog",
+ "opcode": "smsg_environmental_damage_log",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "damage_type", "type": "EnvironmentalDamageType" },
+ { "name": "damage", "type": "uint32" },
+ { "name": "absorb", "type": "uint32" },
+ { "name": "resist", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_expected_spam_records.json b/schemas/world/packets/smsg_expected_spam_records.json
new file mode 100644
index 000000000..d4735329a
--- /dev/null
+++ b/schemas/world/packets/smsg_expected_spam_records.json
@@ -0,0 +1,9 @@
+{
+ "name": "ExpectedSpamRecords",
+ "opcode": "smsg_expected_spam_records",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_records", "type": "uint32" },
+ { "name": "records", "type": "CString", "array": {"count_field": "amount_of_records"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_exploration_experience.json b/schemas/world/packets/smsg_exploration_experience.json
new file mode 100644
index 000000000..575d0f558
--- /dev/null
+++ b/schemas/world/packets/smsg_exploration_experience.json
@@ -0,0 +1,9 @@
+{
+ "name": "ExplorationExperience",
+ "opcode": "smsg_exploration_experience",
+ "direction": "server",
+ "fields": [
+ { "name": "area", "type": "Area" },
+ { "name": "experience", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_feign_death_resisted.json b/schemas/world/packets/smsg_feign_death_resisted.json
new file mode 100644
index 000000000..b2eda8840
--- /dev/null
+++ b/schemas/world/packets/smsg_feign_death_resisted.json
@@ -0,0 +1,5 @@
+{
+ "name": "FeignDeathResisted",
+ "opcode": "smsg_feign_death_resisted",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_fish_escaped.json b/schemas/world/packets/smsg_fish_escaped.json
new file mode 100644
index 000000000..c7056c04e
--- /dev/null
+++ b/schemas/world/packets/smsg_fish_escaped.json
@@ -0,0 +1,5 @@
+{
+ "name": "FishEscaped",
+ "opcode": "smsg_fish_escaped",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_fish_not_hooked.json b/schemas/world/packets/smsg_fish_not_hooked.json
new file mode 100644
index 000000000..394795436
--- /dev/null
+++ b/schemas/world/packets/smsg_fish_not_hooked.json
@@ -0,0 +1,5 @@
+{
+ "name": "FishNotHooked",
+ "opcode": "smsg_fish_not_hooked",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_force_move_root.json b/schemas/world/packets/smsg_force_move_root.json
new file mode 100644
index 000000000..17207af7a
--- /dev/null
+++ b/schemas/world/packets/smsg_force_move_root.json
@@ -0,0 +1,9 @@
+{
+ "name": "ForceMoveRoot",
+ "opcode": "smsg_force_move_root",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_move_unroot.json b/schemas/world/packets/smsg_force_move_unroot.json
new file mode 100644
index 000000000..499b35921
--- /dev/null
+++ b/schemas/world/packets/smsg_force_move_unroot.json
@@ -0,0 +1,9 @@
+{
+ "name": "ForceMoveUnroot",
+ "opcode": "smsg_force_move_unroot",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_run_back_speed_change.json b/schemas/world/packets/smsg_force_run_back_speed_change.json
new file mode 100644
index 000000000..bc5f90cfc
--- /dev/null
+++ b/schemas/world/packets/smsg_force_run_back_speed_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceRunBackSpeedChange",
+ "opcode": "smsg_force_run_back_speed_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_run_speed_change.json b/schemas/world/packets/smsg_force_run_speed_change.json
new file mode 100644
index 000000000..9fbce45e5
--- /dev/null
+++ b/schemas/world/packets/smsg_force_run_speed_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceRunSpeedChange",
+ "opcode": "smsg_force_run_speed_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_swim_back_speed_change.json b/schemas/world/packets/smsg_force_swim_back_speed_change.json
new file mode 100644
index 000000000..a0f89849d
--- /dev/null
+++ b/schemas/world/packets/smsg_force_swim_back_speed_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceSwimBackSpeedChange",
+ "opcode": "smsg_force_swim_back_speed_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_swim_speed_change.json b/schemas/world/packets/smsg_force_swim_speed_change.json
new file mode 100644
index 000000000..943c2c926
--- /dev/null
+++ b/schemas/world/packets/smsg_force_swim_speed_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceSwimSpeedChange",
+ "opcode": "smsg_force_swim_speed_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_turn_rate_change.json b/schemas/world/packets/smsg_force_turn_rate_change.json
new file mode 100644
index 000000000..7ce0a3870
--- /dev/null
+++ b/schemas/world/packets/smsg_force_turn_rate_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceTurnRateChange",
+ "opcode": "smsg_force_turn_rate_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_force_walk_speed_change.json b/schemas/world/packets/smsg_force_walk_speed_change.json
new file mode 100644
index 000000000..5a651f7f7
--- /dev/null
+++ b/schemas/world/packets/smsg_force_walk_speed_change.json
@@ -0,0 +1,10 @@
+{
+ "name": "ForceWalkSpeedChange",
+ "opcode": "smsg_force_walk_speed_change",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "move_event", "type": "uint32" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_friend_list.json b/schemas/world/packets/smsg_friend_list.json
new file mode 100644
index 000000000..73add7b79
--- /dev/null
+++ b/schemas/world/packets/smsg_friend_list.json
@@ -0,0 +1,9 @@
+{
+ "name": "FriendList",
+ "opcode": "smsg_friend_list",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_friends", "type": "uint8" },
+ { "name": "friends", "type": "Friend", "array": {"count_field": "amount_of_friends"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_friend_status.json b/schemas/world/packets/smsg_friend_status.json
new file mode 100644
index 000000000..4df723cdf
--- /dev/null
+++ b/schemas/world/packets/smsg_friend_status.json
@@ -0,0 +1,9 @@
+{
+ "name": "FriendStatus",
+ "opcode": "smsg_friend_status",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "FriendResult" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_custom_anim.json b/schemas/world/packets/smsg_gameobject_custom_anim.json
new file mode 100644
index 000000000..807f0fd11
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_custom_anim.json
@@ -0,0 +1,9 @@
+{
+ "name": "GameobjectCustomAnim",
+ "opcode": "smsg_gameobject_custom_anim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "animation_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_despawn_anim.json b/schemas/world/packets/smsg_gameobject_despawn_anim.json
new file mode 100644
index 000000000..08c357d92
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_despawn_anim.json
@@ -0,0 +1,8 @@
+{
+ "name": "GameobjectDespawnAnim",
+ "opcode": "smsg_gameobject_despawn_anim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_pagetext.json b/schemas/world/packets/smsg_gameobject_pagetext.json
new file mode 100644
index 000000000..5105802e6
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_pagetext.json
@@ -0,0 +1,8 @@
+{
+ "name": "GameobjectPagetext",
+ "opcode": "smsg_gameobject_pagetext",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_query_response.json b/schemas/world/packets/smsg_gameobject_query_response.json
new file mode 100644
index 000000000..c8ffdd380
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_query_response.json
@@ -0,0 +1,22 @@
+{
+ "name": "GameobjectQueryResponse",
+ "opcode": "smsg_gameobject_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "entry_id", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "info_type", "type": "uint32" },
+ { "name": "display_id", "type": "uint32" },
+ { "name": "name1", "type": "CString" },
+ { "name": "name2", "type": "CString" },
+ { "name": "name3", "type": "CString" },
+ { "name": "name4", "type": "CString" },
+ { "name": "name5", "type": "CString" },
+ { "name": "raw_data", "type": "uint32", "array": {"size": 6} }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_reset_state.json b/schemas/world/packets/smsg_gameobject_reset_state.json
new file mode 100644
index 000000000..91f661d01
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_reset_state.json
@@ -0,0 +1,8 @@
+{
+ "name": "GameobjectResetState",
+ "opcode": "smsg_gameobject_reset_state",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gameobject_spawn_anim.json b/schemas/world/packets/smsg_gameobject_spawn_anim.json
new file mode 100644
index 000000000..1136a9ea5
--- /dev/null
+++ b/schemas/world/packets/smsg_gameobject_spawn_anim.json
@@ -0,0 +1,8 @@
+{
+ "name": "GameobjectSpawnAnim",
+ "opcode": "smsg_gameobject_spawn_anim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gm_ticket_status_update.json b/schemas/world/packets/smsg_gm_ticket_status_update.json
new file mode 100644
index 000000000..ff70bb7f6
--- /dev/null
+++ b/schemas/world/packets/smsg_gm_ticket_status_update.json
@@ -0,0 +1,8 @@
+{
+ "name": "GmTicketStatusUpdate",
+ "opcode": "smsg_gm_ticket_status_update",
+ "direction": "server",
+ "fields": [
+ { "name": "response", "type": "GmTicketStatusResponse" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gmticket_create.json b/schemas/world/packets/smsg_gmticket_create.json
new file mode 100644
index 000000000..85e1203c5
--- /dev/null
+++ b/schemas/world/packets/smsg_gmticket_create.json
@@ -0,0 +1,8 @@
+{
+ "name": "GmticketCreate",
+ "opcode": "smsg_gmticket_create",
+ "direction": "server",
+ "fields": [
+ { "name": "response", "type": "GmTicketResponse" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gmticket_deleteticket.json b/schemas/world/packets/smsg_gmticket_deleteticket.json
new file mode 100644
index 000000000..f74f02476
--- /dev/null
+++ b/schemas/world/packets/smsg_gmticket_deleteticket.json
@@ -0,0 +1,8 @@
+{
+ "name": "GmticketDeleteticket",
+ "opcode": "smsg_gmticket_deleteticket",
+ "direction": "server",
+ "fields": [
+ { "name": "response", "type": "GmTicketResponse" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gmticket_getticket.json b/schemas/world/packets/smsg_gmticket_getticket.json
new file mode 100644
index 000000000..d4aba3da7
--- /dev/null
+++ b/schemas/world/packets/smsg_gmticket_getticket.json
@@ -0,0 +1,21 @@
+{
+ "name": "GmticketGetticket",
+ "opcode": "smsg_gmticket_getticket",
+ "direction": "server",
+ "fields": [
+ { "name": "status", "type": "GmTicketStatus" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "status", "value": "has_text" },
+ "fields": [
+ { "name": "text", "type": "CString" },
+ { "name": "ticket_type", "type": "GmTicketType" },
+ { "name": "days_since_ticket_creation", "type": "float" },
+ { "name": "days_since_oldest_ticket_creation", "type": "float" },
+ { "name": "days_since_last_updated", "type": "float" },
+ { "name": "escalation_status", "type": "GmTicketEscalationStatus" },
+ { "name": "read_by_gm", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gmticket_systemstatus.json b/schemas/world/packets/smsg_gmticket_systemstatus.json
new file mode 100644
index 000000000..8262547be
--- /dev/null
+++ b/schemas/world/packets/smsg_gmticket_systemstatus.json
@@ -0,0 +1,8 @@
+{
+ "name": "GmticketSystemstatus",
+ "opcode": "smsg_gmticket_systemstatus",
+ "direction": "server",
+ "fields": [
+ { "name": "will_accept_tickets", "type": "GmTicketQueueStatus" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gmticket_updatetext.json b/schemas/world/packets/smsg_gmticket_updatetext.json
new file mode 100644
index 000000000..f5bf4dcd5
--- /dev/null
+++ b/schemas/world/packets/smsg_gmticket_updatetext.json
@@ -0,0 +1,8 @@
+{
+ "name": "GmticketUpdatetext",
+ "opcode": "smsg_gmticket_updatetext",
+ "direction": "server",
+ "fields": [
+ { "name": "response", "type": "GmTicketResponse" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gossip_complete.json b/schemas/world/packets/smsg_gossip_complete.json
new file mode 100644
index 000000000..7ba8a0dc1
--- /dev/null
+++ b/schemas/world/packets/smsg_gossip_complete.json
@@ -0,0 +1,5 @@
+{
+ "name": "GossipComplete",
+ "opcode": "smsg_gossip_complete",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_gossip_message.json b/schemas/world/packets/smsg_gossip_message.json
new file mode 100644
index 000000000..7961a83c7
--- /dev/null
+++ b/schemas/world/packets/smsg_gossip_message.json
@@ -0,0 +1,13 @@
+{
+ "name": "GossipMessage",
+ "opcode": "smsg_gossip_message",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "title_text_id", "type": "uint32" },
+ { "name": "amount_of_gossip_items", "type": "uint32" },
+ { "name": "gossips", "type": "GossipItem", "array": {"count_field": "amount_of_gossip_items"} },
+ { "name": "amount_of_quests", "type": "uint32" },
+ { "name": "quests", "type": "QuestItem", "array": {"count_field": "amount_of_quests"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_gossip_poi.json b/schemas/world/packets/smsg_gossip_poi.json
new file mode 100644
index 000000000..a307de111
--- /dev/null
+++ b/schemas/world/packets/smsg_gossip_poi.json
@@ -0,0 +1,12 @@
+{
+ "name": "GossipPoi",
+ "opcode": "smsg_gossip_poi",
+ "direction": "server",
+ "fields": [
+ { "name": "flags", "type": "uint32" },
+ { "name": "position", "type": "Vector2d" },
+ { "name": "icon", "type": "uint32" },
+ { "name": "data", "type": "uint32" },
+ { "name": "location_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_decline.json b/schemas/world/packets/smsg_group_decline.json
new file mode 100644
index 000000000..dff78b046
--- /dev/null
+++ b/schemas/world/packets/smsg_group_decline.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupDecline",
+ "opcode": "smsg_group_decline",
+ "direction": "server",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_destroyed.json b/schemas/world/packets/smsg_group_destroyed.json
new file mode 100644
index 000000000..9697d2a70
--- /dev/null
+++ b/schemas/world/packets/smsg_group_destroyed.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupDestroyed",
+ "opcode": "smsg_group_destroyed",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_group_invite.json b/schemas/world/packets/smsg_group_invite.json
new file mode 100644
index 000000000..fd5e9d43c
--- /dev/null
+++ b/schemas/world/packets/smsg_group_invite.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupInvite",
+ "opcode": "smsg_group_invite",
+ "direction": "server",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_joined_battleground.json b/schemas/world/packets/smsg_group_joined_battleground.json
new file mode 100644
index 000000000..19493a69d
--- /dev/null
+++ b/schemas/world/packets/smsg_group_joined_battleground.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupJoinedBattleground",
+ "opcode": "smsg_group_joined_battleground",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "BgTypeId" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_list.json b/schemas/world/packets/smsg_group_list.json
new file mode 100644
index 000000000..03023451a
--- /dev/null
+++ b/schemas/world/packets/smsg_group_list.json
@@ -0,0 +1,21 @@
+{
+ "name": "GroupList",
+ "opcode": "smsg_group_list",
+ "direction": "server",
+ "fields": [
+ { "name": "group_type", "type": "GroupType" },
+ { "name": "flags", "type": "uint8" },
+ { "name": "amount_of_members", "type": "uint32" },
+ { "name": "members", "type": "GroupListMember", "array": {"count_field": "amount_of_members"} },
+ { "name": "leader", "type": "uint64" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "loot_setting", "type": "GroupLootSetting" },
+ { "name": "master_loot", "type": "uint64" },
+ { "name": "loot_threshold", "type": "ItemQuality" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_set_leader.json b/schemas/world/packets/smsg_group_set_leader.json
new file mode 100644
index 000000000..1265d9015
--- /dev/null
+++ b/schemas/world/packets/smsg_group_set_leader.json
@@ -0,0 +1,8 @@
+{
+ "name": "GroupSetLeader",
+ "opcode": "smsg_group_set_leader",
+ "direction": "server",
+ "fields": [
+ { "name": "name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_group_uninvite.json b/schemas/world/packets/smsg_group_uninvite.json
new file mode 100644
index 000000000..0517d05f8
--- /dev/null
+++ b/schemas/world/packets/smsg_group_uninvite.json
@@ -0,0 +1,5 @@
+{
+ "name": "GroupUninvite",
+ "opcode": "smsg_group_uninvite",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_guild_command_result.json b/schemas/world/packets/smsg_guild_command_result.json
new file mode 100644
index 000000000..939a22685
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_command_result.json
@@ -0,0 +1,10 @@
+{
+ "name": "GuildCommandResult",
+ "opcode": "smsg_guild_command_result",
+ "direction": "server",
+ "fields": [
+ { "name": "command", "type": "uint32" },
+ { "name": "string", "type": "CString" },
+ { "name": "result", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_guild_event.json b/schemas/world/packets/smsg_guild_event.json
new file mode 100644
index 000000000..6801c64e2
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_event.json
@@ -0,0 +1,10 @@
+{
+ "name": "GuildEvent",
+ "opcode": "smsg_guild_event",
+ "direction": "server",
+ "fields": [
+ { "name": "event", "type": "GuildEvent" },
+ { "name": "amount_of_events", "type": "uint8" },
+ { "name": "event_descriptions", "type": "CString", "array": {"count_field": "amount_of_events"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_guild_info.json b/schemas/world/packets/smsg_guild_info.json
new file mode 100644
index 000000000..738ba4aa0
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_info.json
@@ -0,0 +1,13 @@
+{
+ "name": "GuildInfo",
+ "opcode": "smsg_guild_info",
+ "direction": "server",
+ "fields": [
+ { "name": "guild_name", "type": "CString" },
+ { "name": "created_day", "type": "uint32" },
+ { "name": "created_month", "type": "uint32" },
+ { "name": "created_year", "type": "uint32" },
+ { "name": "amount_of_characters_in_guild", "type": "uint32" },
+ { "name": "amount_of_accounts_in_guild", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_guild_invite.json b/schemas/world/packets/smsg_guild_invite.json
new file mode 100644
index 000000000..c495423c3
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_invite.json
@@ -0,0 +1,9 @@
+{
+ "name": "GuildInvite",
+ "opcode": "smsg_guild_invite",
+ "direction": "server",
+ "fields": [
+ { "name": "player_name", "type": "CString" },
+ { "name": "guild_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_guild_query_response.json b/schemas/world/packets/smsg_guild_query_response.json
new file mode 100644
index 000000000..b38b33a53
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_query_response.json
@@ -0,0 +1,15 @@
+{
+ "name": "GuildQueryResponse",
+ "opcode": "smsg_guild_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "name", "type": "CString" },
+ { "name": "rank_names", "type": "CString", "array": {"size": 10} },
+ { "name": "emblem_style", "type": "uint32" },
+ { "name": "emblem_color", "type": "uint32" },
+ { "name": "border_style", "type": "uint32" },
+ { "name": "border_color", "type": "uint32" },
+ { "name": "background_color", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_guild_roster.json b/schemas/world/packets/smsg_guild_roster.json
new file mode 100644
index 000000000..f5beacd1c
--- /dev/null
+++ b/schemas/world/packets/smsg_guild_roster.json
@@ -0,0 +1,13 @@
+{
+ "name": "GuildRoster",
+ "opcode": "smsg_guild_roster",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_members", "type": "uint32" },
+ { "name": "motd", "type": "CString" },
+ { "name": "guild_info", "type": "CString" },
+ { "name": "amount_of_rights", "type": "uint32" },
+ { "name": "rights", "type": "uint32", "array": {"count_field": "amount_of_rights"} },
+ { "name": "members", "type": "GuildMember", "array": {"count_field": "amount_of_members"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_ignore_list.json b/schemas/world/packets/smsg_ignore_list.json
new file mode 100644
index 000000000..a9ed41839
--- /dev/null
+++ b/schemas/world/packets/smsg_ignore_list.json
@@ -0,0 +1,9 @@
+{
+ "name": "IgnoreList",
+ "opcode": "smsg_ignore_list",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_ignored", "type": "uint8" },
+ { "name": "ignored", "type": "uint64", "array": {"count_field": "amount_of_ignored"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_init_world_states.json b/schemas/world/packets/smsg_init_world_states.json
new file mode 100644
index 000000000..dcc28e3ad
--- /dev/null
+++ b/schemas/world/packets/smsg_init_world_states.json
@@ -0,0 +1,11 @@
+{
+ "name": "InitWorldStates",
+ "opcode": "smsg_init_world_states",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "area", "type": "Area" },
+ { "name": "amount_of_states", "type": "uint16" },
+ { "name": "states", "type": "WorldState", "array": {"count_field": "amount_of_states"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_initial_spells.json b/schemas/world/packets/smsg_initial_spells.json
new file mode 100644
index 000000000..207156220
--- /dev/null
+++ b/schemas/world/packets/smsg_initial_spells.json
@@ -0,0 +1,12 @@
+{
+ "name": "InitialSpells",
+ "opcode": "smsg_initial_spells",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown1", "type": "uint8" },
+ { "name": "spell_count", "type": "uint16" },
+ { "name": "initial_spells", "type": "InitialSpell", "array": {"count_field": "spell_count"} },
+ { "name": "cooldown_count", "type": "uint16" },
+ { "name": "cooldowns", "type": "CooldownSpell", "array": {"count_field": "cooldown_count"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_initialize_factions.json b/schemas/world/packets/smsg_initialize_factions.json
new file mode 100644
index 000000000..82525c769
--- /dev/null
+++ b/schemas/world/packets/smsg_initialize_factions.json
@@ -0,0 +1,9 @@
+{
+ "name": "InitializeFactions",
+ "opcode": "smsg_initialize_factions",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_factions", "type": "uint32" },
+ { "name": "factions", "type": "FactionInitializer", "array": {"count_field": "amount_of_factions"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_inspect.json b/schemas/world/packets/smsg_inspect.json
new file mode 100644
index 000000000..d2076215a
--- /dev/null
+++ b/schemas/world/packets/smsg_inspect.json
@@ -0,0 +1,8 @@
+{
+ "name": "Inspect",
+ "opcode": "smsg_inspect",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_inspect_honor_stats_server.json b/schemas/world/packets/smsg_inspect_honor_stats_server.json
new file mode 100644
index 000000000..ea895b8c7
--- /dev/null
+++ b/schemas/world/packets/smsg_inspect_honor_stats_server.json
@@ -0,0 +1,23 @@
+{
+ "name": "InspectHonorStatsServer",
+ "opcode": "smsg_inspect_honor_stats_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "highest_rank", "type": "PvpRank" },
+ { "name": "today_honorable_and_dishonorable", "type": "uint32" },
+ { "name": "yesterday_honorable", "type": "uint16" },
+ { "name": "unknown1", "type": "uint16" },
+ { "name": "last_week_honorable", "type": "uint16" },
+ { "name": "unknown2", "type": "uint16" },
+ { "name": "this_week_honorable", "type": "uint16" },
+ { "name": "unknown3", "type": "uint16" },
+ { "name": "lifetime_honorable", "type": "uint32" },
+ { "name": "lifetime_dishonorable", "type": "uint32" },
+ { "name": "yesterday_honor", "type": "uint32" },
+ { "name": "last_week_honor", "type": "uint32" },
+ { "name": "this_week_honor", "type": "uint32" },
+ { "name": "last_week_standing", "type": "uint32" },
+ { "name": "rank_progress_bar", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_instance_reset.json b/schemas/world/packets/smsg_instance_reset.json
new file mode 100644
index 000000000..30b8a38f4
--- /dev/null
+++ b/schemas/world/packets/smsg_instance_reset.json
@@ -0,0 +1,8 @@
+{
+ "name": "InstanceReset",
+ "opcode": "smsg_instance_reset",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_instance_reset_failed.json b/schemas/world/packets/smsg_instance_reset_failed.json
new file mode 100644
index 000000000..724dd8fac
--- /dev/null
+++ b/schemas/world/packets/smsg_instance_reset_failed.json
@@ -0,0 +1,9 @@
+{
+ "name": "InstanceResetFailed",
+ "opcode": "smsg_instance_reset_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "reason", "type": "uint32" },
+ { "name": "map", "type": "Map" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_instance_save_created.json b/schemas/world/packets/smsg_instance_save_created.json
new file mode 100644
index 000000000..a3de15891
--- /dev/null
+++ b/schemas/world/packets/smsg_instance_save_created.json
@@ -0,0 +1,8 @@
+{
+ "name": "InstanceSaveCreated",
+ "opcode": "smsg_instance_save_created",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_invalidate_player.json b/schemas/world/packets/smsg_invalidate_player.json
new file mode 100644
index 000000000..f83f79fbf
--- /dev/null
+++ b/schemas/world/packets/smsg_invalidate_player.json
@@ -0,0 +1,8 @@
+{
+ "name": "InvalidatePlayer",
+ "opcode": "smsg_invalidate_player",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_inventory_change_failure.json b/schemas/world/packets/smsg_inventory_change_failure.json
new file mode 100644
index 000000000..f1b72828a
--- /dev/null
+++ b/schemas/world/packets/smsg_inventory_change_failure.json
@@ -0,0 +1,24 @@
+{
+ "name": "InventoryChangeFailure",
+ "opcode": "smsg_inventory_change_failure",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "InventoryResult" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "result", "value": "cant_equip_level_i" },
+ "fields": [
+ { "name": "required_level", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "result", "value": "ok" },
+ "fields": [
+ { "name": "item1", "type": "uint64" },
+ { "name": "item2", "type": "uint64" },
+ { "name": "bag_type_subclass", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_cooldown.json b/schemas/world/packets/smsg_item_cooldown.json
new file mode 100644
index 000000000..a91701ed4
--- /dev/null
+++ b/schemas/world/packets/smsg_item_cooldown.json
@@ -0,0 +1,9 @@
+{
+ "name": "ItemCooldown",
+ "opcode": "smsg_item_cooldown",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_enchant_time_update.json b/schemas/world/packets/smsg_item_enchant_time_update.json
new file mode 100644
index 000000000..6f7bef84e
--- /dev/null
+++ b/schemas/world/packets/smsg_item_enchant_time_update.json
@@ -0,0 +1,11 @@
+{
+ "name": "ItemEnchantTimeUpdate",
+ "opcode": "smsg_item_enchant_time_update",
+ "direction": "server",
+ "fields": [
+ { "name": "item", "type": "uint64" },
+ { "name": "slot", "type": "uint32" },
+ { "name": "duration", "type": "uint32" },
+ { "name": "player", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_name_query_response.json b/schemas/world/packets/smsg_item_name_query_response.json
new file mode 100644
index 000000000..06b59fe91
--- /dev/null
+++ b/schemas/world/packets/smsg_item_name_query_response.json
@@ -0,0 +1,9 @@
+{
+ "name": "ItemNameQueryResponse",
+ "opcode": "smsg_item_name_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ { "name": "item_name", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_push_result.json b/schemas/world/packets/smsg_item_push_result.json
new file mode 100644
index 000000000..a08acade3
--- /dev/null
+++ b/schemas/world/packets/smsg_item_push_result.json
@@ -0,0 +1,17 @@
+{
+ "name": "ItemPushResult",
+ "opcode": "smsg_item_push_result",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "source", "type": "NewItemSource" },
+ { "name": "creation_type", "type": "NewItemCreationType" },
+ { "name": "alert_chat", "type": "NewItemChatAlert" },
+ { "name": "bag_slot", "type": "uint8" },
+ { "name": "item_slot", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_suffix_factor", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "item_count", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_query_single_response.json b/schemas/world/packets/smsg_item_query_single_response.json
new file mode 100644
index 000000000..94741741b
--- /dev/null
+++ b/schemas/world/packets/smsg_item_query_single_response.json
@@ -0,0 +1,68 @@
+{
+ "name": "ItemQuerySingleResponse",
+ "opcode": "smsg_item_query_single_response",
+ "direction": "server",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "class_and_sub_class", "type": "ItemClassAndSubClass" },
+ { "name": "name1", "type": "CString" },
+ { "name": "name2", "type": "CString" },
+ { "name": "name3", "type": "CString" },
+ { "name": "name4", "type": "CString" },
+ { "name": "display_id", "type": "uint32" },
+ { "name": "quality", "type": "uint32" },
+ { "name": "flags", "type": "ItemFlag" },
+ { "name": "buy_price", "type": "uint32" },
+ { "name": "sell_price", "type": "uint32" },
+ { "name": "inventory_type", "type": "uint32" },
+ { "name": "allowed_class", "type": "AllowedClass" },
+ { "name": "allowed_race", "type": "AllowedRace" },
+ { "name": "item_level", "type": "uint32" },
+ { "name": "required_level", "type": "uint32" },
+ { "name": "required_skill", "type": "uint32" },
+ { "name": "required_skill_rank", "type": "uint32" },
+ { "name": "required_spell", "type": "uint32" },
+ { "name": "required_honor_rank", "type": "uint32" },
+ { "name": "required_city_rank", "type": "uint32" },
+ { "name": "required_faction", "type": "uint32" },
+ { "name": "required_faction_rank", "type": "uint32" },
+ { "name": "max_count", "type": "uint32" },
+ { "name": "stackable", "type": "uint32" },
+ { "name": "container_slots", "type": "uint32" },
+ { "name": "stats", "type": "ItemStat", "array": {"size": 10} },
+ { "name": "damages", "type": "ItemDamageType", "array": {"size": 5} },
+ { "name": "armor", "type": "int32" },
+ { "name": "holy_resistance", "type": "int32" },
+ { "name": "fire_resistance", "type": "int32" },
+ { "name": "nature_resistance", "type": "int32" },
+ { "name": "frost_resistance", "type": "int32" },
+ { "name": "shadow_resistance", "type": "int32" },
+ { "name": "arcane_resistance", "type": "int32" },
+ { "name": "delay", "type": "uint32" },
+ { "name": "ammo_type", "type": "uint32" },
+ { "name": "ranged_range_modification", "type": "float" },
+ { "name": "spells", "type": "ItemSpells", "array": {"size": 5} },
+ { "name": "bonding", "type": "uint32" },
+ { "name": "description", "type": "CString" },
+ { "name": "page_text", "type": "uint32" },
+ { "name": "language", "type": "Language" },
+ { "name": "page_text_material", "type": "uint32" },
+ { "name": "start_quest", "type": "uint32" },
+ { "name": "lock_id", "type": "uint32" },
+ { "name": "material", "type": "uint32" },
+ { "name": "sheathe_type", "type": "uint32" },
+ { "name": "random_property", "type": "uint32" },
+ { "name": "block", "type": "uint32" },
+ { "name": "item_set", "type": "uint32" },
+ { "name": "max_durability", "type": "uint32" },
+ { "name": "area", "type": "Area" },
+ { "name": "map", "type": "Map" },
+ { "name": "bag_family", "type": "uint32" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_text_query_response.json b/schemas/world/packets/smsg_item_text_query_response.json
new file mode 100644
index 000000000..84b7e6d25
--- /dev/null
+++ b/schemas/world/packets/smsg_item_text_query_response.json
@@ -0,0 +1,9 @@
+{
+ "name": "ItemTextQueryResponse",
+ "opcode": "smsg_item_text_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "item_text_id", "type": "uint32" },
+ { "name": "text", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_item_time_update.json b/schemas/world/packets/smsg_item_time_update.json
new file mode 100644
index 000000000..393c0ffaa
--- /dev/null
+++ b/schemas/world/packets/smsg_item_time_update.json
@@ -0,0 +1,9 @@
+{
+ "name": "ItemTimeUpdate",
+ "opcode": "smsg_item_time_update",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "duration", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_learned_spell.json b/schemas/world/packets/smsg_learned_spell.json
new file mode 100644
index 000000000..89bf02b42
--- /dev/null
+++ b/schemas/world/packets/smsg_learned_spell.json
@@ -0,0 +1,8 @@
+{
+ "name": "LearnedSpell",
+ "opcode": "smsg_learned_spell",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_levelup_info.json b/schemas/world/packets/smsg_levelup_info.json
new file mode 100644
index 000000000..51c9dede1
--- /dev/null
+++ b/schemas/world/packets/smsg_levelup_info.json
@@ -0,0 +1,19 @@
+{
+ "name": "LevelupInfo",
+ "opcode": "smsg_levelup_info",
+ "direction": "server",
+ "fields": [
+ { "name": "new_level", "type": "uint32" },
+ { "name": "health", "type": "uint32" },
+ { "name": "mana", "type": "uint32" },
+ { "name": "rage", "type": "uint32" },
+ { "name": "focus", "type": "uint32" },
+ { "name": "energy", "type": "uint32" },
+ { "name": "happiness", "type": "uint32" },
+ { "name": "strength", "type": "uint32" },
+ { "name": "agility", "type": "uint32" },
+ { "name": "stamina", "type": "uint32" },
+ { "name": "intellect", "type": "uint32" },
+ { "name": "spirit", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_list_inventory.json b/schemas/world/packets/smsg_list_inventory.json
new file mode 100644
index 000000000..e23dd3532
--- /dev/null
+++ b/schemas/world/packets/smsg_list_inventory.json
@@ -0,0 +1,10 @@
+{
+ "name": "ListInventory",
+ "opcode": "smsg_list_inventory",
+ "direction": "server",
+ "fields": [
+ { "name": "vendor", "type": "uint64" },
+ { "name": "amount_of_items", "type": "uint8" },
+ { "name": "items", "type": "ListInventoryItem", "array": {"count_field": "amount_of_items"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_list_stabled_pets_server.json b/schemas/world/packets/smsg_list_stabled_pets_server.json
new file mode 100644
index 000000000..b7afa05e0
--- /dev/null
+++ b/schemas/world/packets/smsg_list_stabled_pets_server.json
@@ -0,0 +1,11 @@
+{
+ "name": "ListStabledPetsServer",
+ "opcode": "smsg_list_stabled_pets_server",
+ "direction": "server",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "amount_of_pets", "type": "uint8" },
+ { "name": "stable_slots", "type": "uint8" },
+ { "name": "pets", "type": "StabledPet", "array": {"count_field": "amount_of_pets"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_log_xpgain.json b/schemas/world/packets/smsg_log_xpgain.json
new file mode 100644
index 000000000..757419535
--- /dev/null
+++ b/schemas/world/packets/smsg_log_xpgain.json
@@ -0,0 +1,18 @@
+{
+ "name": "LogXpgain",
+ "opcode": "smsg_log_xpgain",
+ "direction": "server",
+ "fields": [
+ { "name": "target", "type": "uint64" },
+ { "name": "total_exp", "type": "uint32" },
+ { "name": "exp_type", "type": "ExperienceAwardType" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "exp_type", "value": "non_kill" },
+ "fields": [
+ { "name": "experience_without_rested", "type": "uint32" },
+ { "name": "exp_group_bonus", "type": "float" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_login_settimespeed.json b/schemas/world/packets/smsg_login_settimespeed.json
new file mode 100644
index 000000000..10dfd235a
--- /dev/null
+++ b/schemas/world/packets/smsg_login_settimespeed.json
@@ -0,0 +1,9 @@
+{
+ "name": "LoginSettimespeed",
+ "opcode": "smsg_login_settimespeed",
+ "direction": "server",
+ "fields": [
+ { "name": "datetime", "type": "uint32" },
+ { "name": "timescale", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_login_verify_world.json b/schemas/world/packets/smsg_login_verify_world.json
new file mode 100644
index 000000000..1255b76ed
--- /dev/null
+++ b/schemas/world/packets/smsg_login_verify_world.json
@@ -0,0 +1,10 @@
+{
+ "name": "LoginVerifyWorld",
+ "opcode": "smsg_login_verify_world",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "orientation", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_logout_cancel_ack.json b/schemas/world/packets/smsg_logout_cancel_ack.json
new file mode 100644
index 000000000..2668da37a
--- /dev/null
+++ b/schemas/world/packets/smsg_logout_cancel_ack.json
@@ -0,0 +1,5 @@
+{
+ "name": "LogoutCancelAck",
+ "opcode": "smsg_logout_cancel_ack",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_logout_complete.json b/schemas/world/packets/smsg_logout_complete.json
new file mode 100644
index 000000000..4c7cdf259
--- /dev/null
+++ b/schemas/world/packets/smsg_logout_complete.json
@@ -0,0 +1,5 @@
+{
+ "name": "LogoutComplete",
+ "opcode": "smsg_logout_complete",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_logout_response.json b/schemas/world/packets/smsg_logout_response.json
new file mode 100644
index 000000000..0e2e6fdc9
--- /dev/null
+++ b/schemas/world/packets/smsg_logout_response.json
@@ -0,0 +1,9 @@
+{
+ "name": "LogoutResponse",
+ "opcode": "smsg_logout_response",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "LogoutResult" },
+ { "name": "speed", "type": "LogoutSpeed" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_looking_for_group_server.json b/schemas/world/packets/smsg_looking_for_group_server.json
new file mode 100644
index 000000000..a87d56cb4
--- /dev/null
+++ b/schemas/world/packets/smsg_looking_for_group_server.json
@@ -0,0 +1,8 @@
+{
+ "name": "LookingForGroupServer",
+ "opcode": "smsg_looking_for_group_server",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_all_passed.json b/schemas/world/packets/smsg_loot_all_passed.json
new file mode 100644
index 000000000..809a99e21
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_all_passed.json
@@ -0,0 +1,12 @@
+{
+ "name": "LootAllPassed",
+ "opcode": "smsg_loot_all_passed",
+ "direction": "server",
+ "fields": [
+ { "name": "looted_target", "type": "uint64" },
+ { "name": "loot_slot", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "item_random_suffix_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_clear_money.json b/schemas/world/packets/smsg_loot_clear_money.json
new file mode 100644
index 000000000..413c159b3
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_clear_money.json
@@ -0,0 +1,5 @@
+{
+ "name": "LootClearMoney",
+ "opcode": "smsg_loot_clear_money",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_loot_master_list.json b/schemas/world/packets/smsg_loot_master_list.json
new file mode 100644
index 000000000..4c7c3ecee
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_master_list.json
@@ -0,0 +1,9 @@
+{
+ "name": "LootMasterList",
+ "opcode": "smsg_loot_master_list",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_players", "type": "uint8" },
+ { "name": "guids", "type": "uint64", "array": {"count_field": "amount_of_players"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_money_notify.json b/schemas/world/packets/smsg_loot_money_notify.json
new file mode 100644
index 000000000..06ea6ad27
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_money_notify.json
@@ -0,0 +1,8 @@
+{
+ "name": "LootMoneyNotify",
+ "opcode": "smsg_loot_money_notify",
+ "direction": "server",
+ "fields": [
+ { "name": "amount", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_release_response.json b/schemas/world/packets/smsg_loot_release_response.json
new file mode 100644
index 000000000..587761425
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_release_response.json
@@ -0,0 +1,9 @@
+{
+ "name": "LootReleaseResponse",
+ "opcode": "smsg_loot_release_response",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "unknown1", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_removed.json b/schemas/world/packets/smsg_loot_removed.json
new file mode 100644
index 000000000..fa7fa08f9
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_removed.json
@@ -0,0 +1,8 @@
+{
+ "name": "LootRemoved",
+ "opcode": "smsg_loot_removed",
+ "direction": "server",
+ "fields": [
+ { "name": "slot", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_response.json b/schemas/world/packets/smsg_loot_response.json
new file mode 100644
index 000000000..48bc76e8f
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_response.json
@@ -0,0 +1,19 @@
+{
+ "name": "LootResponse",
+ "opcode": "smsg_loot_response",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "loot_method", "type": "LootMethod" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "loot_method", "value": "error" },
+ "fields": [
+ { "name": "loot_error", "type": "LootMethodError" }
+ ]
+ },
+ { "name": "gold", "type": "uint32" },
+ { "name": "amount_of_items", "type": "uint8" },
+ { "name": "items", "type": "LootItem", "array": {"count_field": "amount_of_items"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_roll.json b/schemas/world/packets/smsg_loot_roll.json
new file mode 100644
index 000000000..d3b0dfaba
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_roll.json
@@ -0,0 +1,15 @@
+{
+ "name": "LootRoll",
+ "opcode": "smsg_loot_roll",
+ "direction": "server",
+ "fields": [
+ { "name": "creature", "type": "uint64" },
+ { "name": "loot_slot", "type": "uint32" },
+ { "name": "player", "type": "uint64" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_random_suffix", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "roll_number", "type": "uint8" },
+ { "name": "vote", "type": "RollVote" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_roll_won.json b/schemas/world/packets/smsg_loot_roll_won.json
new file mode 100644
index 000000000..cbaf178b4
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_roll_won.json
@@ -0,0 +1,15 @@
+{
+ "name": "LootRollWon",
+ "opcode": "smsg_loot_roll_won",
+ "direction": "server",
+ "fields": [
+ { "name": "looted_target", "type": "uint64" },
+ { "name": "loot_slot", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_random_suffix", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "winning_player", "type": "uint64" },
+ { "name": "winning_roll", "type": "uint8" },
+ { "name": "vote", "type": "RollVote" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_loot_start_roll.json b/schemas/world/packets/smsg_loot_start_roll.json
new file mode 100644
index 000000000..a19c9531e
--- /dev/null
+++ b/schemas/world/packets/smsg_loot_start_roll.json
@@ -0,0 +1,13 @@
+{
+ "name": "LootStartRoll",
+ "opcode": "smsg_loot_start_roll",
+ "direction": "server",
+ "fields": [
+ { "name": "creature", "type": "uint64" },
+ { "name": "loot_slot", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_random_suffix", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "countdown_time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_mail_list_result.json b/schemas/world/packets/smsg_mail_list_result.json
new file mode 100644
index 000000000..f16893e42
--- /dev/null
+++ b/schemas/world/packets/smsg_mail_list_result.json
@@ -0,0 +1,9 @@
+{
+ "name": "MailListResult",
+ "opcode": "smsg_mail_list_result",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_mails", "type": "uint8" },
+ { "name": "mails", "type": "Mail", "array": {"count_field": "amount_of_mails"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_meetingstone_complete.json b/schemas/world/packets/smsg_meetingstone_complete.json
new file mode 100644
index 000000000..624650143
--- /dev/null
+++ b/schemas/world/packets/smsg_meetingstone_complete.json
@@ -0,0 +1,5 @@
+{
+ "name": "MeetingstoneComplete",
+ "opcode": "smsg_meetingstone_complete",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_meetingstone_in_progress.json b/schemas/world/packets/smsg_meetingstone_in_progress.json
new file mode 100644
index 000000000..851ea163d
--- /dev/null
+++ b/schemas/world/packets/smsg_meetingstone_in_progress.json
@@ -0,0 +1,5 @@
+{
+ "name": "MeetingstoneInProgress",
+ "opcode": "smsg_meetingstone_in_progress",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_meetingstone_joinfailed.json b/schemas/world/packets/smsg_meetingstone_joinfailed.json
new file mode 100644
index 000000000..149e36124
--- /dev/null
+++ b/schemas/world/packets/smsg_meetingstone_joinfailed.json
@@ -0,0 +1,8 @@
+{
+ "name": "MeetingstoneJoinfailed",
+ "opcode": "smsg_meetingstone_joinfailed",
+ "direction": "server",
+ "fields": [
+ { "name": "reason", "type": "MeetingStoneFailure" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_meetingstone_member_added.json b/schemas/world/packets/smsg_meetingstone_member_added.json
new file mode 100644
index 000000000..c65edf9d6
--- /dev/null
+++ b/schemas/world/packets/smsg_meetingstone_member_added.json
@@ -0,0 +1,8 @@
+{
+ "name": "MeetingstoneMemberAdded",
+ "opcode": "smsg_meetingstone_member_added",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_meetingstone_setqueue.json b/schemas/world/packets/smsg_meetingstone_setqueue.json
new file mode 100644
index 000000000..f3da306f8
--- /dev/null
+++ b/schemas/world/packets/smsg_meetingstone_setqueue.json
@@ -0,0 +1,9 @@
+{
+ "name": "MeetingstoneSetqueue",
+ "opcode": "smsg_meetingstone_setqueue",
+ "direction": "server",
+ "fields": [
+ { "name": "area", "type": "Area" },
+ { "name": "status", "type": "MeetingStoneStatus" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_messagechat.json b/schemas/world/packets/smsg_messagechat.json
index 447479191..4c01dc111 100644
--- a/schemas/world/packets/smsg_messagechat.json
+++ b/schemas/world/packets/smsg_messagechat.json
@@ -4,29 +4,28 @@
"direction": "server",
"fields": [
{ "name": "type", "type": "ChatType" },
- { "name": "language", "type": "uint32" },
+ { "name": "language", "type": "uint32" },
{
- "type": "group",
- "when": {
- "op": "in",
- "field": "type",
- "value": ["SAY", "YELL", "PARTY"]
- },
- "fields": [
- { "name": "speech_bubble_attr", "type": "uint64" },
- { "name": "chat_name_attr", "type": "uint64" }
- ]
- },
- {
- "type": "group",
- "when": { "op": "eq", "field": "type", "value": "CHANNEL" },
- "fields": [
- { "name": "channel_name", "type": "PrefixedString32" },
- { "name": "player_rank", "type": "uint32" },
- { "name": "player_guid", "type": "uint64" }
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "in", "field": "type", "value": ["say", "yell", "party"] },
+ "fields": [
+ { "name": "speech_bubble_attr", "type": "uint64" },
+ { "name": "chat_name_attr", "type": "uint64" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "type", "value": "channel" },
+ "fields": [
+ { "name": "channel_name", "type": "PrefixedString32" },
+ { "name": "player_rank", "type": "uint32" },
+ { "name": "player_guid", "type": "uint64" }
+ ]
+ }
]
},
{ "name": "message", "type": "PrefixedString32" },
- { "name": "player_tag", "type": "PlayerChatTag" }
+ { "name": "player_tag", "type": "PlayerChatTag" }
]
}
diff --git a/schemas/world/packets/smsg_minimap_ping_server.json b/schemas/world/packets/smsg_minimap_ping_server.json
new file mode 100644
index 000000000..d97365b54
--- /dev/null
+++ b/schemas/world/packets/smsg_minimap_ping_server.json
@@ -0,0 +1,10 @@
+{
+ "name": "MinimapPingServer",
+ "opcode": "smsg_minimap_ping_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "position_x", "type": "float" },
+ { "name": "position_y", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_mountresult.json b/schemas/world/packets/smsg_mountresult.json
new file mode 100644
index 000000000..b8a82d705
--- /dev/null
+++ b/schemas/world/packets/smsg_mountresult.json
@@ -0,0 +1,8 @@
+{
+ "name": "Mountresult",
+ "opcode": "smsg_mountresult",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "MountResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_mountspecial_anim.json b/schemas/world/packets/smsg_mountspecial_anim.json
new file mode 100644
index 000000000..2070d0153
--- /dev/null
+++ b/schemas/world/packets/smsg_mountspecial_anim.json
@@ -0,0 +1,8 @@
+{
+ "name": "MountspecialAnim",
+ "opcode": "smsg_mountspecial_anim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_fall_land.json b/schemas/world/packets/smsg_move_fall_land.json
index 81e24f328..96cc3c9f8 100644
--- a/schemas/world/packets/smsg_move_fall_land.json
+++ b/schemas/world/packets/smsg_move_fall_land.json
@@ -3,7 +3,7 @@
"opcode": "msg_move_fall_land",
"direction": "server",
"fields": [
- { "name": "guid", "type": "uint64" },
+ { "name": "guid", "type": "uint64" },
{ "name": "info", "type": "MovementInfo" }
]
}
diff --git a/schemas/world/packets/smsg_move_fall_land_server.json b/schemas/world/packets/smsg_move_fall_land_server.json
new file mode 100644
index 000000000..7ae78c1c9
--- /dev/null
+++ b/schemas/world/packets/smsg_move_fall_land_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveFallLandServer",
+ "opcode": "smsg_move_fall_land_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_feather_fall.json b/schemas/world/packets/smsg_move_feather_fall.json
new file mode 100644
index 000000000..04a64e3ee
--- /dev/null
+++ b/schemas/world/packets/smsg_move_feather_fall.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveFeatherFall",
+ "opcode": "smsg_move_feather_fall",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_feather_fall_server.json b/schemas/world/packets/smsg_move_feather_fall_server.json
new file mode 100644
index 000000000..56078dbf0
--- /dev/null
+++ b/schemas/world/packets/smsg_move_feather_fall_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveFeatherFallServer",
+ "opcode": "smsg_move_feather_fall_server",
+ "direction": "server",
+ "fields": [
+ { "name": "player", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_heartbeat_server.json b/schemas/world/packets/smsg_move_heartbeat_server.json
new file mode 100644
index 000000000..d1534b7a3
--- /dev/null
+++ b/schemas/world/packets/smsg_move_heartbeat_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveHeartbeatServer",
+ "opcode": "smsg_move_heartbeat_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_jump_server.json b/schemas/world/packets/smsg_move_jump_server.json
new file mode 100644
index 000000000..ff8e95cdb
--- /dev/null
+++ b/schemas/world/packets/smsg_move_jump_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveJumpServer",
+ "opcode": "smsg_move_jump_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_knock_back.json b/schemas/world/packets/smsg_move_knock_back.json
new file mode 100644
index 000000000..4436a0b0d
--- /dev/null
+++ b/schemas/world/packets/smsg_move_knock_back.json
@@ -0,0 +1,13 @@
+{
+ "name": "MoveKnockBack",
+ "opcode": "smsg_move_knock_back",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "v_cos", "type": "float" },
+ { "name": "v_sin", "type": "float" },
+ { "name": "horizontal_speed", "type": "float" },
+ { "name": "vertical_speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_land_walk.json b/schemas/world/packets/smsg_move_land_walk.json
new file mode 100644
index 000000000..088fa4147
--- /dev/null
+++ b/schemas/world/packets/smsg_move_land_walk.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveLandWalk",
+ "opcode": "smsg_move_land_walk",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_normal_fall.json b/schemas/world/packets/smsg_move_normal_fall.json
new file mode 100644
index 000000000..4d324d8e5
--- /dev/null
+++ b/schemas/world/packets/smsg_move_normal_fall.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveNormalFall",
+ "opcode": "smsg_move_normal_fall",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_set_facing_server.json b/schemas/world/packets/smsg_move_set_facing_server.json
new file mode 100644
index 000000000..019e7cfec
--- /dev/null
+++ b/schemas/world/packets/smsg_move_set_facing_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetFacingServer",
+ "opcode": "smsg_move_set_facing_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_set_hover.json b/schemas/world/packets/smsg_move_set_hover.json
new file mode 100644
index 000000000..5b7abe1e4
--- /dev/null
+++ b/schemas/world/packets/smsg_move_set_hover.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetHover",
+ "opcode": "smsg_move_set_hover",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_set_pitch_server.json b/schemas/world/packets/smsg_move_set_pitch_server.json
new file mode 100644
index 000000000..791ac13f2
--- /dev/null
+++ b/schemas/world/packets/smsg_move_set_pitch_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetPitchServer",
+ "opcode": "smsg_move_set_pitch_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_set_run_mode_server.json b/schemas/world/packets/smsg_move_set_run_mode_server.json
new file mode 100644
index 000000000..ea062c2ba
--- /dev/null
+++ b/schemas/world/packets/smsg_move_set_run_mode_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetRunModeServer",
+ "opcode": "smsg_move_set_run_mode_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_set_walk_mode_server.json b/schemas/world/packets/smsg_move_set_walk_mode_server.json
new file mode 100644
index 000000000..b4cf3c32f
--- /dev/null
+++ b/schemas/world/packets/smsg_move_set_walk_mode_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveSetWalkModeServer",
+ "opcode": "smsg_move_set_walk_mode_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_backward_server.json b/schemas/world/packets/smsg_move_start_backward_server.json
new file mode 100644
index 000000000..e9b6c9deb
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_backward_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartBackwardServer",
+ "opcode": "smsg_move_start_backward_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_forward_server.json b/schemas/world/packets/smsg_move_start_forward_server.json
new file mode 100644
index 000000000..a32115e4d
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_forward_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartForwardServer",
+ "opcode": "smsg_move_start_forward_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_pitch_down_server.json b/schemas/world/packets/smsg_move_start_pitch_down_server.json
new file mode 100644
index 000000000..dde9db169
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_pitch_down_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartPitchDownServer",
+ "opcode": "smsg_move_start_pitch_down_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_pitch_up_server.json b/schemas/world/packets/smsg_move_start_pitch_up_server.json
new file mode 100644
index 000000000..5a88563c9
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_pitch_up_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartPitchUpServer",
+ "opcode": "smsg_move_start_pitch_up_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_strafe_left_server.json b/schemas/world/packets/smsg_move_start_strafe_left_server.json
new file mode 100644
index 000000000..34c0b94dd
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_strafe_left_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartStrafeLeftServer",
+ "opcode": "smsg_move_start_strafe_left_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_strafe_right_server.json b/schemas/world/packets/smsg_move_start_strafe_right_server.json
new file mode 100644
index 000000000..101d51b72
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_strafe_right_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartStrafeRightServer",
+ "opcode": "smsg_move_start_strafe_right_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_swim_server.json b/schemas/world/packets/smsg_move_start_swim_server.json
new file mode 100644
index 000000000..812635747
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_swim_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartSwimServer",
+ "opcode": "smsg_move_start_swim_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_turn_left_server.json b/schemas/world/packets/smsg_move_start_turn_left_server.json
new file mode 100644
index 000000000..fb4d9ffd6
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_turn_left_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartTurnLeftServer",
+ "opcode": "smsg_move_start_turn_left_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_start_turn_right_server.json b/schemas/world/packets/smsg_move_start_turn_right_server.json
new file mode 100644
index 000000000..8c29f7307
--- /dev/null
+++ b/schemas/world/packets/smsg_move_start_turn_right_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStartTurnRightServer",
+ "opcode": "smsg_move_start_turn_right_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_stop_pitch_server.json b/schemas/world/packets/smsg_move_stop_pitch_server.json
new file mode 100644
index 000000000..06a1561bd
--- /dev/null
+++ b/schemas/world/packets/smsg_move_stop_pitch_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStopPitchServer",
+ "opcode": "smsg_move_stop_pitch_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_stop_server.json b/schemas/world/packets/smsg_move_stop_server.json
new file mode 100644
index 000000000..2162c2845
--- /dev/null
+++ b/schemas/world/packets/smsg_move_stop_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStopServer",
+ "opcode": "smsg_move_stop_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_stop_strafe_server.json b/schemas/world/packets/smsg_move_stop_strafe_server.json
new file mode 100644
index 000000000..cdc4f28af
--- /dev/null
+++ b/schemas/world/packets/smsg_move_stop_strafe_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStopStrafeServer",
+ "opcode": "smsg_move_stop_strafe_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_stop_swim_server.json b/schemas/world/packets/smsg_move_stop_swim_server.json
new file mode 100644
index 000000000..762d685ff
--- /dev/null
+++ b/schemas/world/packets/smsg_move_stop_swim_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStopSwimServer",
+ "opcode": "smsg_move_stop_swim_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_stop_turn_server.json b/schemas/world/packets/smsg_move_stop_turn_server.json
new file mode 100644
index 000000000..ea03376e4
--- /dev/null
+++ b/schemas/world/packets/smsg_move_stop_turn_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveStopTurnServer",
+ "opcode": "smsg_move_stop_turn_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_teleport_ack_server.json b/schemas/world/packets/smsg_move_teleport_ack_server.json
new file mode 100644
index 000000000..54629b3ba
--- /dev/null
+++ b/schemas/world/packets/smsg_move_teleport_ack_server.json
@@ -0,0 +1,10 @@
+{
+ "name": "MoveTeleportAckServer",
+ "opcode": "smsg_move_teleport_ack_server",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "movement_counter", "type": "uint32" },
+ { "name": "info", "type": "MovementInfo" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_time_skipped_server.json b/schemas/world/packets/smsg_move_time_skipped_server.json
new file mode 100644
index 000000000..706448aa1
--- /dev/null
+++ b/schemas/world/packets/smsg_move_time_skipped_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveTimeSkippedServer",
+ "opcode": "smsg_move_time_skipped_server",
+ "direction": "server",
+ "fields": [
+ { "name": "player", "type": "PackedGuid" },
+ { "name": "time_skipped", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_unset_hover.json b/schemas/world/packets/smsg_move_unset_hover.json
new file mode 100644
index 000000000..8a7392c10
--- /dev/null
+++ b/schemas/world/packets/smsg_move_unset_hover.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveUnsetHover",
+ "opcode": "smsg_move_unset_hover",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_move_water_walk.json b/schemas/world/packets/smsg_move_water_walk.json
new file mode 100644
index 000000000..b0ead827c
--- /dev/null
+++ b/schemas/world/packets/smsg_move_water_walk.json
@@ -0,0 +1,9 @@
+{
+ "name": "MoveWaterWalk",
+ "opcode": "smsg_move_water_walk",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "counter", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_name_query_response.json b/schemas/world/packets/smsg_name_query_response.json
new file mode 100644
index 000000000..6da27b862
--- /dev/null
+++ b/schemas/world/packets/smsg_name_query_response.json
@@ -0,0 +1,13 @@
+{
+ "name": "NameQueryResponse",
+ "opcode": "smsg_name_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "character_name", "type": "CString" },
+ { "name": "realm_name", "type": "CString" },
+ { "name": "race", "type": "uint32" },
+ { "name": "gender", "type": "uint32" },
+ { "name": "class", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_new_taxi_path.json b/schemas/world/packets/smsg_new_taxi_path.json
new file mode 100644
index 000000000..3a700dcbb
--- /dev/null
+++ b/schemas/world/packets/smsg_new_taxi_path.json
@@ -0,0 +1,5 @@
+{
+ "name": "NewTaxiPath",
+ "opcode": "smsg_new_taxi_path",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_new_world.json b/schemas/world/packets/smsg_new_world.json
new file mode 100644
index 000000000..1496a7edd
--- /dev/null
+++ b/schemas/world/packets/smsg_new_world.json
@@ -0,0 +1,10 @@
+{
+ "name": "NewWorld",
+ "opcode": "smsg_new_world",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "orientation", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_notification.json b/schemas/world/packets/smsg_notification.json
new file mode 100644
index 000000000..a379c47c2
--- /dev/null
+++ b/schemas/world/packets/smsg_notification.json
@@ -0,0 +1,8 @@
+{
+ "name": "Notification",
+ "opcode": "smsg_notification",
+ "direction": "server",
+ "fields": [
+ { "name": "notification", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_npc_text_update.json b/schemas/world/packets/smsg_npc_text_update.json
new file mode 100644
index 000000000..9041bdf7d
--- /dev/null
+++ b/schemas/world/packets/smsg_npc_text_update.json
@@ -0,0 +1,9 @@
+{
+ "name": "NpcTextUpdate",
+ "opcode": "smsg_npc_text_update",
+ "direction": "server",
+ "fields": [
+ { "name": "text_id", "type": "uint32" },
+ { "name": "texts", "type": "NpcTextUpdate", "array": {"size": 8} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_open_container.json b/schemas/world/packets/smsg_open_container.json
new file mode 100644
index 000000000..829a96faa
--- /dev/null
+++ b/schemas/world/packets/smsg_open_container.json
@@ -0,0 +1,8 @@
+{
+ "name": "OpenContainer",
+ "opcode": "smsg_open_container",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_page_text_query_response.json b/schemas/world/packets/smsg_page_text_query_response.json
new file mode 100644
index 000000000..e143fb939
--- /dev/null
+++ b/schemas/world/packets/smsg_page_text_query_response.json
@@ -0,0 +1,10 @@
+{
+ "name": "PageTextQueryResponse",
+ "opcode": "smsg_page_text_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "page_id", "type": "uint32" },
+ { "name": "text", "type": "CString" },
+ { "name": "next_page_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_party_command_result.json b/schemas/world/packets/smsg_party_command_result.json
new file mode 100644
index 000000000..1acda66e4
--- /dev/null
+++ b/schemas/world/packets/smsg_party_command_result.json
@@ -0,0 +1,10 @@
+{
+ "name": "PartyCommandResult",
+ "opcode": "smsg_party_command_result",
+ "direction": "server",
+ "fields": [
+ { "name": "operation", "type": "uint32" },
+ { "name": "member", "type": "CString" },
+ { "name": "result", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_partykilllog.json b/schemas/world/packets/smsg_partykilllog.json
new file mode 100644
index 000000000..d0e00baa3
--- /dev/null
+++ b/schemas/world/packets/smsg_partykilllog.json
@@ -0,0 +1,9 @@
+{
+ "name": "Partykilllog",
+ "opcode": "smsg_partykilllog",
+ "direction": "server",
+ "fields": [
+ { "name": "player_with_killing_blow", "type": "uint64" },
+ { "name": "victim", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pause_mirror_timer.json b/schemas/world/packets/smsg_pause_mirror_timer.json
new file mode 100644
index 000000000..845d5a643
--- /dev/null
+++ b/schemas/world/packets/smsg_pause_mirror_timer.json
@@ -0,0 +1,9 @@
+{
+ "name": "PauseMirrorTimer",
+ "opcode": "smsg_pause_mirror_timer",
+ "direction": "server",
+ "fields": [
+ { "name": "timer", "type": "TimerType" },
+ { "name": "is_frozen", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_periodicauralog.json b/schemas/world/packets/smsg_periodicauralog.json
new file mode 100644
index 000000000..6ea8366eb
--- /dev/null
+++ b/schemas/world/packets/smsg_periodicauralog.json
@@ -0,0 +1,12 @@
+{
+ "name": "Periodicauralog",
+ "opcode": "smsg_periodicauralog",
+ "direction": "server",
+ "fields": [
+ { "name": "target", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "amount_of_auras", "type": "uint32" },
+ { "name": "auras", "type": "AuraLog", "array": {"count_field": "amount_of_auras"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_action_feedback.json b/schemas/world/packets/smsg_pet_action_feedback.json
new file mode 100644
index 000000000..37ad8988e
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_action_feedback.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetActionFeedback",
+ "opcode": "smsg_pet_action_feedback",
+ "direction": "server",
+ "fields": [
+ { "name": "feedback", "type": "PetFeedback" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_action_sound.json b/schemas/world/packets/smsg_pet_action_sound.json
new file mode 100644
index 000000000..9985895ce
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_action_sound.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetActionSound",
+ "opcode": "smsg_pet_action_sound",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "reason", "type": "PetTalkReason" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_broken.json b/schemas/world/packets/smsg_pet_broken.json
new file mode 100644
index 000000000..e63f1696d
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_broken.json
@@ -0,0 +1,5 @@
+{
+ "name": "PetBroken",
+ "opcode": "smsg_pet_broken",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_pet_cast_failed.json b/schemas/world/packets/smsg_pet_cast_failed.json
new file mode 100644
index 000000000..9f9793c14
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_cast_failed.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetCastFailed",
+ "opcode": "smsg_pet_cast_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "unknown1", "type": "uint8" },
+ { "name": "result", "type": "SpellCastResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_dismiss_sound.json b/schemas/world/packets/smsg_pet_dismiss_sound.json
new file mode 100644
index 000000000..1e947b92e
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_dismiss_sound.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetDismissSound",
+ "opcode": "smsg_pet_dismiss_sound",
+ "direction": "server",
+ "fields": [
+ { "name": "sound_id", "type": "uint32" },
+ { "name": "position", "type": "Vector3" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_mode.json b/schemas/world/packets/smsg_pet_mode.json
new file mode 100644
index 000000000..2ea9a5a37
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_mode.json
@@ -0,0 +1,12 @@
+{
+ "name": "PetMode",
+ "opcode": "smsg_pet_mode",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "react_state", "type": "PetReactState" },
+ { "name": "command_state", "type": "PetCommandState" },
+ { "name": "unknown1", "type": "uint8" },
+ { "name": "pet_enabled", "type": "PetEnabled" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_name_invalid.json b/schemas/world/packets/smsg_pet_name_invalid.json
new file mode 100644
index 000000000..41161342d
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_name_invalid.json
@@ -0,0 +1,5 @@
+{
+ "name": "PetNameInvalid",
+ "opcode": "smsg_pet_name_invalid",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_pet_name_query_response.json b/schemas/world/packets/smsg_pet_name_query_response.json
new file mode 100644
index 000000000..9eef6cac7
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_name_query_response.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetNameQueryResponse",
+ "opcode": "smsg_pet_name_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "pet_number", "type": "uint32" },
+ { "name": "name", "type": "CString" },
+ { "name": "pet_name_timestamp", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_spells.json b/schemas/world/packets/smsg_pet_spells.json
new file mode 100644
index 000000000..9895ea1ce
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_spells.json
@@ -0,0 +1,24 @@
+{
+ "name": "PetSpells",
+ "opcode": "smsg_pet_spells",
+ "direction": "server",
+ "fields": [
+ { "name": "pet", "type": "uint64" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "duration", "type": "uint32" },
+ { "name": "react", "type": "PetReactState" },
+ { "name": "command", "type": "PetCommandState" },
+ { "name": "unknown", "type": "uint8" },
+ { "name": "pet_enabled", "type": "PetEnabled" },
+ { "name": "action_bars", "type": "uint32", "array": {"size": 10} },
+ { "name": "amount_of_spells", "type": "uint8" },
+ { "name": "spells", "type": "uint32", "array": {"count_field": "amount_of_spells"} },
+ { "name": "amount_of_cooldowns", "type": "uint8" },
+ { "name": "cooldowns", "type": "PetSpellCooldown", "array": {"count_field": "amount_of_cooldowns"} }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_tame_failure.json b/schemas/world/packets/smsg_pet_tame_failure.json
new file mode 100644
index 000000000..269458986
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_tame_failure.json
@@ -0,0 +1,8 @@
+{
+ "name": "PetTameFailure",
+ "opcode": "smsg_pet_tame_failure",
+ "direction": "server",
+ "fields": [
+ { "name": "reason", "type": "PetTameFailureReason" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pet_unlearn_confirm.json b/schemas/world/packets/smsg_pet_unlearn_confirm.json
new file mode 100644
index 000000000..e22aa1338
--- /dev/null
+++ b/schemas/world/packets/smsg_pet_unlearn_confirm.json
@@ -0,0 +1,9 @@
+{
+ "name": "PetUnlearnConfirm",
+ "opcode": "smsg_pet_unlearn_confirm",
+ "direction": "server",
+ "fields": [
+ { "name": "pet", "type": "uint64" },
+ { "name": "talent_reset_cost", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_petition_query_response.json b/schemas/world/packets/smsg_petition_query_response.json
new file mode 100644
index 000000000..cb6f0e41b
--- /dev/null
+++ b/schemas/world/packets/smsg_petition_query_response.json
@@ -0,0 +1,24 @@
+{
+ "name": "PetitionQueryResponse",
+ "opcode": "smsg_petition_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "petition_id", "type": "uint32" },
+ { "name": "charter_owner", "type": "uint64" },
+ { "name": "guild_name", "type": "CString" },
+ { "name": "body_text", "type": "CString" },
+ { "name": "unknown_flags", "type": "uint32" },
+ { "name": "minimum_signatures", "type": "uint32" },
+ { "name": "maximum_signatures", "type": "uint32" },
+ { "name": "deadline", "type": "uint32" },
+ { "name": "issue_date", "type": "uint32" },
+ { "name": "allowed_guild_id", "type": "uint32" },
+ { "name": "allowed_class", "type": "AllowedClass" },
+ { "name": "allowed_race", "type": "AllowedRace" },
+ { "name": "allowed_genders", "type": "uint16" },
+ { "name": "allowed_minimum_level", "type": "uint32" },
+ { "name": "allowed_maximum_level", "type": "uint32" },
+ { "name": "todo_amount_of_signers", "type": "uint32" },
+ { "name": "number_of_choices", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_petition_show_signatures.json b/schemas/world/packets/smsg_petition_show_signatures.json
new file mode 100644
index 000000000..88a7c6402
--- /dev/null
+++ b/schemas/world/packets/smsg_petition_show_signatures.json
@@ -0,0 +1,12 @@
+{
+ "name": "PetitionShowSignatures",
+ "opcode": "smsg_petition_show_signatures",
+ "direction": "server",
+ "fields": [
+ { "name": "item", "type": "uint64" },
+ { "name": "owner", "type": "uint64" },
+ { "name": "petition", "type": "uint32" },
+ { "name": "amount_of_signatures", "type": "uint8" },
+ { "name": "signatures", "type": "PetitionSignature", "array": {"count_field": "amount_of_signatures"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_petition_showlist.json b/schemas/world/packets/smsg_petition_showlist.json
new file mode 100644
index 000000000..1b09977ea
--- /dev/null
+++ b/schemas/world/packets/smsg_petition_showlist.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetitionShowlist",
+ "opcode": "smsg_petition_showlist",
+ "direction": "server",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "amount_of_petitions", "type": "uint8" },
+ { "name": "petitions", "type": "PetitionShowlist", "array": {"count_field": "amount_of_petitions"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_petition_sign_results.json b/schemas/world/packets/smsg_petition_sign_results.json
new file mode 100644
index 000000000..f51c73731
--- /dev/null
+++ b/schemas/world/packets/smsg_petition_sign_results.json
@@ -0,0 +1,10 @@
+{
+ "name": "PetitionSignResults",
+ "opcode": "smsg_petition_sign_results",
+ "direction": "server",
+ "fields": [
+ { "name": "petition", "type": "uint64" },
+ { "name": "owner", "type": "uint64" },
+ { "name": "result", "type": "PetitionResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_play_music.json b/schemas/world/packets/smsg_play_music.json
new file mode 100644
index 000000000..49cb346f7
--- /dev/null
+++ b/schemas/world/packets/smsg_play_music.json
@@ -0,0 +1,8 @@
+{
+ "name": "PlayMusic",
+ "opcode": "smsg_play_music",
+ "direction": "server",
+ "fields": [
+ { "name": "sound_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_play_object_sound.json b/schemas/world/packets/smsg_play_object_sound.json
new file mode 100644
index 000000000..3d9e03a0e
--- /dev/null
+++ b/schemas/world/packets/smsg_play_object_sound.json
@@ -0,0 +1,9 @@
+{
+ "name": "PlayObjectSound",
+ "opcode": "smsg_play_object_sound",
+ "direction": "server",
+ "fields": [
+ { "name": "sound_id", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_play_sound.json b/schemas/world/packets/smsg_play_sound.json
new file mode 100644
index 000000000..d38fc34dd
--- /dev/null
+++ b/schemas/world/packets/smsg_play_sound.json
@@ -0,0 +1,8 @@
+{
+ "name": "PlaySound",
+ "opcode": "smsg_play_sound",
+ "direction": "server",
+ "fields": [
+ { "name": "sound_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_play_spell_impact.json b/schemas/world/packets/smsg_play_spell_impact.json
new file mode 100644
index 000000000..931135272
--- /dev/null
+++ b/schemas/world/packets/smsg_play_spell_impact.json
@@ -0,0 +1,9 @@
+{
+ "name": "PlaySpellImpact",
+ "opcode": "smsg_play_spell_impact",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "spell_visual_kit", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_play_spell_visual.json b/schemas/world/packets/smsg_play_spell_visual.json
new file mode 100644
index 000000000..7c7c7baf5
--- /dev/null
+++ b/schemas/world/packets/smsg_play_spell_visual.json
@@ -0,0 +1,9 @@
+{
+ "name": "PlaySpellVisual",
+ "opcode": "smsg_play_spell_visual",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "spell_art_kit", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_played_time.json b/schemas/world/packets/smsg_played_time.json
new file mode 100644
index 000000000..14f146968
--- /dev/null
+++ b/schemas/world/packets/smsg_played_time.json
@@ -0,0 +1,9 @@
+{
+ "name": "PlayedTime",
+ "opcode": "smsg_played_time",
+ "direction": "server",
+ "fields": [
+ { "name": "total_played_time", "type": "uint32" },
+ { "name": "level_played_time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_player_skinned.json b/schemas/world/packets/smsg_player_skinned.json
new file mode 100644
index 000000000..831064f6b
--- /dev/null
+++ b/schemas/world/packets/smsg_player_skinned.json
@@ -0,0 +1,8 @@
+{
+ "name": "PlayerSkinned",
+ "opcode": "smsg_player_skinned",
+ "direction": "server",
+ "fields": [
+ { "name": "spirit_released", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pong.json b/schemas/world/packets/smsg_pong.json
index d79ae07f9..c764ee7d5 100644
--- a/schemas/world/packets/smsg_pong.json
+++ b/schemas/world/packets/smsg_pong.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "sequence_id", "type": "uint32" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/smsg_procresist.json b/schemas/world/packets/smsg_procresist.json
new file mode 100644
index 000000000..5485d3674
--- /dev/null
+++ b/schemas/world/packets/smsg_procresist.json
@@ -0,0 +1,11 @@
+{
+ "name": "Procresist",
+ "opcode": "smsg_procresist",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "uint64" },
+ { "name": "target", "type": "uint64" },
+ { "name": "id", "type": "uint32" },
+ { "name": "log_format", "type": "LogFormat" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pvp_credit.json b/schemas/world/packets/smsg_pvp_credit.json
new file mode 100644
index 000000000..9d0c7ba5f
--- /dev/null
+++ b/schemas/world/packets/smsg_pvp_credit.json
@@ -0,0 +1,10 @@
+{
+ "name": "PvpCredit",
+ "opcode": "smsg_pvp_credit",
+ "direction": "server",
+ "fields": [
+ { "name": "honor_points", "type": "uint32" },
+ { "name": "victim", "type": "uint64" },
+ { "name": "rank", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_pvp_log_data_server.json b/schemas/world/packets/smsg_pvp_log_data_server.json
new file mode 100644
index 000000000..83bdce2d6
--- /dev/null
+++ b/schemas/world/packets/smsg_pvp_log_data_server.json
@@ -0,0 +1,17 @@
+{
+ "name": "PvpLogDataServer",
+ "opcode": "smsg_pvp_log_data_server",
+ "direction": "server",
+ "fields": [
+ { "name": "status", "type": "BattlegroundEndStatus" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "status", "value": "ended" },
+ "fields": [
+ { "name": "winner", "type": "BattlegroundWinner" }
+ ]
+ },
+ { "name": "amount_of_players", "type": "uint32" },
+ { "name": "players", "type": "BattlegroundPlayer", "array": {"count_field": "amount_of_players"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_query_next_mail_time_server.json b/schemas/world/packets/smsg_query_next_mail_time_server.json
new file mode 100644
index 000000000..c7fa159eb
--- /dev/null
+++ b/schemas/world/packets/smsg_query_next_mail_time_server.json
@@ -0,0 +1,8 @@
+{
+ "name": "QueryNextMailTimeServer",
+ "opcode": "smsg_query_next_mail_time_server",
+ "direction": "server",
+ "fields": [
+ { "name": "unread_mails", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_query_time_response.json b/schemas/world/packets/smsg_query_time_response.json
new file mode 100644
index 000000000..e1cd7c326
--- /dev/null
+++ b/schemas/world/packets/smsg_query_time_response.json
@@ -0,0 +1,8 @@
+{
+ "name": "QueryTimeResponse",
+ "opcode": "smsg_query_time_response",
+ "direction": "server",
+ "fields": [
+ { "name": "time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_quest_confirm_accept.json b/schemas/world/packets/smsg_quest_confirm_accept.json
new file mode 100644
index 000000000..d4fed5479
--- /dev/null
+++ b/schemas/world/packets/smsg_quest_confirm_accept.json
@@ -0,0 +1,10 @@
+{
+ "name": "QuestConfirmAccept",
+ "opcode": "smsg_quest_confirm_accept",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "quest_title", "type": "CString" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_quest_query_response.json b/schemas/world/packets/smsg_quest_query_response.json
new file mode 100644
index 000000000..75d22bbf2
--- /dev/null
+++ b/schemas/world/packets/smsg_quest_query_response.json
@@ -0,0 +1,33 @@
+{
+ "name": "QuestQueryResponse",
+ "opcode": "smsg_quest_query_response",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "quest_method", "type": "uint32" },
+ { "name": "quest_level", "type": "uint32" },
+ { "name": "zone_or_sort", "type": "uint32" },
+ { "name": "quest_type", "type": "uint32" },
+ { "name": "reputation_objective_faction", "type": "uint16" },
+ { "name": "reputation_objective_value", "type": "uint32" },
+ { "name": "required_opposite_faction", "type": "uint16" },
+ { "name": "required_opposite_reputation_value", "type": "uint32" },
+ { "name": "next_quest_in_chain", "type": "uint32" },
+ { "name": "money_reward", "type": "uint32" },
+ { "name": "max_level_money_reward", "type": "uint32" },
+ { "name": "reward_spell", "type": "uint32" },
+ { "name": "source_item_id", "type": "uint32" },
+ { "name": "quest_flags", "type": "uint32" },
+ { "name": "rewards", "type": "QuestItemReward", "array": {"size": 4} },
+ { "name": "choice_rewards", "type": "QuestItemReward", "array": {"size": 6} },
+ { "name": "point_map_id", "type": "uint32" },
+ { "name": "position", "type": "Vector2d" },
+ { "name": "point_opt", "type": "uint32" },
+ { "name": "title", "type": "CString" },
+ { "name": "objective_text", "type": "CString" },
+ { "name": "details", "type": "CString" },
+ { "name": "end_text", "type": "CString" },
+ { "name": "objectives", "type": "QuestObjective", "array": {"size": 4} },
+ { "name": "objective_texts", "type": "CString", "array": {"size": 4} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questgiver_offer_reward.json b/schemas/world/packets/smsg_questgiver_offer_reward.json
new file mode 100644
index 000000000..55fb0c182
--- /dev/null
+++ b/schemas/world/packets/smsg_questgiver_offer_reward.json
@@ -0,0 +1,21 @@
+{
+ "name": "QuestgiverOfferReward",
+ "opcode": "smsg_questgiver_offer_reward",
+ "direction": "server",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "title", "type": "CString" },
+ { "name": "offer_reward_text", "type": "CString" },
+ { "name": "auto_finish", "type": "uint32" },
+ { "name": "amount_of_emotes", "type": "uint32" },
+ { "name": "emotes", "type": "NpcTextUpdateEmote", "array": {"count_field": "amount_of_emotes"} },
+ { "name": "amount_of_choice_item_rewards", "type": "uint32" },
+ { "name": "choice_item_rewards", "type": "QuestItemRequirement", "array": {"count_field": "amount_of_choice_item_rewards"} },
+ { "name": "amount_of_item_rewards", "type": "uint32" },
+ { "name": "item_rewards", "type": "QuestItemRequirement", "array": {"count_field": "amount_of_item_rewards"} },
+ { "name": "money_reward", "type": "uint32" },
+ { "name": "reward_spell", "type": "uint32" },
+ { "name": "reward_spell_cast", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questgiver_quest_complete.json b/schemas/world/packets/smsg_questgiver_quest_complete.json
new file mode 100644
index 000000000..184e55762
--- /dev/null
+++ b/schemas/world/packets/smsg_questgiver_quest_complete.json
@@ -0,0 +1,13 @@
+{
+ "name": "QuestgiverQuestComplete",
+ "opcode": "smsg_questgiver_quest_complete",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "unknown", "type": "uint32" },
+ { "name": "experience_reward", "type": "uint32" },
+ { "name": "money_reward", "type": "uint32" },
+ { "name": "amount_of_item_rewards", "type": "uint32" },
+ { "name": "item_rewards", "type": "QuestItemReward", "array": {"count_field": "amount_of_item_rewards"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questgiver_quest_details.json b/schemas/world/packets/smsg_questgiver_quest_details.json
new file mode 100644
index 000000000..be03b4546
--- /dev/null
+++ b/schemas/world/packets/smsg_questgiver_quest_details.json
@@ -0,0 +1,21 @@
+{
+ "name": "QuestgiverQuestDetails",
+ "opcode": "smsg_questgiver_quest_details",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "title", "type": "CString" },
+ { "name": "details", "type": "CString" },
+ { "name": "objectives", "type": "CString" },
+ { "name": "auto_finish", "type": "uint32" },
+ { "name": "amount_of_choice_item_rewards", "type": "uint32" },
+ { "name": "choice_item_rewards", "type": "QuestItemReward", "array": {"count_field": "amount_of_choice_item_rewards"} },
+ { "name": "amount_of_item_rewards", "type": "uint32" },
+ { "name": "item_rewards", "type": "QuestItemReward", "array": {"count_field": "amount_of_item_rewards"} },
+ { "name": "money_reward", "type": "uint32" },
+ { "name": "reward_spell", "type": "uint32" },
+ { "name": "amount_of_emotes", "type": "uint32" },
+ { "name": "emotes", "type": "QuestDetailsEmote", "array": {"count_field": "amount_of_emotes"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questgiver_quest_list.json b/schemas/world/packets/smsg_questgiver_quest_list.json
new file mode 100644
index 000000000..2c7a62772
--- /dev/null
+++ b/schemas/world/packets/smsg_questgiver_quest_list.json
@@ -0,0 +1,13 @@
+{
+ "name": "QuestgiverQuestList",
+ "opcode": "smsg_questgiver_quest_list",
+ "direction": "server",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "title", "type": "CString" },
+ { "name": "emote_delay", "type": "uint32" },
+ { "name": "emote", "type": "uint32" },
+ { "name": "amount_of_entries", "type": "uint8" },
+ { "name": "quest_items", "type": "QuestItem", "array": {"count_field": "amount_of_entries"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questgiver_request_items.json b/schemas/world/packets/smsg_questgiver_request_items.json
new file mode 100644
index 000000000..c34296cca
--- /dev/null
+++ b/schemas/world/packets/smsg_questgiver_request_items.json
@@ -0,0 +1,21 @@
+{
+ "name": "QuestgiverRequestItems",
+ "opcode": "smsg_questgiver_request_items",
+ "direction": "server",
+ "fields": [
+ { "name": "npc", "type": "uint64" },
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "title", "type": "CString" },
+ { "name": "request_items_text", "type": "CString" },
+ { "name": "emote_delay", "type": "uint32" },
+ { "name": "emote", "type": "uint32" },
+ { "name": "auto_finish", "type": "uint32" },
+ { "name": "required_money", "type": "uint32" },
+ { "name": "amount_of_required_items", "type": "uint32" },
+ { "name": "required_items", "type": "QuestItemRequirement", "array": {"count_field": "amount_of_required_items"} },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "completable", "type": "QuestCompletable" },
+ { "name": "flags2", "type": "uint32" },
+ { "name": "flags3", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questlog_full.json b/schemas/world/packets/smsg_questlog_full.json
new file mode 100644
index 000000000..5f1319e97
--- /dev/null
+++ b/schemas/world/packets/smsg_questlog_full.json
@@ -0,0 +1,5 @@
+{
+ "name": "QuestlogFull",
+ "opcode": "smsg_questlog_full",
+ "direction": "server"
+}
diff --git a/schemas/world/packets/smsg_questupdate_add_item.json b/schemas/world/packets/smsg_questupdate_add_item.json
new file mode 100644
index 000000000..4fdb2d829
--- /dev/null
+++ b/schemas/world/packets/smsg_questupdate_add_item.json
@@ -0,0 +1,9 @@
+{
+ "name": "QuestupdateAddItem",
+ "opcode": "smsg_questupdate_add_item",
+ "direction": "server",
+ "fields": [
+ { "name": "required_item_id", "type": "uint32" },
+ { "name": "items_required", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questupdate_add_kill.json b/schemas/world/packets/smsg_questupdate_add_kill.json
new file mode 100644
index 000000000..45a45acb1
--- /dev/null
+++ b/schemas/world/packets/smsg_questupdate_add_kill.json
@@ -0,0 +1,12 @@
+{
+ "name": "QuestupdateAddKill",
+ "opcode": "smsg_questupdate_add_kill",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "creature_id", "type": "uint32" },
+ { "name": "kill_count", "type": "uint32" },
+ { "name": "required_kill_count", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questupdate_complete.json b/schemas/world/packets/smsg_questupdate_complete.json
new file mode 100644
index 000000000..d12d13e5e
--- /dev/null
+++ b/schemas/world/packets/smsg_questupdate_complete.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestupdateComplete",
+ "opcode": "smsg_questupdate_complete",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questupdate_failed.json b/schemas/world/packets/smsg_questupdate_failed.json
new file mode 100644
index 000000000..69e361334
--- /dev/null
+++ b/schemas/world/packets/smsg_questupdate_failed.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestupdateFailed",
+ "opcode": "smsg_questupdate_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_questupdate_failedtimer.json b/schemas/world/packets/smsg_questupdate_failedtimer.json
new file mode 100644
index 000000000..1ef12db45
--- /dev/null
+++ b/schemas/world/packets/smsg_questupdate_failedtimer.json
@@ -0,0 +1,8 @@
+{
+ "name": "QuestupdateFailedtimer",
+ "opcode": "smsg_questupdate_failedtimer",
+ "direction": "server",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_raid_group_only.json b/schemas/world/packets/smsg_raid_group_only.json
new file mode 100644
index 000000000..6c6e2b16c
--- /dev/null
+++ b/schemas/world/packets/smsg_raid_group_only.json
@@ -0,0 +1,9 @@
+{
+ "name": "RaidGroupOnly",
+ "opcode": "smsg_raid_group_only",
+ "direction": "server",
+ "fields": [
+ { "name": "homebind_timer", "type": "uint32" },
+ { "name": "error", "type": "RaidGroupError" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_raid_instance_info.json b/schemas/world/packets/smsg_raid_instance_info.json
new file mode 100644
index 000000000..88342bb9f
--- /dev/null
+++ b/schemas/world/packets/smsg_raid_instance_info.json
@@ -0,0 +1,9 @@
+{
+ "name": "RaidInstanceInfo",
+ "opcode": "smsg_raid_instance_info",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_raid_infos", "type": "uint32" },
+ { "name": "raid_infos", "type": "RaidInfo", "array": {"count_field": "amount_of_raid_infos"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_raid_instance_message.json b/schemas/world/packets/smsg_raid_instance_message.json
new file mode 100644
index 000000000..1343d69db
--- /dev/null
+++ b/schemas/world/packets/smsg_raid_instance_message.json
@@ -0,0 +1,10 @@
+{
+ "name": "RaidInstanceMessage",
+ "opcode": "smsg_raid_instance_message",
+ "direction": "server",
+ "fields": [
+ { "name": "message_type", "type": "RaidInstanceMessage" },
+ { "name": "map", "type": "Map" },
+ { "name": "time_left", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_raid_ready_check_server.json b/schemas/world/packets/smsg_raid_ready_check_server.json
new file mode 100644
index 000000000..3009808ab
--- /dev/null
+++ b/schemas/world/packets/smsg_raid_ready_check_server.json
@@ -0,0 +1,15 @@
+{
+ "name": "RaidReadyCheckServer",
+ "opcode": "smsg_raid_ready_check_server",
+ "direction": "server",
+ "fields": [
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "state", "type": "uint8" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_raid_target_update_server.json b/schemas/world/packets/smsg_raid_target_update_server.json
new file mode 100644
index 000000000..07c755873
--- /dev/null
+++ b/schemas/world/packets/smsg_raid_target_update_server.json
@@ -0,0 +1,25 @@
+{
+ "name": "RaidTargetUpdateServer",
+ "opcode": "smsg_raid_target_update_server",
+ "direction": "server",
+ "fields": [
+ { "name": "update_type", "type": "RaidTargetUpdateType" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "update_type", "value": "full" },
+ "fields": [
+ { "name": "raid_targets", "type": "RaidTargetUpdate", "array": {"size": 8} }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "update_type", "value": "partial" },
+ "fields": [
+ { "name": "raid_target", "type": "RaidTargetUpdate" }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_random_roll_server.json b/schemas/world/packets/smsg_random_roll_server.json
new file mode 100644
index 000000000..96586e6e7
--- /dev/null
+++ b/schemas/world/packets/smsg_random_roll_server.json
@@ -0,0 +1,11 @@
+{
+ "name": "RandomRollServer",
+ "opcode": "smsg_random_roll_server",
+ "direction": "server",
+ "fields": [
+ { "name": "minimum", "type": "uint32" },
+ { "name": "maximum", "type": "uint32" },
+ { "name": "actual_roll", "type": "uint32" },
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_read_item_failed.json b/schemas/world/packets/smsg_read_item_failed.json
new file mode 100644
index 000000000..65ea796a0
--- /dev/null
+++ b/schemas/world/packets/smsg_read_item_failed.json
@@ -0,0 +1,8 @@
+{
+ "name": "ReadItemFailed",
+ "opcode": "smsg_read_item_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_read_item_ok.json b/schemas/world/packets/smsg_read_item_ok.json
new file mode 100644
index 000000000..1b6525417
--- /dev/null
+++ b/schemas/world/packets/smsg_read_item_ok.json
@@ -0,0 +1,8 @@
+{
+ "name": "ReadItemOk",
+ "opcode": "smsg_read_item_ok",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_received_mail.json b/schemas/world/packets/smsg_received_mail.json
new file mode 100644
index 000000000..b8240a3cc
--- /dev/null
+++ b/schemas/world/packets/smsg_received_mail.json
@@ -0,0 +1,8 @@
+{
+ "name": "ReceivedMail",
+ "opcode": "smsg_received_mail",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_removed_spell.json b/schemas/world/packets/smsg_removed_spell.json
new file mode 100644
index 000000000..197932caf
--- /dev/null
+++ b/schemas/world/packets/smsg_removed_spell.json
@@ -0,0 +1,8 @@
+{
+ "name": "RemovedSpell",
+ "opcode": "smsg_removed_spell",
+ "direction": "server",
+ "fields": [
+ { "name": "spell", "type": "uint16" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_resistlog.json b/schemas/world/packets/smsg_resistlog.json
new file mode 100644
index 000000000..92245d573
--- /dev/null
+++ b/schemas/world/packets/smsg_resistlog.json
@@ -0,0 +1,14 @@
+{
+ "name": "Resistlog",
+ "opcode": "smsg_resistlog",
+ "direction": "server",
+ "fields": [
+ { "name": "guid1", "type": "uint64" },
+ { "name": "guid2", "type": "uint64" },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "unknown2", "type": "float" },
+ { "name": "unknown3", "type": "float" },
+ { "name": "unknown4", "type": "uint32" },
+ { "name": "unknown5", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_resurrect_request.json b/schemas/world/packets/smsg_resurrect_request.json
new file mode 100644
index 000000000..80efaaede
--- /dev/null
+++ b/schemas/world/packets/smsg_resurrect_request.json
@@ -0,0 +1,10 @@
+{
+ "name": "ResurrectRequest",
+ "opcode": "smsg_resurrect_request",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "name", "type": "PrefixedString32" },
+ { "name": "player", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_save_guild_emblem_server.json b/schemas/world/packets/smsg_save_guild_emblem_server.json
new file mode 100644
index 000000000..d2213c01c
--- /dev/null
+++ b/schemas/world/packets/smsg_save_guild_emblem_server.json
@@ -0,0 +1,8 @@
+{
+ "name": "SaveGuildEmblemServer",
+ "opcode": "smsg_save_guild_emblem_server",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "GuildEmblemResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_sell_item.json b/schemas/world/packets/smsg_sell_item.json
new file mode 100644
index 000000000..82fd23d9e
--- /dev/null
+++ b/schemas/world/packets/smsg_sell_item.json
@@ -0,0 +1,10 @@
+{
+ "name": "SellItem",
+ "opcode": "smsg_sell_item",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "item", "type": "uint64" },
+ { "name": "result", "type": "SellItemResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_send_mail_result.json b/schemas/world/packets/smsg_send_mail_result.json
new file mode 100644
index 000000000..f307fc2cb
--- /dev/null
+++ b/schemas/world/packets/smsg_send_mail_result.json
@@ -0,0 +1,45 @@
+{
+ "name": "SendMailResult",
+ "opcode": "smsg_send_mail_result",
+ "direction": "server",
+ "fields": [
+ { "name": "mail_id", "type": "uint32" },
+ { "name": "action", "type": "MailAction" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "action", "value": "item_taken" },
+ "fields": [
+ { "name": "result", "type": "MailResult" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "err_equip_error" },
+ "fields": [
+ { "name": "equip_error", "type": "uint32" }
+ ]
+ }
+ ],
+ "else": [
+ { "name": "item", "type": "uint32" },
+ { "name": "item_count", "type": "uint32" }
+ ]
+ }
+ ]
+ }
+ ],
+ "else": [
+ { "name": "result2", "type": "MailResultTwo" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "result2", "value": "err_equip_error" },
+ "fields": [
+ { "name": "equip_error2", "type": "uint32" }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_server_message.json b/schemas/world/packets/smsg_server_message.json
new file mode 100644
index 000000000..0fe7f098d
--- /dev/null
+++ b/schemas/world/packets/smsg_server_message.json
@@ -0,0 +1,9 @@
+{
+ "name": "ServerMessage",
+ "opcode": "smsg_server_message",
+ "direction": "server",
+ "fields": [
+ { "name": "message_type", "type": "ServerMessageType" },
+ { "name": "message", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_faction_standing.json b/schemas/world/packets/smsg_set_faction_standing.json
new file mode 100644
index 000000000..8133ea6d6
--- /dev/null
+++ b/schemas/world/packets/smsg_set_faction_standing.json
@@ -0,0 +1,9 @@
+{
+ "name": "SetFactionStanding",
+ "opcode": "smsg_set_faction_standing",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_faction_standings", "type": "uint32" },
+ { "name": "faction_standings", "type": "FactionStanding", "array": {"count_field": "amount_of_faction_standings"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_faction_visible.json b/schemas/world/packets/smsg_set_faction_visible.json
new file mode 100644
index 000000000..51a76b743
--- /dev/null
+++ b/schemas/world/packets/smsg_set_faction_visible.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetFactionVisible",
+ "opcode": "smsg_set_faction_visible",
+ "direction": "server",
+ "fields": [
+ { "name": "faction", "type": "uint16" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_flat_spell_modifier.json b/schemas/world/packets/smsg_set_flat_spell_modifier.json
new file mode 100644
index 000000000..8116981b0
--- /dev/null
+++ b/schemas/world/packets/smsg_set_flat_spell_modifier.json
@@ -0,0 +1,10 @@
+{
+ "name": "SetFlatSpellModifier",
+ "opcode": "smsg_set_flat_spell_modifier",
+ "direction": "server",
+ "fields": [
+ { "name": "eff", "type": "uint8" },
+ { "name": "op", "type": "uint8" },
+ { "name": "value", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_forced_reactions.json b/schemas/world/packets/smsg_set_forced_reactions.json
new file mode 100644
index 000000000..a2a0803a3
--- /dev/null
+++ b/schemas/world/packets/smsg_set_forced_reactions.json
@@ -0,0 +1,9 @@
+{
+ "name": "SetForcedReactions",
+ "opcode": "smsg_set_forced_reactions",
+ "direction": "server",
+ "fields": [
+ { "name": "amount_of_reactions", "type": "uint32" },
+ { "name": "reactions", "type": "ForcedReaction", "array": {"count_field": "amount_of_reactions"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_pct_spell_modifier.json b/schemas/world/packets/smsg_set_pct_spell_modifier.json
new file mode 100644
index 000000000..1a34c541c
--- /dev/null
+++ b/schemas/world/packets/smsg_set_pct_spell_modifier.json
@@ -0,0 +1,10 @@
+{
+ "name": "SetPctSpellModifier",
+ "opcode": "smsg_set_pct_spell_modifier",
+ "direction": "server",
+ "fields": [
+ { "name": "eff", "type": "uint8" },
+ { "name": "op", "type": "uint8" },
+ { "name": "value", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_proficiency.json b/schemas/world/packets/smsg_set_proficiency.json
new file mode 100644
index 000000000..09e038e60
--- /dev/null
+++ b/schemas/world/packets/smsg_set_proficiency.json
@@ -0,0 +1,9 @@
+{
+ "name": "SetProficiency",
+ "opcode": "smsg_set_proficiency",
+ "direction": "server",
+ "fields": [
+ { "name": "class", "type": "uint8", "as": "ItemClass" },
+ { "name": "item_sub_class_mask", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_set_rest_start.json b/schemas/world/packets/smsg_set_rest_start.json
new file mode 100644
index 000000000..8afab978e
--- /dev/null
+++ b/schemas/world/packets/smsg_set_rest_start.json
@@ -0,0 +1,8 @@
+{
+ "name": "SetRestStart",
+ "opcode": "smsg_set_rest_start",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown1", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_show_bank.json b/schemas/world/packets/smsg_show_bank.json
new file mode 100644
index 000000000..839a6b9fc
--- /dev/null
+++ b/schemas/world/packets/smsg_show_bank.json
@@ -0,0 +1,8 @@
+{
+ "name": "ShowBank",
+ "opcode": "smsg_show_bank",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_showtaxinodes.json b/schemas/world/packets/smsg_showtaxinodes.json
new file mode 100644
index 000000000..291556f73
--- /dev/null
+++ b/schemas/world/packets/smsg_showtaxinodes.json
@@ -0,0 +1,11 @@
+{
+ "name": "Showtaxinodes",
+ "opcode": "smsg_showtaxinodes",
+ "direction": "server",
+ "fields": [
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "guid", "type": "uint64" },
+ { "name": "nearest_node", "type": "uint32" },
+ { "name": "nodes", "type": "uint32", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_cooldown.json b/schemas/world/packets/smsg_spell_cooldown.json
new file mode 100644
index 000000000..55be23567
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_cooldown.json
@@ -0,0 +1,9 @@
+{
+ "name": "SpellCooldown",
+ "opcode": "smsg_spell_cooldown",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "cooldowns", "type": "SpellCooldownStatus", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_delayed.json b/schemas/world/packets/smsg_spell_delayed.json
new file mode 100644
index 000000000..e3a2b92d7
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_delayed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SpellDelayed",
+ "opcode": "smsg_spell_delayed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "delay_time", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_failed_other.json b/schemas/world/packets/smsg_spell_failed_other.json
new file mode 100644
index 000000000..801ce1324
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_failed_other.json
@@ -0,0 +1,9 @@
+{
+ "name": "SpellFailedOther",
+ "opcode": "smsg_spell_failed_other",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "uint64" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_failure.json b/schemas/world/packets/smsg_spell_failure.json
new file mode 100644
index 000000000..ebc47d130
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_failure.json
@@ -0,0 +1,10 @@
+{
+ "name": "SpellFailure",
+ "opcode": "smsg_spell_failure",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "result", "type": "SpellCastResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_go.json b/schemas/world/packets/smsg_spell_go.json
new file mode 100644
index 000000000..90f0e1369
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_go.json
@@ -0,0 +1,24 @@
+{
+ "name": "SpellGo",
+ "opcode": "smsg_spell_go",
+ "direction": "server",
+ "fields": [
+ { "name": "cast_item", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "flags", "type": "CastFlags" },
+ { "name": "amount_of_hits", "type": "uint8" },
+ { "name": "hits", "type": "uint64", "array": {"count_field": "amount_of_hits"} },
+ { "name": "amount_of_misses", "type": "uint8" },
+ { "name": "misses", "type": "SpellMiss", "array": {"count_field": "amount_of_misses"} },
+ { "name": "targets", "type": "SpellCastTargets" },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "flags", "value": "ammo" },
+ "fields": [
+ { "name": "ammo_display_id", "type": "uint32" },
+ { "name": "ammo_inventory_type", "type": "uint32" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_start.json b/schemas/world/packets/smsg_spell_start.json
new file mode 100644
index 000000000..d814e9745
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_start.json
@@ -0,0 +1,21 @@
+{
+ "name": "SpellStart",
+ "opcode": "smsg_spell_start",
+ "direction": "server",
+ "fields": [
+ { "name": "cast_item", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "flags", "type": "CastFlags" },
+ { "name": "timer", "type": "uint32" },
+ { "name": "targets", "type": "SpellCastTargets" },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "flags", "value": "ammo" },
+ "fields": [
+ { "name": "ammo_display_id", "type": "uint32" },
+ { "name": "ammo_inventory_type", "type": "uint32" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spell_update_chain_targets.json b/schemas/world/packets/smsg_spell_update_chain_targets.json
new file mode 100644
index 000000000..2ccb439d6
--- /dev/null
+++ b/schemas/world/packets/smsg_spell_update_chain_targets.json
@@ -0,0 +1,11 @@
+{
+ "name": "SpellUpdateChainTargets",
+ "opcode": "smsg_spell_update_chain_targets",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "uint64" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "amount_of_targets", "type": "uint32" },
+ { "name": "targets", "type": "uint64", "array": {"count_field": "amount_of_targets"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spelldamageshield.json b/schemas/world/packets/smsg_spelldamageshield.json
new file mode 100644
index 000000000..3bb6102e9
--- /dev/null
+++ b/schemas/world/packets/smsg_spelldamageshield.json
@@ -0,0 +1,11 @@
+{
+ "name": "Spelldamageshield",
+ "opcode": "smsg_spelldamageshield",
+ "direction": "server",
+ "fields": [
+ { "name": "victim", "type": "uint64" },
+ { "name": "caster", "type": "uint64" },
+ { "name": "damage", "type": "uint32" },
+ { "name": "school", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spelldispellog.json b/schemas/world/packets/smsg_spelldispellog.json
new file mode 100644
index 000000000..42771f9b3
--- /dev/null
+++ b/schemas/world/packets/smsg_spelldispellog.json
@@ -0,0 +1,11 @@
+{
+ "name": "Spelldispellog",
+ "opcode": "smsg_spelldispellog",
+ "direction": "server",
+ "fields": [
+ { "name": "victim", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "amount_of_spells", "type": "uint32" },
+ { "name": "spells", "type": "uint32", "array": {"count_field": "amount_of_spells"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spellenergizelog.json b/schemas/world/packets/smsg_spellenergizelog.json
new file mode 100644
index 000000000..6cc41ecf7
--- /dev/null
+++ b/schemas/world/packets/smsg_spellenergizelog.json
@@ -0,0 +1,12 @@
+{
+ "name": "Spellenergizelog",
+ "opcode": "smsg_spellenergizelog",
+ "direction": "server",
+ "fields": [
+ { "name": "victim", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "power", "type": "uint32" },
+ { "name": "damage", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spellheallog.json b/schemas/world/packets/smsg_spellheallog.json
new file mode 100644
index 000000000..4183a04c3
--- /dev/null
+++ b/schemas/world/packets/smsg_spellheallog.json
@@ -0,0 +1,12 @@
+{
+ "name": "Spellheallog",
+ "opcode": "smsg_spellheallog",
+ "direction": "server",
+ "fields": [
+ { "name": "victim", "type": "PackedGuid" },
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "id", "type": "uint32" },
+ { "name": "damage", "type": "uint32" },
+ { "name": "critical", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spellinstakilllog.json b/schemas/world/packets/smsg_spellinstakilllog.json
new file mode 100644
index 000000000..e0f78db5d
--- /dev/null
+++ b/schemas/world/packets/smsg_spellinstakilllog.json
@@ -0,0 +1,9 @@
+{
+ "name": "Spellinstakilllog",
+ "opcode": "smsg_spellinstakilllog",
+ "direction": "server",
+ "fields": [
+ { "name": "target", "type": "uint64" },
+ { "name": "spell", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spelllogexecute.json b/schemas/world/packets/smsg_spelllogexecute.json
new file mode 100644
index 000000000..799567d93
--- /dev/null
+++ b/schemas/world/packets/smsg_spelllogexecute.json
@@ -0,0 +1,11 @@
+{
+ "name": "Spelllogexecute",
+ "opcode": "smsg_spelllogexecute",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "amount_of_effects", "type": "uint32" },
+ { "name": "logs", "type": "SpellLog", "array": {"count_field": "amount_of_effects"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spelllogmiss.json b/schemas/world/packets/smsg_spelllogmiss.json
new file mode 100644
index 000000000..a519f9e02
--- /dev/null
+++ b/schemas/world/packets/smsg_spelllogmiss.json
@@ -0,0 +1,12 @@
+{
+ "name": "Spelllogmiss",
+ "opcode": "smsg_spelllogmiss",
+ "direction": "server",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "caster", "type": "uint64" },
+ { "name": "unknown1", "type": "uint8" },
+ { "name": "amount_of_targets", "type": "uint32" },
+ { "name": "targets", "type": "SpellLogMiss", "array": {"count_field": "amount_of_targets"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spellnonmeleedamagelog.json b/schemas/world/packets/smsg_spellnonmeleedamagelog.json
new file mode 100644
index 000000000..8db26c8a0
--- /dev/null
+++ b/schemas/world/packets/smsg_spellnonmeleedamagelog.json
@@ -0,0 +1,19 @@
+{
+ "name": "Spellnonmeleedamagelog",
+ "opcode": "smsg_spellnonmeleedamagelog",
+ "direction": "server",
+ "fields": [
+ { "name": "target", "type": "PackedGuid" },
+ { "name": "attacker", "type": "PackedGuid" },
+ { "name": "spell", "type": "uint32" },
+ { "name": "damage", "type": "uint32" },
+ { "name": "school", "type": "SpellSchool" },
+ { "name": "absorbed_damage", "type": "uint32" },
+ { "name": "resisted", "type": "uint32" },
+ { "name": "periodic_log", "type": "uint8" },
+ { "name": "unused", "type": "uint8" },
+ { "name": "blocked", "type": "uint32" },
+ { "name": "hit_info", "type": "HitInfo" },
+ { "name": "extend_flag", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spellordamage_immune.json b/schemas/world/packets/smsg_spellordamage_immune.json
new file mode 100644
index 000000000..6490740c0
--- /dev/null
+++ b/schemas/world/packets/smsg_spellordamage_immune.json
@@ -0,0 +1,11 @@
+{
+ "name": "SpellordamageImmune",
+ "opcode": "smsg_spellordamage_immune",
+ "direction": "server",
+ "fields": [
+ { "name": "caster", "type": "uint64" },
+ { "name": "target", "type": "uint64" },
+ { "name": "id", "type": "uint32" },
+ { "name": "debug_log_format", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spirit_healer_confirm.json b/schemas/world/packets/smsg_spirit_healer_confirm.json
new file mode 100644
index 000000000..c1b4562e8
--- /dev/null
+++ b/schemas/world/packets/smsg_spirit_healer_confirm.json
@@ -0,0 +1,8 @@
+{
+ "name": "SpiritHealerConfirm",
+ "opcode": "smsg_spirit_healer_confirm",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_feather_fall.json b/schemas/world/packets/smsg_spline_move_feather_fall.json
new file mode 100644
index 000000000..efb40a552
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_feather_fall.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveFeatherFall",
+ "opcode": "smsg_spline_move_feather_fall",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_land_walk.json b/schemas/world/packets/smsg_spline_move_land_walk.json
new file mode 100644
index 000000000..64041c494
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_land_walk.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveLandWalk",
+ "opcode": "smsg_spline_move_land_walk",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_normal_fall.json b/schemas/world/packets/smsg_spline_move_normal_fall.json
new file mode 100644
index 000000000..f68a971b5
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_normal_fall.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveNormalFall",
+ "opcode": "smsg_spline_move_normal_fall",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_root.json b/schemas/world/packets/smsg_spline_move_root.json
new file mode 100644
index 000000000..05f3ea4e1
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_root.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveRoot",
+ "opcode": "smsg_spline_move_root",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_set_hover.json b/schemas/world/packets/smsg_spline_move_set_hover.json
new file mode 100644
index 000000000..e96d1bde5
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_set_hover.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveSetHover",
+ "opcode": "smsg_spline_move_set_hover",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_set_run_mode.json b/schemas/world/packets/smsg_spline_move_set_run_mode.json
new file mode 100644
index 000000000..ac2419fdf
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_set_run_mode.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveSetRunMode",
+ "opcode": "smsg_spline_move_set_run_mode",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_set_walk_mode.json b/schemas/world/packets/smsg_spline_move_set_walk_mode.json
new file mode 100644
index 000000000..c46b4ccde
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_set_walk_mode.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveSetWalkMode",
+ "opcode": "smsg_spline_move_set_walk_mode",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_start_swim.json b/schemas/world/packets/smsg_spline_move_start_swim.json
new file mode 100644
index 000000000..c7b3fef50
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_start_swim.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveStartSwim",
+ "opcode": "smsg_spline_move_start_swim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_stop_swim.json b/schemas/world/packets/smsg_spline_move_stop_swim.json
new file mode 100644
index 000000000..c159556fa
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_stop_swim.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveStopSwim",
+ "opcode": "smsg_spline_move_stop_swim",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_unroot.json b/schemas/world/packets/smsg_spline_move_unroot.json
new file mode 100644
index 000000000..eca0af5df
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_unroot.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveUnroot",
+ "opcode": "smsg_spline_move_unroot",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_unset_hover.json b/schemas/world/packets/smsg_spline_move_unset_hover.json
new file mode 100644
index 000000000..0aef36f0e
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_unset_hover.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveUnsetHover",
+ "opcode": "smsg_spline_move_unset_hover",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_move_water_walk.json b/schemas/world/packets/smsg_spline_move_water_walk.json
new file mode 100644
index 000000000..836d88998
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_move_water_walk.json
@@ -0,0 +1,8 @@
+{
+ "name": "SplineMoveWaterWalk",
+ "opcode": "smsg_spline_move_water_walk",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_run_back_speed.json b/schemas/world/packets/smsg_spline_set_run_back_speed.json
new file mode 100644
index 000000000..ed19e81ec
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_run_back_speed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetRunBackSpeed",
+ "opcode": "smsg_spline_set_run_back_speed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_run_speed.json b/schemas/world/packets/smsg_spline_set_run_speed.json
new file mode 100644
index 000000000..d1a61f2ba
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_run_speed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetRunSpeed",
+ "opcode": "smsg_spline_set_run_speed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_swim_back_speed.json b/schemas/world/packets/smsg_spline_set_swim_back_speed.json
new file mode 100644
index 000000000..988bfa794
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_swim_back_speed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetSwimBackSpeed",
+ "opcode": "smsg_spline_set_swim_back_speed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_swim_speed.json b/schemas/world/packets/smsg_spline_set_swim_speed.json
new file mode 100644
index 000000000..d3d156462
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_swim_speed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetSwimSpeed",
+ "opcode": "smsg_spline_set_swim_speed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_turn_rate.json b/schemas/world/packets/smsg_spline_set_turn_rate.json
new file mode 100644
index 000000000..8febe7432
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_turn_rate.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetTurnRate",
+ "opcode": "smsg_spline_set_turn_rate",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_spline_set_walk_speed.json b/schemas/world/packets/smsg_spline_set_walk_speed.json
new file mode 100644
index 000000000..0befbfd8b
--- /dev/null
+++ b/schemas/world/packets/smsg_spline_set_walk_speed.json
@@ -0,0 +1,9 @@
+{
+ "name": "SplineSetWalkSpeed",
+ "opcode": "smsg_spline_set_walk_speed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "PackedGuid" },
+ { "name": "speed", "type": "float" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_stable_result.json b/schemas/world/packets/smsg_stable_result.json
new file mode 100644
index 000000000..907bb611e
--- /dev/null
+++ b/schemas/world/packets/smsg_stable_result.json
@@ -0,0 +1,8 @@
+{
+ "name": "StableResult",
+ "opcode": "smsg_stable_result",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "StableResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_standstate_update.json b/schemas/world/packets/smsg_standstate_update.json
new file mode 100644
index 000000000..f33f88164
--- /dev/null
+++ b/schemas/world/packets/smsg_standstate_update.json
@@ -0,0 +1,8 @@
+{
+ "name": "StandstateUpdate",
+ "opcode": "smsg_standstate_update",
+ "direction": "server",
+ "fields": [
+ { "name": "state", "type": "UnitStandState" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_start_mirror_timer.json b/schemas/world/packets/smsg_start_mirror_timer.json
new file mode 100644
index 000000000..638ed79dc
--- /dev/null
+++ b/schemas/world/packets/smsg_start_mirror_timer.json
@@ -0,0 +1,13 @@
+{
+ "name": "StartMirrorTimer",
+ "opcode": "smsg_start_mirror_timer",
+ "direction": "server",
+ "fields": [
+ { "name": "timer", "type": "TimerType" },
+ { "name": "time_remaining", "type": "uint32" },
+ { "name": "duration", "type": "uint32" },
+ { "name": "scale", "type": "uint32" },
+ { "name": "is_frozen", "type": "uint8" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_stop_mirror_timer.json b/schemas/world/packets/smsg_stop_mirror_timer.json
new file mode 100644
index 000000000..ccd9bf7a0
--- /dev/null
+++ b/schemas/world/packets/smsg_stop_mirror_timer.json
@@ -0,0 +1,8 @@
+{
+ "name": "StopMirrorTimer",
+ "opcode": "smsg_stop_mirror_timer",
+ "direction": "server",
+ "fields": [
+ { "name": "timer", "type": "TimerType" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_superceded_spell.json b/schemas/world/packets/smsg_superceded_spell.json
new file mode 100644
index 000000000..20dcd5516
--- /dev/null
+++ b/schemas/world/packets/smsg_superceded_spell.json
@@ -0,0 +1,9 @@
+{
+ "name": "SupercededSpell",
+ "opcode": "smsg_superceded_spell",
+ "direction": "server",
+ "fields": [
+ { "name": "new_spell_id", "type": "uint16" },
+ { "name": "old_spell_id", "type": "uint16" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_talent_wipe_confirm_server.json b/schemas/world/packets/smsg_talent_wipe_confirm_server.json
new file mode 100644
index 000000000..26a05999d
--- /dev/null
+++ b/schemas/world/packets/smsg_talent_wipe_confirm_server.json
@@ -0,0 +1,9 @@
+{
+ "name": "TalentWipeConfirmServer",
+ "opcode": "smsg_talent_wipe_confirm_server",
+ "direction": "server",
+ "fields": [
+ { "name": "wiping_npc", "type": "uint64" },
+ { "name": "cost_in_copper", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_taxinode_status.json b/schemas/world/packets/smsg_taxinode_status.json
new file mode 100644
index 000000000..f73f46d64
--- /dev/null
+++ b/schemas/world/packets/smsg_taxinode_status.json
@@ -0,0 +1,9 @@
+{
+ "name": "TaxinodeStatus",
+ "opcode": "smsg_taxinode_status",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "taxi_mask_node_known", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_text_emote.json b/schemas/world/packets/smsg_text_emote.json
new file mode 100644
index 000000000..164cfe53b
--- /dev/null
+++ b/schemas/world/packets/smsg_text_emote.json
@@ -0,0 +1,11 @@
+{
+ "name": "TextEmote",
+ "opcode": "smsg_text_emote",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "text_emote", "type": "TextEmote" },
+ { "name": "emote", "type": "uint32" },
+ { "name": "name", "type": "PrefixedString32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trade_status.json b/schemas/world/packets/smsg_trade_status.json
new file mode 100644
index 000000000..0c3edb470
--- /dev/null
+++ b/schemas/world/packets/smsg_trade_status.json
@@ -0,0 +1,33 @@
+{
+ "name": "TradeStatus",
+ "opcode": "smsg_trade_status",
+ "direction": "server",
+ "fields": [
+ { "name": "status", "type": "TradeStatus" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "status", "value": "begin_trade" },
+ "fields": [
+ { "name": "unknown1", "type": "uint64" }
+ ]
+ },
+ {
+ "when": { "op": "eq", "field": "status", "value": "close_window" },
+ "fields": [
+ { "name": "inventory_result", "type": "uint32" },
+ { "name": "target_error", "type": "uint8" },
+ { "name": "item_limit_category_id", "type": "uint32" }
+ ]
+ },
+ {
+ "when": { "op": "in", "field": "status", "value": ["only_conjured", "not_on_taplist"] },
+ "fields": [
+ { "name": "slot", "type": "uint8" }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trade_status_extended.json b/schemas/world/packets/smsg_trade_status_extended.json
new file mode 100644
index 000000000..2b1411ee1
--- /dev/null
+++ b/schemas/world/packets/smsg_trade_status_extended.json
@@ -0,0 +1,13 @@
+{
+ "name": "TradeStatusExtended",
+ "opcode": "smsg_trade_status_extended",
+ "direction": "server",
+ "fields": [
+ { "name": "self_player", "type": "uint8" },
+ { "name": "trade_slot_count1", "type": "uint32" },
+ { "name": "trade_slot_count2", "type": "uint32" },
+ { "name": "money_in_trade", "type": "uint32" },
+ { "name": "spell_on_lowest_slot", "type": "uint32" },
+ { "name": "trade_slots", "type": "TradeSlot", "array": {"size": 7} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trainer_buy_failed.json b/schemas/world/packets/smsg_trainer_buy_failed.json
new file mode 100644
index 000000000..5feb052dd
--- /dev/null
+++ b/schemas/world/packets/smsg_trainer_buy_failed.json
@@ -0,0 +1,10 @@
+{
+ "name": "TrainerBuyFailed",
+ "opcode": "smsg_trainer_buy_failed",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" },
+ { "name": "error", "type": "TrainingFailureReason" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trainer_buy_succeeded.json b/schemas/world/packets/smsg_trainer_buy_succeeded.json
new file mode 100644
index 000000000..2d06e5f70
--- /dev/null
+++ b/schemas/world/packets/smsg_trainer_buy_succeeded.json
@@ -0,0 +1,9 @@
+{
+ "name": "TrainerBuySucceeded",
+ "opcode": "smsg_trainer_buy_succeeded",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "id", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trainer_list.json b/schemas/world/packets/smsg_trainer_list.json
new file mode 100644
index 000000000..aa3898a2b
--- /dev/null
+++ b/schemas/world/packets/smsg_trainer_list.json
@@ -0,0 +1,12 @@
+{
+ "name": "TrainerList",
+ "opcode": "smsg_trainer_list",
+ "direction": "server",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "trainer_type", "type": "uint32" },
+ { "name": "amount_of_spells", "type": "uint32" },
+ { "name": "spells", "type": "TrainerSpell", "array": {"count_field": "amount_of_spells"} },
+ { "name": "greeting", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_transfer_aborted.json b/schemas/world/packets/smsg_transfer_aborted.json
new file mode 100644
index 000000000..652579b16
--- /dev/null
+++ b/schemas/world/packets/smsg_transfer_aborted.json
@@ -0,0 +1,10 @@
+{
+ "name": "TransferAborted",
+ "opcode": "smsg_transfer_aborted",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "reason", "type": "TransferAbortReason" },
+ { "name": "argument", "type": "uint8" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_transfer_pending.json b/schemas/world/packets/smsg_transfer_pending.json
new file mode 100644
index 000000000..fc5aaef9f
--- /dev/null
+++ b/schemas/world/packets/smsg_transfer_pending.json
@@ -0,0 +1,16 @@
+{
+ "name": "TransferPending",
+ "opcode": "smsg_transfer_pending",
+ "direction": "server",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ {
+ "type": "group",
+ "when": { "op": "stream_not_empty" },
+ "fields": [
+ { "name": "transport", "type": "uint32" },
+ { "name": "transport_map", "type": "Map" }
+ ]
+ }
+ ]
+}
diff --git a/schemas/world/packets/smsg_trigger_cinematic.json b/schemas/world/packets/smsg_trigger_cinematic.json
index 03213fd8c..dfef4c962 100644
--- a/schemas/world/packets/smsg_trigger_cinematic.json
+++ b/schemas/world/packets/smsg_trigger_cinematic.json
@@ -5,4 +5,4 @@
"fields": [
{ "name": "sequence_id", "type": "CinematicSequence" }
]
-}
\ No newline at end of file
+}
diff --git a/schemas/world/packets/smsg_turn_in_petition_results.json b/schemas/world/packets/smsg_turn_in_petition_results.json
new file mode 100644
index 000000000..12ff17022
--- /dev/null
+++ b/schemas/world/packets/smsg_turn_in_petition_results.json
@@ -0,0 +1,8 @@
+{
+ "name": "TurnInPetitionResults",
+ "opcode": "smsg_turn_in_petition_results",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "PetitionResult" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_tutorial_flags.json b/schemas/world/packets/smsg_tutorial_flags.json
new file mode 100644
index 000000000..cbedb5aea
--- /dev/null
+++ b/schemas/world/packets/smsg_tutorial_flags.json
@@ -0,0 +1,8 @@
+{
+ "name": "TutorialFlags",
+ "opcode": "smsg_tutorial_flags",
+ "direction": "server",
+ "fields": [
+ { "name": "tutorial_data", "type": "uint32", "array": {"size": 8} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_update_aura_duration.json b/schemas/world/packets/smsg_update_aura_duration.json
new file mode 100644
index 000000000..6864ee96d
--- /dev/null
+++ b/schemas/world/packets/smsg_update_aura_duration.json
@@ -0,0 +1,9 @@
+{
+ "name": "UpdateAuraDuration",
+ "opcode": "smsg_update_aura_duration",
+ "direction": "server",
+ "fields": [
+ { "name": "aura_slot", "type": "uint8" },
+ { "name": "aura_duration", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_update_instance_ownership.json b/schemas/world/packets/smsg_update_instance_ownership.json
new file mode 100644
index 000000000..07b4b23be
--- /dev/null
+++ b/schemas/world/packets/smsg_update_instance_ownership.json
@@ -0,0 +1,8 @@
+{
+ "name": "UpdateInstanceOwnership",
+ "opcode": "smsg_update_instance_ownership",
+ "direction": "server",
+ "fields": [
+ { "name": "player_is_saved_to_a_raid", "type": "uint32" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_update_world_state.json b/schemas/world/packets/smsg_update_world_state.json
new file mode 100644
index 000000000..4f2e8d73e
--- /dev/null
+++ b/schemas/world/packets/smsg_update_world_state.json
@@ -0,0 +1,8 @@
+{
+ "name": "UpdateWorldState",
+ "opcode": "smsg_update_world_state",
+ "direction": "server",
+ "fields": [
+ { "name": "state", "type": "WorldState" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_warden_data.json b/schemas/world/packets/smsg_warden_data.json
new file mode 100644
index 000000000..47e600e42
--- /dev/null
+++ b/schemas/world/packets/smsg_warden_data.json
@@ -0,0 +1,8 @@
+{
+ "name": "WardenData",
+ "opcode": "smsg_warden_data",
+ "direction": "server",
+ "fields": [
+ { "name": "encrypted_data", "type": "uint8", "array": {"until_end": true} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_weather.json b/schemas/world/packets/smsg_weather.json
new file mode 100644
index 000000000..acf17f55a
--- /dev/null
+++ b/schemas/world/packets/smsg_weather.json
@@ -0,0 +1,11 @@
+{
+ "name": "Weather",
+ "opcode": "smsg_weather",
+ "direction": "server",
+ "fields": [
+ { "name": "weather_type", "type": "WeatherType" },
+ { "name": "grade", "type": "float" },
+ { "name": "sound_id", "type": "uint32" },
+ { "name": "change", "type": "WeatherChangeType" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_who.json b/schemas/world/packets/smsg_who.json
new file mode 100644
index 000000000..4532dd328
--- /dev/null
+++ b/schemas/world/packets/smsg_who.json
@@ -0,0 +1,10 @@
+{
+ "name": "Who",
+ "opcode": "smsg_who",
+ "direction": "server",
+ "fields": [
+ { "name": "listed_players", "type": "uint32" },
+ { "name": "online_players", "type": "uint32" },
+ { "name": "players", "type": "WhoPlayer", "array": {"count_field": "listed_players"} }
+ ]
+}
diff --git a/schemas/world/packets/smsg_whois.json b/schemas/world/packets/smsg_whois.json
new file mode 100644
index 000000000..43f487a4c
--- /dev/null
+++ b/schemas/world/packets/smsg_whois.json
@@ -0,0 +1,8 @@
+{
+ "name": "Whois",
+ "opcode": "smsg_whois",
+ "direction": "server",
+ "fields": [
+ { "name": "message", "type": "CString" }
+ ]
+}
diff --git a/schemas/world/packets/smsg_zone_under_attack.json b/schemas/world/packets/smsg_zone_under_attack.json
new file mode 100644
index 000000000..b7269e1e8
--- /dev/null
+++ b/schemas/world/packets/smsg_zone_under_attack.json
@@ -0,0 +1,8 @@
+{
+ "name": "ZoneUnderAttack",
+ "opcode": "smsg_zone_under_attack",
+ "direction": "server",
+ "fields": [
+ { "name": "zone_id", "type": "Area" }
+ ]
+}
diff --git a/schemas/world/packets/todo/cmsg_activatetaxiexpress.json b/schemas/world/packets/todo/cmsg_activatetaxiexpress.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_activatetaxiexpress.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_add_pvp_medal_cheat.json b/schemas/world/packets/todo/cmsg_add_pvp_medal_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_add_pvp_medal_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_advance_spawn_time.json b/schemas/world/packets/todo/cmsg_advance_spawn_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_advance_spawn_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auction_list_bidder_items.json b/schemas/world/packets/todo/cmsg_auction_list_bidder_items.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auction_list_bidder_items.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auction_list_items.json b/schemas/world/packets/todo/cmsg_auction_list_items.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auction_list_items.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auction_list_owner_items.json b/schemas/world/packets/todo/cmsg_auction_list_owner_items.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auction_list_owner_items.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auction_place_bid.json b/schemas/world/packets/todo/cmsg_auction_place_bid.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auction_place_bid.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auth_session.json b/schemas/world/packets/todo/cmsg_auth_session.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auth_session.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auth_srp6_begin.json b/schemas/world/packets/todo/cmsg_auth_srp6_begin.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auth_srp6_begin.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auth_srp6_proof.json b/schemas/world/packets/todo/cmsg_auth_srp6_proof.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auth_srp6_proof.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_auth_srp6_recode.json b/schemas/world/packets/todo/cmsg_auth_srp6_recode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_auth_srp6_recode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autoequip_ground_item.json b/schemas/world/packets/todo/cmsg_autoequip_ground_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autoequip_ground_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autoequip_item.json b/schemas/world/packets/todo/cmsg_autoequip_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autoequip_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autoequip_item_slot.json b/schemas/world/packets/todo/cmsg_autoequip_item_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autoequip_item_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autostore_bag_item.json b/schemas/world/packets/todo/cmsg_autostore_bag_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autostore_bag_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autostore_bank_item.json b/schemas/world/packets/todo/cmsg_autostore_bank_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autostore_bank_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autostore_ground_item.json b/schemas/world/packets/todo/cmsg_autostore_ground_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autostore_ground_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_autostore_loot_item.json b/schemas/world/packets/todo/cmsg_autostore_loot_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_autostore_loot_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_banker_activate.json b/schemas/world/packets/todo/cmsg_banker_activate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_banker_activate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_battlefield_join.json b/schemas/world/packets/todo/cmsg_battlefield_join.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_battlefield_join.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_battlefield_list.json b/schemas/world/packets/todo/cmsg_battlefield_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_battlefield_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_battlefield_port.json b/schemas/world/packets/todo/cmsg_battlefield_port.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_battlefield_port.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_battlemaster_hello.json b/schemas/world/packets/todo/cmsg_battlemaster_hello.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_battlemaster_hello.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_battlemaster_join.json b/schemas/world/packets/todo/cmsg_battlemaster_join.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_battlemaster_join.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_beastmaster.json b/schemas/world/packets/todo/cmsg_beastmaster.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_beastmaster.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_begin_trade.json b/schemas/world/packets/todo/cmsg_begin_trade.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_begin_trade.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_binder_activate.json b/schemas/world/packets/todo/cmsg_binder_activate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_binder_activate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_bootme.json b/schemas/world/packets/todo/cmsg_bootme.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_bootme.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_bot_detected.json b/schemas/world/packets/todo/cmsg_bot_detected.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_bot_detected.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_bot_detected2.json b/schemas/world/packets/todo/cmsg_bot_detected2.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_bot_detected2.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_busy_trade.json b/schemas/world/packets/todo/cmsg_busy_trade.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_busy_trade.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buy_bank_slot.json b/schemas/world/packets/todo/cmsg_buy_bank_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buy_bank_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buy_item.json b/schemas/world/packets/todo/cmsg_buy_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buy_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buy_item_in_slot.json b/schemas/world/packets/todo/cmsg_buy_item_in_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buy_item_in_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buy_lottery_ticket_obsolete.json b/schemas/world/packets/todo/cmsg_buy_lottery_ticket_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buy_lottery_ticket_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buy_stable_slot.json b/schemas/world/packets/todo/cmsg_buy_stable_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buy_stable_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_buyback_item.json b/schemas/world/packets/todo/cmsg_buyback_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_buyback_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_cast_spell.json b/schemas/world/packets/todo/cmsg_cast_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_cast_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_char_create.json b/schemas/world/packets/todo/cmsg_char_create.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_char_create.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_char_delete.json b/schemas/world/packets/todo/cmsg_char_delete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_char_delete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_char_enum.json b/schemas/world/packets/todo/cmsg_char_enum.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_char_enum.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_character_point_cheat.json b/schemas/world/packets/todo/cmsg_character_point_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_character_point_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_chat_filtered.json b/schemas/world/packets/todo/cmsg_chat_filtered.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_chat_filtered.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_chat_ignored.json b/schemas/world/packets/todo/cmsg_chat_ignored.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_chat_ignored.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_cheat_setmoney.json b/schemas/world/packets/todo/cmsg_cheat_setmoney.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_cheat_setmoney.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_clear_channel_watch.json b/schemas/world/packets/todo/cmsg_clear_channel_watch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_clear_channel_watch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_clear_exploration.json b/schemas/world/packets/todo/cmsg_clear_exploration.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_clear_exploration.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_clear_quest.json b/schemas/world/packets/todo/cmsg_clear_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_clear_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_clear_server_buck_data.json b/schemas/world/packets/todo/cmsg_clear_server_buck_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_clear_server_buck_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_clear_trade_item.json b/schemas/world/packets/todo/cmsg_clear_trade_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_clear_trade_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_cooldown_cheat.json b/schemas/world/packets/todo/cmsg_cooldown_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_cooldown_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_creategameobject.json b/schemas/world/packets/todo/cmsg_creategameobject.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_creategameobject.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_createitem.json b/schemas/world/packets/todo/cmsg_createitem.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_createitem.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_createmonster.json b/schemas/world/packets/todo/cmsg_createmonster.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_createmonster.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_creature_query.json b/schemas/world/packets/todo/cmsg_creature_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_creature_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_debug_actions_start.json b/schemas/world/packets/todo/cmsg_debug_actions_start.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_debug_actions_start.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_debug_actions_stop.json b/schemas/world/packets/todo/cmsg_debug_actions_stop.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_debug_actions_stop.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_debug_aistate.json b/schemas/world/packets/todo/cmsg_debug_aistate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_debug_aistate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_debug_changecellzone.json b/schemas/world/packets/todo/cmsg_debug_changecellzone.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_debug_changecellzone.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_debug_list_targets.json b/schemas/world/packets/todo/cmsg_debug_list_targets.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_debug_list_targets.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_decharge.json b/schemas/world/packets/todo/cmsg_decharge.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_decharge.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_decline_channel_invite.json b/schemas/world/packets/todo/cmsg_decline_channel_invite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_decline_channel_invite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_del_pvp_medal_cheat.json b/schemas/world/packets/todo/cmsg_del_pvp_medal_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_del_pvp_medal_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_destroymonster.json b/schemas/world/packets/todo/cmsg_destroymonster.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_destroymonster.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_disable_pvp_cheat.json b/schemas/world/packets/todo/cmsg_disable_pvp_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_disable_pvp_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_duel_accepted.json b/schemas/world/packets/todo/cmsg_duel_accepted.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_duel_accepted.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_duel_cancelled.json b/schemas/world/packets/todo/cmsg_duel_cancelled.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_duel_cancelled.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_emblazon_tabard_obsolete.json b/schemas/world/packets/todo/cmsg_emblazon_tabard_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_emblazon_tabard_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_emote.json b/schemas/world/packets/todo/cmsg_emote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_emote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_enable_damage_log.json b/schemas/world/packets/todo/cmsg_enable_damage_log.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_enable_damage_log.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_expire_raid_instance.json b/schemas/world/packets/todo/cmsg_expire_raid_instance.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_expire_raid_instance.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_far_sight.json b/schemas/world/packets/todo/cmsg_far_sight.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_far_sight.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_flag_quest.json b/schemas/world/packets/todo/cmsg_flag_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_flag_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_flag_quest_finish.json b/schemas/world/packets/todo/cmsg_flag_quest_finish.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_flag_quest_finish.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_move_root_ack.json b/schemas/world/packets/todo/cmsg_force_move_root_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_move_root_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_move_unroot_ack.json b/schemas/world/packets/todo/cmsg_force_move_unroot_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_move_unroot_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_run_back_speed_change_ack.json b/schemas/world/packets/todo/cmsg_force_run_back_speed_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_run_back_speed_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_run_speed_change_ack.json b/schemas/world/packets/todo/cmsg_force_run_speed_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_run_speed_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_swim_back_speed_change_ack.json b/schemas/world/packets/todo/cmsg_force_swim_back_speed_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_swim_back_speed_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_swim_speed_change_ack.json b/schemas/world/packets/todo/cmsg_force_swim_speed_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_swim_speed_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_turn_rate_change_ack.json b/schemas/world/packets/todo/cmsg_force_turn_rate_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_turn_rate_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_force_walk_speed_change_ack.json b/schemas/world/packets/todo/cmsg_force_walk_speed_change_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_force_walk_speed_change_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_forceaction.json b/schemas/world/packets/todo/cmsg_forceaction.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_forceaction.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_forceactiononother.json b/schemas/world/packets/todo/cmsg_forceactiononother.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_forceactiononother.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_forceactionshow.json b/schemas/world/packets/todo/cmsg_forceactionshow.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_forceactionshow.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_friend_list.json b/schemas/world/packets/todo/cmsg_friend_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_friend_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gameobj_chair_use_obsolete.json b/schemas/world/packets/todo/cmsg_gameobj_chair_use_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gameobj_chair_use_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gameobj_use.json b/schemas/world/packets/todo/cmsg_gameobj_use.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gameobj_use.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gameobject_query.json b/schemas/world/packets/todo/cmsg_gameobject_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gameobject_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gamespeed_set.json b/schemas/world/packets/todo/cmsg_gamespeed_set.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gamespeed_set.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gametime_set.json b/schemas/world/packets/todo/cmsg_gametime_set.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gametime_set.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_get_channel_member_count.json b/schemas/world/packets/todo/cmsg_get_channel_member_count.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_get_channel_member_count.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_get_mail_list.json b/schemas/world/packets/todo/cmsg_get_mail_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_get_mail_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_get_mirrorimage_data.json b/schemas/world/packets/todo/cmsg_get_mirrorimage_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_get_mirrorimage_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_getdeathbindzone.json b/schemas/world/packets/todo/cmsg_getdeathbindzone.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_getdeathbindzone.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_ghost.json b/schemas/world/packets/todo/cmsg_ghost.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_ghost.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_create_item_target.json b/schemas/world/packets/todo/cmsg_gm_create_item_target.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_create_item_target.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_destroy_online_corpse.json b/schemas/world/packets/todo/cmsg_gm_destroy_online_corpse.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_destroy_online_corpse.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_freeze.json b/schemas/world/packets/todo/cmsg_gm_freeze.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_freeze.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_invis.json b/schemas/world/packets/todo/cmsg_gm_invis.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_invis.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_movecorpse.json b/schemas/world/packets/todo/cmsg_gm_movecorpse.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_movecorpse.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_nuke.json b/schemas/world/packets/todo/cmsg_gm_nuke.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_nuke.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_nuke_account.json b/schemas/world/packets/todo/cmsg_gm_nuke_account.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_nuke_account.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_request_player_info.json b/schemas/world/packets/todo/cmsg_gm_request_player_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_request_player_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_resurrect.json b/schemas/world/packets/todo/cmsg_gm_resurrect.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_resurrect.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_revealto.json b/schemas/world/packets/todo/cmsg_gm_revealto.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_revealto.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_set_security_group.json b/schemas/world/packets/todo/cmsg_gm_set_security_group.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_set_security_group.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_silence.json b/schemas/world/packets/todo/cmsg_gm_silence.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_silence.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_summonmob.json b/schemas/world/packets/todo/cmsg_gm_summonmob.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_summonmob.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_teach.json b/schemas/world/packets/todo/cmsg_gm_teach.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_teach.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_uberinvis.json b/schemas/world/packets/todo/cmsg_gm_uberinvis.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_uberinvis.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_unteach.json b/schemas/world/packets/todo/cmsg_gm_unteach.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_unteach.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_update_ticket_status.json b/schemas/world/packets/todo/cmsg_gm_update_ticket_status.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_update_ticket_status.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gm_vision.json b/schemas/world/packets/todo/cmsg_gm_vision.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gm_vision.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmsurvey_submit.json b/schemas/world/packets/todo/cmsg_gmsurvey_submit.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmsurvey_submit.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmticket_create.json b/schemas/world/packets/todo/cmsg_gmticket_create.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmticket_create.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmticket_deleteticket.json b/schemas/world/packets/todo/cmsg_gmticket_deleteticket.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmticket_deleteticket.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmticket_systemstatus.json b/schemas/world/packets/todo/cmsg_gmticket_systemstatus.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmticket_systemstatus.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmticket_updatetext.json b/schemas/world/packets/todo/cmsg_gmticket_updatetext.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmticket_updatetext.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gmticketsystem_toggle.json b/schemas/world/packets/todo/cmsg_gmticketsystem_toggle.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gmticketsystem_toggle.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_godmode.json b/schemas/world/packets/todo/cmsg_godmode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_godmode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gossip_hello.json b/schemas/world/packets/todo/cmsg_gossip_hello.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gossip_hello.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_gossip_select_option.json b/schemas/world/packets/todo/cmsg_gossip_select_option.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_gossip_select_option.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_grant_level.json b/schemas/world/packets/todo/cmsg_grant_level.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_grant_level.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_accept.json b/schemas/world/packets/todo/cmsg_group_accept.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_accept.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_assistant_leader.json b/schemas/world/packets/todo/cmsg_group_assistant_leader.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_assistant_leader.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_cancel.json b/schemas/world/packets/todo/cmsg_group_cancel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_cancel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_change_sub_group.json b/schemas/world/packets/todo/cmsg_group_change_sub_group.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_change_sub_group.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_decline.json b/schemas/world/packets/todo/cmsg_group_decline.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_decline.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_disband.json b/schemas/world/packets/todo/cmsg_group_disband.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_disband.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_invite.json b/schemas/world/packets/todo/cmsg_group_invite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_invite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_raid_convert.json b/schemas/world/packets/todo/cmsg_group_raid_convert.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_raid_convert.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_set_leader.json b/schemas/world/packets/todo/cmsg_group_set_leader.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_set_leader.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_swap_sub_group.json b/schemas/world/packets/todo/cmsg_group_swap_sub_group.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_swap_sub_group.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_uninvite.json b/schemas/world/packets/todo/cmsg_group_uninvite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_uninvite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_group_uninvite_guid.json b/schemas/world/packets/todo/cmsg_group_uninvite_guid.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_group_uninvite_guid.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_groupaction_throttled.json b/schemas/world/packets/todo/cmsg_groupaction_throttled.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_groupaction_throttled.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_accept.json b/schemas/world/packets/todo/cmsg_guild_accept.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_accept.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_add_rank.json b/schemas/world/packets/todo/cmsg_guild_add_rank.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_add_rank.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_create.json b/schemas/world/packets/todo/cmsg_guild_create.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_create.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_decline.json b/schemas/world/packets/todo/cmsg_guild_decline.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_decline.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_del_rank.json b/schemas/world/packets/todo/cmsg_guild_del_rank.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_del_rank.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_demote.json b/schemas/world/packets/todo/cmsg_guild_demote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_demote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_disband.json b/schemas/world/packets/todo/cmsg_guild_disband.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_disband.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_info.json b/schemas/world/packets/todo/cmsg_guild_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_info_text.json b/schemas/world/packets/todo/cmsg_guild_info_text.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_info_text.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_invite.json b/schemas/world/packets/todo/cmsg_guild_invite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_invite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_leader.json b/schemas/world/packets/todo/cmsg_guild_leader.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_leader.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_leave.json b/schemas/world/packets/todo/cmsg_guild_leave.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_leave.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_motd.json b/schemas/world/packets/todo/cmsg_guild_motd.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_motd.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_promote.json b/schemas/world/packets/todo/cmsg_guild_promote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_promote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_query.json b/schemas/world/packets/todo/cmsg_guild_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_rank.json b/schemas/world/packets/todo/cmsg_guild_rank.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_rank.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_remove.json b/schemas/world/packets/todo/cmsg_guild_remove.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_remove.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_roster.json b/schemas/world/packets/todo/cmsg_guild_roster.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_roster.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_set_officer_note.json b/schemas/world/packets/todo/cmsg_guild_set_officer_note.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_set_officer_note.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_guild_set_public_note.json b/schemas/world/packets/todo/cmsg_guild_set_public_note.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_guild_set_public_note.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_ignore_diminishing_returns_cheat.json b/schemas/world/packets/todo/cmsg_ignore_diminishing_returns_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_ignore_diminishing_returns_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_ignore_knockback_cheat.json b/schemas/world/packets/todo/cmsg_ignore_knockback_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_ignore_knockback_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_ignore_trade.json b/schemas/world/packets/todo/cmsg_ignore_trade.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_ignore_trade.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_initiate_trade.json b/schemas/world/packets/todo/cmsg_initiate_trade.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_initiate_trade.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_inspect.json b/schemas/world/packets/todo/cmsg_inspect.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_inspect.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_item_name_query.json b/schemas/world/packets/todo/cmsg_item_name_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_item_name_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_item_query_multiple.json b/schemas/world/packets/todo/cmsg_item_query_multiple.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_item_query_multiple.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_item_text_query.json b/schemas/world/packets/todo/cmsg_item_text_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_item_text_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_keep_alive.json b/schemas/world/packets/todo/cmsg_keep_alive.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_keep_alive.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_learn_spell.json b/schemas/world/packets/todo/cmsg_learn_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_learn_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_learn_talent.json b/schemas/world/packets/todo/cmsg_learn_talent.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_learn_talent.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_leave_battlefield.json b/schemas/world/packets/todo/cmsg_leave_battlefield.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_leave_battlefield.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_leave_channel.json b/schemas/world/packets/todo/cmsg_leave_channel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_leave_channel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_level_cheat.json b/schemas/world/packets/todo/cmsg_level_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_level_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_list_inventory.json b/schemas/world/packets/todo/cmsg_list_inventory.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_list_inventory.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_logout_cancel.json b/schemas/world/packets/todo/cmsg_logout_cancel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_logout_cancel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_logout_request.json b/schemas/world/packets/todo/cmsg_logout_request.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_logout_request.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot.json b/schemas/world/packets/todo/cmsg_loot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot_master_give.json b/schemas/world/packets/todo/cmsg_loot_master_give.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot_master_give.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot_method.json b/schemas/world/packets/todo/cmsg_loot_method.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot_method.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot_money.json b/schemas/world/packets/todo/cmsg_loot_money.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot_money.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot_release.json b/schemas/world/packets/todo/cmsg_loot_release.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot_release.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_loot_roll.json b/schemas/world/packets/todo/cmsg_loot_roll.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_loot_roll.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_lottery_query_obsolete.json b/schemas/world/packets/todo/cmsg_lottery_query_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_lottery_query_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_lua_usage.json b/schemas/world/packets/todo/cmsg_lua_usage.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_lua_usage.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_maelstrom_invalidate_cache.json b/schemas/world/packets/todo/cmsg_maelstrom_invalidate_cache.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_maelstrom_invalidate_cache.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_maelstrom_rename_guild.json b/schemas/world/packets/todo/cmsg_maelstrom_rename_guild.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_maelstrom_rename_guild.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_create_text_item.json b/schemas/world/packets/todo/cmsg_mail_create_text_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_create_text_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_delete.json b/schemas/world/packets/todo/cmsg_mail_delete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_delete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_mark_as_read.json b/schemas/world/packets/todo/cmsg_mail_mark_as_read.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_mark_as_read.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_return_to_sender.json b/schemas/world/packets/todo/cmsg_mail_return_to_sender.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_return_to_sender.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_take_item.json b/schemas/world/packets/todo/cmsg_mail_take_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_take_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mail_take_money.json b/schemas/world/packets/todo/cmsg_mail_take_money.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mail_take_money.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_makemonsterattackguid.json b/schemas/world/packets/todo/cmsg_makemonsterattackguid.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_makemonsterattackguid.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_meetingstone_cheat.json b/schemas/world/packets/todo/cmsg_meetingstone_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_meetingstone_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_meetingstone_join.json b/schemas/world/packets/todo/cmsg_meetingstone_join.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_meetingstone_join.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_meetingstone_leave.json b/schemas/world/packets/todo/cmsg_meetingstone_leave.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_meetingstone_leave.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_messagechat.json b/schemas/world/packets/todo/cmsg_messagechat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_messagechat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_minigame_move.json b/schemas/world/packets/todo/cmsg_minigame_move.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_minigame_move.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_mountspecial_anim.json b/schemas/world/packets/todo/cmsg_mountspecial_anim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_mountspecial_anim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_chng_transport.json b/schemas/world/packets/todo/cmsg_move_chng_transport.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_chng_transport.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_fall_reset.json b/schemas/world/packets/todo/cmsg_move_fall_reset.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_fall_reset.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_feather_fall_ack.json b/schemas/world/packets/todo/cmsg_move_feather_fall_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_feather_fall_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_flight_ack.json b/schemas/world/packets/todo/cmsg_move_flight_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_flight_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_hover_ack.json b/schemas/world/packets/todo/cmsg_move_hover_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_hover_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_knock_back_ack.json b/schemas/world/packets/todo/cmsg_move_knock_back_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_knock_back_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_not_active_mover.json b/schemas/world/packets/todo/cmsg_move_not_active_mover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_not_active_mover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_set_raw_position.json b/schemas/world/packets/todo/cmsg_move_set_raw_position.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_set_raw_position.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_set_run_speed.json b/schemas/world/packets/todo/cmsg_move_set_run_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_set_run_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_spline_done.json b/schemas/world/packets/todo/cmsg_move_spline_done.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_spline_done.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_start_swim_cheat.json b/schemas/world/packets/todo/cmsg_move_start_swim_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_start_swim_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_stop_swim_cheat.json b/schemas/world/packets/todo/cmsg_move_stop_swim_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_stop_swim_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_time_skipped.json b/schemas/world/packets/todo/cmsg_move_time_skipped.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_time_skipped.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_move_water_walk_ack.json b/schemas/world/packets/todo/cmsg_move_water_walk_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_move_water_walk_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_new_spell_slot.json b/schemas/world/packets/todo/cmsg_new_spell_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_new_spell_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_no_spell_variance.json b/schemas/world/packets/todo/cmsg_no_spell_variance.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_no_spell_variance.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_npc_text_query.json b/schemas/world/packets/todo/cmsg_npc_text_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_npc_text_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_offer_petition.json b/schemas/world/packets/todo/cmsg_offer_petition.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_offer_petition.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_open_item.json b/schemas/world/packets/todo/cmsg_open_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_open_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_opt_out_of_loot.json b/schemas/world/packets/todo/cmsg_opt_out_of_loot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_opt_out_of_loot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_page_text_query.json b/schemas/world/packets/todo/cmsg_page_text_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_page_text_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_party_silence.json b/schemas/world/packets/todo/cmsg_party_silence.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_party_silence.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_party_unsilence.json b/schemas/world/packets/todo/cmsg_party_unsilence.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_party_unsilence.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_abandon.json b/schemas/world/packets/todo/cmsg_pet_abandon.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_abandon.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_action.json b/schemas/world/packets/todo/cmsg_pet_action.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_action.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_cancel_aura.json b/schemas/world/packets/todo/cmsg_pet_cancel_aura.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_cancel_aura.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_cast_spell.json b/schemas/world/packets/todo/cmsg_pet_cast_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_cast_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_level_cheat.json b/schemas/world/packets/todo/cmsg_pet_level_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_level_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_name_query.json b/schemas/world/packets/todo/cmsg_pet_name_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_name_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_rename.json b/schemas/world/packets/todo/cmsg_pet_rename.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_rename.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_set_action.json b/schemas/world/packets/todo/cmsg_pet_set_action.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_set_action.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_spell_autocast.json b/schemas/world/packets/todo/cmsg_pet_spell_autocast.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_spell_autocast.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_stop_attack.json b/schemas/world/packets/todo/cmsg_pet_stop_attack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_stop_attack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pet_unlearn.json b/schemas/world/packets/todo/cmsg_pet_unlearn.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pet_unlearn.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petgodmode.json b/schemas/world/packets/todo/cmsg_petgodmode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petgodmode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petition_buy.json b/schemas/world/packets/todo/cmsg_petition_buy.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petition_buy.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petition_query.json b/schemas/world/packets/todo/cmsg_petition_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petition_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petition_show_signatures.json b/schemas/world/packets/todo/cmsg_petition_show_signatures.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petition_show_signatures.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petition_showlist.json b/schemas/world/packets/todo/cmsg_petition_showlist.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petition_showlist.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_petition_sign.json b/schemas/world/packets/todo/cmsg_petition_sign.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_petition_sign.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_played_time.json b/schemas/world/packets/todo/cmsg_played_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_played_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_player_ai_cheat.json b/schemas/world/packets/todo/cmsg_player_ai_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_player_ai_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_player_logout.json b/schemas/world/packets/todo/cmsg_player_logout.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_player_logout.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_player_macro_obsolete.json b/schemas/world/packets/todo/cmsg_player_macro_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_player_macro_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pushquesttoparty.json b/schemas/world/packets/todo/cmsg_pushquesttoparty.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pushquesttoparty.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_pvp_port_obsolete.json b/schemas/world/packets/todo/cmsg_pvp_port_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_pvp_port_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_query_object_position.json b/schemas/world/packets/todo/cmsg_query_object_position.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_query_object_position.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_query_object_rotation.json b/schemas/world/packets/todo/cmsg_query_object_rotation.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_query_object_rotation.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_query_server_buck_data.json b/schemas/world/packets/todo/cmsg_query_server_buck_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_query_server_buck_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_query_time.json b/schemas/world/packets/todo/cmsg_query_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_query_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_quest_confirm_accept.json b/schemas/world/packets/todo/cmsg_quest_confirm_accept.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_quest_confirm_accept.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_quest_query.json b/schemas/world/packets/todo/cmsg_quest_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_quest_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_accept_quest.json b/schemas/world/packets/todo/cmsg_questgiver_accept_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_accept_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_cancel.json b/schemas/world/packets/todo/cmsg_questgiver_cancel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_cancel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_choose_reward.json b/schemas/world/packets/todo/cmsg_questgiver_choose_reward.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_choose_reward.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_complete_quest.json b/schemas/world/packets/todo/cmsg_questgiver_complete_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_complete_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_hello.json b/schemas/world/packets/todo/cmsg_questgiver_hello.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_hello.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_query_quest.json b/schemas/world/packets/todo/cmsg_questgiver_query_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_query_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_quest_autolaunch.json b/schemas/world/packets/todo/cmsg_questgiver_quest_autolaunch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_quest_autolaunch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_request_reward.json b/schemas/world/packets/todo/cmsg_questgiver_request_reward.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_request_reward.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_status_multiple_query.json b/schemas/world/packets/todo/cmsg_questgiver_status_multiple_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_status_multiple_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questgiver_status_query.json b/schemas/world/packets/todo/cmsg_questgiver_status_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questgiver_status_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questlog_remove_quest.json b/schemas/world/packets/todo/cmsg_questlog_remove_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questlog_remove_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_questlog_swap_quest.json b/schemas/world/packets/todo/cmsg_questlog_swap_quest.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_questlog_swap_quest.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_read_item.json b/schemas/world/packets/todo/cmsg_read_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_read_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_recharge.json b/schemas/world/packets/todo/cmsg_recharge.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_recharge.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_reclaim_corpse.json b/schemas/world/packets/todo/cmsg_reclaim_corpse.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_reclaim_corpse.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_repair_item.json b/schemas/world/packets/todo/cmsg_repair_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_repair_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_repop_request.json b/schemas/world/packets/todo/cmsg_repop_request.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_repop_request.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_request_account_data.json b/schemas/world/packets/todo/cmsg_request_account_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_request_account_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_request_party_member_stats.json b/schemas/world/packets/todo/cmsg_request_party_member_stats.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_request_party_member_stats.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_request_pet_info.json b/schemas/world/packets/todo/cmsg_request_pet_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_request_pet_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_request_raid_info.json b/schemas/world/packets/todo/cmsg_request_raid_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_request_raid_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_reset_faction_cheat.json b/schemas/world/packets/todo/cmsg_reset_faction_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_reset_faction_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_reset_instances.json b/schemas/world/packets/todo/cmsg_reset_instances.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_reset_instances.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_resurrect_response.json b/schemas/world/packets/todo/cmsg_resurrect_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_resurrect_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_run_script.json b/schemas/world/packets/todo/cmsg_run_script.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_run_script.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_rwhois_obsolete.json b/schemas/world/packets/todo/cmsg_rwhois_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_rwhois_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_save_player.json b/schemas/world/packets/todo/cmsg_save_player.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_save_player.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_self_res.json b/schemas/world/packets/todo/cmsg_self_res.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_self_res.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_sell_item.json b/schemas/world/packets/todo/cmsg_sell_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_sell_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_send_event.json b/schemas/world/packets/todo/cmsg_send_event.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_send_event.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_send_mail.json b/schemas/world/packets/todo/cmsg_send_mail.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_send_mail.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_server_broadcast.json b/schemas/world/packets/todo/cmsg_server_broadcast.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_server_broadcast.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_server_command.json b/schemas/world/packets/todo/cmsg_server_command.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_server_command.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_servertime.json b/schemas/world/packets/todo/cmsg_servertime.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_servertime.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_action_button.json b/schemas/world/packets/todo/cmsg_set_action_button.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_action_button.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_actionbar_toggles.json b/schemas/world/packets/todo/cmsg_set_actionbar_toggles.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_actionbar_toggles.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_active_mover.json b/schemas/world/packets/todo/cmsg_set_active_mover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_active_mover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_ammo.json b/schemas/world/packets/todo/cmsg_set_ammo.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_ammo.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_channel_watch.json b/schemas/world/packets/todo/cmsg_set_channel_watch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_channel_watch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_durability_cheat.json b/schemas/world/packets/todo/cmsg_set_durability_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_durability_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_exploration.json b/schemas/world/packets/todo/cmsg_set_exploration.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_exploration.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_exploration_all.json b/schemas/world/packets/todo/cmsg_set_exploration_all.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_exploration_all.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_faction_atwar.json b/schemas/world/packets/todo/cmsg_set_faction_atwar.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_faction_atwar.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_faction_cheat.json b/schemas/world/packets/todo/cmsg_set_faction_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_faction_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_faction_inactive.json b/schemas/world/packets/todo/cmsg_set_faction_inactive.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_faction_inactive.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_grantable_levels.json b/schemas/world/packets/todo/cmsg_set_grantable_levels.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_grantable_levels.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_looking_for_group.json b/schemas/world/packets/todo/cmsg_set_looking_for_group.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_looking_for_group.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_pvp_rank_cheat.json b/schemas/world/packets/todo/cmsg_set_pvp_rank_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_pvp_rank_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_pvp_title.json b/schemas/world/packets/todo/cmsg_set_pvp_title.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_pvp_title.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_selection.json b/schemas/world/packets/todo/cmsg_set_selection.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_selection.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_skill_cheat.json b/schemas/world/packets/todo/cmsg_set_skill_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_skill_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_stat_cheat.json b/schemas/world/packets/todo/cmsg_set_stat_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_stat_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_target_obsolete.json b/schemas/world/packets/todo/cmsg_set_target_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_target_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_taxi_benchmark_mode.json b/schemas/world/packets/todo/cmsg_set_taxi_benchmark_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_taxi_benchmark_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_trade_gold.json b/schemas/world/packets/todo/cmsg_set_trade_gold.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_trade_gold.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_trade_item.json b/schemas/world/packets/todo/cmsg_set_trade_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_trade_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_watched_faction.json b/schemas/world/packets/todo/cmsg_set_watched_faction.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_watched_faction.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_set_worldstate.json b/schemas/world/packets/todo/cmsg_set_worldstate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_set_worldstate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_setdeathbindpoint.json b/schemas/world/packets/todo/cmsg_setdeathbindpoint.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_setdeathbindpoint.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_setsheathed.json b/schemas/world/packets/todo/cmsg_setsheathed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_setsheathed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_sheathe_obsolete.json b/schemas/world/packets/todo/cmsg_sheathe_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_sheathe_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_skill_buy_rank.json b/schemas/world/packets/todo/cmsg_skill_buy_rank.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_skill_buy_rank.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_skill_buy_step.json b/schemas/world/packets/todo/cmsg_skill_buy_step.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_skill_buy_step.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_spellclick.json b/schemas/world/packets/todo/cmsg_spellclick.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_spellclick.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_spirit_healer_activate.json b/schemas/world/packets/todo/cmsg_spirit_healer_activate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_spirit_healer_activate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_split_item.json b/schemas/world/packets/todo/cmsg_split_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_split_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_stable_pet.json b/schemas/world/packets/todo/cmsg_stable_pet.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_stable_pet.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_stable_revive_pet.json b/schemas/world/packets/todo/cmsg_stable_revive_pet.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_stable_revive_pet.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_stable_swap_pet.json b/schemas/world/packets/todo/cmsg_stable_swap_pet.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_stable_swap_pet.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_standstatechange.json b/schemas/world/packets/todo/cmsg_standstatechange.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_standstatechange.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_store_loot_in_slot.json b/schemas/world/packets/todo/cmsg_store_loot_in_slot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_store_loot_in_slot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_summon_response.json b/schemas/world/packets/todo/cmsg_summon_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_summon_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_swap_inv_item.json b/schemas/world/packets/todo/cmsg_swap_inv_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_swap_inv_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_swap_item.json b/schemas/world/packets/todo/cmsg_swap_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_swap_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_target_cast.json b/schemas/world/packets/todo/cmsg_target_cast.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_target_cast.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_target_script_cast.json b/schemas/world/packets/todo/cmsg_target_script_cast.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_target_script_cast.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxiclearallnodes.json b/schemas/world/packets/todo/cmsg_taxiclearallnodes.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxiclearallnodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxiclearnode.json b/schemas/world/packets/todo/cmsg_taxiclearnode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxiclearnode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxienableallnodes.json b/schemas/world/packets/todo/cmsg_taxienableallnodes.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxienableallnodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxienablenode.json b/schemas/world/packets/todo/cmsg_taxienablenode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxienablenode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxinode_status_query.json b/schemas/world/packets/todo/cmsg_taxinode_status_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxinode_status_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxiqueryavailablenodes.json b/schemas/world/packets/todo/cmsg_taxiqueryavailablenodes.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxiqueryavailablenodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_taxishownodes.json b/schemas/world/packets/todo/cmsg_taxishownodes.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_taxishownodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_teleport_to_unit.json b/schemas/world/packets/todo/cmsg_teleport_to_unit.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_teleport_to_unit.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_text_emote.json b/schemas/world/packets/todo/cmsg_text_emote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_text_emote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_toggle_cloak.json b/schemas/world/packets/todo/cmsg_toggle_cloak.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_toggle_cloak.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_toggle_helm.json b/schemas/world/packets/todo/cmsg_toggle_helm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_toggle_helm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_toggle_pvp.json b/schemas/world/packets/todo/cmsg_toggle_pvp.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_toggle_pvp.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_totem_destroyed.json b/schemas/world/packets/todo/cmsg_totem_destroyed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_totem_destroyed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_trainer_buy_spell.json b/schemas/world/packets/todo/cmsg_trainer_buy_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_trainer_buy_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_trainer_list.json b/schemas/world/packets/todo/cmsg_trainer_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_trainer_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_trigger_cinematic_cheat.json b/schemas/world/packets/todo/cmsg_trigger_cinematic_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_trigger_cinematic_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_turn_in_petition.json b/schemas/world/packets/todo/cmsg_turn_in_petition.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_turn_in_petition.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_tutorial_clear.json b/schemas/world/packets/todo/cmsg_tutorial_clear.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_tutorial_clear.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_tutorial_flag.json b/schemas/world/packets/todo/cmsg_tutorial_flag.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_tutorial_flag.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_tutorial_reset.json b/schemas/world/packets/todo/cmsg_tutorial_reset.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_tutorial_reset.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unaccept_trade.json b/schemas/world/packets/todo/cmsg_unaccept_trade.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unaccept_trade.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_undressplayer.json b/schemas/world/packets/todo/cmsg_undressplayer.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_undressplayer.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unemblazon_tabard_obsolete.json b/schemas/world/packets/todo/cmsg_unemblazon_tabard_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unemblazon_tabard_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unlearn_skill.json b/schemas/world/packets/todo/cmsg_unlearn_skill.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unlearn_skill.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unlearn_spell.json b/schemas/world/packets/todo/cmsg_unlearn_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unlearn_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unlearn_talents.json b/schemas/world/packets/todo/cmsg_unlearn_talents.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unlearn_talents.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unstable_pet.json b/schemas/world/packets/todo/cmsg_unstable_pet.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unstable_pet.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unused.json b/schemas/world/packets/todo/cmsg_unused.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unused.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_unused2.json b/schemas/world/packets/todo/cmsg_unused2.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_unused2.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_use_item.json b/schemas/world/packets/todo/cmsg_use_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_use_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_use_skill_cheat.json b/schemas/world/packets/todo/cmsg_use_skill_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_use_skill_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_warden_data.json b/schemas/world/packets/todo/cmsg_warden_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_warden_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_weather_speed_cheat.json b/schemas/world/packets/todo/cmsg_weather_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_weather_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_who.json b/schemas/world/packets/todo/cmsg_who.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_who.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_whois.json b/schemas/world/packets/todo/cmsg_whois.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_whois.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_world_teleport.json b/schemas/world/packets/todo/cmsg_world_teleport.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_world_teleport.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_wrap_item.json b/schemas/world/packets/todo/cmsg_wrap_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_wrap_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_xp_cheat.json b/schemas/world/packets/todo/cmsg_xp_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_xp_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/cmsg_zone_map.json b/schemas/world/packets/todo/cmsg_zone_map.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/cmsg_zone_map.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_auction_hello.json b/schemas/world/packets/todo/msg_auction_hello.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_auction_hello.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_battleground_player_positions.json b/schemas/world/packets/todo/msg_battleground_player_positions.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_battleground_player_positions.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_channel_start.json b/schemas/world/packets/todo/msg_channel_start.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_channel_start.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_channel_update.json b/schemas/world/packets/todo/msg_channel_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_channel_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_corpse_query.json b/schemas/world/packets/todo/msg_corpse_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_corpse_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_delay_ghost_teleport.json b/schemas/world/packets/todo/msg_delay_ghost_teleport.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_delay_ghost_teleport.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_delete_guild_charter.json b/schemas/world/packets/todo/msg_delete_guild_charter.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_delete_guild_charter.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_account_online.json b/schemas/world/packets/todo/msg_gm_account_online.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_account_online.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_bind_other.json b/schemas/world/packets/todo/msg_gm_bind_other.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_bind_other.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_destroy_corpse.json b/schemas/world/packets/todo/msg_gm_destroy_corpse.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_destroy_corpse.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_resetinstancelimit.json b/schemas/world/packets/todo/msg_gm_resetinstancelimit.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_resetinstancelimit.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_showlabel.json b/schemas/world/packets/todo/msg_gm_showlabel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_showlabel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_gm_summon.json b/schemas/world/packets/todo/msg_gm_summon.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_gm_summon.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_guild_event_log_query.json b/schemas/world/packets/todo/msg_guild_event_log_query.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_guild_event_log_query.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_guild_permissions.json b/schemas/world/packets/todo/msg_guild_permissions.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_guild_permissions.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_inspect_honor_stats.json b/schemas/world/packets/todo/msg_inspect_honor_stats.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_inspect_honor_stats.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_list_stabled_pets.json b/schemas/world/packets/todo/msg_list_stabled_pets.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_list_stabled_pets.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_looking_for_group.json b/schemas/world/packets/todo/msg_looking_for_group.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_looking_for_group.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_minimap_ping.json b/schemas/world/packets/todo/msg_minimap_ping.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_minimap_ping.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_fall_land.json b/schemas/world/packets/todo/msg_move_fall_land.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_fall_land.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_feather_fall.json b/schemas/world/packets/todo/msg_move_feather_fall.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_feather_fall.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_heartbeat.json b/schemas/world/packets/todo/msg_move_heartbeat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_heartbeat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_hover.json b/schemas/world/packets/todo/msg_move_hover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_hover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_jump.json b/schemas/world/packets/todo/msg_move_jump.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_jump.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_knock_back.json b/schemas/world/packets/todo/msg_move_knock_back.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_knock_back.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_root.json b/schemas/world/packets/todo/msg_move_root.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_root.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_all_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_all_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_all_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_facing.json b/schemas/world/packets/todo/msg_move_set_facing.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_facing.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_pitch.json b/schemas/world/packets/todo/msg_move_set_pitch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_pitch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_raw_position_ack.json b/schemas/world/packets/todo/msg_move_set_raw_position_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_raw_position_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_run_back_speed.json b/schemas/world/packets/todo/msg_move_set_run_back_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_run_back_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_run_back_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_run_back_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_run_back_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_run_mode.json b/schemas/world/packets/todo/msg_move_set_run_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_run_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_run_speed.json b/schemas/world/packets/todo/msg_move_set_run_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_run_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_run_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_run_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_run_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_swim_back_speed.json b/schemas/world/packets/todo/msg_move_set_swim_back_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_swim_back_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_swim_back_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_swim_back_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_swim_back_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_swim_speed.json b/schemas/world/packets/todo/msg_move_set_swim_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_swim_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_swim_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_swim_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_swim_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_turn_rate.json b/schemas/world/packets/todo/msg_move_set_turn_rate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_turn_rate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_turn_rate_cheat.json b/schemas/world/packets/todo/msg_move_set_turn_rate_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_turn_rate_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_walk_mode.json b/schemas/world/packets/todo/msg_move_set_walk_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_walk_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_walk_speed.json b/schemas/world/packets/todo/msg_move_set_walk_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_walk_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_set_walk_speed_cheat.json b/schemas/world/packets/todo/msg_move_set_walk_speed_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_set_walk_speed_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_backward.json b/schemas/world/packets/todo/msg_move_start_backward.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_backward.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_forward.json b/schemas/world/packets/todo/msg_move_start_forward.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_forward.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_pitch_down.json b/schemas/world/packets/todo/msg_move_start_pitch_down.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_pitch_down.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_pitch_up.json b/schemas/world/packets/todo/msg_move_start_pitch_up.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_pitch_up.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_strafe_left.json b/schemas/world/packets/todo/msg_move_start_strafe_left.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_strafe_left.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_strafe_right.json b/schemas/world/packets/todo/msg_move_start_strafe_right.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_strafe_right.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_swim.json b/schemas/world/packets/todo/msg_move_start_swim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_swim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_swim_cheat.json b/schemas/world/packets/todo/msg_move_start_swim_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_swim_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_turn_left.json b/schemas/world/packets/todo/msg_move_start_turn_left.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_turn_left.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_start_turn_right.json b/schemas/world/packets/todo/msg_move_start_turn_right.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_start_turn_right.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop.json b/schemas/world/packets/todo/msg_move_stop.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop_pitch.json b/schemas/world/packets/todo/msg_move_stop_pitch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop_pitch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop_strafe.json b/schemas/world/packets/todo/msg_move_stop_strafe.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop_strafe.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop_swim.json b/schemas/world/packets/todo/msg_move_stop_swim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop_swim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop_swim_cheat.json b/schemas/world/packets/todo/msg_move_stop_swim_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop_swim_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_stop_turn.json b/schemas/world/packets/todo/msg_move_stop_turn.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_stop_turn.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_teleport.json b/schemas/world/packets/todo/msg_move_teleport.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_teleport.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_teleport_ack.json b/schemas/world/packets/todo/msg_move_teleport_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_teleport_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_teleport_cheat.json b/schemas/world/packets/todo/msg_move_teleport_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_teleport_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_time_skipped.json b/schemas/world/packets/todo/msg_move_time_skipped.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_time_skipped.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_toggle_collision_cheat.json b/schemas/world/packets/todo/msg_move_toggle_collision_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_toggle_collision_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_toggle_fall_logging.json b/schemas/world/packets/todo/msg_move_toggle_fall_logging.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_toggle_fall_logging.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_toggle_gravity_cheat.json b/schemas/world/packets/todo/msg_move_toggle_gravity_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_toggle_gravity_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_toggle_logging.json b/schemas/world/packets/todo/msg_move_toggle_logging.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_toggle_logging.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_unroot.json b/schemas/world/packets/todo/msg_move_unroot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_unroot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_water_walk.json b/schemas/world/packets/todo/msg_move_water_walk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_water_walk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_move_worldport_ack.json b/schemas/world/packets/todo/msg_move_worldport_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_move_worldport_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_notify_party_squelch.json b/schemas/world/packets/todo/msg_notify_party_squelch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_notify_party_squelch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_null_action.json b/schemas/world/packets/todo/msg_null_action.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_null_action.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_party_assignment.json b/schemas/world/packets/todo/msg_party_assignment.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_party_assignment.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_petition_decline.json b/schemas/world/packets/todo/msg_petition_decline.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_petition_decline.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_petition_rename.json b/schemas/world/packets/todo/msg_petition_rename.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_petition_rename.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_pvp_log_data.json b/schemas/world/packets/todo/msg_pvp_log_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_pvp_log_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_query_next_mail_time.json b/schemas/world/packets/todo/msg_query_next_mail_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_query_next_mail_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_quest_push_result.json b/schemas/world/packets/todo/msg_quest_push_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_quest_push_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_raid_ready_check.json b/schemas/world/packets/todo/msg_raid_ready_check.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_raid_ready_check.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_raid_ready_check_confirm.json b/schemas/world/packets/todo/msg_raid_ready_check_confirm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_raid_ready_check_confirm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_raid_ready_check_finished.json b/schemas/world/packets/todo/msg_raid_ready_check_finished.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_raid_ready_check_finished.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_raid_target_update.json b/schemas/world/packets/todo/msg_raid_target_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_raid_target_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_random_roll.json b/schemas/world/packets/todo/msg_random_roll.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_random_roll.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_save_guild_emblem.json b/schemas/world/packets/todo/msg_save_guild_emblem.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_save_guild_emblem.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_tabardvendor_activate.json b/schemas/world/packets/todo/msg_tabardvendor_activate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_tabardvendor_activate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_talent_wipe_confirm.json b/schemas/world/packets/todo/msg_talent_wipe_confirm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_talent_wipe_confirm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_update_group_members.json b/schemas/world/packets/todo/msg_update_group_members.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_update_group_members.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/msg_update_guild.json b/schemas/world/packets/todo/msg_update_guild.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/msg_update_guild.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/obsolete_drop_item.json b/schemas/world/packets/todo/obsolete_drop_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/obsolete_drop_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_action_buttons.json b/schemas/world/packets/todo/smsg_action_buttons.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_action_buttons.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_activatetaxireply.json b/schemas/world/packets/todo/smsg_activatetaxireply.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_activatetaxireply.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_addon_info.json b/schemas/world/packets/todo/smsg_addon_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_addon_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_ai_reaction.json b/schemas/world/packets/todo/smsg_ai_reaction.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_ai_reaction.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_area_spirit_healer_time.json b/schemas/world/packets/todo/smsg_area_spirit_healer_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_area_spirit_healer_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_area_trigger_message.json b/schemas/world/packets/todo/smsg_area_trigger_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_area_trigger_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackerstateupdate.json b/schemas/world/packets/todo/smsg_attackerstateupdate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackerstateupdate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackstart.json b/schemas/world/packets/todo/smsg_attackstart.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackstart.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackstop.json b/schemas/world/packets/todo/smsg_attackstop.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackstop.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackswing_badfacing.json b/schemas/world/packets/todo/smsg_attackswing_badfacing.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackswing_badfacing.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackswing_cant_attack.json b/schemas/world/packets/todo/smsg_attackswing_cant_attack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackswing_cant_attack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackswing_deadtarget.json b/schemas/world/packets/todo/smsg_attackswing_deadtarget.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackswing_deadtarget.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackswing_notinrange.json b/schemas/world/packets/todo/smsg_attackswing_notinrange.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackswing_notinrange.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_attackswing_notstanding.json b/schemas/world/packets/todo/smsg_attackswing_notstanding.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_attackswing_notstanding.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_bidder_list_result.json b/schemas/world/packets/todo/smsg_auction_bidder_list_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_bidder_list_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_bidder_notification.json b/schemas/world/packets/todo/smsg_auction_bidder_notification.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_bidder_notification.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_command_result.json b/schemas/world/packets/todo/smsg_auction_command_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_command_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_list_result.json b/schemas/world/packets/todo/smsg_auction_list_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_list_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_owner_list_result.json b/schemas/world/packets/todo/smsg_auction_owner_list_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_owner_list_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_owner_notification.json b/schemas/world/packets/todo/smsg_auction_owner_notification.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_owner_notification.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auction_removed_notification.json b/schemas/world/packets/todo/smsg_auction_removed_notification.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auction_removed_notification.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auracastlog.json b/schemas/world/packets/todo/smsg_auracastlog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auracastlog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_auth_challenge.json b/schemas/world/packets/todo/smsg_auth_challenge.json
deleted file mode 100644
index 1ef0cce0b..000000000
--- a/schemas/world/packets/todo/smsg_auth_challenge.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "AuthChallenge",
- "opcode": "smsg_auth_challenge",
- "direction": "server",
- "fields": [
- { "name": "seed", "type": "uint32" }
- ]
-}
\ No newline at end of file
diff --git a/schemas/world/packets/todo/smsg_auth_srp6_response.json b/schemas/world/packets/todo/smsg_auth_srp6_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_auth_srp6_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_battlefield_list.json b/schemas/world/packets/todo/smsg_battlefield_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_battlefield_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_battlefield_lose_obsolete.json b/schemas/world/packets/todo/smsg_battlefield_lose_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_battlefield_lose_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_battlefield_win_obsolete.json b/schemas/world/packets/todo/smsg_battlefield_win_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_battlefield_win_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_battleground_player_joined.json b/schemas/world/packets/todo/smsg_battleground_player_joined.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_battleground_player_joined.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_battleground_player_left.json b/schemas/world/packets/todo/smsg_battleground_player_left.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_battleground_player_left.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_binder_confirm.json b/schemas/world/packets/todo/smsg_binder_confirm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_binder_confirm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_bindpointupdate.json b/schemas/world/packets/todo/smsg_bindpointupdate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_bindpointupdate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_bindzonereply.json b/schemas/world/packets/todo/smsg_bindzonereply.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_bindzonereply.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_buy_bank_slot_result.json b/schemas/world/packets/todo/smsg_buy_bank_slot_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_buy_bank_slot_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_buy_failed.json b/schemas/world/packets/todo/smsg_buy_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_buy_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_buy_item.json b/schemas/world/packets/todo/smsg_buy_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_buy_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_cancel_auto_repeat.json b/schemas/world/packets/todo/smsg_cancel_auto_repeat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_cancel_auto_repeat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_cancel_combat.json b/schemas/world/packets/todo/smsg_cancel_combat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_cancel_combat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_cast_failed.json b/schemas/world/packets/todo/smsg_cast_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_cast_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_channel_list.json b/schemas/world/packets/todo/smsg_channel_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_channel_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_channel_member_count.json b/schemas/world/packets/todo/smsg_channel_member_count.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_channel_member_count.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_channel_notify.json b/schemas/world/packets/todo/smsg_channel_notify.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_channel_notify.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_char_create.json b/schemas/world/packets/todo/smsg_char_create.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_char_create.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_char_delete.json b/schemas/world/packets/todo/smsg_char_delete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_char_delete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_char_enum.json b/schemas/world/packets/todo/smsg_char_enum.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_char_enum.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_character_login_failed.json b/schemas/world/packets/todo/smsg_character_login_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_character_login_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_character_profile.json b/schemas/world/packets/todo/smsg_character_profile.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_character_profile.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_character_profile_realm_connected.json b/schemas/world/packets/todo/smsg_character_profile_realm_connected.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_character_profile_realm_connected.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_chat_player_ambiguous.json b/schemas/world/packets/todo/smsg_chat_player_ambiguous.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_chat_player_ambiguous.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_chat_player_not_found.json b/schemas/world/packets/todo/smsg_chat_player_not_found.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_chat_player_not_found.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_chat_restricted.json b/schemas/world/packets/todo/smsg_chat_restricted.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_chat_restricted.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_chat_wrong_faction.json b/schemas/world/packets/todo/smsg_chat_wrong_faction.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_chat_wrong_faction.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_check_for_bots.json b/schemas/world/packets/todo/smsg_check_for_bots.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_check_for_bots.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_clear_cooldown.json b/schemas/world/packets/todo/smsg_clear_cooldown.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_clear_cooldown.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_clear_far_sight_immediate.json b/schemas/world/packets/todo/smsg_clear_far_sight_immediate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_clear_far_sight_immediate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_clear_target.json b/schemas/world/packets/todo/smsg_clear_target.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_clear_target.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_client_control_update.json b/schemas/world/packets/todo/smsg_client_control_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_client_control_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_compressed_moves.json b/schemas/world/packets/todo/smsg_compressed_moves.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_compressed_moves.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_compressed_update_object.json b/schemas/world/packets/todo/smsg_compressed_update_object.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_compressed_update_object.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_comsat_connect_fail.json b/schemas/world/packets/todo/smsg_comsat_connect_fail.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_comsat_connect_fail.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_comsat_disconnect.json b/schemas/world/packets/todo/smsg_comsat_disconnect.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_comsat_disconnect.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_comsat_reconnect_try.json b/schemas/world/packets/todo/smsg_comsat_reconnect_try.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_comsat_reconnect_try.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_cooldown_cheat.json b/schemas/world/packets/todo/smsg_cooldown_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_cooldown_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_cooldown_event.json b/schemas/world/packets/todo/smsg_cooldown_event.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_cooldown_event.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_corpse_reclaim_delay.json b/schemas/world/packets/todo/smsg_corpse_reclaim_delay.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_corpse_reclaim_delay.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_creature_query_response.json b/schemas/world/packets/todo/smsg_creature_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_creature_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_damage_calc_log.json b/schemas/world/packets/todo/smsg_damage_calc_log.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_damage_calc_log.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_damage_done_obsolete.json b/schemas/world/packets/todo/smsg_damage_done_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_damage_done_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_damage_taken_obsolete.json b/schemas/world/packets/todo/smsg_damage_taken_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_damage_taken_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_dblookup.json b/schemas/world/packets/todo/smsg_dblookup.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_dblookup.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_debug_aistate.json b/schemas/world/packets/todo/smsg_debug_aistate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_debug_aistate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_debug_list_targets.json b/schemas/world/packets/todo/smsg_debug_list_targets.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_debug_list_targets.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_debugauraproc.json b/schemas/world/packets/todo/smsg_debugauraproc.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_debugauraproc.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_debuginfospellmiss_obsolete.json b/schemas/world/packets/todo/smsg_debuginfospellmiss_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_debuginfospellmiss_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_defense_message.json b/schemas/world/packets/todo/smsg_defense_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_defense_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_destroy_object.json b/schemas/world/packets/todo/smsg_destroy_object.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_destroy_object.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_dismount.json b/schemas/world/packets/todo/smsg_dismount.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_dismount.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_dismountresult.json b/schemas/world/packets/todo/smsg_dismountresult.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_dismountresult.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_dispel_failed.json b/schemas/world/packets/todo/smsg_dispel_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_dispel_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_complete.json b/schemas/world/packets/todo/smsg_duel_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_countdown.json b/schemas/world/packets/todo/smsg_duel_countdown.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_countdown.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_inbounds.json b/schemas/world/packets/todo/smsg_duel_inbounds.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_inbounds.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_outofbounds.json b/schemas/world/packets/todo/smsg_duel_outofbounds.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_outofbounds.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_requested.json b/schemas/world/packets/todo/smsg_duel_requested.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_requested.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_duel_winner.json b/schemas/world/packets/todo/smsg_duel_winner.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_duel_winner.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_durability_damage_death.json b/schemas/world/packets/todo/smsg_durability_damage_death.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_durability_damage_death.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_echo_party_squelch.json b/schemas/world/packets/todo/smsg_echo_party_squelch.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_echo_party_squelch.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_emote.json b/schemas/world/packets/todo/smsg_emote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_emote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_enchantmentlog.json b/schemas/world/packets/todo/smsg_enchantmentlog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_enchantmentlog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_environmentaldamagelog.json b/schemas/world/packets/todo/smsg_environmentaldamagelog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_environmentaldamagelog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_expected_spam_records.json b/schemas/world/packets/todo/smsg_expected_spam_records.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_expected_spam_records.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_exploration_experience.json b/schemas/world/packets/todo/smsg_exploration_experience.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_exploration_experience.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_feign_death_resisted.json b/schemas/world/packets/todo/smsg_feign_death_resisted.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_feign_death_resisted.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_fish_escaped.json b/schemas/world/packets/todo/smsg_fish_escaped.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_fish_escaped.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_fish_not_hooked.json b/schemas/world/packets/todo/smsg_fish_not_hooked.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_fish_not_hooked.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_display_update.json b/schemas/world/packets/todo/smsg_force_display_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_display_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_move_root.json b/schemas/world/packets/todo/smsg_force_move_root.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_move_root.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_move_unroot.json b/schemas/world/packets/todo/smsg_force_move_unroot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_move_unroot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_run_back_speed_change.json b/schemas/world/packets/todo/smsg_force_run_back_speed_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_run_back_speed_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_run_speed_change.json b/schemas/world/packets/todo/smsg_force_run_speed_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_run_speed_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_swim_back_speed_change.json b/schemas/world/packets/todo/smsg_force_swim_back_speed_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_swim_back_speed_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_swim_speed_change.json b/schemas/world/packets/todo/smsg_force_swim_speed_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_swim_speed_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_turn_rate_change.json b/schemas/world/packets/todo/smsg_force_turn_rate_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_turn_rate_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_force_walk_speed_change.json b/schemas/world/packets/todo/smsg_force_walk_speed_change.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_force_walk_speed_change.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_forceactionshow.json b/schemas/world/packets/todo/smsg_forceactionshow.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_forceactionshow.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_friend_list.json b/schemas/world/packets/todo/smsg_friend_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_friend_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_friend_status.json b/schemas/world/packets/todo/smsg_friend_status.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_friend_status.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_custom_anim.json b/schemas/world/packets/todo/smsg_gameobject_custom_anim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_custom_anim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_despawn_anim.json b/schemas/world/packets/todo/smsg_gameobject_despawn_anim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_despawn_anim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_pagetext.json b/schemas/world/packets/todo/smsg_gameobject_pagetext.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_pagetext.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_query_response.json b/schemas/world/packets/todo/smsg_gameobject_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_reset_state.json b/schemas/world/packets/todo/smsg_gameobject_reset_state.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_reset_state.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gameobject_spawn_anim_obsolete.json b/schemas/world/packets/todo/smsg_gameobject_spawn_anim_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gameobject_spawn_anim_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gamespeed_set.json b/schemas/world/packets/todo/smsg_gamespeed_set.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gamespeed_set.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gametime_set.json b/schemas/world/packets/todo/smsg_gametime_set.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gametime_set.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gametime_update.json b/schemas/world/packets/todo/smsg_gametime_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gametime_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gametimebias_set.json b/schemas/world/packets/todo/smsg_gametimebias_set.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gametimebias_set.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_ghostee_gone.json b/schemas/world/packets/todo/smsg_ghostee_gone.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_ghostee_gone.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gm_player_info.json b/schemas/world/packets/todo/smsg_gm_player_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gm_player_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gm_ticket_status_update.json b/schemas/world/packets/todo/smsg_gm_ticket_status_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gm_ticket_status_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gmticket_create.json b/schemas/world/packets/todo/smsg_gmticket_create.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gmticket_create.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gmticket_deleteticket.json b/schemas/world/packets/todo/smsg_gmticket_deleteticket.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gmticket_deleteticket.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gmticket_getticket.json b/schemas/world/packets/todo/smsg_gmticket_getticket.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gmticket_getticket.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gmticket_systemstatus.json b/schemas/world/packets/todo/smsg_gmticket_systemstatus.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gmticket_systemstatus.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gmticket_updatetext.json b/schemas/world/packets/todo/smsg_gmticket_updatetext.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gmticket_updatetext.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_godmode.json b/schemas/world/packets/todo/smsg_godmode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_godmode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gogogo_obsolete.json b/schemas/world/packets/todo/smsg_gogogo_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gogogo_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gossip_complete.json b/schemas/world/packets/todo/smsg_gossip_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gossip_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gossip_message.json b/schemas/world/packets/todo/smsg_gossip_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gossip_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_gossip_poi.json b/schemas/world/packets/todo/smsg_gossip_poi.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_gossip_poi.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_cancel.json b/schemas/world/packets/todo/smsg_group_cancel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_cancel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_decline.json b/schemas/world/packets/todo/smsg_group_decline.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_decline.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_destroyed.json b/schemas/world/packets/todo/smsg_group_destroyed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_destroyed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_invite.json b/schemas/world/packets/todo/smsg_group_invite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_invite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_joined_battleground.json b/schemas/world/packets/todo/smsg_group_joined_battleground.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_joined_battleground.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_list.json b/schemas/world/packets/todo/smsg_group_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_set_leader.json b/schemas/world/packets/todo/smsg_group_set_leader.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_set_leader.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_group_uninvite.json b/schemas/world/packets/todo/smsg_group_uninvite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_group_uninvite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_command_result.json b/schemas/world/packets/todo/smsg_guild_command_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_command_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_decline.json b/schemas/world/packets/todo/smsg_guild_decline.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_decline.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_event.json b/schemas/world/packets/todo/smsg_guild_event.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_event.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_info.json b/schemas/world/packets/todo/smsg_guild_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_invite.json b/schemas/world/packets/todo/smsg_guild_invite.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_invite.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_query_response.json b/schemas/world/packets/todo/smsg_guild_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_guild_roster.json b/schemas/world/packets/todo/smsg_guild_roster.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_guild_roster.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_ignore_diminishing_returns_cheat.json b/schemas/world/packets/todo/smsg_ignore_diminishing_returns_cheat.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_ignore_diminishing_returns_cheat.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_ignore_list.json b/schemas/world/packets/todo/smsg_ignore_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_ignore_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_init_extra_aura_info.json b/schemas/world/packets/todo/smsg_init_extra_aura_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_init_extra_aura_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_init_world_states.json b/schemas/world/packets/todo/smsg_init_world_states.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_init_world_states.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_initial_spells.json b/schemas/world/packets/todo/smsg_initial_spells.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_initial_spells.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_initialize_factions.json b/schemas/world/packets/todo/smsg_initialize_factions.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_initialize_factions.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_inspect.json b/schemas/world/packets/todo/smsg_inspect.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_inspect.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_instance_reset.json b/schemas/world/packets/todo/smsg_instance_reset.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_instance_reset.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_instance_reset_failed.json b/schemas/world/packets/todo/smsg_instance_reset_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_instance_reset_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_instance_save_created.json b/schemas/world/packets/todo/smsg_instance_save_created.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_instance_save_created.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_invalid_promotion_code.json b/schemas/world/packets/todo/smsg_invalid_promotion_code.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_invalid_promotion_code.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_invalidate_player.json b/schemas/world/packets/todo/smsg_invalidate_player.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_invalidate_player.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_inventory_change_failure.json b/schemas/world/packets/todo/smsg_inventory_change_failure.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_inventory_change_failure.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_cooldown.json b/schemas/world/packets/todo/smsg_item_cooldown.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_cooldown.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_enchant_time_update.json b/schemas/world/packets/todo/smsg_item_enchant_time_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_enchant_time_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_name_query_response.json b/schemas/world/packets/todo/smsg_item_name_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_name_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_push_result.json b/schemas/world/packets/todo/smsg_item_push_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_push_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_query_multiple_response.json b/schemas/world/packets/todo/smsg_item_query_multiple_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_query_multiple_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_query_single_response.json b/schemas/world/packets/todo/smsg_item_query_single_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_query_single_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_text_query_response.json b/schemas/world/packets/todo/smsg_item_text_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_text_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_item_time_update.json b/schemas/world/packets/todo/smsg_item_time_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_item_time_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_kick_reason.json b/schemas/world/packets/todo/smsg_kick_reason.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_kick_reason.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_learned_spell.json b/schemas/world/packets/todo/smsg_learned_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_learned_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_levelup_info.json b/schemas/world/packets/todo/smsg_levelup_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_levelup_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_list_inventory.json b/schemas/world/packets/todo/smsg_list_inventory.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_list_inventory.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_log_xpgain.json b/schemas/world/packets/todo/smsg_log_xpgain.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_log_xpgain.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_login_settimespeed.json b/schemas/world/packets/todo/smsg_login_settimespeed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_login_settimespeed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_login_verify_world.json b/schemas/world/packets/todo/smsg_login_verify_world.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_login_verify_world.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_logout_cancel_ack.json b/schemas/world/packets/todo/smsg_logout_cancel_ack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_logout_cancel_ack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_logout_complete.json b/schemas/world/packets/todo/smsg_logout_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_logout_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_logout_response.json b/schemas/world/packets/todo/smsg_logout_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_logout_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_all_passed.json b/schemas/world/packets/todo/smsg_loot_all_passed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_all_passed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_clear_money.json b/schemas/world/packets/todo/smsg_loot_clear_money.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_clear_money.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_item_notify.json b/schemas/world/packets/todo/smsg_loot_item_notify.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_item_notify.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_list.json b/schemas/world/packets/todo/smsg_loot_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_master_list.json b/schemas/world/packets/todo/smsg_loot_master_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_master_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_money_notify.json b/schemas/world/packets/todo/smsg_loot_money_notify.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_money_notify.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_release_response.json b/schemas/world/packets/todo/smsg_loot_release_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_release_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_removed.json b/schemas/world/packets/todo/smsg_loot_removed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_removed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_response.json b/schemas/world/packets/todo/smsg_loot_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_roll.json b/schemas/world/packets/todo/smsg_loot_roll.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_roll.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_roll_won.json b/schemas/world/packets/todo/smsg_loot_roll_won.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_roll_won.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_loot_start_roll.json b/schemas/world/packets/todo/smsg_loot_start_roll.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_loot_start_roll.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_lottery_query_result_obsolete.json b/schemas/world/packets/todo/smsg_lottery_query_result_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_lottery_query_result_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_lottery_result_obsolete.json b/schemas/world/packets/todo/smsg_lottery_result_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_lottery_result_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_mail_list_result.json b/schemas/world/packets/todo/smsg_mail_list_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_mail_list_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_meetingstone_complete.json b/schemas/world/packets/todo/smsg_meetingstone_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_meetingstone_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_meetingstone_in_progress.json b/schemas/world/packets/todo/smsg_meetingstone_in_progress.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_meetingstone_in_progress.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_meetingstone_joinfailed.json b/schemas/world/packets/todo/smsg_meetingstone_joinfailed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_meetingstone_joinfailed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_meetingstone_member_added.json b/schemas/world/packets/todo/smsg_meetingstone_member_added.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_meetingstone_member_added.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_meetingstone_setqueue.json b/schemas/world/packets/todo/smsg_meetingstone_setqueue.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_meetingstone_setqueue.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_minigame_move_failed.json b/schemas/world/packets/todo/smsg_minigame_move_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_minigame_move_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_minigame_setup.json b/schemas/world/packets/todo/smsg_minigame_setup.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_minigame_setup.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_minigame_state.json b/schemas/world/packets/todo/smsg_minigame_state.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_minigame_state.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_mirrorimage_data.json b/schemas/world/packets/todo/smsg_mirrorimage_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_mirrorimage_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_monster_move.json b/schemas/world/packets/todo/smsg_monster_move.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_monster_move.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_monster_move_transport.json b/schemas/world/packets/todo/smsg_monster_move_transport.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_monster_move_transport.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_motd.json b/schemas/world/packets/todo/smsg_motd.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_motd.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_mountresult.json b/schemas/world/packets/todo/smsg_mountresult.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_mountresult.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_mountspecial_anim.json b/schemas/world/packets/todo/smsg_mountspecial_anim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_mountspecial_anim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_feather_fall.json b/schemas/world/packets/todo/smsg_move_feather_fall.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_feather_fall.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_knock_back.json b/schemas/world/packets/todo/smsg_move_knock_back.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_knock_back.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_land_walk.json b/schemas/world/packets/todo/smsg_move_land_walk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_land_walk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_normal_fall.json b/schemas/world/packets/todo/smsg_move_normal_fall.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_normal_fall.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_set_flight.json b/schemas/world/packets/todo/smsg_move_set_flight.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_set_flight.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_set_hover.json b/schemas/world/packets/todo/smsg_move_set_hover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_set_hover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_unset_flight.json b/schemas/world/packets/todo/smsg_move_unset_flight.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_unset_flight.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_unset_hover.json b/schemas/world/packets/todo/smsg_move_unset_hover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_unset_hover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_move_water_walk.json b/schemas/world/packets/todo/smsg_move_water_walk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_move_water_walk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_name_query_response.json b/schemas/world/packets/todo/smsg_name_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_name_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_new_taxi_path.json b/schemas/world/packets/todo/smsg_new_taxi_path.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_new_taxi_path.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_new_world.json b/schemas/world/packets/todo/smsg_new_world.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_new_world.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_notification.json b/schemas/world/packets/todo/smsg_notification.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_notification.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_npc_text_update.json b/schemas/world/packets/todo/smsg_npc_text_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_npc_text_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_npc_wont_talk.json b/schemas/world/packets/todo/smsg_npc_wont_talk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_npc_wont_talk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_offer_petition_error.json b/schemas/world/packets/todo/smsg_offer_petition_error.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_offer_petition_error.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_open_container.json b/schemas/world/packets/todo/smsg_open_container.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_open_container.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_override_light.json b/schemas/world/packets/todo/smsg_override_light.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_override_light.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_page_text_query_response.json b/schemas/world/packets/todo/smsg_page_text_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_page_text_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_party_command_result.json b/schemas/world/packets/todo/smsg_party_command_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_party_command_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_party_member_stats.json b/schemas/world/packets/todo/smsg_party_member_stats.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_party_member_stats.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_party_member_stats_full.json b/schemas/world/packets/todo/smsg_party_member_stats_full.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_party_member_stats_full.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_partykilllog.json b/schemas/world/packets/todo/smsg_partykilllog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_partykilllog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pause_mirror_timer.json b/schemas/world/packets/todo/smsg_pause_mirror_timer.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pause_mirror_timer.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_periodicauralog.json b/schemas/world/packets/todo/smsg_periodicauralog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_periodicauralog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_action_feedback.json b/schemas/world/packets/todo/smsg_pet_action_feedback.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_action_feedback.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_action_sound.json b/schemas/world/packets/todo/smsg_pet_action_sound.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_action_sound.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_broken.json b/schemas/world/packets/todo/smsg_pet_broken.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_broken.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_cast_failed.json b/schemas/world/packets/todo/smsg_pet_cast_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_cast_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_dismiss_sound.json b/schemas/world/packets/todo/smsg_pet_dismiss_sound.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_dismiss_sound.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_mode.json b/schemas/world/packets/todo/smsg_pet_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_name_invalid.json b/schemas/world/packets/todo/smsg_pet_name_invalid.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_name_invalid.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_name_query_response.json b/schemas/world/packets/todo/smsg_pet_name_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_name_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_spells.json b/schemas/world/packets/todo/smsg_pet_spells.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_spells.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_tame_failure.json b/schemas/world/packets/todo/smsg_pet_tame_failure.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_tame_failure.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pet_unlearn_confirm.json b/schemas/world/packets/todo/smsg_pet_unlearn_confirm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pet_unlearn_confirm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_petgodmode.json b/schemas/world/packets/todo/smsg_petgodmode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_petgodmode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_petition_query_response.json b/schemas/world/packets/todo/smsg_petition_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_petition_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_petition_show_signatures.json b/schemas/world/packets/todo/smsg_petition_show_signatures.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_petition_show_signatures.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_petition_showlist.json b/schemas/world/packets/todo/smsg_petition_showlist.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_petition_showlist.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_petition_sign_results.json b/schemas/world/packets/todo/smsg_petition_sign_results.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_petition_sign_results.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_music.json b/schemas/world/packets/todo/smsg_play_music.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_music.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_object_sound.json b/schemas/world/packets/todo/smsg_play_object_sound.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_object_sound.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_sound.json b/schemas/world/packets/todo/smsg_play_sound.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_sound.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_spell_impact.json b/schemas/world/packets/todo/smsg_play_spell_impact.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_spell_impact.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_spell_visual.json b/schemas/world/packets/todo/smsg_play_spell_visual.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_spell_visual.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_play_time_warning.json b/schemas/world/packets/todo/smsg_play_time_warning.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_play_time_warning.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_played_time.json b/schemas/world/packets/todo/smsg_played_time.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_played_time.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_player_combat_xp_gain_obsolete.json b/schemas/world/packets/todo/smsg_player_combat_xp_gain_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_player_combat_xp_gain_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_player_macro_obsolete.json b/schemas/world/packets/todo/smsg_player_macro_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_player_macro_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_player_skinned.json b/schemas/world/packets/todo/smsg_player_skinned.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_player_skinned.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_playerbinderror.json b/schemas/world/packets/todo/smsg_playerbinderror.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_playerbinderror.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_playerbound.json b/schemas/world/packets/todo/smsg_playerbound.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_playerbound.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_powergainlog_obsolete.json b/schemas/world/packets/todo/smsg_powergainlog_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_powergainlog_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_procresist.json b/schemas/world/packets/todo/smsg_procresist.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_procresist.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_propose_level_grant.json b/schemas/world/packets/todo/smsg_propose_level_grant.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_propose_level_grant.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_puremount_cancelled_obsolete.json b/schemas/world/packets/todo/smsg_puremount_cancelled_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_puremount_cancelled_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_pvp_credit.json b/schemas/world/packets/todo/smsg_pvp_credit.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_pvp_credit.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_query_object_position.json b/schemas/world/packets/todo/smsg_query_object_position.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_query_object_position.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_query_object_rotation.json b/schemas/world/packets/todo/smsg_query_object_rotation.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_query_object_rotation.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_query_time_response.json b/schemas/world/packets/todo/smsg_query_time_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_query_time_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_quest_confirm_accept.json b/schemas/world/packets/todo/smsg_quest_confirm_accept.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_quest_confirm_accept.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_quest_query_response.json b/schemas/world/packets/todo/smsg_quest_query_response.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_quest_query_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_offer_reward.json b/schemas/world/packets/todo/smsg_questgiver_offer_reward.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_offer_reward.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_quest_complete.json b/schemas/world/packets/todo/smsg_questgiver_quest_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_quest_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_quest_details.json b/schemas/world/packets/todo/smsg_questgiver_quest_details.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_quest_details.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_quest_failed.json b/schemas/world/packets/todo/smsg_questgiver_quest_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_quest_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_quest_invalid.json b/schemas/world/packets/todo/smsg_questgiver_quest_invalid.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_quest_invalid.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_quest_list.json b/schemas/world/packets/todo/smsg_questgiver_quest_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_quest_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_request_items.json b/schemas/world/packets/todo/smsg_questgiver_request_items.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_request_items.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_status.json b/schemas/world/packets/todo/smsg_questgiver_status.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_status.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questgiver_status_multiple.json b/schemas/world/packets/todo/smsg_questgiver_status_multiple.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questgiver_status_multiple.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questlog_full.json b/schemas/world/packets/todo/smsg_questlog_full.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questlog_full.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questupdate_add_item.json b/schemas/world/packets/todo/smsg_questupdate_add_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questupdate_add_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questupdate_add_kill.json b/schemas/world/packets/todo/smsg_questupdate_add_kill.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questupdate_add_kill.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questupdate_complete.json b/schemas/world/packets/todo/smsg_questupdate_complete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questupdate_complete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questupdate_failed.json b/schemas/world/packets/todo/smsg_questupdate_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questupdate_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_questupdate_failedtimer.json b/schemas/world/packets/todo/smsg_questupdate_failedtimer.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_questupdate_failedtimer.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_raid_group_only.json b/schemas/world/packets/todo/smsg_raid_group_only.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_raid_group_only.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_raid_instance_info.json b/schemas/world/packets/todo/smsg_raid_instance_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_raid_instance_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_raid_instance_message.json b/schemas/world/packets/todo/smsg_raid_instance_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_raid_instance_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_raid_ready_check_error.json b/schemas/world/packets/todo/smsg_raid_ready_check_error.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_raid_ready_check_error.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_read_item_failed.json b/schemas/world/packets/todo/smsg_read_item_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_read_item_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_read_item_ok.json b/schemas/world/packets/todo/smsg_read_item_ok.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_read_item_ok.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_real_group_update.json b/schemas/world/packets/todo/smsg_real_group_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_real_group_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_received_mail.json b/schemas/world/packets/todo/smsg_received_mail.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_received_mail.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_refer_a_friend_failure.json b/schemas/world/packets/todo/smsg_refer_a_friend_failure.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_refer_a_friend_failure.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_removed_spell.json b/schemas/world/packets/todo/smsg_removed_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_removed_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_reset_failed_notify.json b/schemas/world/packets/todo/smsg_reset_failed_notify.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_reset_failed_notify.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_resistlog.json b/schemas/world/packets/todo/smsg_resistlog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_resistlog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_resurrect_failed.json b/schemas/world/packets/todo/smsg_resurrect_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_resurrect_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_resurrect_request.json b/schemas/world/packets/todo/smsg_resurrect_request.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_resurrect_request.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_rwhois.json b/schemas/world/packets/todo/smsg_rwhois.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_rwhois.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_script_message.json b/schemas/world/packets/todo/smsg_script_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_script_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_sell_item.json b/schemas/world/packets/todo/smsg_sell_item.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_sell_item.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_send_mail_result.json b/schemas/world/packets/todo/smsg_send_mail_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_send_mail_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_send_unlearn_spells.json b/schemas/world/packets/todo/smsg_send_unlearn_spells.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_send_unlearn_spells.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_server_buck_data.json b/schemas/world/packets/todo/smsg_server_buck_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_server_buck_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_server_message.json b/schemas/world/packets/todo/smsg_server_message.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_server_message.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_servertime.json b/schemas/world/packets/todo/smsg_servertime.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_servertime.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_extra_aura_info.json b/schemas/world/packets/todo/smsg_set_extra_aura_info.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_extra_aura_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_extra_aura_info_need_update.json b/schemas/world/packets/todo/smsg_set_extra_aura_info_need_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_extra_aura_info_need_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_faction_atwar.json b/schemas/world/packets/todo/smsg_set_faction_atwar.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_faction_atwar.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_faction_standing.json b/schemas/world/packets/todo/smsg_set_faction_standing.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_faction_standing.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_faction_visible.json b/schemas/world/packets/todo/smsg_set_faction_visible.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_faction_visible.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_flat_spell_modifier.json b/schemas/world/packets/todo/smsg_set_flat_spell_modifier.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_flat_spell_modifier.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_forced_reactions.json b/schemas/world/packets/todo/smsg_set_forced_reactions.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_forced_reactions.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_pct_spell_modifier.json b/schemas/world/packets/todo/smsg_set_pct_spell_modifier.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_pct_spell_modifier.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_proficiency.json b/schemas/world/packets/todo/smsg_set_proficiency.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_proficiency.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_set_rest_start.json b/schemas/world/packets/todo/smsg_set_rest_start.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_set_rest_start.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_show_bank.json b/schemas/world/packets/todo/smsg_show_bank.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_show_bank.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_showtaxinodes.json b/schemas/world/packets/todo/smsg_showtaxinodes.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_showtaxinodes.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_chance_proc_log.json b/schemas/world/packets/todo/smsg_spell_chance_proc_log.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_chance_proc_log.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_chance_resist_pushback.json b/schemas/world/packets/todo/smsg_spell_chance_resist_pushback.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_chance_resist_pushback.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_cooldown.json b/schemas/world/packets/todo/smsg_spell_cooldown.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_cooldown.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_delayed.json b/schemas/world/packets/todo/smsg_spell_delayed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_delayed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_failed_other.json b/schemas/world/packets/todo/smsg_spell_failed_other.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_failed_other.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_failure.json b/schemas/world/packets/todo/smsg_spell_failure.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_failure.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_go.json b/schemas/world/packets/todo/smsg_spell_go.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_go.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_start.json b/schemas/world/packets/todo/smsg_spell_start.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_start.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spell_update_chain_targets.json b/schemas/world/packets/todo/smsg_spell_update_chain_targets.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spell_update_chain_targets.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spelldamageshield.json b/schemas/world/packets/todo/smsg_spelldamageshield.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spelldamageshield.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spelldispellog.json b/schemas/world/packets/todo/smsg_spelldispellog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spelldispellog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellenergizelog.json b/schemas/world/packets/todo/smsg_spellenergizelog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellenergizelog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellheallog.json b/schemas/world/packets/todo/smsg_spellheallog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellheallog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellinstakilllog.json b/schemas/world/packets/todo/smsg_spellinstakilllog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellinstakilllog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spelllogexecute.json b/schemas/world/packets/todo/smsg_spelllogexecute.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spelllogexecute.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spelllogmiss.json b/schemas/world/packets/todo/smsg_spelllogmiss.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spelllogmiss.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellnonmeleedamagelog.json b/schemas/world/packets/todo/smsg_spellnonmeleedamagelog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellnonmeleedamagelog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellordamage_immune.json b/schemas/world/packets/todo/smsg_spellordamage_immune.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellordamage_immune.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spellsteallog.json b/schemas/world/packets/todo/smsg_spellsteallog.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spellsteallog.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spirit_healer_confirm.json b/schemas/world/packets/todo/smsg_spirit_healer_confirm.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spirit_healer_confirm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_feather_fall.json b/schemas/world/packets/todo/smsg_spline_move_feather_fall.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_feather_fall.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_land_walk.json b/schemas/world/packets/todo/smsg_spline_move_land_walk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_land_walk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_normal_fall.json b/schemas/world/packets/todo/smsg_spline_move_normal_fall.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_normal_fall.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_root.json b/schemas/world/packets/todo/smsg_spline_move_root.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_root.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_set_hover.json b/schemas/world/packets/todo/smsg_spline_move_set_hover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_set_hover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_set_run_mode.json b/schemas/world/packets/todo/smsg_spline_move_set_run_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_set_run_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_set_walk_mode.json b/schemas/world/packets/todo/smsg_spline_move_set_walk_mode.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_set_walk_mode.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_start_swim.json b/schemas/world/packets/todo/smsg_spline_move_start_swim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_start_swim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_stop_swim.json b/schemas/world/packets/todo/smsg_spline_move_stop_swim.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_stop_swim.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_unroot.json b/schemas/world/packets/todo/smsg_spline_move_unroot.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_unroot.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_unset_hover.json b/schemas/world/packets/todo/smsg_spline_move_unset_hover.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_unset_hover.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_move_water_walk.json b/schemas/world/packets/todo/smsg_spline_move_water_walk.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_move_water_walk.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_run_back_speed.json b/schemas/world/packets/todo/smsg_spline_set_run_back_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_run_back_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_run_speed.json b/schemas/world/packets/todo/smsg_spline_set_run_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_run_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_swim_back_speed.json b/schemas/world/packets/todo/smsg_spline_set_swim_back_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_swim_back_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_swim_speed.json b/schemas/world/packets/todo/smsg_spline_set_swim_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_swim_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_turn_rate.json b/schemas/world/packets/todo/smsg_spline_set_turn_rate.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_turn_rate.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_spline_set_walk_speed.json b/schemas/world/packets/todo/smsg_spline_set_walk_speed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_spline_set_walk_speed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_stable_result.json b/schemas/world/packets/todo/smsg_stable_result.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_stable_result.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_standstate_change_failure_obsolete.json b/schemas/world/packets/todo/smsg_standstate_change_failure_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_standstate_change_failure_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_standstate_update.json b/schemas/world/packets/todo/smsg_standstate_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_standstate_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_start_mirror_timer.json b/schemas/world/packets/todo/smsg_start_mirror_timer.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_start_mirror_timer.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_stop_mirror_timer.json b/schemas/world/packets/todo/smsg_stop_mirror_timer.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_stop_mirror_timer.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_summon_cancel.json b/schemas/world/packets/todo/smsg_summon_cancel.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_summon_cancel.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_summon_request.json b/schemas/world/packets/todo/smsg_summon_request.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_summon_request.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_superceded_spell.json b/schemas/world/packets/todo/smsg_superceded_spell.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_superceded_spell.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_taxinode_status.json b/schemas/world/packets/todo/smsg_taxinode_status.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_taxinode_status.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_text_emote.json b/schemas/world/packets/todo/smsg_text_emote.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_text_emote.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_totem_created.json b/schemas/world/packets/todo/smsg_totem_created.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_totem_created.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_trade_status.json b/schemas/world/packets/todo/smsg_trade_status.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_trade_status.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_trade_status_extended.json b/schemas/world/packets/todo/smsg_trade_status_extended.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_trade_status_extended.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_trainer_buy_failed.json b/schemas/world/packets/todo/smsg_trainer_buy_failed.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_trainer_buy_failed.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_trainer_buy_succeeded.json b/schemas/world/packets/todo/smsg_trainer_buy_succeeded.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_trainer_buy_succeeded.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_trainer_list.json b/schemas/world/packets/todo/smsg_trainer_list.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_trainer_list.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_transfer_aborted.json b/schemas/world/packets/todo/smsg_transfer_aborted.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_transfer_aborted.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_transfer_pending.json b/schemas/world/packets/todo/smsg_transfer_pending.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_transfer_pending.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_turn_in_petition_results.json b/schemas/world/packets/todo/smsg_turn_in_petition_results.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_turn_in_petition_results.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_tutorial_flags.json b/schemas/world/packets/todo/smsg_tutorial_flags.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_tutorial_flags.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_update_account_data.json b/schemas/world/packets/todo/smsg_update_account_data.json
deleted file mode 100644
index 9e26dfeeb..000000000
--- a/schemas/world/packets/todo/smsg_update_account_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/schemas/world/packets/todo/smsg_update_aura_duration.json b/schemas/world/packets/todo/smsg_update_aura_duration.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_update_aura_duration.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_update_instance_ownership.json b/schemas/world/packets/todo/smsg_update_instance_ownership.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_update_instance_ownership.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_update_last_instance.json b/schemas/world/packets/todo/smsg_update_last_instance.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_update_last_instance.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_update_object.json b/schemas/world/packets/todo/smsg_update_object.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_update_object.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_update_world_state.json b/schemas/world/packets/todo/smsg_update_world_state.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_update_world_state.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_userlist_add.json b/schemas/world/packets/todo/smsg_userlist_add.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_userlist_add.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_userlist_remove.json b/schemas/world/packets/todo/smsg_userlist_remove.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_userlist_remove.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_userlist_update.json b/schemas/world/packets/todo/smsg_userlist_update.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_userlist_update.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_victimstateupdate_obsolete.json b/schemas/world/packets/todo/smsg_victimstateupdate_obsolete.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_victimstateupdate_obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_warden_data.json b/schemas/world/packets/todo/smsg_warden_data.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_warden_data.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_weather.json b/schemas/world/packets/todo/smsg_weather.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_weather.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_who.json b/schemas/world/packets/todo/smsg_who.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_who.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_whois.json b/schemas/world/packets/todo/smsg_whois.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_whois.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_zone_map.json b/schemas/world/packets/todo/smsg_zone_map.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_zone_map.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/packets/todo/smsg_zone_under_attack.json b/schemas/world/packets/todo/smsg_zone_under_attack.json
deleted file mode 100644
index 451cbbb31..000000000
--- a/schemas/world/packets/todo/smsg_zone_under_attack.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/schemas/world/types.json b/schemas/world/types.json
index ce7b0f54b..b45493f95 100644
--- a/schemas/world/types.json
+++ b/schemas/world/types.json
@@ -1,7 +1,7 @@
{
"types": {
"Result": {
- "kind": "enum",
+ "kind": "enum_class",
"underlying": "uint8",
"cpp_namespace": "ember::protocol",
"values": {
@@ -15,78 +15,78 @@
"cstatus_connecting": 7,
"cstatus_negotiating_security": 8,
"cstatus_negotiation_complete": 9,
- "cstatus_negotiation_failed": 10,
- "cstatus_authenticating": 11,
- "auth_ok": 12,
- "auth_failed": 13,
- "auth_reject": 14,
- "auth_bad_server_proof": 15,
- "auth_unavailable": 16,
- "auth_system_error": 17,
- "auth_billing_error": 18,
- "auth_billing_expired": 19,
- "auth_version_mismatch": 20,
- "auth_unknown_account": 21,
- "auth_incorrect_password": 22,
- "auth_session_expired": 23,
- "auth_server_shutting_down": 24,
- "auth_already_logging_in": 25,
- "auth_login_server_not_found": 26,
- "auth_wait_queue": 27,
- "auth_banned": 28,
- "auth_already_online": 29,
- "auth_no_time": 30,
- "auth_db_busy": 31,
- "auth_suspended": 32,
- "auth_parental_control": 33,
- "realm_list_in_progress": 34,
- "realm_list_success": 35,
- "realm_list_failed": 36,
- "realm_list_invalid": 37,
- "realm_list_realm_not_found": 38,
- "account_create_in_progress": 39,
- "account_create_success": 40,
- "account_create_failed": 41,
- "char_list_retrieving": 42,
- "char_list_retrieved": 43,
- "char_list_failed": 44,
- "char_create_in_progress": 45,
- "char_create_success": 46,
- "char_create_error": 47,
- "char_create_failed": 48,
- "char_create_name_in_use": 49,
- "char_create_disabled": 50,
- "char_create_pvp_teams_violation": 51,
- "char_create_server_limit": 52,
- "char_create_account_limit": 53,
- "char_create_server_queue": 54,
- "char_create_only_existing": 55,
- "char_delete_in_progress": 56,
- "char_delete_success": 57,
- "char_delete_failed": 58,
- "char_delete_failed_locked_for_transfer":59,
- "char_login_in_progress": 60,
- "char_login_success": 61,
- "char_login_no_world": 62,
- "char_login_duplicate_character": 63,
- "char_login_no_instances": 64,
- "char_login_failed": 65,
- "char_login_disabled": 66,
- "char_login_no_character": 67,
- "char_login_locked_for_transfer": 68,
- "char_name_no_name": 69,
- "char_name_too_short": 70,
- "char_name_too_long": 71,
- "char_name_only_letters": 72,
- "char_name_mixed_languages": 73,
- "char_name_profane": 74,
- "char_name_reserved": 75,
- "char_name_invalid_apostrophe": 76,
- "char_name_multiple_apostrophes": 77,
- "char_name_three_consecutive": 78,
- "char_name_invalid_space": 79,
- "char_name_success": 80,
- "char_name_failure": 81
+ "cstatus_negotiation_failed": 10,
+ "cstatus_authenticating": 11,
+ "auth_ok": 12,
+ "auth_failed": 13,
+ "auth_reject": 14,
+ "auth_bad_server_proof": 15,
+ "auth_unavailable": 16,
+ "auth_system_error": 17,
+ "auth_billing_error": 18,
+ "auth_billing_expired": 19,
+ "auth_version_mismatch": 20,
+ "auth_unknown_account": 21,
+ "auth_incorrect_password": 22,
+ "auth_session_expired": 23,
+ "auth_server_shutting_down": 24,
+ "auth_already_logging_in": 25,
+ "auth_login_server_not_found": 26,
+ "auth_wait_queue": 27,
+ "auth_banned": 28,
+ "auth_already_online": 29,
+ "auth_no_time": 30,
+ "auth_db_busy": 31,
+ "auth_suspended": 32,
+ "auth_parental_control": 33,
+ "realm_list_in_progress": 34,
+ "realm_list_success": 35,
+ "realm_list_failed": 36,
+ "realm_list_invalid": 37,
+ "realm_list_realm_not_found": 38,
+ "account_create_in_progress": 39,
+ "account_create_success": 40,
+ "account_create_failed": 41,
+ "char_list_retrieving": 42,
+ "char_list_retrieved": 43,
+ "char_list_failed": 44,
+ "char_create_in_progress": 45,
+ "char_create_success": 46,
+ "char_create_error": 47,
+ "char_create_failed": 48,
+ "char_create_name_in_use": 49,
+ "char_create_disabled": 50,
+ "char_create_pvp_teams_violation": 51,
+ "char_create_server_limit": 52,
+ "char_create_account_limit": 53,
+ "char_create_server_queue": 54,
+ "char_create_only_existing": 55,
+ "char_delete_in_progress": 56,
+ "char_delete_success": 57,
+ "char_delete_failed": 58,
+ "char_delete_failed_locked_for_transfer": 59,
+ "char_login_in_progress": 60,
+ "char_login_success": 61,
+ "char_login_no_world": 62,
+ "char_login_duplicate_character": 63,
+ "char_login_no_instances": 64,
+ "char_login_failed": 65,
+ "char_login_disabled": 66,
+ "char_login_no_character": 67,
+ "char_login_locked_for_transfer": 68,
+ "char_name_no_name": 69,
+ "char_name_too_short": 70,
+ "char_name_too_long": 71,
+ "char_name_only_letters": 72,
+ "char_name_mixed_languages": 73,
+ "char_name_profane": 74,
+ "char_name_reserved": 75,
+ "char_name_invalid_apostrophe": 76,
+ "char_name_multiple_apostrophes": 77,
+ "char_name_three_consecutive": 78,
+ "char_name_invalid_space": 79,
+ "char_name_success": 80,
+ "char_name_failure": 81
}
},
"MovementFlags": {
@@ -122,62 +122,62 @@
}
},
"ChatType": {
- "kind": "enum",
- "underlying": "uint8",
- "cpp_namespace": "ember::protocol::server",
- "values": {
- "SAY": 0,
- "PARTY": 1,
- "RAID": 2,
- "GUILD": 3,
- "OFFICER": 4,
- "YELL": 5,
- "WHISPER": 6,
- "WHISPER_INFORM": 7,
- "EMOTE": 8,
- "TEXT_EMOTE": 9,
- "SYSTEM": 10,
- "MONSTER_SAY": 11,
- "MONSTER_YELL": 12,
- "MONSTER_EMOTE": 13,
- "CHANNEL": 14,
- "CHANNEL_JOIN": 15,
- "CHANNEL_LEAVE": 16,
- "CHANNEL_LIST": 17,
- "CHANNEL_NOTICE": 18,
- "CHANNEL_NOTICE_USER": 19,
- "AFK": 20,
- "DND": 21,
- "IGNORED": 22,
- "SKILL": 23,
- "LOOT": 24,
- "MONSTER_WHISPER": 26,
- "BG_SYSTEM_NEUTRAL": 82,
- "BG_SYSTEM_ALLIANCE": 83,
- "BG_SYSTEM_HORDE": 84,
- "RAID_LEADER": 87,
- "RAID_WARNING": 88,
- "RAID_BOSS_WHISPER": 89,
- "RAID_BOSS_EMOTE": 90,
- "BATTLEGROUND": 92,
- "BATTLEGROUND_LEADER": 93
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "say": 0,
+ "party": 1,
+ "raid": 2,
+ "guild": 3,
+ "officer": 4,
+ "yell": 5,
+ "whisper": 6,
+ "whisper_inform": 7,
+ "emote": 8,
+ "text_emote": 9,
+ "system": 10,
+ "monster_say": 11,
+ "monster_yell": 12,
+ "monster_emote": 13,
+ "channel": 14,
+ "channel_join": 15,
+ "channel_leave": 16,
+ "channel_list": 17,
+ "channel_notice": 18,
+ "channel_notice_user": 19,
+ "afk": 20,
+ "dnd": 21,
+ "ignored": 22,
+ "skill": 23,
+ "loot": 24,
+ "monster_whisper": 26,
+ "bg_system_neutral": 82,
+ "bg_system_alliance": 83,
+ "bg_system_horde": 84,
+ "raid_leader": 87,
+ "raid_warning": 88,
+ "raid_boss_whisper": 89,
+ "raid_boss_emote": 90,
+ "battleground": 92,
+ "battleground_leader": 93
}
},
"PlayerChatTag": {
- "kind": "enum",
+ "kind": "enum_class",
"underlying": "uint8",
- "cpp_namespace": "ember::protocol::server",
+ "cpp_namespace": "ember::protocol",
"values": {
- "TAG_NONE": 0,
- "TAG_AFK": 1,
- "TAG_DND": 2,
- "TAG_GM": 3
+ "tag_none": 0,
+ "tag_afk": 1,
+ "tag_dnd": 2,
+ "tag_gm": 3
}
},
"StatusID": {
- "kind": "enum",
+ "kind": "enum_class",
"underlying": "uint8",
- "cpp_namespace": "ember::protocol::server",
+ "cpp_namespace": "ember::protocol",
"values": {
"none": 0,
"wait_queue": 1,
@@ -187,20 +187,11 @@
}
},
"CinematicSequence": {
- "kind": "enum",
- "underlying": "uint32",
- "cpp_namespace": "ember::protocol",
- "values": {
- "palantir_of_azora": 1,
- "undead": 2,
- "orc": 21,
- "dwarf": 41,
- "night_elf": 61,
- "human": 81,
- "gnome": 101,
- "troll": 121,
- "tauren": 141
- }
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "CinematicSequences",
+ "underlying": "uint32"
},
"Vector3": {
"kind": "struct",
@@ -240,9 +231,9 @@
"cpp_namespace": "ember::protocol",
"fields": [
{ "name": "flags", "type": "MovementFlags" },
- { "name": "timestamp", "type": "uint32" },
- { "name": "position", "type": "Vector3" },
- { "name": "orientation", "type": "float" },
+ { "name": "timestamp", "type": "uint32" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "orientation", "type": "float" },
{
"type": "group",
"when": { "op": "has_flag", "field": "flags", "value": "on_transport" },
@@ -285,6 +276,3553 @@
"kind": "string",
"encoding": "prefixed_null_terminated",
"length_type": "uint32"
+ },
+ "Vector2": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "x", "type": "float" },
+ { "name": "y", "type": "float" }
+ ]
+ },
+ "AuctionListItem": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_enchantment", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "item_suffix_factor", "type": "uint32" },
+ { "name": "item_count", "type": "uint32" },
+ { "name": "item_charges", "type": "uint32" },
+ { "name": "item_owner", "type": "uint64" },
+ { "name": "start_bid", "type": "uint32" },
+ { "name": "minimum_bid", "type": "uint32" },
+ { "name": "buyout_amount", "type": "uint32" },
+ { "name": "time_left", "type": "uint32" },
+ { "name": "highest_bidder", "type": "uint64" },
+ { "name": "highest_bid", "type": "uint32" }
+ ]
+ },
+ "BattlegroundPlayerPosition": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "player", "type": "uint64" },
+ { "name": "position_x", "type": "float" },
+ { "name": "position_y", "type": "float" }
+ ]
+ },
+ "AddonInfo": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "addon_name", "type": "CString" },
+ { "name": "addon_has_signature", "type": "uint8" },
+ { "name": "addon_crc", "type": "uint32" },
+ { "name": "addon_extra_crc", "type": "uint32" }
+ ]
+ },
+ "Race": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "ChrRaces",
+ "underlying": "uint8"
+ },
+ "Class": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "ChrClasses",
+ "underlying": "uint8"
+ },
+ "Gender": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "male": 0,
+ "female": 1,
+ "none": 2
+ }
+ },
+ "Area": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "AreaTable",
+ "underlying": "uint32"
+ },
+ "Map": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint32"
+ },
+ "CharacterFlags": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "locked_for_transfer": 4,
+ "hide_helm": 1024,
+ "hide_cloak": 2048,
+ "ghost": 8192,
+ "rename": 16384
+ }
+ },
+ "InventoryType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "non_equip": 0,
+ "head": 1,
+ "neck": 2,
+ "shoulders": 3,
+ "body": 4,
+ "chest": 5,
+ "waist": 6,
+ "legs": 7,
+ "feet": 8,
+ "wrists": 9,
+ "hands": 10,
+ "finger": 11,
+ "trinket": 12,
+ "weapon": 13,
+ "shield": 14,
+ "ranged": 15,
+ "cloak": 16,
+ "two_handed_weapon": 17,
+ "bag": 18,
+ "tabard": 19,
+ "robe": 20,
+ "weapon_main_hand": 21,
+ "weapon_off_hand": 22,
+ "holdable": 23,
+ "ammo": 24,
+ "thrown": 25,
+ "ranged_right": 26,
+ "quiver": 27,
+ "relic": 28
+ }
+ },
+ "CharacterGear": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "equipment_display_id", "type": "uint32" },
+ { "name": "inventory_type", "type": "InventoryType" }
+ ]
+ },
+ "ChannelFlags": {
+ "kind": "flags",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "custom": 1,
+ "trade": 4,
+ "not_lfg": 8,
+ "general": 16,
+ "city": 32,
+ "lfg": 64,
+ "voice": 128
+ }
+ },
+ "ChannelMemberFlags": {
+ "kind": "flags",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "owner": 1,
+ "moderator": 4,
+ "voiced": 8,
+ "muted": 16,
+ "custom": 32,
+ "microphone_mute": 64
+ }
+ },
+ "ChannelMember": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "member_flags", "type": "ChannelMemberFlags" }
+ ]
+ },
+ "HitInfo": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "normal_swing": 0,
+ "unk1": 1,
+ "affects_victim": 2,
+ "left_swing": 4,
+ "early_critical_hit": 8,
+ "miss": 16,
+ "absorb": 32,
+ "resist": 64,
+ "critical_hit": 128,
+ "unk9": 256,
+ "unk10": 8192,
+ "glancing": 16384,
+ "crushing": 32768,
+ "no_action": 65536,
+ "swing_no_hit_sound": 524288
+ }
+ },
+ "DamageInfo": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell_school_mask", "type": "uint32" },
+ { "name": "damage_float", "type": "float" },
+ { "name": "damage_uint", "type": "uint32" },
+ { "name": "absorb", "type": "uint32" },
+ { "name": "resist", "type": "uint32" }
+ ]
+ },
+ "FactionFlag": {
+ "kind": "flags",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "visible": 1,
+ "at_war": 2,
+ "hidden": 4,
+ "invisible_forced": 8,
+ "peace_forced": 16,
+ "inactive": 32,
+ "rival": 64
+ }
+ },
+ "FactionInitializer": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "flag", "type": "FactionFlag" },
+ { "name": "standing", "type": "uint32" }
+ ]
+ },
+ "FactionStanding": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "faction", "type": "uint16" },
+ { "name": "standing", "type": "uint32" }
+ ]
+ },
+ "ForcedReaction": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "faction", "type": "uint16" },
+ { "name": "reputation_rank", "type": "uint32" }
+ ]
+ },
+ "GmSurveyQuestion": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "question_id", "type": "uint32" },
+ { "name": "answer", "type": "uint8" },
+ { "name": "comment", "type": "CString" }
+ ]
+ },
+ "GmTicketType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "stuck": 1,
+ "behavior_harassment": 2,
+ "guild": 3,
+ "item": 4,
+ "environmental": 5,
+ "nonquest_creep": 6,
+ "quest_questnpc": 7,
+ "technical": 8,
+ "account_billing": 9,
+ "character": 10
+ }
+ },
+ "UpdateType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "values": 0,
+ "movement": 1,
+ "create_object": 2,
+ "create_object2": 3,
+ "out_of_range_objects": 4,
+ "near_objects": 5
+ }
+ },
+ "GossipItem": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "item_icon", "type": "uint8" },
+ { "name": "coded", "type": "uint8" },
+ { "name": "message", "type": "CString" }
+ ]
+ },
+ "QuestItem": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "quest_id", "type": "uint32" },
+ { "name": "quest_icon", "type": "uint32" },
+ { "name": "level", "type": "uint32" },
+ { "name": "title", "type": "CString" }
+ ]
+ },
+ "Vector2d": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "x", "type": "float" },
+ { "name": "y", "type": "float" }
+ ]
+ },
+ "GuildMemberStatus": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "offline": 0,
+ "online": 1
+ }
+ },
+ "GuildMember": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "status", "type": "GuildMemberStatus" },
+ { "name": "name", "type": "CString" },
+ { "name": "rank", "type": "uint32" },
+ { "name": "level", "type": "uint8" },
+ { "name": "class", "type": "Class" },
+ { "name": "area", "type": "Area" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "status", "value": "offline" },
+ "fields": [
+ { "name": "time_offline", "type": "float" }
+ ]
+ },
+ { "name": "public_note", "type": "CString" },
+ { "name": "officer_note", "type": "CString" }
+ ]
+ },
+ "PetitionShowlist": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "index", "type": "uint32" },
+ { "name": "charter_entry", "type": "uint32" },
+ { "name": "charter_display_id", "type": "uint32" },
+ { "name": "guild_charter_cost", "type": "uint32" },
+ { "name": "unknown1", "type": "uint32" }
+ ]
+ },
+ "PetitionSignature": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "signer", "type": "uint64" },
+ { "name": "unknown1", "type": "uint32" }
+ ]
+ },
+ "SpellCastTargetFlags": {
+ "kind": "flags",
+ "underlying": "uint16",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "self": 0,
+ "unused1": 1,
+ "unit": 2,
+ "unused2": 4,
+ "unused3": 8,
+ "item": 16,
+ "source_location": 32,
+ "dest_location": 64,
+ "object_unk": 128,
+ "unit_unk": 256,
+ "pvp_corpse": 512,
+ "unit_corpse": 1024,
+ "gameobject": 2048,
+ "trade_item": 4096,
+ "string": 8192,
+ "unk1": 16384,
+ "corpse": 32768
+ }
+ },
+ "SpellCastTargets": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "target_flags", "type": "SpellCastTargetFlags" },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "unit" },
+ "fields": [
+ { "name": "unit_target", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "gameobject" },
+ "fields": [
+ { "name": "gameobject", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "object_unk" },
+ "fields": [
+ { "name": "object_unk", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "item" },
+ "fields": [
+ { "name": "item", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "trade_item" },
+ "fields": [
+ { "name": "trade_item", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "source_location" },
+ "fields": [
+ { "name": "source", "type": "Vector3" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "dest_location" },
+ "fields": [
+ { "name": "destination", "type": "Vector3" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "string" },
+ "fields": [
+ { "name": "target_string", "type": "CString" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "corpse" },
+ "fields": [
+ { "name": "corpse", "type": "PackedGuid" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "has_flag", "field": "target_flags", "value": "pvp_corpse" },
+ "fields": [
+ { "name": "pvp_corpse", "type": "PackedGuid" }
+ ]
+ }
+ ]
+ },
+ "ListInventoryItem": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "item_stack_count", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_display_id", "type": "uint32" },
+ { "name": "max_items", "type": "uint32" },
+ { "name": "price", "type": "uint32" },
+ { "name": "max_durability", "type": "uint32" },
+ { "name": "durability", "type": "uint32" }
+ ]
+ },
+ "AddonType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "banned": 0,
+ "enabled": 1,
+ "blizzard": 2
+ }
+ },
+ "InfoBlock": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "unavailable": 0,
+ "available": 1
+ }
+ },
+ "KeyVersion": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "zero": 0,
+ "one": 1,
+ "two": 2,
+ "three": 3,
+ "four": 4,
+ "five": 5,
+ "six": 6,
+ "seven": 7,
+ "eight": 8,
+ "nine": 9
+ }
+ },
+ "UrlInfo": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "unavailable": 0,
+ "available": 1
+ }
+ },
+ "Addon": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "addon_type", "type": "AddonType" },
+ { "name": "info_block", "type": "InfoBlock" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "info_block", "value": "available" },
+ "fields": [
+ { "name": "key_version", "type": "KeyVersion" },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "key_version", "value": "zero" },
+ "fields": [
+ { "name": "public_key", "type": "uint8", "array": {"size": 256} }
+ ]
+ },
+ { "name": "update_available_flag", "type": "uint32" }
+ ]
+ },
+ { "name": "url_info", "type": "UrlInfo" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "url_info", "value": "available" },
+ "fields": [
+ { "name": "url", "type": "CString" }
+ ]
+ }
+ ]
+ },
+ "LootMethod": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "error": 0,
+ "corpse": 1,
+ "pickpocketing": 2,
+ "fishing": 3,
+ "disenchanting": 4,
+ "skinning": 6,
+ "fishinghole": 20,
+ "fishing_fail": 21,
+ "insignia": 22
+ }
+ },
+ "LootMethodError": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "didnt_kill": 0,
+ "too_far": 4,
+ "bad_facing": 5,
+ "locked": 6,
+ "notstanding": 8,
+ "stunned": 9,
+ "player_not_found": 10,
+ "play_time_exceeded": 11,
+ "master_inv_full": 12,
+ "master_unique_item": 13,
+ "master_other": 14,
+ "already_pickpocketed": 15,
+ "not_while_shapeshifted": 16
+ }
+ },
+ "LootSlotType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "type_allow_loot": 0,
+ "type_roll_ongoing": 1,
+ "type_master": 2,
+ "type_locked": 3,
+ "type_owner": 4
+ }
+ },
+ "LootItem": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "index", "type": "uint8" },
+ { "name": "item", "type": "uint32" },
+ { "name": "ty", "type": "LootSlotType" }
+ ]
+ },
+ "MailType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "normal": 0,
+ "auction": 2,
+ "creature": 3,
+ "gameobject": 4,
+ "item": 5
+ }
+ },
+ "Mail": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "message_id", "type": "uint32" },
+ { "name": "message_type", "type": "MailType" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "message_type", "value": "normal" },
+ "fields": [
+ { "name": "sender", "type": "uint64" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "message_type", "value": ["creature", "gameobject"] },
+ "fields": [
+ { "name": "sender_id", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "message_type", "value": "auction" },
+ "fields": [
+ { "name": "auction_id", "type": "uint32" }
+ ]
+ },
+ { "name": "subject", "type": "CString" },
+ { "name": "item_text_id", "type": "uint32" },
+ { "name": "unknown1", "type": "uint32" },
+ { "name": "stationery", "type": "uint32" },
+ { "name": "item", "type": "uint32" },
+ { "name": "item_enchant_id", "type": "uint32" },
+ { "name": "item_random_property_id", "type": "uint32" },
+ { "name": "item_suffix_factor", "type": "uint32" },
+ { "name": "item_stack_size", "type": "uint8" },
+ { "name": "item_spell_charges", "type": "uint32" },
+ { "name": "max_durability", "type": "uint32" },
+ { "name": "durability", "type": "uint32" },
+ { "name": "money", "type": "uint32" },
+ { "name": "cash_on_delivery_amount", "type": "uint32" },
+ { "name": "checked_timestamp", "type": "uint32" },
+ { "name": "expiration_time", "type": "float" },
+ { "name": "mail_template_id", "type": "uint32" }
+ ]
+ },
+ "CompressedMoveOpcode": {
+ "kind": "enum_class",
+ "underlying": "uint16",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "smsg_monster_move": 221,
+ "smsg_monster_move_transport": 686,
+ "smsg_spline_set_run_speed": 766,
+ "smsg_spline_move_unroot": 772,
+ "smsg_spline_move_set_run_mode": 781,
+ "smsg_spline_move_set_walk_mode": 782
+ }
+ },
+ "MonsterMoveType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "normal": 0,
+ "stop": 1,
+ "facing_spot": 2,
+ "facing_target": 3,
+ "facing_angle": 4
+ }
+ },
+ "SplineFlag": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "done": 1,
+ "falling": 2,
+ "unknown3": 4,
+ "unknown4": 8,
+ "unknown5": 16,
+ "unknown6": 32,
+ "unknown7": 64,
+ "unknown8": 128,
+ "run_mode": 256,
+ "flying": 512,
+ "no_spline": 1024,
+ "unknown12": 2048,
+ "unknown13": 4096,
+ "unknown14": 8192,
+ "unknown15": 16384,
+ "unknown16": 32768,
+ "final_point": 65536,
+ "final_target": 131072,
+ "final_angle": 262144,
+ "unknown19": 524288,
+ "cyclic": 1048576,
+ "enter_cycle": 2097152,
+ "frozen": 4194304,
+ "unknown23": 8388608,
+ "unknown24": 16777216,
+ "unknown25": 33554432,
+ "unknown26": 67108864,
+ "unknown27": 134217728,
+ "unknown28": 268435456,
+ "unknown29": 536870912,
+ "unknown30": 1073741824,
+ "unknown31": 2147483648
+ }
+ },
+ "StabledPet": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "pet_number", "type": "uint32" },
+ { "name": "entry", "type": "uint32" },
+ { "name": "level", "type": "uint32" },
+ { "name": "name", "type": "CString" },
+ { "name": "loyalty", "type": "uint32" },
+ { "name": "slot", "type": "uint8" }
+ ]
+ },
+ "PetReactState": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "passive": 0,
+ "defensive": 1,
+ "aggressive": 2
+ }
+ },
+ "PetCommandState": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "stay": 0,
+ "follow": 1,
+ "attack": 2,
+ "dismiss": 3
+ }
+ },
+ "PetEnabled": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "disabled": 0,
+ "enabled": 8
+ }
+ },
+ "PetSpellCooldown": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell", "type": "uint16" },
+ { "name": "spell_category", "type": "uint16" },
+ { "name": "cooldown", "type": "uint32" },
+ { "name": "category_cooldown", "type": "uint32" }
+ ]
+ },
+ "BattlegroundEndStatus": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_ended": 0,
+ "ended": 1
+ }
+ },
+ "BattlegroundWinner": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "horde": 0,
+ "alliance": 1,
+ "none": 2
+ }
+ },
+ "BattlegroundPlayer": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "player", "type": "uint64" },
+ { "name": "rank", "type": "uint32" },
+ { "name": "killing_blows", "type": "uint32" },
+ { "name": "honorable_kills", "type": "uint32" },
+ { "name": "deaths", "type": "uint32" },
+ { "name": "bonus_honor", "type": "uint32" },
+ { "name": "amount_of_extra_fields", "type": "uint32" },
+ { "name": "fields", "type": "uint32", "array": {"count_field": "amount_of_extra_fields"} }
+ ]
+ },
+ "ItemClassAndSubClass": {
+ "kind": "enum_class",
+ "underlying": "uint64",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "consumable": 0,
+ "bag": 1,
+ "one_handed_axe": 2,
+ "jewelry_obsolete": 3,
+ "miscellaneous_armor": 4,
+ "reagent": 5,
+ "wand_obsolete": 6,
+ "trade_good": 7,
+ "generic_obsolete": 8,
+ "book": 9,
+ "money_obsolete": 10,
+ "quiver_obsolete": 11,
+ "quest": 12,
+ "key": 13,
+ "permanent": 14,
+ "junk": 15,
+ "cheese_or_bread_obsolete": 4294967296,
+ "soul_bag": 4294967297,
+ "two_handed_axe": 4294967298,
+ "cloth_armor": 4294967300,
+ "bolt_obsolete": 4294967302,
+ "part_trade_good": 4294967303,
+ "leatherworking_recipe": 4294967305,
+ "quiver_obsolete1": 4294967307,
+ "lockpick": 4294967309,
+ "liquid_obsolete": 8589934592,
+ "herb_bag": 8589934593,
+ "bow": 8589934594,
+ "leather_armor": 8589934596,
+ "arrow": 8589934598,
+ "explosive_trade_good": 8589934599,
+ "tailoring_recipe": 8589934601,
+ "quiver": 8589934603,
+ "enchanting_bag": 12884901889,
+ "gun": 12884901890,
+ "mail_armor": 12884901892,
+ "bullet": 12884901894,
+ "device_trade_good": 12884901895,
+ "engineering_recipe": 12884901897,
+ "ammo_pouch": 12884901899,
+ "engineering_bag": 17179869185,
+ "one_handed_mace": 17179869186,
+ "plate_armor": 17179869188,
+ "thrown_obsolete": 17179869190,
+ "blacksmithing_recipe": 17179869193,
+ "two_handed_mace": 21474836482,
+ "buckler_obsolete": 21474836484,
+ "cooking_recipe": 21474836489,
+ "polearm": 25769803778,
+ "shield": 25769803780,
+ "alchemy_recipe": 25769803785,
+ "one_handed_sword": 30064771074,
+ "libram": 30064771076,
+ "first_aid_recipe": 30064771081,
+ "two_handed_sword": 34359738370,
+ "idol": 34359738372,
+ "enchanting_recipe": 34359738377,
+ "obsolete_weapon": 38654705666,
+ "totem": 38654705668,
+ "fishing_recipe": 38654705673,
+ "staff": 42949672962,
+ "one_handed_exotic": 47244640258,
+ "two_handed_exotic": 51539607554,
+ "fist_weapon": 55834574850,
+ "miscellaneous_weapon": 60129542146,
+ "dagger": 64424509442,
+ "thrown": 68719476738,
+ "spear": 73014444034,
+ "crossbow": 77309411330,
+ "wand": 81604378626,
+ "fishing_pole": 85899345922
+ }
+ },
+ "ItemFlag": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "no_pickup": 1,
+ "conjured": 2,
+ "lootable": 4,
+ "deprecated": 16,
+ "indestructible": 32,
+ "player_cast": 64,
+ "no_equip_cooldown": 128,
+ "int_bonus_instead": 256,
+ "wrapper": 512,
+ "ignore_bag_space": 1024,
+ "party_loot": 2048,
+ "charter": 8192,
+ "has_text": 16384,
+ "no_disenchant": 32768,
+ "real_duration": 65536,
+ "no_creator": 131072
+ }
+ },
+ "AllowedClass": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "all": 0,
+ "warrior": 1,
+ "paladin": 2,
+ "hunter": 4,
+ "rogue": 8,
+ "priest": 16,
+ "shaman": 64,
+ "mage": 128,
+ "warlock": 256,
+ "druid": 1024
+ }
+ },
+ "AllowedRace": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "all": 0,
+ "human": 1,
+ "orc": 2,
+ "dwarf": 4,
+ "night_elf": 8,
+ "undead": 16,
+ "tauren": 32,
+ "gnome": 64,
+ "troll": 128,
+ "goblin": 256
+ }
+ },
+ "ItemStat": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "stat_type", "type": "uint32" },
+ { "name": "value", "type": "int32" }
+ ]
+ },
+ "NpcTextUpdateEmote": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "delay", "type": "uint32" },
+ { "name": "emote", "type": "uint32" }
+ ]
+ },
+ "QuestItemRequirement": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ { "name": "item_count", "type": "uint32" },
+ { "name": "item_display_id", "type": "uint32" }
+ ]
+ },
+ "QuestItemReward": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "item", "type": "uint32" },
+ { "name": "item_count", "type": "uint32" }
+ ]
+ },
+ "QuestDetailsEmote": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "emote", "type": "uint32" },
+ { "name": "emote_delay", "type": "uint32" }
+ ]
+ },
+ "QuestCompletable": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_completable": 0,
+ "completeable": 3
+ }
+ },
+ "RaidTargetUpdateType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "partial": 0,
+ "full": 1
+ }
+ },
+ "RaidTargetIndex": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "unknown0": 0,
+ "unknown1": 1,
+ "unknown2": 2,
+ "unknown3": 3,
+ "unknown4": 4,
+ "unknown5": 5,
+ "unknown6": 6,
+ "unknown7": 7,
+ "unknown8": 8,
+ "request_icons": 255
+ }
+ },
+ "RaidTargetUpdate": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "index", "type": "RaidTargetIndex" },
+ { "name": "guid", "type": "uint64" }
+ ]
+ },
+ "RaidInfo": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "map", "type": "Map" },
+ { "name": "reset_time", "type": "uint32" },
+ { "name": "instance_id", "type": "uint32" }
+ ]
+ },
+ "FriendStatus": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "offline": 0,
+ "online": 1,
+ "afk": 2,
+ "unknown3": 3,
+ "dnd": 4
+ }
+ },
+ "Friend": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "status", "type": "FriendStatus" },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "status", "value": "offline" },
+ "fields": [
+ { "name": "area", "type": "Area" },
+ { "name": "level", "type": "uint32" },
+ { "name": "class", "type": "uint32" }
+ ]
+ }
+ ]
+ },
+ "GroupType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "normal": 0,
+ "raid": 1
+ }
+ },
+ "GroupListMember": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "name", "type": "CString" },
+ { "name": "guid", "type": "uint64" },
+ { "name": "is_online", "type": "uint8" },
+ { "name": "flags", "type": "uint8" }
+ ]
+ },
+ "GroupLootSetting": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "free_for_all": 0,
+ "round_robin": 1,
+ "master_loot": 2,
+ "group_loot": 3,
+ "need_before_greed": 4
+ }
+ },
+ "ItemQuality": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "poor": 0,
+ "normal": 1,
+ "uncommon": 2,
+ "rare": 3,
+ "epic": 4,
+ "legendary": 5,
+ "artifact": 6
+ }
+ },
+ "GroupUpdateFlags": {
+ "kind": "flags",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "status": 1,
+ "cur_hp": 2,
+ "max_hp": 4,
+ "power_type": 8,
+ "cur_power": 16,
+ "max_power": 32,
+ "level": 64,
+ "zone": 128,
+ "position": 256,
+ "auras": 512,
+ "auras_2": 1024,
+ "pet_guid": 2048,
+ "pet_name": 4096,
+ "pet_model_id": 8192,
+ "pet_cur_hp": 16384,
+ "pet_max_hp": 32768,
+ "pet_power_type": 65536,
+ "pet_cur_power": 131072,
+ "pet_max_power": 262144,
+ "pet_auras": 524288,
+ "pet_auras_2": 1048576,
+ "mode_offline": 268435456
+ }
+ },
+ "GroupMemberOnlineStatus": {
+ "kind": "flags",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "offline": 0,
+ "online": 1,
+ "pvp": 2,
+ "dead": 4,
+ "ghost": 8,
+ "pvp_ffa": 16,
+ "zone_out": 32,
+ "afk": 64,
+ "dnd": 128
+ }
+ },
+ "Power": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc::ChrClasses",
+ "cpp_type_name": "PowerType",
+ "underlying": "int32"
+ },
+ "WhoPlayer": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "name", "type": "CString" },
+ { "name": "guild", "type": "CString" },
+ { "name": "level", "type": "uint32" },
+ { "name": "class", "type": "uint32" },
+ { "name": "race", "type": "uint32" },
+ { "name": "area", "type": "Area" }
+ ]
+ },
+ "InitialSpell": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell_id", "type": "uint16" },
+ { "name": "unknown1", "type": "uint16" }
+ ]
+ },
+ "CooldownSpell": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell_id", "type": "uint16" },
+ { "name": "item_id", "type": "uint16" },
+ { "name": "spell_category", "type": "uint16" },
+ { "name": "cooldown", "type": "uint32" },
+ { "name": "category_cooldown", "type": "uint32" }
+ ]
+ },
+ "AuraType": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "bind_sight": 1,
+ "mod_possess": 2,
+ "periodic_damage": 3,
+ "dummy": 4,
+ "mod_confuse": 5,
+ "mod_charm": 6,
+ "mod_fear": 7,
+ "periodic_heal": 8,
+ "mod_attackspeed": 9,
+ "mod_threat": 10,
+ "mod_taunt": 11,
+ "mod_stun": 12,
+ "mod_damage_done": 13,
+ "mod_damage_taken": 14,
+ "damage_shield": 15,
+ "mod_stealth": 16,
+ "mod_stealth_detect": 17,
+ "mod_invisibility": 18,
+ "mod_invisibility_detection": 19,
+ "obs_mod_health": 20,
+ "obs_mod_mana": 21,
+ "mod_resistance": 22,
+ "periodic_trigger_spell": 23,
+ "periodic_energize": 24,
+ "mod_pacify": 25,
+ "mod_root": 26,
+ "mod_silence": 27,
+ "reflect_spells": 28,
+ "mod_stat": 29,
+ "mod_skill": 30,
+ "mod_increase_speed": 31,
+ "mod_increase_mounted_speed": 32,
+ "mod_decrease_speed": 33,
+ "mod_increase_health": 34,
+ "mod_increase_energy": 35,
+ "mod_shapeshift": 36,
+ "effect_immunity": 37,
+ "state_immunity": 38,
+ "school_immunity": 39,
+ "damage_immunity": 40,
+ "dispel_immunity": 41,
+ "proc_trigger_spell": 42,
+ "proc_trigger_damage": 43,
+ "track_creatures": 44,
+ "track_resources": 45,
+ "unknown46": 46,
+ "mod_parry_percent": 47,
+ "unknown48": 48,
+ "mod_dodge_percent": 49,
+ "mod_block_skill": 50,
+ "mod_block_percent": 51,
+ "mod_crit_percent": 52,
+ "periodic_leech": 53,
+ "mod_hit_chance": 54,
+ "mod_spell_hit_chance": 55,
+ "transform": 56,
+ "mod_spell_crit_chance": 57,
+ "mod_increase_swim_speed": 58,
+ "mod_damage_done_creature": 59,
+ "mod_pacify_silence": 60,
+ "mod_scale": 61,
+ "periodic_health_funnel": 62,
+ "periodic_mana_funnel": 63,
+ "periodic_mana_leech": 64,
+ "mod_casting_speed_not_stack": 65,
+ "feign_death": 66,
+ "mod_disarm": 67,
+ "mod_stalked": 68,
+ "school_absorb": 69,
+ "extra_attacks": 70,
+ "mod_spell_crit_chance_school": 71,
+ "mod_power_cost_school_pct": 72,
+ "mod_power_cost_school": 73,
+ "reflect_spells_school": 74,
+ "mod_language": 75,
+ "far_sight": 76,
+ "mechanic_immunity": 77,
+ "mounted": 78,
+ "mod_damage_percent_done": 79,
+ "mod_percent_stat": 80,
+ "split_damage_pct": 81,
+ "water_breathing": 82,
+ "mod_base_resistance": 83,
+ "mod_regen": 84,
+ "mod_power_regen": 85,
+ "channel_death_item": 86,
+ "mod_damage_percent_taken": 87,
+ "mod_health_regen_percent": 88,
+ "periodic_damage_percent": 89,
+ "mod_resist_chance": 90,
+ "mod_detect_range": 91,
+ "prevents_fleeing": 92,
+ "mod_unattackable": 93,
+ "interrupt_regen": 94,
+ "ghost": 95,
+ "spell_magnet": 96,
+ "mana_shield": 97,
+ "mod_skill_talent": 98,
+ "mod_attack_power": 99,
+ "auras_visible": 100,
+ "mod_resistance_pct": 101,
+ "mod_melee_attack_power_versus": 102,
+ "mod_total_threat": 103,
+ "water_walk": 104,
+ "feather_fall": 105,
+ "hover": 106,
+ "add_flat_modifier": 107,
+ "add_pct_modifier": 108,
+ "add_target_trigger": 109,
+ "mod_power_regen_percent": 110,
+ "add_caster_hit_trigger": 111,
+ "override_class_scripts": 112,
+ "mod_ranged_damage_taken": 113,
+ "mod_ranged_damage_taken_pct": 114,
+ "mod_healing": 115,
+ "mod_regen_during_combat": 116,
+ "mod_mechanic_resistance": 117,
+ "mod_healing_pct": 118,
+ "share_pet_tracking": 119,
+ "untrackable": 120,
+ "empathy": 121,
+ "mod_offhand_damage_pct": 122,
+ "mod_target_resistance": 123,
+ "mod_ranged_attack_power": 124,
+ "mod_melee_damage_taken": 125,
+ "mod_melee_damage_taken_pct": 126,
+ "ranged_attack_power_attacker_bonus": 127,
+ "mod_possess_pet": 128,
+ "mod_speed_always": 129,
+ "mod_mounted_speed_always": 130,
+ "mod_ranged_attack_power_versus": 131,
+ "mod_increase_energy_percent": 132,
+ "mod_increase_health_percent": 133,
+ "mod_mana_regen_interrupt": 134,
+ "mod_healing_done": 135,
+ "mod_healing_done_percent": 136,
+ "mod_total_stat_percentage": 137,
+ "mod_melee_haste": 138,
+ "force_reaction": 139,
+ "mod_ranged_haste": 140,
+ "mod_ranged_ammo_haste": 141,
+ "mod_base_resistance_pct": 142,
+ "mod_resistance_exclusive": 143,
+ "safe_fall": 144,
+ "charisma": 145,
+ "persuaded": 146,
+ "mechanic_immunity_mask": 147,
+ "retain_combo_points": 148,
+ "resist_pushback": 149,
+ "mod_shield_blockvalue_pct": 150,
+ "track_stealthed": 151,
+ "mod_detected_range": 152,
+ "split_damage_flat": 153,
+ "mod_stealth_level": 154,
+ "mod_water_breathing": 155,
+ "mod_reputation_gain": 156,
+ "pet_damage_multi": 157,
+ "mod_shield_blockvalue": 158,
+ "no_pvp_credit": 159,
+ "mod_aoe_avoidance": 160,
+ "mod_health_regen_in_combat": 161,
+ "power_burn_mana": 162,
+ "mod_crit_damage_bonus": 163,
+ "unknown164": 164,
+ "melee_attack_power_attacker_bonus": 165,
+ "mod_attack_power_pct": 166,
+ "mod_ranged_attack_power_pct": 167,
+ "mod_damage_done_versus": 168,
+ "mod_crit_percent_versus": 169,
+ "detect_amore": 170,
+ "mod_speed_not_stack": 171,
+ "mod_mounted_speed_not_stack": 172,
+ "allow_champion_spells": 173,
+ "mod_spell_damage_of_stat_percent": 174,
+ "mod_spell_healing_of_stat_percent": 175,
+ "spirit_of_redemption": 176,
+ "aoe_charm": 177,
+ "mod_debuff_resistance": 178,
+ "mod_attacker_spell_crit_chance": 179,
+ "mod_flat_spell_damage_versus": 180,
+ "mod_flat_spell_crit_damage_versus": 181,
+ "mod_resistance_of_stat_percent": 182,
+ "mod_critical_threat": 183,
+ "mod_attacker_melee_hit_chance": 184,
+ "mod_attacker_ranged_hit_chance": 185,
+ "mod_attacker_spell_hit_chance": 186,
+ "mod_attacker_melee_crit_chance": 187,
+ "mod_attacker_ranged_crit_chance": 188,
+ "mod_rating": 189,
+ "mod_faction_reputation_gain": 190,
+ "use_normal_movement_speed": 191
+ }
+ },
+ "SpellSchool": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "normal": 0,
+ "holy": 1,
+ "fire": 2,
+ "nature": 3,
+ "frost": 4,
+ "shadow": 5,
+ "arcane": 6
+ }
+ },
+ "AuraLog": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "aura_type", "type": "AuraType" },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "aura_type", "value": ["periodic_damage", "periodic_damage_percent"] },
+ "fields": [
+ { "name": "damage1", "type": "uint32" },
+ { "name": "school", "type": "SpellSchool" },
+ { "name": "absorbed", "type": "uint32" },
+ { "name": "resisted", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "aura_type", "value": ["periodic_heal", "obs_mod_health"] },
+ "fields": [
+ { "name": "damage2", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "aura_type", "value": ["obs_mod_mana", "periodic_energize"] },
+ "fields": [
+ { "name": "misc_value1", "type": "uint32" },
+ { "name": "damage3", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "aura_type", "value": "periodic_mana_leech" },
+ "fields": [
+ { "name": "misc_value2", "type": "uint32" },
+ { "name": "damage", "type": "uint32" },
+ { "name": "gain_multiplier", "type": "float" }
+ ]
+ }
+ ]
+ },
+ "SpellEffect": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "instakill": 1,
+ "school_damage": 2,
+ "dummy": 3,
+ "portal_teleport": 4,
+ "teleport_units": 5,
+ "apply_aura": 6,
+ "environmental_damage": 7,
+ "power_drain": 8,
+ "health_leech": 9,
+ "heal": 10,
+ "bind": 11,
+ "portal": 12,
+ "ritual_base": 13,
+ "ritual_specialize": 14,
+ "ritual_activate_portal": 15,
+ "quest_complete": 16,
+ "weapon_damage_noschool": 17,
+ "resurrect": 18,
+ "add_extra_attacks": 19,
+ "dodge": 20,
+ "evade": 21,
+ "parry": 22,
+ "block": 23,
+ "create_item": 24,
+ "weapon": 25,
+ "defense": 26,
+ "persistent_area_aura": 27,
+ "summon": 28,
+ "leap": 29,
+ "energize": 30,
+ "weapon_percent_damage": 31,
+ "trigger_missile": 32,
+ "open_lock": 33,
+ "summon_change_item": 34,
+ "apply_area_aura_party": 35,
+ "learn_spell": 36,
+ "spell_defense": 37,
+ "dispel": 38,
+ "language": 39,
+ "dual_wield": 40,
+ "summon_wild": 41,
+ "summon_guardian": 42,
+ "teleport_units_face_caster": 43,
+ "skill_step": 44,
+ "add_honor": 45,
+ "spawn": 46,
+ "trade_skill": 47,
+ "stealth": 48,
+ "detect": 49,
+ "trans_door": 50,
+ "force_critical_hit": 51,
+ "guarantee_hit": 52,
+ "enchant_item": 53,
+ "enchant_item_temporary": 54,
+ "tamecreature": 55,
+ "summon_pet": 56,
+ "learn_pet_spell": 57,
+ "weapon_damage": 58,
+ "open_lock_item": 59,
+ "proficiency": 60,
+ "send_event": 61,
+ "power_burn": 62,
+ "threat": 63,
+ "trigger_spell": 64,
+ "health_funnel": 65,
+ "power_funnel": 66,
+ "heal_max_health": 67,
+ "interrupt_cast": 68,
+ "distract": 69,
+ "pull": 70,
+ "pickpocket": 71,
+ "add_farsight": 72,
+ "summon_possessed": 73,
+ "summon_totem": 74,
+ "heal_mechanical": 75,
+ "summon_object_wild": 76,
+ "script_effect": 77,
+ "attack": 78,
+ "sanctuary": 79,
+ "add_combo_points": 80,
+ "create_house": 81,
+ "bind_sight": 82,
+ "duel": 83,
+ "stuck": 84,
+ "summon_player": 85,
+ "activate_object": 86,
+ "summon_totem_slot1": 87,
+ "summon_totem_slot2": 88,
+ "summon_totem_slot3": 89,
+ "summon_totem_slot4": 90,
+ "threat_all": 91,
+ "enchant_held_item": 92,
+ "summon_phantasm": 93,
+ "self_resurrect": 94,
+ "skinning": 95,
+ "charge": 96,
+ "summon_critter": 97,
+ "knock_back": 98,
+ "disenchant": 99,
+ "inebriate": 100,
+ "feed_pet": 101,
+ "dismiss_pet": 102,
+ "reputation": 103,
+ "summon_object_slot1": 104,
+ "summon_object_slot2": 105,
+ "summon_object_slot3": 106,
+ "summon_object_slot4": 107,
+ "dispel_mechanic": 108,
+ "summon_dead_pet": 109,
+ "destroy_all_totems": 110,
+ "durability_damage": 111,
+ "summon_demon": 112,
+ "resurrect_new": 113,
+ "attack_me": 114,
+ "durability_damage_pct": 115,
+ "skin_player_corpse": 116,
+ "spirit_heal": 117,
+ "skill": 118,
+ "apply_area_aura_pet": 119,
+ "teleport_graveyard": 120,
+ "normalized_weapon_dmg": 121,
+ "unknown122": 122,
+ "send_taxi": 123,
+ "player_pull": 124,
+ "modify_threat_percent": 125,
+ "unknown126": 126,
+ "unknown127": 127
+ }
+ },
+ "SpellLog": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "effect", "type": "SpellEffect" },
+ { "name": "amount_of_logs", "type": "uint32" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "power_drain" },
+ "fields": [
+ { "name": "target1", "type": "uint64" },
+ { "name": "amount", "type": "uint32" },
+ { "name": "power", "type": "uint32" },
+ { "name": "multiplier", "type": "float" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "effect", "value": ["heal", "heal_max_health"] },
+ "fields": [
+ { "name": "target2", "type": "uint64" },
+ { "name": "heal_amount", "type": "uint32" },
+ { "name": "heal_critical", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "energize" },
+ "fields": [
+ { "name": "target3", "type": "uint64" },
+ { "name": "energize_amount", "type": "uint32" },
+ { "name": "energize_power", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "add_extra_attacks" },
+ "fields": [
+ { "name": "target4", "type": "uint64" },
+ { "name": "extra_attacks", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "create_item" },
+ "fields": [
+ { "name": "item", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "interrupt_cast" },
+ "fields": [
+ { "name": "target5", "type": "uint64" },
+ { "name": "interrupted_spell", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "durability_damage" },
+ "fields": [
+ { "name": "target6", "type": "uint64" },
+ { "name": "item_to_damage", "type": "uint32" },
+ { "name": "unknown5", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "effect", "value": "feed_pet" },
+ "fields": [
+ { "name": "feed_pet_item", "type": "uint32" }
+ ]
+ },
+ {
+ "type": "group",
+ "when": { "op": "in", "field": "effect", "value": ["instakill", "resurrect", "dispel", "threat", "distract", "sanctuary", "threat_all", "dispel_mechanic", "resurrect_new", "attack_me", "skin_player_corpse", "modify_threat_percent", "unknown126", "open_lock", "open_lock_item", "dismiss_pet", "trans_door", "summon", "summon_pet", "summon_wild", "summon_guardian", "summon_totem_slot1", "summon_totem_slot2", "summon_totem_slot3", "summon_totem_slot4", "summon_possessed", "summon_totem", "summon_critter", "summon_object_wild", "summon_object_slot1", "summon_object_slot2", "summon_object_slot3", "summon_object_slot4", "summon_demon"] },
+ "fields": [
+ { "name": "target7", "type": "uint64" }
+ ]
+ }
+ ]
+ },
+ "SpellMissInfo": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "miss": 1,
+ "resist": 2,
+ "dodge": 3,
+ "parry": 4,
+ "block": 5,
+ "evade": 6,
+ "immune": 7,
+ "immune2": 8,
+ "deflect": 9,
+ "absorb": 10,
+ "reflect": 11
+ }
+ },
+ "SpellLogMiss": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "target", "type": "uint64" },
+ { "name": "miss_info", "type": "SpellMissInfo" }
+ ]
+ },
+ "SpellCooldownStatus": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "id", "type": "uint32" },
+ { "name": "cooldown_time", "type": "uint32" }
+ ]
+ },
+ "CastFlags": {
+ "kind": "flags",
+ "underlying": "uint16",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "hidden_combatlog": 1,
+ "unknown2": 2,
+ "unknown3": 4,
+ "unknown4": 8,
+ "unknown5": 16,
+ "ammo": 32,
+ "unknown7": 64,
+ "unknown8": 128,
+ "unknown9": 256
+ }
+ },
+ "SpellMiss": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "target", "type": "uint64" },
+ { "name": "miss_info", "type": "SpellMissInfo" }
+ ]
+ },
+ "TrainerSpellState": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "green": 0,
+ "red": 1,
+ "gray": 2
+ }
+ },
+ "TrainerSpell": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell", "type": "uint32" },
+ { "name": "state", "type": "TrainerSpellState" },
+ { "name": "spell_cost", "type": "uint32" },
+ { "name": "talent_point_cost", "type": "uint32" },
+ { "name": "first_rank", "type": "uint32" },
+ { "name": "required_level", "type": "uint8" },
+ { "name": "required_skill", "type": "uint32" },
+ { "name": "required_skill_value", "type": "uint32" },
+ { "name": "required_spells", "type": "uint32", "array": {"size": 3} }
+ ]
+ },
+ "TradeSlot": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "trade_slot_number", "type": "uint8" },
+ { "name": "item", "type": "uint32" },
+ { "name": "display_id", "type": "uint32" },
+ { "name": "stack_count", "type": "uint32" },
+ { "name": "wrapped", "type": "uint32" },
+ { "name": "gift_wrapper", "type": "uint64" },
+ { "name": "enchantment", "type": "uint32" },
+ { "name": "item_creator", "type": "uint64" },
+ { "name": "spell_charges", "type": "uint32" },
+ { "name": "item_suffix_factor", "type": "uint32" },
+ { "name": "item_random_properties_id", "type": "uint32" },
+ { "name": "lock_id", "type": "uint32" },
+ { "name": "max_durability", "type": "uint32" },
+ { "name": "durability", "type": "uint32" }
+ ]
+ },
+ "WorldState": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "state", "type": "uint32" },
+ { "name": "value", "type": "uint32" }
+ ]
+ },
+ "CreatureFamily": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint8"
+ },
+ "Character": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "guid", "type": "uint64" },
+ { "name": "name", "type": "CString" },
+ { "name": "race", "type": "Race" },
+ { "name": "class", "type": "Class" },
+ { "name": "gender", "type": "Gender" },
+ { "name": "skin", "type": "uint8" },
+ { "name": "face", "type": "uint8" },
+ { "name": "hair_style", "type": "uint8" },
+ { "name": "hair_color", "type": "uint8" },
+ { "name": "facial_hair", "type": "uint8" },
+ { "name": "level", "type": "uint8" },
+ { "name": "area", "type": "Area" },
+ { "name": "map", "type": "Map" },
+ { "name": "position", "type": "Vector3" },
+ { "name": "guild_id", "type": "uint32" },
+ { "name": "flags", "type": "CharacterFlags" },
+ { "name": "first_login", "type": "uint8" },
+ { "name": "pet_display_id", "type": "uint32" },
+ { "name": "pet_level", "type": "uint32" },
+ { "name": "pet_family", "type": "uint32" },
+ { "name": "equipment", "type": "CharacterGear", "array": {"size": 19} },
+ { "name": "first_bag_display_id", "type": "uint32" },
+ { "name": "first_bag_inventory_id", "type": "uint8" }
+ ]
+ },
+ "Language": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "Languages",
+ "underlying": "uint32"
+ },
+ "NpcTextUpdate": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "probability", "type": "float" },
+ { "name": "texts", "type": "CString", "array": {"size": 2} },
+ { "name": "language", "type": "Language" },
+ { "name": "emotes", "type": "NpcTextUpdateEmote", "array": {"size": 3} }
+ ]
+ },
+ "ItemDamageType": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "damage_minimum", "type": "float" },
+ { "name": "damage_maximum", "type": "float" },
+ { "name": "school", "type": "uint32" }
+ ]
+ },
+ "SpellTriggerType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "on_use": 0,
+ "on_equip": 1,
+ "chance_on_hit": 2
+ }
+ },
+ "ItemSpells": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "spell", "type": "uint32" },
+ { "name": "spell_trigger", "type": "uint32" },
+ { "name": "spell_charges", "type": "int32" },
+ { "name": "spell_cooldown", "type": "int32" },
+ { "name": "spell_category", "type": "uint32" },
+ { "name": "spell_category_cooldown", "type": "int32" }
+ ]
+ },
+ "Bonding": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "no_bind": 0,
+ "pick_up": 1,
+ "equip": 2,
+ "use": 3,
+ "quest_item": 4,
+ "quest_item1": 5
+ }
+ },
+ "PageTextMaterial": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint8"
+ },
+ "SheatheType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "main_hand": 1,
+ "off_hand": 2,
+ "large_weapon_left": 3,
+ "large_weapon_right": 4,
+ "hip_weapon_left": 5,
+ "hip_weapon_right": 6,
+ "shield": 7
+ }
+ },
+ "ItemSet": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint16"
+ },
+ "BagFamily": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "arrows": 1,
+ "bullets": 2,
+ "soul_shards": 3,
+ "unknown4": 4,
+ "unknown5": 5,
+ "herbs": 6,
+ "enchanting_supplies": 7,
+ "engineering_supplies": 8,
+ "keys": 9
+ }
+ },
+ "QuestObjective": {
+ "kind": "struct",
+ "cpp_namespace": "ember::protocol",
+ "fields": [
+ { "name": "creature_id", "type": "uint32" },
+ { "name": "kill_count", "type": "uint32" },
+ { "name": "required_item_id", "type": "uint32" },
+ { "name": "required_item_count", "type": "uint32" }
+ ]
+ },
+ "AuctionHouse": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint32"
+ },
+ "AuctionCommandAction": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "started": 0,
+ "removed": 1,
+ "bid_placed": 2
+ }
+ },
+ "AuctionCommandResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "err_inventory": 1,
+ "err_database": 2,
+ "err_not_enough_money": 3,
+ "err_item_not_found": 4,
+ "err_higher_bid": 5,
+ "err_bid_increment": 7,
+ "err_bid_own": 10,
+ "err_restricted_account": 13
+ }
+ },
+ "InventoryResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "cant_equip_level_i": 1,
+ "cant_equip_skill": 2,
+ "item_doesnt_go_to_slot": 3,
+ "bag_full": 4,
+ "nonempty_bag_over_other_bag": 5,
+ "cant_trade_equip_bags": 6,
+ "only_ammo_can_go_here": 7,
+ "no_required_proficiency": 8,
+ "no_equipment_slot_available": 9,
+ "you_can_never_use_that_item": 10,
+ "you_can_never_use_that_item2": 11,
+ "no_equipment_slot_available2": 12,
+ "cant_equip_with_twohanded": 13,
+ "cant_dual_wield": 14,
+ "item_doesnt_go_into_bag": 15,
+ "item_doesnt_go_into_bag2": 16,
+ "cant_carry_more_of_this": 17,
+ "no_equipment_slot_available3": 18,
+ "item_cant_stack": 19,
+ "item_cant_be_equipped": 20,
+ "items_cant_be_swapped": 21,
+ "slot_is_empty": 22,
+ "item_not_found": 23,
+ "cant_drop_soulbound": 24,
+ "out_of_range": 25,
+ "tried_to_split_more_than_count": 26,
+ "couldnt_split_items": 27,
+ "missing_reagent": 28,
+ "not_enough_money": 29,
+ "not_a_bag": 30,
+ "can_only_do_with_empty_bags": 31,
+ "dont_own_that_item": 32,
+ "can_equip_only1_quiver": 33,
+ "must_purchase_that_bag_slot": 34,
+ "too_far_away_from_bank": 35,
+ "item_locked": 36,
+ "you_are_stunned": 37,
+ "you_are_dead": 38,
+ "cant_do_right_now": 39,
+ "int_bag_error": 40,
+ "can_equip_only1_bolt": 41,
+ "can_equip_only1_ammopouch": 42,
+ "stackable_cant_be_wrapped": 43,
+ "equipped_cant_be_wrapped": 44,
+ "wrapped_cant_be_wrapped": 45,
+ "bound_cant_be_wrapped": 46,
+ "unique_cant_be_wrapped": 47,
+ "bags_cant_be_wrapped": 48,
+ "already_looted": 49,
+ "inventory_full": 50,
+ "bank_full": 51,
+ "item_is_currently_sold_out": 52,
+ "bag_full3": 53,
+ "item_not_found2": 54,
+ "item_cant_stack2": 55,
+ "bag_full4": 56,
+ "item_sold_out": 57,
+ "object_is_busy": 58,
+ "none": 59,
+ "not_in_combat": 60,
+ "not_while_disarmed": 61,
+ "bag_full6": 62,
+ "cant_equip_rank": 63,
+ "cant_equip_reputation": 64,
+ "too_many_special_bags": 65,
+ "loot_cant_loot_that_now": 66
+ }
+ },
+ "AuctionCommandResultTwo": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "err_inventory": 1,
+ "err_database": 2,
+ "err_not_enough_money": 3,
+ "err_item_not_found": 4,
+ "err_higher_bid": 5,
+ "err_bid_increment": 7,
+ "err_bid_own": 10,
+ "err_restricted_account": 13
+ }
+ },
+ "BattlefieldPortAction": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "leave_queue": 0,
+ "enter_battle": 1
+ }
+ },
+ "BattlegroundBracket": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "tens": 0,
+ "twenties": 1,
+ "thirties": 2,
+ "forties": 3,
+ "fifties": 4,
+ "sixty": 5
+ }
+ },
+ "Emote": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "cpp_type_name": "Emotes",
+ "underlying": "uint32"
+ },
+ "TextEmote": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "agree": 1,
+ "amaze": 2,
+ "angry": 3,
+ "apologize": 4,
+ "applaud": 5,
+ "bashful": 6,
+ "beckon": 7,
+ "beg": 8,
+ "bite": 9,
+ "bleed": 10,
+ "blink": 11,
+ "blush": 12,
+ "bonk": 13,
+ "bored": 14,
+ "bounce": 15,
+ "brb": 16,
+ "bow": 17,
+ "burp": 18,
+ "bye": 19,
+ "cackle": 20,
+ "cheer": 21,
+ "chicken": 22,
+ "chuckle": 23,
+ "clap": 24,
+ "confused": 25,
+ "congratulate": 26,
+ "cough": 27,
+ "cower": 28,
+ "crack": 29,
+ "cringe": 30,
+ "cry": 31,
+ "curious": 32,
+ "curtsey": 33,
+ "dance": 34,
+ "drink": 35,
+ "drool": 36,
+ "eat": 37,
+ "eye": 38,
+ "fart": 39,
+ "fidget": 40,
+ "flex": 41,
+ "frown": 42,
+ "gasp": 43,
+ "gaze": 44,
+ "giggle": 45,
+ "glare": 46,
+ "gloat": 47,
+ "greet": 48,
+ "grin": 49,
+ "groan": 50,
+ "grovel": 51,
+ "guffaw": 52,
+ "hail": 53,
+ "happy": 54,
+ "hello": 55,
+ "hug": 56,
+ "hungry": 57,
+ "kiss": 58,
+ "kneel": 59,
+ "laugh": 60,
+ "laydown": 61,
+ "massage": 62,
+ "moan": 63,
+ "moon": 64,
+ "mourn": 65,
+ "no": 66,
+ "nod": 67,
+ "nose_pick": 68,
+ "panic": 69,
+ "peer": 70,
+ "plead": 71,
+ "point": 72,
+ "poke": 73,
+ "pray": 74,
+ "roar": 75,
+ "rofl": 76,
+ "rude": 77,
+ "salute": 78,
+ "scratch": 79,
+ "sexy": 80,
+ "shake": 81,
+ "shout": 82,
+ "shrug": 83,
+ "shy": 84,
+ "sigh": 85,
+ "sit": 86,
+ "sleep": 87,
+ "snarl": 88,
+ "spit": 89,
+ "stare": 90,
+ "surprised": 91,
+ "surrender": 92,
+ "talk": 93,
+ "talk_ex": 94,
+ "talk_q": 95,
+ "tap": 96,
+ "thank": 97,
+ "threaten": 98,
+ "tired": 99,
+ "victory": 100,
+ "wave": 101,
+ "welcome": 102,
+ "whine": 103,
+ "whistle": 104,
+ "work": 105,
+ "yawn": 106,
+ "boggle": 107,
+ "calm": 108,
+ "cold": 109,
+ "comfort": 110,
+ "cuddle": 111,
+ "duck": 112,
+ "insult": 113,
+ "introduce": 114,
+ "jk": 115,
+ "lick": 116,
+ "listen": 117,
+ "lost": 118,
+ "mock": 119,
+ "ponder": 120,
+ "pounce": 121,
+ "praise": 122,
+ "purr": 123,
+ "puzzle": 124,
+ "raise": 125,
+ "ready": 126,
+ "shimmy": 127,
+ "shiver": 128,
+ "shoo": 129,
+ "slap": 130,
+ "smirk": 131,
+ "sniff": 132,
+ "snub": 133,
+ "soothe": 134,
+ "stink": 135,
+ "taunt": 136,
+ "tease": 137,
+ "thirsty": 138,
+ "veto": 139,
+ "snicker": 140,
+ "stand": 141,
+ "tickle": 142,
+ "violin": 143,
+ "smile": 163,
+ "rasp": 183,
+ "pity": 203,
+ "growl": 204,
+ "bark": 205,
+ "scared": 223,
+ "flop": 224,
+ "love": 225,
+ "moo": 226,
+ "commend": 243,
+ "train": 264,
+ "helpme": 303,
+ "incoming": 304,
+ "charge": 305,
+ "flee": 306,
+ "attack_my_target": 307,
+ "oom": 323,
+ "follow": 324,
+ "wait": 325,
+ "heal_me": 326,
+ "open_fire": 327,
+ "flirt": 328,
+ "joke": 329,
+ "golf_clap": 343,
+ "wink": 363,
+ "pat": 364
+ }
+ },
+ "ChatNotify": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "joined_notice": 0,
+ "left_notice": 1,
+ "you_joined_notice": 2,
+ "you_left_notice": 3,
+ "wrong_password_notice": 4,
+ "not_member_notice": 5,
+ "not_moderator_notice": 6,
+ "password_changed_notice": 7,
+ "owner_changed_notice": 8,
+ "player_not_found_notice": 9,
+ "not_owner_notice": 10,
+ "channel_owner_notice": 11,
+ "mode_change_notice": 12,
+ "announcements_on_notice": 13,
+ "announcements_off_notice": 14,
+ "moderation_on_notice": 15,
+ "moderation_off_notice": 16,
+ "muted_notice": 17,
+ "player_kicked_notice": 18,
+ "banned_notice": 19,
+ "player_banned_notice": 20,
+ "player_unbanned_notice": 21,
+ "player_not_banned_notice": 22,
+ "player_already_member_notice": 23,
+ "invite_notice": 24,
+ "invite_wrong_faction_notice": 25,
+ "wrong_faction_notice": 26,
+ "invalid_name_notice": 27,
+ "not_moderated_notice": 28,
+ "player_invited_notice": 29,
+ "player_invite_banned_notice": 30,
+ "throttled_notice": 31
+ }
+ },
+ "ServerMessageType": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "shutdown_time": 1,
+ "restart_time": 2,
+ "custom": 3,
+ "shutdown_cancelled": 4,
+ "restart_cancelled": 5
+ }
+ },
+ "CinematicSequenceId": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "goblin": 0,
+ "undead": 2,
+ "orc": 21,
+ "dwarf": 41,
+ "night_elf": 61,
+ "human": 81,
+ "gnome": 101,
+ "troll": 121,
+ "tauren": 141
+ }
+ },
+ "SheathState": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "unarmed": 0,
+ "melee": 1,
+ "ranged": 2
+ }
+ },
+ "AiReaction": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "alert": 0,
+ "friendly": 1,
+ "hostile": 2,
+ "afraid": 3,
+ "destroy": 4
+ }
+ },
+ "EnvironmentalDamageType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "exhausted": 0,
+ "drowning": 1,
+ "fall": 2,
+ "lava": 3,
+ "slime": 4,
+ "fire": 5
+ }
+ },
+ "LogFormat": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "default": 0,
+ "debug": 1
+ }
+ },
+ "DuelWinnerReason": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "won": 0,
+ "fled": 1
+ }
+ },
+ "ExperienceAwardType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "kill": 0,
+ "non_kill": 1
+ }
+ },
+ "GmTicketResponse": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_exist": 0,
+ "already_exist": 1,
+ "create_success": 2,
+ "create_error": 3,
+ "update_success": 4,
+ "update_error": 5,
+ "ticket_deleted": 9
+ }
+ },
+ "GmTicketStatus": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "db_error": 0,
+ "has_text": 6,
+ "default": 10
+ }
+ },
+ "GmTicketEscalationStatus": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "gmticket_assignedtogm_status_not_assigned": 0,
+ "gmticket_assignedtogm_status_assigned": 1,
+ "gmticket_assignedtogm_status_escalated": 2
+ }
+ },
+ "GmTicketQueueStatus": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "disabled": 0,
+ "enabled": 1
+ }
+ },
+ "GmTicketStatusResponse": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "updated": 1,
+ "closed": 2,
+ "survey": 3
+ }
+ },
+ "GuildEmblemResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "success": 0,
+ "invalid_tabard_colors": 1,
+ "no_guild": 2,
+ "not_guild_master": 3,
+ "not_enough_money": 4,
+ "no_message": 5
+ }
+ },
+ "GuildCommand": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "create": 0,
+ "invite": 1,
+ "quit": 3,
+ "founder": 14,
+ "unknown19": 19,
+ "unknown20": 20
+ }
+ },
+ "GuildCommandResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "player_no_more_in_guild": 0,
+ "guild_internal": 1,
+ "already_in_guild": 2,
+ "already_in_guild_s": 3,
+ "invited_to_guild": 4,
+ "already_invited_to_guild_s": 5,
+ "guild_name_invalid": 6,
+ "guild_name_exists_s": 7,
+ "guild_permissions_or_leader": 8,
+ "guild_player_not_in_guild": 9,
+ "guild_player_not_in_guild_s": 10,
+ "guild_player_not_found_s": 11,
+ "guild_not_allied": 12,
+ "guild_rank_too_high_s": 13,
+ "guild_rank_too_low_s": 14
+ }
+ },
+ "GuildEvent": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "promotion": 0,
+ "demotion": 1,
+ "motd": 2,
+ "joined": 3,
+ "left": 4,
+ "removed": 5,
+ "leader_is": 6,
+ "leader_changed": 7,
+ "disbanded": 8,
+ "tabard_changed": 9,
+ "unknown10": 10,
+ "roster_update": 11,
+ "signed_on": 12,
+ "signed_off": 13
+ }
+ },
+ "PetitionResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "already_signed": 1,
+ "already_in_guild": 2,
+ "cant_sign_own": 3,
+ "need_more": 4,
+ "not_server": 5
+ }
+ },
+ "BuybackSlot": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "slot1": 69,
+ "slot2": 70,
+ "slot3": 71,
+ "slot4": 72,
+ "slot5": 73,
+ "slot6": 74,
+ "slot7": 75,
+ "slot8": 76,
+ "slot9": 77,
+ "slot10": 78,
+ "slot11": 79,
+ "slot12": 80,
+ "slot13": 81
+ }
+ },
+ "ItemSlot": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "head": 0,
+ "neck": 1,
+ "shoulders": 2,
+ "shirt": 3,
+ "chest": 4,
+ "waist": 5,
+ "legs": 6,
+ "boots": 7,
+ "wrist": 8,
+ "hands": 9,
+ "ring1": 10,
+ "ring2": 11,
+ "trinket1": 12,
+ "trinket2": 13,
+ "back": 14,
+ "main_hand": 15,
+ "off_hand": 16,
+ "ranged_or_relic": 17,
+ "tabard": 18,
+ "bag1": 19,
+ "bag2": 20,
+ "bag3": 21,
+ "bag4": 22,
+ "inventory_0": 23,
+ "inventory_1": 24,
+ "inventory_2": 25,
+ "inventory_3": 26,
+ "inventory_4": 27,
+ "inventory_5": 28,
+ "inventory_6": 29,
+ "inventory_7": 30,
+ "inventory_8": 31,
+ "inventory_9": 32,
+ "inventory_10": 33,
+ "inventory_11": 34,
+ "inventory_12": 35,
+ "inventory_13": 36,
+ "inventory_14": 37,
+ "inventory_15": 38,
+ "bank_1": 39,
+ "bank_2": 40,
+ "bank_3": 41,
+ "bank_4": 42,
+ "bank_5": 43,
+ "bank_6": 44,
+ "bank_7": 45,
+ "bank_8": 46,
+ "bank_9": 47,
+ "bank_10": 48,
+ "bank_11": 49,
+ "bank_12": 50,
+ "bank_13": 51,
+ "bank_14": 52,
+ "bank_15": 53,
+ "bank_16": 54,
+ "bank_17": 55,
+ "bank_18": 56,
+ "bank_19": 57,
+ "bank_20": 58,
+ "bank_21": 59,
+ "bank_22": 60,
+ "bank_23": 61,
+ "bank_24": 62,
+ "bank_bag_slot_1": 63,
+ "bank_bag_slot_2": 64,
+ "bank_bag_slot_3": 65,
+ "bank_bag_slot_4": 66,
+ "bank_bag_slot_5": 67,
+ "bank_bag_slot_6": 68,
+ "vendor_buyback_1": 69,
+ "vendor_buyback_2": 70,
+ "vendor_buyback_3": 71,
+ "vendor_buyback_4": 72,
+ "vendor_buyback_5": 73,
+ "vendor_buyback_6": 74,
+ "vendor_buyback_7": 75,
+ "vendor_buyback_8": 76,
+ "vendor_buyback_9": 77,
+ "vendor_buyback_10": 78,
+ "vendor_buyback_11": 79,
+ "vendor_buyback_12": 80,
+ "keyring_1": 81,
+ "keyring_2": 82,
+ "keyring_3": 83,
+ "keyring_4": 84,
+ "keyring_5": 85,
+ "keyring_6": 86,
+ "keyring_7": 87,
+ "keyring_8": 88,
+ "keyring_9": 89,
+ "keyring_10": 90,
+ "keyring_11": 91,
+ "keyring_12": 92,
+ "keyring_13": 93,
+ "keyring_14": 94,
+ "keyring_15": 95,
+ "keyring_16": 96,
+ "keyring_17": 97,
+ "keyring_18": 98,
+ "keyring_19": 99,
+ "keyring_20": 100,
+ "keyring_21": 101,
+ "keyring_22": 102,
+ "keyring_23": 103,
+ "keyring_24": 104,
+ "keyring_25": 105,
+ "keyring_26": 106,
+ "keyring_27": 107,
+ "keyring_28": 108,
+ "keyring_29": 109,
+ "keyring_30": 110,
+ "keyring_31": 111,
+ "keyring_32": 112
+ }
+ },
+ "BuyBankSlotResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "failed_too_many": 0,
+ "insufficient_funds": 1,
+ "not_banker": 2,
+ "ok": 3
+ }
+ },
+ "BuyResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "cant_find_item": 0,
+ "item_already_sold": 1,
+ "not_enough_money": 2,
+ "seller_dont_like_you": 4,
+ "distance_too_far": 5,
+ "item_sold_out": 7,
+ "cant_carry_more": 8,
+ "rank_require": 11,
+ "reputation_require": 12
+ }
+ },
+ "NewItemSource": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "looted": 0,
+ "from_npc": 1
+ }
+ },
+ "NewItemCreationType": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "received": 0,
+ "created": 1
+ }
+ },
+ "NewItemChatAlert": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "do_not_show": 0,
+ "show": 1
+ }
+ },
+ "SellItemResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "cant_find_item": 1,
+ "cant_sell_item": 2,
+ "cant_find_vendor": 3,
+ "you_dont_own_that_item": 4,
+ "unk": 5,
+ "only_empty_bag": 6
+ }
+ },
+ "ItemClass": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc::ItemClass",
+ "cpp_type_name": "Class",
+ "underlying": "int32"
+ },
+ "AccountDataType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "global_config_cache": 0,
+ "per_character_config_cache": 1,
+ "global_bindings_cache": 2,
+ "per_character_bindings_cache": 3,
+ "global_macros_cache": 4,
+ "per_character_macros_cache": 5,
+ "per_character_layout_cache": 6,
+ "per_character_chat_cache": 7,
+ "num_account_data_types": 8
+ }
+ },
+ "LogoutResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "success": 0,
+ "failure_in_combat": 1,
+ "failure_frozen_by_gm": 2,
+ "failure_jumping_or_falling": 3
+ }
+ },
+ "LogoutSpeed": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "delayed": 0,
+ "instant": 1
+ }
+ },
+ "RollVote": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "pass": 0,
+ "need": 1,
+ "greed": 2
+ }
+ },
+ "MailAction": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "send": 0,
+ "money_taken": 1,
+ "item_taken": 2,
+ "returned_to_sender": 3,
+ "deleted": 4,
+ "made_permanent": 5
+ }
+ },
+ "MailResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "err_equip_error": 1,
+ "err_cannot_send_to_self": 2,
+ "err_not_enough_money": 3,
+ "err_recipient_not_found": 4,
+ "err_not_your_team": 5,
+ "err_internal_error": 6,
+ "err_disabled_for_trial_acc": 14,
+ "err_recipient_cap_reached": 15,
+ "err_cant_send_wrapped_cod": 16,
+ "err_mail_and_chat_suspended": 17,
+ "err_too_many_attachments": 18,
+ "err_mail_attachment_invalid": 19
+ }
+ },
+ "MailResultTwo": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "err_equip_error": 1,
+ "err_cannot_send_to_self": 2,
+ "err_not_enough_money": 3,
+ "err_recipient_not_found": 4,
+ "err_not_your_team": 5,
+ "err_internal_error": 6,
+ "err_disabled_for_trial_acc": 14,
+ "err_recipient_cap_reached": 15,
+ "err_cant_send_wrapped_cod": 16,
+ "err_mail_and_chat_suspended": 17,
+ "err_too_many_attachments": 18,
+ "err_mail_attachment_invalid": 19
+ }
+ },
+ "MeetingStoneFailure": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "meetingstone_fail_partyleader": 1,
+ "meetingstone_fail_full_group": 2,
+ "meetingstone_fail_raid_group": 3
+ }
+ },
+ "MeetingStoneStatus": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "leave_queue": 0,
+ "joined_queue": 1,
+ "party_member_left_lfg": 2,
+ "party_member_removed_party_removed": 3,
+ "looking_for_new_party_in_queue": 4,
+ "none": 5
+ }
+ },
+ "DismountResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_mounted": 1,
+ "ok": 3
+ }
+ },
+ "MountResult": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "invalid_mountee": 0,
+ "too_far_away": 1,
+ "already_mounted": 2,
+ "not_mountable": 3,
+ "not_your_pet": 4,
+ "other": 5,
+ "looting": 6,
+ "race_cant_mount": 7,
+ "shapeshifted": 8,
+ "forced_dismount": 9,
+ "ok": 10
+ }
+ },
+ "ActivateTaxiReply": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "ok": 0,
+ "unspecified_server_error": 1,
+ "no_such_path": 2,
+ "not_enough_money": 3,
+ "too_far_away": 4,
+ "no_vendor_nearby": 5,
+ "not_visited": 6,
+ "player_busy": 7,
+ "player_already_mounted": 8,
+ "player_shape_shifted": 9,
+ "player_moving": 10,
+ "same_node": 11,
+ "not_standing": 12
+ }
+ },
+ "TransferAbortReason": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "none": 0,
+ "is_full": 1,
+ "not_found": 2,
+ "too_many_instances": 3,
+ "zone_is_in_combat": 5
+ }
+ },
+ "PetFeedback": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "pet_dead": 1,
+ "nothing_to_attack": 2,
+ "cant_attack_target": 3,
+ "no_path_to": 4
+ }
+ },
+ "PetTalkReason": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "special_spell": 0,
+ "attack": 1
+ }
+ },
+ "SpellCastResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "affecting_combat": 0,
+ "already_at_full_health": 1,
+ "already_at_full_mana": 2,
+ "already_being_tamed": 3,
+ "already_have_charm": 4,
+ "already_have_summon": 5,
+ "already_open": 6,
+ "more_powerful_spell_active": 7,
+ "bad_implicit_targets": 9,
+ "bad_targets": 10,
+ "cant_be_charmed": 11,
+ "cant_be_disenchanted": 12,
+ "cant_be_prospected": 13,
+ "cant_cast_on_tapped": 14,
+ "cant_duel_while_invisible": 15,
+ "cant_duel_while_stealthed": 16,
+ "cant_too_close_to_enemy": 17,
+ "cant_do_that_yet": 18,
+ "caster_dead": 19,
+ "charmed": 20,
+ "chest_in_use": 21,
+ "confused": 22,
+ "dont_report": 23,
+ "equipped_item": 24,
+ "equipped_item_class": 25,
+ "equipped_item_class_mainhand": 26,
+ "equipped_item_class_offhand": 27,
+ "error": 28,
+ "fizzle": 29,
+ "fleeing": 30,
+ "food_lowlevel": 31,
+ "highlevel": 32,
+ "immune": 34,
+ "interrupted": 35,
+ "interrupted_combat": 36,
+ "item_already_enchanted": 37,
+ "item_gone": 38,
+ "enchant_not_existing_item": 39,
+ "item_not_ready": 40,
+ "level_requirement": 41,
+ "line_of_sight": 42,
+ "lowlevel": 43,
+ "skill_not_high_enough": 44,
+ "mainhand_empty": 45,
+ "moving": 46,
+ "need_ammo": 47,
+ "need_requires_something": 48,
+ "need_exotic_ammo": 49,
+ "nopath": 50,
+ "not_behind": 51,
+ "not_fishable": 52,
+ "not_here": 53,
+ "not_infront": 54,
+ "not_in_control": 55,
+ "not_known": 56,
+ "not_mounted": 57,
+ "not_on_taxi": 58,
+ "not_on_transport": 59,
+ "not_ready": 60,
+ "not_shapeshift": 61,
+ "not_standing": 62,
+ "not_tradeable": 63,
+ "not_trading": 64,
+ "not_unsheathed": 65,
+ "not_while_ghost": 66,
+ "no_ammo": 67,
+ "no_charges_remain": 68,
+ "no_champion": 69,
+ "no_combo_points": 70,
+ "no_dueling": 71,
+ "no_endurance": 72,
+ "no_fish": 73,
+ "no_items_while_shapeshifted": 74,
+ "no_mounts_allowed": 75,
+ "no_pet": 76,
+ "no_power": 77,
+ "nothing_to_dispel": 78,
+ "nothing_to_steal": 79,
+ "only_abovewater": 80,
+ "only_daytime": 81,
+ "only_indoors": 82,
+ "only_mounted": 83,
+ "only_nighttime": 84,
+ "only_outdoors": 85,
+ "only_shapeshift": 86,
+ "only_stealthed": 87,
+ "only_underwater": 88,
+ "out_of_range": 89,
+ "pacified": 90,
+ "possessed": 91,
+ "requires_area": 93,
+ "requires_spell_focus": 94,
+ "rooted": 95,
+ "silenced": 96,
+ "spell_in_progress": 97,
+ "spell_learned": 98,
+ "spell_unavailable": 99,
+ "stunned": 100,
+ "targets_dead": 101,
+ "target_affecting_combat": 102,
+ "target_aurastate": 103,
+ "target_dueling": 104,
+ "target_enemy": 105,
+ "target_enraged": 106,
+ "target_friendly": 107,
+ "target_in_combat": 108,
+ "target_is_player": 109,
+ "target_not_dead": 110,
+ "target_not_in_party": 111,
+ "target_not_looted": 112,
+ "target_not_player": 113,
+ "target_no_pockets": 114,
+ "target_no_weapons": 115,
+ "target_unskinnable": 116,
+ "thirst_satiated": 117,
+ "too_close": 118,
+ "too_many_of_item": 119,
+ "training_points": 121,
+ "try_again": 122,
+ "unit_not_behind": 123,
+ "unit_not_infront": 124,
+ "wrong_pet_food": 125,
+ "not_while_fatigued": 126,
+ "target_not_in_instance": 127,
+ "not_while_trading": 128,
+ "target_not_in_raid": 129,
+ "disenchant_while_looting": 130,
+ "prospect_while_looting": 131,
+ "target_freeforall": 133,
+ "no_edible_corpses": 134,
+ "only_battlegrounds": 135,
+ "target_not_ghost": 136,
+ "too_many_skills": 137,
+ "cant_use_new_item": 138,
+ "wrong_weather": 139,
+ "damage_immune": 140,
+ "prevented_by_mechanic": 141,
+ "play_time": 142,
+ "reputation": 143,
+ "min_skill": 144,
+ "unknown": 145
+ }
+ },
+ "PetTameFailureReason": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "invalid_creature": 1,
+ "too_many": 2,
+ "creature_already_owned": 3,
+ "not_tameable": 4,
+ "another_summon_active": 5,
+ "units_cant_tame": 6,
+ "no_pet_available": 7,
+ "internal_error": 8,
+ "too_high_level": 9,
+ "dead": 10,
+ "not_dead": 11,
+ "unknown_error": 12
+ }
+ },
+ "StableResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "err_money": 1,
+ "err_stable": 6,
+ "success_stable": 8,
+ "success_unstable": 9,
+ "success_buy_slot": 10
+ }
+ },
+ "PvpRank": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "no_rank": 0,
+ "pariah": 1,
+ "outlaw": 2,
+ "exiled": 3,
+ "dishonored": 4,
+ "rank1": 5,
+ "rank2": 6,
+ "rank3": 7,
+ "rank4": 8,
+ "rank5": 9,
+ "rank6": 10,
+ "rank7": 11,
+ "rank8": 12,
+ "rank9": 13,
+ "rank10": 14,
+ "rank11": 15,
+ "rank12": 16,
+ "rank13": 17,
+ "rank14": 18,
+ "faction_leader": 19
+ }
+ },
+ "CorpseQueryResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_found": 0,
+ "found": 1
+ }
+ },
+ "QuestPartyMessage": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "sharing_quest": 0,
+ "cant_take_quest": 1,
+ "accept_quest": 2,
+ "decline_quest": 3,
+ "too_far": 4,
+ "busy": 5,
+ "log_full": 6,
+ "have_quest": 7,
+ "finish_quest": 8
+ }
+ },
+ "InstanceResetFailedReason": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "general": 0,
+ "offline": 1,
+ "zoning": 2,
+ "silently": 3
+ }
+ },
+ "RaidInstanceMessage": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "warning_hours": 1,
+ "warning_min": 2,
+ "warning_min_soon": 3,
+ "welcome": 4
+ }
+ },
+ "UnitStandState": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "stand": 0,
+ "sit": 1,
+ "sit_chair": 2,
+ "sleep": 3,
+ "sit_low_chair": 4,
+ "sit_medium_chair": 5,
+ "sit_high_chair": 6,
+ "dead": 7,
+ "kneel": 8,
+ "custom": 9
+ }
+ },
+ "FriendResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "db_error": 0,
+ "list_full": 1,
+ "online": 2,
+ "offline": 3,
+ "not_found": 4,
+ "removed": 5,
+ "added_online": 6,
+ "added_offline": 7,
+ "already": 8,
+ "self": 9,
+ "enemy": 10,
+ "ignore_full": 11,
+ "ignore_self": 12,
+ "ignore_not_found": 13,
+ "ignore_already": 14,
+ "ignore_added": 15,
+ "ignore_removed": 16,
+ "ignore_ambiguous": 17,
+ "mute_full": 18,
+ "mute_self": 19,
+ "mute_not_found": 20,
+ "mute_already": 21,
+ "mute_added": 22,
+ "mute_removed": 23,
+ "mute_ambiguous": 24,
+ "unknown19": 25,
+ "unknown20": 26
+ }
+ },
+ "BgTypeId": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "not_eligible": 0,
+ "queued_for_av": 1,
+ "queued_for_wsg": 2,
+ "queued_for_ab": 3,
+ "remove_from_queue": 4294967294
+ }
+ },
+ "PartyOperation": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "invite": 0,
+ "leave": 2
+ }
+ },
+ "PartyResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "success": 0,
+ "bad_player_name": 1,
+ "target_not_in_group": 2,
+ "group_full": 3,
+ "already_in_group": 4,
+ "not_in_group": 5,
+ "not_leader": 6,
+ "player_wrong_faction": 7,
+ "ignoring_you": 8
+ }
+ },
+ "RaidGroupError": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "required": 1,
+ "full": 2
+ }
+ },
+ "FarSightOperation": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "remove": 0,
+ "add": 1
+ }
+ },
+ "Talent": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint32"
+ },
+ "SimpleSpellCastResult": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "success": 0,
+ "failure": 2
+ }
+ },
+ "CastFailureReason": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "affecting_combat": 0,
+ "already_at_full_health": 1,
+ "already_at_full_power": 2,
+ "already_being_tamed": 3,
+ "already_have_charm": 4,
+ "already_have_summon": 5,
+ "already_open": 6,
+ "aura_bounced": 7,
+ "autotrack_interrupted": 8,
+ "bad_implicit_targets": 9,
+ "bad_targets": 10,
+ "cant_be_charmed": 11,
+ "cant_be_disenchanted": 12,
+ "cant_be_prospected": 13,
+ "cant_cast_on_tapped": 14,
+ "cant_duel_while_invisible": 15,
+ "cant_duel_while_stealthed": 16,
+ "cant_stealth": 17,
+ "caster_aurastate": 18,
+ "caster_dead": 19,
+ "charmed": 20,
+ "chest_in_use": 21,
+ "confused": 22,
+ "dont_report": 23,
+ "equipped_item": 24,
+ "equipped_item_class": 25,
+ "equipped_item_class_mainhand": 26,
+ "equipped_item_class_offhand": 27,
+ "error": 28,
+ "fizzle": 29,
+ "fleeing": 30,
+ "food_lowlevel": 31,
+ "highlevel": 32,
+ "hunger_satiated": 33,
+ "immune": 34,
+ "interrupted": 35,
+ "interrupted_combat": 36,
+ "item_already_enchanted": 37,
+ "item_gone": 38,
+ "item_not_found": 39,
+ "item_not_ready": 40,
+ "level_requirement": 41,
+ "line_of_sight": 42,
+ "lowlevel": 43,
+ "low_castlevel": 44,
+ "mainhand_empty": 45,
+ "moving": 46,
+ "need_ammo": 47,
+ "need_ammo_pouch": 48,
+ "need_exotic_ammo": 49,
+ "nopath": 50,
+ "not_behind": 51,
+ "not_fishable": 52,
+ "not_here": 53,
+ "not_infront": 54,
+ "not_in_control": 55,
+ "not_known": 56,
+ "not_mounted": 57,
+ "not_on_taxi": 58,
+ "not_on_transport": 59,
+ "not_ready": 60,
+ "not_shapeshift": 61,
+ "not_standing": 62,
+ "not_tradeable": 63,
+ "not_trading": 64,
+ "not_unsheathed": 65,
+ "not_while_ghost": 66,
+ "no_ammo": 67,
+ "no_charges_remain": 68,
+ "no_champion": 69,
+ "no_combo_points": 70,
+ "no_dueling": 71,
+ "no_endurance": 72,
+ "no_fish": 73,
+ "no_items_while_shapeshifted": 74,
+ "no_mounts_allowed": 75,
+ "no_pet": 76,
+ "no_power": 77,
+ "nothing_to_dispel": 78,
+ "nothing_to_steal": 79,
+ "only_abovewater": 80,
+ "only_daytime": 81,
+ "only_indoors": 82,
+ "only_mounted": 83,
+ "only_nighttime": 84,
+ "only_outdoors": 85,
+ "only_shapeshift": 86,
+ "only_stealthed": 87,
+ "only_underwater": 88,
+ "out_of_range": 89,
+ "pacified": 90,
+ "possessed": 91,
+ "reagents": 92,
+ "requires_area": 93,
+ "requires_spell_focus": 94,
+ "rooted": 95,
+ "silenced": 96,
+ "spell_in_progress": 97,
+ "spell_learned": 98,
+ "spell_unavailable": 99,
+ "stunned": 100,
+ "targets_dead": 101,
+ "target_affecting_combat": 102,
+ "target_aurastate": 103,
+ "target_dueling": 104,
+ "target_enemy": 105,
+ "target_enraged": 106,
+ "target_friendly": 107,
+ "target_in_combat": 108,
+ "target_is_player": 109,
+ "target_not_dead": 110,
+ "target_not_in_party": 111,
+ "target_not_looted": 112,
+ "target_not_player": 113,
+ "target_no_pockets": 114,
+ "target_no_weapons": 115,
+ "target_unskinnable": 116,
+ "thirst_satiated": 117,
+ "too_close": 118,
+ "too_many_of_item": 119,
+ "totems": 120,
+ "training_points": 121,
+ "try_again": 122,
+ "unit_not_behind": 123,
+ "unit_not_infront": 124,
+ "wrong_pet_food": 125,
+ "not_while_fatigued": 126,
+ "target_not_in_instance": 127,
+ "not_while_trading": 128,
+ "target_not_in_raid": 129,
+ "disenchant_while_looting": 130,
+ "prospect_while_looting": 131,
+ "prospect_need_more": 132,
+ "target_freeforall": 133,
+ "no_edible_corpses": 134,
+ "only_battlegrounds": 135,
+ "target_not_ghost": 136,
+ "too_many_skills": 137,
+ "transform_unusable": 138,
+ "wrong_weather": 139,
+ "damage_immune": 140,
+ "prevented_by_mechanic": 141,
+ "play_time": 142,
+ "reputation": 143,
+ "min_skill": 144,
+ "unknown": 145
+ }
+ },
+ "TimerType": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "fatigue": 0,
+ "breath": 1,
+ "feign_death": 2,
+ "environmental": 3
+ }
+ },
+ "TrainingFailureReason": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "unavailable": 0,
+ "not_enough_money": 1,
+ "not_enough_skill": 2
+ }
+ },
+ "TradeStatus": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "busy": 0,
+ "begin_trade": 1,
+ "open_window": 2,
+ "trade_canceled": 3,
+ "trade_accept": 4,
+ "busy_2": 5,
+ "no_target": 6,
+ "back_to_trade": 7,
+ "trade_complete": 8,
+ "trade_rejected": 9,
+ "target_to_far": 10,
+ "wrong_faction": 11,
+ "close_window": 12,
+ "unknown_13": 13,
+ "ignore_you": 14,
+ "you_stunned": 15,
+ "target_stunned": 16,
+ "you_dead": 17,
+ "target_dead": 18,
+ "you_logout": 19,
+ "target_logout": 20,
+ "trial_account": 21,
+ "only_conjured": 22,
+ "not_on_taplist": 23
+ }
+ },
+ "WeatherType": {
+ "kind": "enum_class",
+ "underlying": "uint32",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "fine": 0,
+ "rain": 1,
+ "snow": 2,
+ "storm": 3
+ }
+ },
+ "WeatherChangeType": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "cpp_namespace": "ember::protocol",
+ "values": {
+ "smooth": 0,
+ "instant": 1
+ }
}
}
}
diff --git a/schemas/world/types.schema.json b/schemas/world/types.schema.json
index e41c83642..003f064fc 100644
--- a/schemas/world/types.schema.json
+++ b/schemas/world/types.schema.json
@@ -64,7 +64,7 @@
"required": ["kind", "underlying", "values"],
"additionalProperties": false,
"properties": {
- "kind": { "const": "enum" },
+ "kind": { "enum": ["enum", "enum_class"] },
"underlying": { "$ref": "#/$defs/primitive" },
"values": { "$ref": "#/$defs/values" },
"cpp_namespace": { "$ref": "#/$defs/cpp_namespace" }
@@ -93,13 +93,22 @@
},
"external_type": {
"type": "object",
- "description": "Escape hatch: the type is defined in hand-written C++. protogen won't generate a header for it, but packet code can reference it — the generator emits the given include path and qualifies the name with cpp_namespace (if set). The user is responsible for overloading stream operators.",
+ "description": "Escape hatch: the type is defined in hand-written C++. When `underlying` is set, the external behaves as a named alias for that primitive — the generated struct holds the underlying integer and streams it directly. Without `underlying`, the user provides their own stream operator overloads.",
"required": ["kind", "include"],
"additionalProperties": false,
"properties": {
"kind": { "const": "external" },
- "include": { "type": "string", "description": "Header path used when emitting #include <...>" },
- "cpp_namespace": { "$ref": "#/$defs/cpp_namespace" }
+ "include": { "type": "string", "description": "Header path used when emitting #include <...>. Ignored when the external is used via `underlying` as a primitive alias — no external header is needed for a raw int." },
+ "cpp_namespace": { "$ref": "#/$defs/cpp_namespace" },
+ "cpp_type_name": {
+ "type": "string",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_:]*$",
+ "description": "C++ type name to emit — overrides the schema key. Use this to name a nested enum like 'ItemClass::Class' from a DBC header."
+ },
+ "underlying": {
+ "$ref": "#/$defs/primitive",
+ "description": "Makes the external an alias for this primitive. Fields that reference the external by `type` take the primitive as their member type and stream it directly (e.g. a `Map` field becomes `std::uint32_t map;`). Fields that reference it via `as` take the external's C++ type as their member type and the generator inserts `static_cast` between the wire primitive and the external — the inner-DBC-enum pattern."
+ }
}
},
"string_type": {
@@ -127,7 +136,8 @@
"items": {
"oneOf": [
{ "$ref": "#/$defs/field" },
- { "$ref": "#/$defs/group" }
+ { "$ref": "#/$defs/group" },
+ { "$ref": "#/$defs/if_chain" }
]
},
"minItems": 1,
@@ -138,6 +148,7 @@
"properties": {
"name": { "type": "string" },
"type": { "$ref": "#/$defs/field_type" },
+ "as": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
"when": { "$ref": "#/$defs/condition" },
"array": { "$ref": "#/$defs/array" }
},
@@ -148,12 +159,14 @@
"type": "object",
"properties": {
"size": { "type": "integer", "minimum": 1 },
- "count_field": { "type": "string" }
+ "count_field": { "type": "string" },
+ "until_end": { "const": true }
},
"additionalProperties": false,
"oneOf": [
- { "required": ["size"], "not": { "required": ["count_field"] } },
- { "required": ["count_field"], "not": { "required": ["size"] } }
+ { "required": ["size"], "not": { "anyOf": [ { "required": ["count_field"] }, { "required": ["until_end"] } ] } },
+ { "required": ["count_field"], "not": { "anyOf": [ { "required": ["size"] }, { "required": ["until_end"] } ] } },
+ { "required": ["until_end"], "not": { "anyOf": [ { "required": ["size"] }, { "required": ["count_field"] } ] } }
]
},
"group": {
@@ -166,6 +179,28 @@
"required": ["type", "fields"],
"additionalProperties": false
},
+ "if_chain": {
+ "type": "object",
+ "properties": {
+ "type": { "const": "if_chain" },
+ "branches": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "required": ["when", "fields"],
+ "additionalProperties": false,
+ "properties": {
+ "when": { "$ref": "#/$defs/condition" },
+ "fields": { "$ref": "#/$defs/fields" }
+ }
+ }
+ },
+ "else": { "$ref": "#/$defs/fields" }
+ },
+ "required": ["type", "branches"],
+ "additionalProperties": false
+ },
"value_ref": {
"type": "object",
"properties": {
diff --git a/src/libs/protocol/include/protocol/Packets.h b/src/libs/protocol/include/protocol/Packets.h
index a3524d7da..012b2b5eb 100644
--- a/src/libs/protocol/include/protocol/Packets.h
+++ b/src/libs/protocol/include/protocol/Packets.h
@@ -35,7 +35,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -86,7 +85,6 @@ using smsg_weather = ServerPacket;
using smsg_channel_notify = ServerPacket;
using msg_move_set_facing_s = ServerPacket;
-using smsg_messagechat = ServerPacket;
using smsg_trigger_cinematic = ServerPacket;
using smsg_standstate_update = ServerPacket;
using smsg_notification = ServerPacket;
diff --git a/src/libs/protocol/include/protocol/server/MessageChat.h b/src/libs/protocol/include/protocol/server/MessageChat.h
index eb766e4f3..a574c5f2a 100644
--- a/src/libs/protocol/include/protocol/server/MessageChat.h
+++ b/src/libs/protocol/include/protocol/server/MessageChat.h
@@ -1,76 +1 @@
-/*
- * Copyright (c) 2026 Ember
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#pragma once
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace ember::protocol::server {
-
-struct MessageChat final {
- ChatType type;
- std::uint32_t language;
- std::string message;
- std::uint64_t speech_bubble_attr;
- std::uint64_t chat_name_attr;
- std::string channel_name;
- std::uint32_t player_rank;
- std::uint64_t player_guid;
- std::string monster_name;
- PlayerChatTag player_tag;
-
- StreamResult read_from_stream(le_stream auto& stream) {
- stream >> type;
- stream >> language;
-
- if(type == SAY || type == YELL || type == PARTY) {
- stream >> speech_bubble_attr;
- stream >> chat_name_attr;
- } else if(type == CHANNEL) {
- stream >> spark::io::prefixed_null_terminated(channel_name);
- stream >> player_rank;
- stream >> player_guid;
- }
-
- stream >> spark::io::prefixed_null_terminated(message);
- stream >> player_tag;
- return stream? StreamResult::success : StreamResult::failed;
- }
-
- StreamResult write_to_stream(le_stream auto& stream) const {
- stream << type;
- stream << language;
-
- if(type == MONSTER_WHISPER) {
- stream << monster_name;
- stream << std::uint64_t(0);
- } else if(type == SAY || type == YELL || type == PARTY) {
- stream << speech_bubble_attr;
- stream << chat_name_attr;
- } else if(type == WHISPER) {
- //stream << destination;
- } else if(type == CHANNEL) {
- stream << spark::io::null_terminated(channel_name);
- stream << player_rank;
- stream << player_guid;
- } else {
- stream << player_guid;
- }
-
- stream << spark::io::prefixed_null_terminated(message);
- stream << player_tag;
- return stream? StreamResult::success : StreamResult::failed;
- }
-};
-
-} // server, protocol, ember
+#include
\ No newline at end of file
diff --git a/src/realm/states/WorldEnter.cpp b/src/realm/states/WorldEnter.cpp
index 4b588c366..afcbbea67 100644
--- a/src/realm/states/WorldEnter.cpp
+++ b/src/realm/states/WorldEnter.cpp
@@ -22,6 +22,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -59,7 +60,7 @@ void initiate_player_login(ClientContext& ctx, const PlayerLogin& event) {
state_ctx.character_id = event.character_id_;
protocol::smsg_trigger_cinematic cinematic;
- cinematic->sequence_id = protocol::CinematicSequence::human;
+ cinematic->sequence_id = 84; // temp
ctx.send(cinematic);
protocol::smsg_login_verify_world verify_world;
@@ -93,10 +94,10 @@ void initiate_player_login(ClientContext& ctx, const PlayerLogin& event) {
protocol::smsg_messagechat motd;
motd->language = 0;
- motd->type = protocol::server::SYSTEM;
+ motd->type = protocol::ChatType::system;
motd->message = "Welcome to a hacked together Ember test.";
motd->player_guid = 0;
- motd->player_tag = protocol::server::TAG_NONE;
+ motd->player_tag = protocol::PlayerChatTag::tag_none;
ctx.send(motd);
}
@@ -407,7 +408,7 @@ void handle_messagechat(ClientContext& ctx) {
response->message = packet->message;
response->language = 0; // universal, we don't have any learned skills in this test
response->player_guid = packed_guid;
- response->player_tag = protocol::server::TAG_GM;
+ response->player_tag = protocol::PlayerChatTag::tag_gm;
if(packet->type == protocol::client::CHANNEL) {
response->channel_name = packet->destination;
@@ -561,10 +562,10 @@ void log_msg(ClientContext& ctx, const LogRedirect& event) {
protocol::smsg_messagechat msg;
msg->language = 0;
- msg->type = protocol::server::SYSTEM;
+ msg->type = protocol::ChatType::system;
msg->message = event.message;
msg->player_guid = 0;
- msg->player_tag = protocol::server::TAG_NONE;
+ msg->player_tag = protocol::PlayerChatTag::tag_none;
ctx.send(msg);
}
@@ -578,16 +579,16 @@ void system_msg(ClientContext& ctx, const SystemMessage& event) {
msg->language = 0;
if(event.type == SystemMessage::Type::whisper) {
- msg->type = protocol::server::MONSTER_WHISPER;
- msg->monster_name = "System";
+ msg->type = protocol::ChatType::monster_whisper;
+ msg->channel_name = "System";
msg->message = event.message;
} else {
- msg->type = protocol::server::SYSTEM;
+ msg->type = protocol::ChatType::system;
msg->message = std::format("[SERVER] {}", event.message);
}
msg->player_guid = 0;
- msg->player_tag = protocol::server::TAG_NONE;
+ msg->player_tag = protocol::PlayerChatTag::tag_none;
ctx.send(msg);
}
diff --git a/src/tools/protogen/Generator.cpp b/src/tools/protogen/Generator.cpp
index d93bf1b53..d7e454b09 100644
--- a/src/tools/protogen/Generator.cpp
+++ b/src/tools/protogen/Generator.cpp
@@ -23,6 +23,12 @@
namespace ember::protogen {
+enum class Dir {
+ Read,
+ Write,
+ Both
+};
+
struct WalkState {
std::vector members;
std::set includes;
@@ -30,6 +36,9 @@ struct WalkState {
std::vector write_ops;
int read_tab = 2;
int write_tab = 2;
+ // Monotonically increasing so the loop variables and temporaries we
+ // synthesise don't collide with sibling loops / casts in the same scope.
+ int temp_counter = 0;
};
void walk(const jsoncons::json& fields, const TypeRegistry& reg, WalkState& state,
@@ -59,6 +68,26 @@ std::string kind_of(const jsoncons::json& def) {
return def["kind"].as();
}
+// A field whose `type` is an external carrying an `underlying` primitive
+// and which has no `as` cast is just a named alias — effectively `using
+// Map = std::uint32_t`. The generator treats such fields as the primitive
+// everywhere (member type, stream ops, includes, scope for conditions),
+// so the external's name is purely schematic and doesn't leak into the
+// C++ output. Externals used via `as` (inner-DBC-enum pattern) keep the
+// external's C++ type — that path goes through `emit_scalar_stream_op`'s
+// as-cast branch.
+std::string effective_field_type(const jsoncons::json& field, const TypeRegistry& reg) {
+ const auto type = field["type"].as();
+ if(field.contains("as")) {
+ return type;
+ }
+ const auto* def = reg.find(type);
+ if(def && kind_of(*def) == "external" && def->contains("underlying")) {
+ return (*def)["underlying"].as();
+ }
+ return type;
+}
+
void add_type_include(const std::string& type, const TypeRegistry& reg, std::set& out) {
if(is_primitive(type)) {
return;
@@ -74,7 +103,7 @@ void add_type_include(const std::string& type, const TypeRegistry& reg, std::set
const auto kind = kind_of(*def);
- if(kind == "enum" || kind == "flags" || kind == "struct") {
+ if(is_enum_kind(kind) || kind == "flags" || kind == "struct") {
out.emplace(std::format("generated/types/{}.h", type));
} else if(kind == "external") {
out.emplace((*def)["include"].as());
@@ -105,14 +134,20 @@ std::string cpp_type_name(const std::string& type, const TypeRegistry& reg) {
return "std::string";
}
+ // External types may override the emitted name with `cpp_type_name`
+ // (useful for qualified names like `ItemClass::Class` from a DBC
+ // header where the schema key must stay a plain identifier).
+ const auto leaf = def->contains("cpp_type_name")
+ ? (*def)["cpp_type_name"].as() : type;
+
if(def->contains("cpp_namespace")) {
- return std::format("{}::{}", (*def)["cpp_namespace"].as(), type);
+ return std::format("{}::{}", (*def)["cpp_namespace"].as(), leaf);
}
- return type;
+ return leaf;
}
-std::string string_adaptor_expr(const jsoncons::json& type_def, std::string_view expr) {
+std::string string_adaptor_expr(const jsoncons::json& type_def, std::string_view expr, Dir dir) {
const auto encoding = type_def["encoding"].as();
if(encoding == "null_terminated") {
@@ -121,13 +156,14 @@ std::string string_adaptor_expr(const jsoncons::json& type_def, std::string_view
const auto length_type = type_def["length_type"].as();
const auto length_cpp = cpp_type_for_primitive(length_type);
+ std::string_view qualifier = (dir == Dir::Write)? "const " : "";
if(encoding == "prefixed") {
- return std::format("spark::io::prefixed({})", length_cpp, expr);
+ return std::format("spark::io::prefixed<{}std::string, {}>({})", qualifier, length_cpp, expr);
}
if(encoding == "prefixed_null_terminated") {
- return std::format("spark::io::prefixed_null_terminated({})", length_cpp, expr);
+ return std::format("spark::io::prefixed_null_terminated<{}std::string, {}>({})", qualifier, length_cpp, expr);
}
throw std::runtime_error(
@@ -233,21 +269,64 @@ std::string cpp_element_type(const std::string& type, const TypeRegistry& reg) {
return cpp_type_name(type, reg);
}
-// emits stream ops for a single scalar value - writes to both read_ops and write_ops
+// Emits stream ops for a single scalar value. `dir` controls which of
+// `read_ops` / `write_ops` are appended to — helpers that build their own
+// loops (e.g. until_end, which has asymmetric read vs write) use Read /
+// Write and drive each side separately.
void emit_scalar_stream_op(const std::string& name, const std::string& type,
+ const std::string& as_type,
const TypeRegistry& reg, WalkState& state,
- std::string_view prefix) {
+ std::string_view prefix, Dir dir = Dir::Both) {
const auto qualified = std::format("{}{}", prefix, name);
+ const bool do_read = dir != Dir::Write;
+ const bool do_write = dir != Dir::Read;
+
+ // `as` cast: the wire type is primitive (enforced by validator) and the
+ // user-visible type is an enum/flags with the same underlying. Read goes
+ // via a temporary so we don't trigger the enum/flags stream overload
+ // (which would read the enum's native width, ignoring the cast). The
+ // temp name comes off `temp_counter` because `name` may be an lvalue
+ // expression like `foo.back()` that isn't a valid identifier.
+ if(!as_type.empty()) {
+ const auto wire_cpp = cpp_type_for_primitive(type);
+ const auto semantic_cpp = cpp_type_name(as_type, reg);
+
+ if(do_read) {
+ const auto raw_name = std::format("raw_{}", state.temp_counter++);
+ state.read_ops.emplace_back(std::format(
+ "{0}{1} {2};", indent(state.read_tab), wire_cpp, raw_name
+ ));
+ state.read_ops.emplace_back(std::format(
+ "{0}stream >> {1};", indent(state.read_tab), raw_name
+ ));
+ state.read_ops.emplace_back(std::format(
+ "{0}{1} = static_cast<{2}>({3});",
+ indent(state.read_tab), qualified, semantic_cpp, raw_name
+ ));
+ }
- if(is_primitive(type)) {
- state.read_ops.emplace_back(
- std::format("{}stream >> {};", indent(state.read_tab), qualified)
- );
+ if(do_write) {
+ state.write_ops.emplace_back(std::format(
+ "{}stream << static_cast<{}>({});",
+ indent(state.write_tab), wire_cpp, qualified
+ ));
+ }
- state.write_ops.emplace_back(
- std::format("{}stream << {};", indent(state.write_tab), qualified)
- );
+ add_type_include(as_type, reg, state.includes);
+ return;
+ }
+ if(is_primitive(type)) {
+ if(do_read) {
+ state.read_ops.emplace_back(
+ std::format("{}stream >> {};", indent(state.read_tab), qualified)
+ );
+ }
+ if(do_write) {
+ state.write_ops.emplace_back(
+ std::format("{}stream << {};", indent(state.write_tab), qualified)
+ );
+ }
return;
}
@@ -261,29 +340,73 @@ void emit_scalar_stream_op(const std::string& name, const std::string& type,
const auto kind = kind_of(*def);
- if(kind == "enum" || kind == "flags" || kind == "external") {
- state.read_ops.emplace_back(
- std::format("{}stream >> {};", indent(state.read_tab), qualified)
- );
-
- state.write_ops.emplace_back(
- std::format("{}stream << {};", indent(state.write_tab), qualified)
- );
+ if(is_enum_kind(kind) || kind == "flags") {
+ if(do_read) {
+ state.read_ops.emplace_back(
+ std::format("{}stream >> {};", indent(state.read_tab), qualified)
+ );
+ }
+ if(do_write) {
+ state.write_ops.emplace_back(
+ std::format("{}stream << {};", indent(state.write_tab), qualified)
+ );
+ }
+ return;
+ }
+ if(kind == "external") {
+ // Plain external: the user provides `operator>>` / `operator<<`.
+ // The alias case (external with `underlying`, referenced via
+ // `type` rather than `as`) is handled upstream — the effective
+ // type has already been substituted with the underlying primitive
+ // by the time emit gets here, so this branch sees only the
+ // hand-overloaded externals like PackedGuid.
+ if(do_read) {
+ state.read_ops.emplace_back(
+ std::format("{}stream >> {};", indent(state.read_tab), qualified)
+ );
+ }
+ if(do_write) {
+ state.write_ops.emplace_back(
+ std::format("{}stream << {};", indent(state.write_tab), qualified)
+ );
+ }
return;
}
if(kind == "string") {
- const auto adaptor = string_adaptor_expr(*def, qualified);
- state.read_ops.emplace_back(std::format("{}stream >> {};", indent(state.read_tab), adaptor));
- state.write_ops.emplace_back(std::format("{}stream << {};", indent(state.write_tab), adaptor));
+ if(do_read) {
+ const auto adaptor = string_adaptor_expr(*def, qualified, Dir::Read);
+ state.read_ops.emplace_back(std::format("{}stream >> {};", indent(state.read_tab), adaptor));
+ }
+
+ if(do_write) {
+ const auto adaptor = string_adaptor_expr(*def, qualified, Dir::Write);
+ state.write_ops.emplace_back(std::format("{}stream << {};", indent(state.write_tab), adaptor));
+ }
+
state.includes.insert("spark/buffers/StringAdaptors.h");
return;
}
if(kind == "struct") {
+ // Structs expand into per-field stream ops on both sides; there's
+ // no asymmetry to worry about, so Dir::Both is the natural choice.
+ // Callers that need one side only are emitting loops with a visible
+ // loop variable, so a struct field inside means visiting that
+ // variable's members — which must happen in both directions anyway
+ // for symmetric read/write. We honour the flag by walking the
+ // struct's fields and stripping the unwanted vector afterwards.
+ const auto read_before = state.read_ops.size();
+ const auto write_before = state.write_ops.size();
std::vector nested_scope;
walk((*def)["fields"], reg, state, nested_scope, qualified + ".");
+ if(!do_read) {
+ state.read_ops.resize(read_before);
+ }
+ if(!do_write) {
+ state.write_ops.resize(write_before);
+ }
return;
}
@@ -292,27 +415,107 @@ void emit_scalar_stream_op(const std::string& name, const std::string& type,
);
}
+// True when `stream >> arr` / `stream << arr` compiles for std::array
+// via the built-in arithmetic / iterable stream overloads. Struct and string
+// element types don't qualify — they need explicit per-element loops.
+bool has_whole_array_stream_op(const std::string& type, const std::string& as_type,
+ const TypeRegistry& reg) {
+ if(!as_type.empty()) {
+ return false; // every element needs a cast, so we always loop
+ }
+
+ if(is_primitive(type)) {
+ return true;
+ }
+
+ const auto* def = reg.find(type);
+
+ if(!def) {
+ return false;
+ }
+
+ const auto kind = kind_of(*def);
+ return is_enum_kind(kind) || kind == "flags" || kind == "external";
+}
+
void emit_stream_op(const jsoncons::json& field, const std::string& type,
const TypeRegistry& reg, WalkState& state, const std::string& prefix) {
const auto name = field["name"].as();
+ const std::string as_type =
+ field.contains("as") ? field["as"].as() : std::string();
if(!field.contains("array")) {
- emit_scalar_stream_op(name, type, reg, state, prefix);
+ emit_scalar_stream_op(name, type, as_type, reg, state, prefix);
return;
}
const auto& arr = field["array"];
const auto qualified = prefix + name;
- // fixed-size arrays - rely on the stream overloads for std::array
if(arr.contains("size")) {
- state.read_ops.emplace_back(std::format("{}stream >> {};", indent(state.read_tab), qualified));
- state.write_ops.emplace_back(std::format("{}stream << {};", indent(state.write_tab), qualified));
+ // Primitives/enums/flags have a whole-array stream operator — fall
+ // back to that for compactness. Anything else (struct / string /
+ // `as`-cast element) needs a visible loop so the per-element ops
+ // fire for each slot.
+ if(has_whole_array_stream_op(type, as_type, reg)) {
+ state.read_ops.emplace_back(std::format("{}stream >> {};", indent(state.read_tab), qualified));
+ state.write_ops.emplace_back(std::format("{}stream << {};", indent(state.write_tab), qualified));
+ state.includes.insert("array");
+ return;
+ }
+
state.includes.insert("array");
+ state.read_ops.emplace_back(
+ std::format("{}for(auto& e : {}) {{", indent(state.read_tab), qualified)
+ );
+ state.write_ops.emplace_back(
+ std::format("{}for(const auto& e : {}) {{", indent(state.write_tab), qualified)
+ );
+ ++state.read_tab;
+ ++state.write_tab;
+ emit_scalar_stream_op("e", type, as_type, reg, state, std::string());
+ --state.read_tab;
+ --state.write_tab;
+ state.read_ops.emplace_back(std::format("{}}}", indent(state.read_tab)));
+ state.write_ops.emplace_back(std::format("{}}}", indent(state.write_tab)));
return;
}
- // vector with size held in preceding field
+ // Unbounded: read until the stream is drained. Per-iteration error
+ // check so a malformed payload is surfaced immediately rather than
+ // after a possibly-unbounded loop. Writing just emits the elements —
+ // the receiver's loop will stop when the stream's out of data.
+ if(arr.contains("until_end")) {
+ state.includes.emplace("vector");
+
+ state.read_ops.emplace_back(
+ std::format("{}while(!stream.empty()) {{", indent(state.read_tab))
+ );
+ ++state.read_tab;
+ state.read_ops.emplace_back(
+ std::format("{}{}.emplace_back();", indent(state.read_tab), qualified)
+ );
+ emit_scalar_stream_op(
+ std::format("{}.back()", qualified), type, as_type,
+ reg, state, std::string(), Dir::Read
+ );
+ state.read_ops.emplace_back(
+ std::format("{}if(!stream) return StreamResult::failed;", indent(state.read_tab))
+ );
+ --state.read_tab;
+ state.read_ops.emplace_back(std::format("{}}}", indent(state.read_tab)));
+
+ state.write_ops.emplace_back(
+ std::format("{}for(const auto& e : {}) {{", indent(state.write_tab), qualified)
+ );
+ ++state.write_tab;
+ emit_scalar_stream_op("e", type, as_type, reg, state, std::string(), Dir::Write);
+ --state.write_tab;
+ state.write_ops.emplace_back(std::format("{}}}", indent(state.write_tab)));
+ return;
+ }
+
+ // Count-prefixed vector: size held in a preceding field.
const auto count_field = arr["count_field"].as();
const auto qualified_count = prefix + count_field;
state.includes.emplace("vector");
@@ -331,7 +534,7 @@ void emit_stream_op(const jsoncons::json& field, const std::string& type,
++state.read_tab;
++state.write_tab;
- emit_scalar_stream_op("e", type, reg, state, std::string());
+ emit_scalar_stream_op("e", type, as_type, reg, state, std::string());
--state.read_tab;
--state.write_tab;
@@ -341,8 +544,14 @@ void emit_stream_op(const jsoncons::json& field, const std::string& type,
std::string member_decl(const jsoncons::json& field, const TypeRegistry& reg) {
const auto name = field["name"].as();
- const auto type = field["type"].as();
- const auto elem = cpp_element_type(type, reg);
+ // The declared member type follows the schema's user-facing intent:
+ // - `as` cast wins (the field is exposed as its semantic enum/flags).
+ // - Otherwise use the effective type, which unwraps alias-externals
+ // to the underlying primitive so record-ref DBC types become a
+ // plain `std::uint32_t` instead of the DBC struct.
+ const auto declared_type = field.contains("as")
+ ? field["as"].as() : effective_field_type(field, reg);
+ const auto elem = cpp_element_type(declared_type, reg);
if(field.contains("array")) {
const auto& arr = field["array"];
@@ -351,22 +560,33 @@ std::string member_decl(const jsoncons::json& field, const TypeRegistry& reg) {
const auto sz = arr["size"].as();
return std::format("\tstd::array<{}, {}> {}{{}};", elem, sz, name);
}
+ // count_field and until_end both produce a dynamically-sized vector.
return std::format("\tstd::vector<{}> {};", elem, name);
}
return std::format("\t{} {};", elem, name);
}
+void emit_branch_body(const jsoncons::json& branch_fields, const TypeRegistry& reg,
+ WalkState& state, std::vector& scope,
+ const std::string& prefix) {
+ const auto outer_size = scope.size();
+ walk(branch_fields, reg, state, scope, prefix);
+ scope.resize(outer_size);
+}
+
void walk(const jsoncons::json& fields, const TypeRegistry& reg, WalkState& state,
std::vector& scope, const std::string& prefix) {
const bool emit_members = prefix.empty();
bool first = true;
- bool prev_is_group = false;
+ bool prev_is_block = false;
for(const auto& field : fields.array_range()) {
const auto type = field["type"].as();
const bool current_is_group = (type == "group");
- const bool need_blank = !first && (prev_is_group || current_is_group);
+ const bool current_is_if_chain = (type == "if_chain");
+ const bool current_is_block = current_is_group || current_is_if_chain;
+ const bool need_blank = !first && (prev_is_block || current_is_block);
if(need_blank) {
state.read_ops.emplace_back("");
@@ -397,12 +617,7 @@ void walk(const jsoncons::json& fields, const TypeRegistry& reg, WalkState& stat
++state.write_tab;
}
- // group-local field names must not leak past the closing brace,
- // so they can't be referenced by later scope lookups
- // (e.g. in a sibling group's `when` expression)
- const auto outer_size = scope.size();
- walk(field["fields"], reg, state, scope, prefix);
- scope.resize(outer_size);
+ emit_branch_body(field["fields"], reg, state, scope, prefix);
--state.read_tab;
@@ -419,24 +634,83 @@ void walk(const jsoncons::json& fields, const TypeRegistry& reg, WalkState& stat
std::format("{}}}", indent(state.write_tab))
);
}
+ } else if(current_is_if_chain) {
+ // Emit `if(A) { ... } else if(B) { ... } else { ... }` so the
+ // branches read as one cascade rather than a soup of unrelated
+ // ifs. The trailing `}` for each intermediate branch is on the
+ // same line as the next `else if`, matching hand-written style.
+ const auto& branches = field["branches"];
+ std::size_t idx = 0;
+ const std::size_t branch_count = branches.size();
+
+ for(const auto& branch : branches.array_range()) {
+ const auto cond = render_condition(branch["when"], reg, prefix, scope);
+ const std::string_view prefix_word = (idx == 0) ? "if" : "else if";
+
+ state.read_ops .emplace_back(std::format(
+ "{}{}({}) {{", indent(state.read_tab), prefix_word, cond
+ ));
+ state.write_ops.emplace_back(std::format(
+ "{}{}({}) {{", indent(state.write_tab), prefix_word, cond
+ ));
+
+ ++state.read_tab;
+ ++state.write_tab;
+ emit_branch_body(branch["fields"], reg, state, scope, prefix);
+ --state.read_tab;
+ --state.write_tab;
+
+ const bool last_in_chain = (idx + 1 == branch_count) && !field.contains("else");
+ state.read_ops .emplace_back(std::format(
+ "{}{}", indent(state.read_tab), last_in_chain ? "}" : "}"
+ ));
+ state.write_ops.emplace_back(std::format(
+ "{}{}", indent(state.write_tab), last_in_chain ? "}" : "}"
+ ));
+ ++idx;
+ }
+
+ if(field.contains("else")) {
+ state.read_ops .emplace_back(std::format("{}else {{", indent(state.read_tab)));
+ state.write_ops.emplace_back(std::format("{}else {{", indent(state.write_tab)));
+ ++state.read_tab;
+ ++state.write_tab;
+ emit_branch_body(field["else"], reg, state, scope, prefix);
+ --state.read_tab;
+ --state.write_tab;
+ state.read_ops .emplace_back(std::format("{}}}", indent(state.read_tab)));
+ state.write_ops.emplace_back(std::format("{}}}", indent(state.write_tab)));
+ }
} else {
- scope.emplace_back(field["name"].as(), type);
- add_type_include(type, reg, state.includes);
+ // Scope entry carries the semantic (`as`-cast) type so that
+ // condition RHS names resolve against the enum, not the wire
+ // primitive. For plain external-with-underlying aliases the
+ // effective type is the underlying primitive — condition
+ // values stay integer literals as expected.
+ const auto effective = effective_field_type(field, reg);
+ const auto semantic_type = field.contains("as")
+ ? field["as"].as() : effective;
+ scope.emplace_back(field["name"].as(), semantic_type);
+ add_type_include(effective, reg, state.includes);
+
+ if(field.contains("as")) {
+ add_type_include(field["as"].as(), reg, state.includes);
+ }
if(emit_members) {
state.members.emplace_back(member_decl(field, reg));
- const auto* def = reg.find(type);
+ const auto* def = reg.find(semantic_type);
if(def && kind_of(*def) == "string") {
state.includes.emplace("string");
}
}
- emit_stream_op(field, type, reg, state, prefix);
+ emit_stream_op(field, effective, reg, state, prefix);
}
first = false;
- prev_is_group = current_is_group;
+ prev_is_block = current_is_block;
}
}
@@ -521,7 +795,23 @@ void collect_struct_members(const jsoncons::json& fields, const TypeRegistry& re
continue;
}
- const auto elem = cpp_element_type(type, reg);
+ if(type == "if_chain") {
+ for(const auto& branch : field["branches"].array_range()) {
+ collect_struct_members(branch["fields"], reg, out, includes);
+ }
+ if(field.contains("else")) {
+ collect_struct_members(field["else"], reg, out, includes);
+ }
+ continue;
+ }
+
+ // Members expose the `as`-cast (semantic) type when present;
+ // otherwise the effective type (unwrapping alias-externals to
+ // their underlying primitive).
+ const auto effective = effective_field_type(field, reg);
+ const auto declared_type = field.contains("as")
+ ? field["as"].as() : effective;
+ const auto elem = cpp_element_type(declared_type, reg);
std::string decl_type;
std::string suffix;
@@ -534,6 +824,7 @@ void collect_struct_members(const jsoncons::json& fields, const TypeRegistry& re
suffix = "{}";
includes.emplace("array");
} else {
+ // count_field and until_end both map to vector.
decl_type = std::format("std::vector<{}>", elem);
includes.emplace("vector");
}
@@ -547,20 +838,28 @@ void collect_struct_members(const jsoncons::json& fields, const TypeRegistry& re
entry["suffix"] = suffix;
out.push_back(std::move(entry));
- if(is_primitive(type)) {
- includes.emplace("cstdint");
- continue;
- }
-
- const auto* def = reg.find(type);
- const auto kind = kind_of(*def);
-
- if(kind == "string") {
- includes.emplace("string");
- } else if(kind == "external") {
- includes.emplace((*def)["include"].as());
- } else {
- includes.emplace(std::format("generated/types/{}.h", type));
+ // Includes for both the wire primitive and any `as` semantic type.
+ const auto register_include_for = [&](const std::string& ty) {
+ if(is_primitive(ty)) {
+ includes.emplace("cstdint");
+ return;
+ }
+ const auto* def = reg.find(ty);
+ if(!def) {
+ return;
+ }
+ const auto kind = kind_of(*def);
+ if(kind == "string") {
+ includes.emplace("string");
+ } else if(kind == "external") {
+ includes.emplace((*def)["include"].as());
+ } else {
+ includes.emplace(std::format("generated/types/{}.h", ty));
+ }
+ };
+ register_include_for(effective);
+ if(field.contains("as")) {
+ register_include_for(field["as"].as());
}
}
}
@@ -587,8 +886,9 @@ std::vector generate_type_headers(const TypeRegistry& reg, const
data["namespace"] = header_namespace(def);
data["year"] = year;
- if(kind == "enum" || kind == "flags") {
+ if(is_enum_kind(kind) || kind == "flags") {
data["underlying"] = cpp_type_for_primitive(def["underlying"].as());
+ data["is_class"] = (kind == "enum_class");
auto values = nlohmann::json::array();
@@ -598,8 +898,8 @@ std::vector generate_type_headers(const TypeRegistry& reg, const
v["value"] = pair.value().as();
values.emplace_back(std::move(v));
}
-
- if(kind == "enum") { // ensure enumerators are sorted numerically (0 .. n)
+
+ if(is_enum_kind(kind)) { // ensure enumerators are sorted numerically (0 .. n)
std::sort(values.begin(), values.end(), [](auto& lhs, auto& rhs) {
return rhs["value"] > lhs["value"];
});
diff --git a/src/tools/protogen/TypeUtils.h b/src/tools/protogen/TypeUtils.h
index a7a512e40..28c70cacf 100644
--- a/src/tools/protogen/TypeUtils.h
+++ b/src/tools/protogen/TypeUtils.h
@@ -24,4 +24,11 @@ extern const std::unordered_map;
void validate_condition(const jsoncons::json& cond, const Scope& scope,
const TypeRegistry& types, std::string_view context);
-void validate_array(const jsoncons::json& array, const std::string& field_type,
+void validate_array(const jsoncons::json& array, const std::string& /*field_type*/,
const std::string& field_name, const Scope& scope,
- const TypeRegistry& types, std::string_view context) {
- if(array.contains("size")) {
- if(is_primitive(field_type)) {
- return;
- }
-
- const auto* def = types.find(field_type);
-
- if(!def) {
- return; // unknown-type error already emitted by the field type check
- }
-
- const auto kind = (*def)["kind"].as();
-
- if(kind != "enum" && kind != "flags") {
- throw std::runtime_error(std::format(
- "{}: fixed-size array '{}' of type '{}' (kind '{}') is not supported; "
- "only primitive, enum, or flags element types are permitted",
- context, field_name, field_type, kind
- ));
- }
-
+ const TypeRegistry& /*types*/, std::string_view context) {
+ // Fixed-size arrays of any kind (primitive, enum/flags, struct, string)
+ // are allowed — the generator emits an element-by-element loop for the
+ // kinds that don't have a whole-array stream overload.
+ if(array.contains("size") || array.contains("until_end")) {
return;
}
@@ -65,6 +48,64 @@ void validate_array(const jsoncons::json& array, const std::string& field_type,
}
}
+void validate_as_cast(const jsoncons::json& field, const TypeRegistry& types,
+ std::string_view context) {
+ if(!field.contains("as")) {
+ return;
+ }
+
+ const auto wire = field["type"].as();
+ const auto as = field["as"].as();
+ const auto name = field["name"].as();
+
+ if(!is_primitive(wire)) {
+ throw std::runtime_error(std::format(
+ "{}: field '{}' has 'as'='{}' but wire type '{}' isn't primitive; "
+ "'as' only applies when the wire type is a bare primitive",
+ context, name, as, wire
+ ));
+ }
+
+ const auto* def = types.find(as);
+
+ if(!def) {
+ throw std::runtime_error(std::format(
+ "{}: field '{}' declares 'as'='{}' which isn't a declared type",
+ context, name, as
+ ));
+ }
+
+ const auto kind = (*def)["kind"].as();
+
+ if(is_enum_kind(kind) || kind == "flags") {
+ const auto declared = (*def)["underlying"].as();
+ // The cast is sound only when the enum/flag and wire types have
+ // the same size and signedness — otherwise reinterpreting bytes
+ // between them would silently truncate or widen.
+ if(declared != wire) {
+ throw std::runtime_error(std::format(
+ "{}: field '{}' 'as'='{}' has underlying '{}' but wire type is '{}'; "
+ "the two must match for the cast to be sound",
+ context, name, as, declared, wire
+ ));
+ }
+ return;
+ }
+
+ if(kind == "external" && def->contains("underlying")) {
+ // An integral-convertible external (typically a DBC inner enum)
+ // opts in to `as` casting by declaring `underlying`. Any primitive
+ // wire is allowed — the generator emits an explicit static_cast,
+ // so a size change is intentional and visible at the call site.
+ return;
+ }
+
+ throw std::runtime_error(std::format(
+ "{}: field '{}' 'as'='{}' resolves to kind '{}'; only enum / flags or external-with-underlying are supported",
+ context, name, as, kind
+ ));
+}
+
void validate_fields(const jsoncons::json& fields, const TypeRegistry& types,
Scope& scope, std::string_view context) {
for(const auto& field : fields.array_range()) {
@@ -84,6 +125,25 @@ void validate_fields(const jsoncons::json& fields, const TypeRegistry& types,
continue;
}
+ if(type == "if_chain") {
+ // Each branch is an independent conditional scope — like a
+ // sequence of groups — so their fields must not leak either.
+ for(const auto& branch : field["branches"].array_range()) {
+ validate_condition(branch["when"], scope, types, context);
+ const auto outer_size = scope.size();
+ validate_fields(branch["fields"], types, scope, context);
+ scope.resize(outer_size);
+ }
+
+ if(field.contains("else")) {
+ const auto outer_size = scope.size();
+ validate_fields(field["else"], types, scope, context);
+ scope.resize(outer_size);
+ }
+
+ continue;
+ }
+
if(!is_primitive(type) && !types.find(type)) {
throw std::runtime_error(std::format(
"{}: field '{}' references unknown type '{}'",
@@ -91,6 +151,8 @@ void validate_fields(const jsoncons::json& fields, const TypeRegistry& types,
));
}
+ validate_as_cast(field, types, context);
+
if(field.contains("when")) {
validate_condition(field["when"], scope, types, context);
}
@@ -102,7 +164,22 @@ void validate_fields(const jsoncons::json& fields, const TypeRegistry& types,
);
}
- scope.push_back({field["name"].as(), type});
+ // The scope entry records the semantic type:
+ // - `as` cast wins when present (the field is exposed as an
+ // enum/flags for condition checks).
+ // - An external with `underlying` but no `as` is an alias for
+ // that primitive — the scope reports the primitive so conditions
+ // against the field validate against the integer domain.
+ // - Otherwise the declared type stands as-is.
+ auto semantic_type = type;
+ if(field.contains("as")) {
+ semantic_type = field["as"].as();
+ } else if(const auto* def = types.find(type);
+ def && (*def)["kind"].as() == "external"
+ && def->contains("underlying")) {
+ semantic_type = (*def)["underlying"].as();
+ }
+ scope.push_back({field["name"].as(), semantic_type});
}
}
@@ -131,7 +208,7 @@ void check_named_value(const jsoncons::json& value, const ScopeEntry& entry,
const auto kind = (*def)["kind"].as();
- if(kind != "enum" && kind != "flags") {
+ if(!is_enum_kind(kind) && kind != "flags") {
throw std::runtime_error(std::format(
"{}: named value '{}' requires field '{}' to be an enum or flags type, got '{}'",
context, name, entry.name, kind
@@ -166,7 +243,7 @@ void check_value(const jsoncons::json& value, const ScopeEntry& entry, const Sco
const auto* def = types.find(ref->type);
const auto kind = def? (*def)["kind"].as() : std::string();
- if(kind != "enum" && kind != "flags") {
+ if(!is_enum_kind(kind) && kind != "flags") {
throw std::runtime_error(std::format(
"{}: value references field '{}' of type '{}' which can't be used in a condition",
context, ref_name, ref->type
@@ -238,7 +315,7 @@ void validate_condition(const jsoncons::json& cond, const Scope& scope,
const auto* def = types.find(entry->type);
const auto kind = def? (*def)["kind"].as() : std::string();
- if(kind != "enum" && kind != "flags") {
+ if(!is_enum_kind(kind) && kind != "flags") {
throw std::runtime_error(std::format(
"{}: field '{}' of type '{}' can't be used in a condition",
context, field_name, entry->type
diff --git a/src/tools/protogen/templates/Enum.h_ b/src/tools/protogen/templates/Enum.h_
index 2936a8303..3765fab7e 100644
--- a/src/tools/protogen/templates/Enum.h_
+++ b/src/tools/protogen/templates/Enum.h_
@@ -19,7 +19,7 @@
namespace {{ namespace }} {
-enum {{ name }} : {{ underlying }} {
+enum {% if is_class %}class {% endif %}{{ name }} : {{ underlying }} {
## for v in values
{{ v.name }} = {{ v.value }},
## endfor
diff --git a/tests/Protogen.cpp b/tests/Protogen.cpp
index 47867eb95..f171164f7 100644
--- a/tests/Protogen.cpp
+++ b/tests/Protogen.cpp
@@ -607,7 +607,7 @@ TEST_F(Protogen, RejectsExternalInCondition) {
ASSERT_ANY_THROW(validate_message_fields(fields, reg, "test"));
}
-TEST_F(Protogen, RejectsFixedSizeArrayOfExternal) {
+TEST_F(Protogen, AcceptsFixedSizeArrayOfExternal) {
auto types_doc = jsoncons::json::parse(R"({
"types": {
"Guid": {
@@ -623,7 +623,7 @@ TEST_F(Protogen, RejectsFixedSizeArrayOfExternal) {
{ "name": "ids", "type": "Guid", "array": { "size": 4 } }
])");
- ASSERT_ANY_THROW(validate_message_fields(fields, reg, "test"));
+ EXPECT_NO_THROW(validate_message_fields(fields, reg, "test"));
}
TEST_F(Protogen, StructMemberOfExternalPullsItsInclude) {
@@ -771,12 +771,12 @@ TEST_F(Protogen, RejectsArrayWithUnknownCountField) {
ASSERT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
}
-TEST_F(Protogen, RejectsFixedSizeArrayOfStruct) {
+TEST_F(Protogen, AcceptsFixedSizeArrayOfStruct) {
auto msg = parse_fields(R"([
{ "name": "positions", "type": "Vector3", "array": { "size": 4 } }
])");
- ASSERT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
}
TEST_F(Protogen, AcceptsFixedSizeArrayOfFlags) {
@@ -1165,4 +1165,421 @@ TEST_F(Protogen, RecursesValidationIntoCompoundConditions) {
])");
ASSERT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
-}
\ No newline at end of file
+}
+
+// ---------------------------------------------------------------------------
+// if_chain: `if / else if / else` cascade
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, ValidatesIfChain) {
+ auto msg = parse_fields(R"([
+ { "name": "result", "type": "Result" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "ok" },
+ "fields": [ { "name": "code", "type": "uint32" } ]
+ },
+ {
+ "when": { "op": "eq", "field": "result", "value": "queued" },
+ "fields": [ { "name": "pos", "type": "uint32" } ]
+ }
+ ],
+ "else": [ { "name": "reason", "type": "uint32" } ]
+ }
+ ])");
+
+ ASSERT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, IfChainRejectsUnknownBranchValue) {
+ auto msg = parse_fields(R"([
+ { "name": "result", "type": "Result" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "bogus" },
+ "fields": [ { "name": "code", "type": "uint32" } ]
+ }
+ ]
+ }
+ ])");
+
+ ASSERT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, IfChainScopeIsBranchLocal) {
+ // A field declared inside one branch must not be visible to a later
+ // branch or to the `else` body.
+ auto msg = parse_fields(R"([
+ { "name": "result", "type": "Result" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "ok" },
+ "fields": [ { "name": "local_field", "type": "uint8" } ]
+ }
+ ],
+ "else": [
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "local_field", "value": 1 },
+ "fields": [ { "name": "x", "type": "uint8" } ]
+ }
+ ]
+ }
+ ])");
+
+ ASSERT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, GeneratesIfChainAsElseCascade) {
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Resp",
+ "opcode": "smsg_resp",
+ "direction": "server",
+ "fields": [
+ { "name": "result", "type": "Result" },
+ {
+ "type": "if_chain",
+ "branches": [
+ {
+ "when": { "op": "eq", "field": "result", "value": "ok" },
+ "fields": [ { "name": "code", "type": "uint32" } ]
+ },
+ {
+ "when": { "op": "eq", "field": "result", "value": "queued" },
+ "fields": [ { "name": "pos", "type": "uint32" } ]
+ }
+ ],
+ "else": [ { "name": "reason", "type": "uint32" } ]
+ }
+ ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ // Exactly one if, one else-if, one else — not three standalone ifs.
+ EXPECT_NE(out.content.find("if(result == Result::ok) {"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("else if(result == Result::queued) {"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("else {"), std::string::npos) << out.content;
+}
+
+// ---------------------------------------------------------------------------
+// `as`: semantic type cast at message-definition level
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, AsCastMatchingUnderlyingValidates) {
+ auto msg = parse_fields(R"([
+ { "name": "kind", "type": "uint8", "as": "Result" }
+ ])");
+
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, AsCastRejectsSizeMismatch) {
+ auto msg = parse_fields(R"([
+ { "name": "kind", "type": "uint32", "as": "Result" }
+ ])");
+
+ EXPECT_ANY_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, AsCastScopesFieldAsSemanticType) {
+ // A condition using the field's enum values should validate because
+ // the scope entry reflects `as`, not the wire type.
+ auto msg = parse_fields(R"([
+ { "name": "kind", "type": "uint8", "as": "Result" },
+ {
+ "type": "group",
+ "when": { "op": "eq", "field": "kind", "value": "ok" },
+ "fields": [ { "name": "x", "type": "uint32" } ]
+ }
+ ])");
+
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, GeneratesAsCastWithRawTempAndStaticCast) {
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Resp",
+ "opcode": "smsg_resp",
+ "direction": "server",
+ "fields": [
+ { "name": "kind", "type": "uint8", "as": "Result" }
+ ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ // Member exposes the enum.
+ EXPECT_NE(out.content.find("Result kind;"), std::string::npos) << out.content;
+ // Read: temporary of wire type, then static_cast into the member.
+ EXPECT_NE(out.content.find("std::uint8_t raw_"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("kind = static_cast("), std::string::npos) << out.content;
+ // Write: static_cast the member back to the wire type.
+ EXPECT_NE(out.content.find("stream << static_cast(kind);"), std::string::npos) << out.content;
+}
+
+// ---------------------------------------------------------------------------
+// until_end: read-to-EOF arrays
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, ValidatesUntilEndArray) {
+ auto msg = parse_fields(R"([
+ { "name": "tail", "type": "uint32", "array": { "until_end": true } }
+ ])");
+
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+TEST_F(Protogen, GeneratesUntilEndLoopWithPerIterationCheck) {
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Bulk",
+ "opcode": "smsg_bulk",
+ "direction": "server",
+ "fields": [
+ { "name": "tail", "type": "uint32", "array": { "until_end": true } }
+ ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ // Member is a vector, not a fixed array.
+ EXPECT_NE(out.content.find("std::vector tail;"), std::string::npos) << out.content;
+
+ // Read: while-empty loop driving emplace_back + scalar read + error check.
+ EXPECT_NE(out.content.find("while(!stream.empty()) {"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("tail.emplace_back();"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("stream >> tail.back();"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("if(!stream) return StreamResult::failed;"), std::string::npos) << out.content;
+
+ // Write is a plain range-for; the receiver's read loop stops on EOF.
+ EXPECT_NE(out.content.find("for(const auto& e : tail) {"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("stream << e;"), std::string::npos) << out.content;
+}
+
+TEST_F(Protogen, UntilEndRejectsAlongsideSize) {
+ // schema says only one of size/count_field/until_end may be set, but
+ // the C++ validator shouldn't crash if both show up. Construct the
+ // struct manually to test the defensive path.
+ auto msg = parse_fields(R"([
+ { "name": "tail", "type": "uint32", "array": { "size": 3, "until_end": true } }
+ ])");
+
+ // validate_array doesn't care which one it sees; both branches early-
+ // return. Nothing to assert except "doesn't crash".
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+}
+
+// ---------------------------------------------------------------------------
+// fixed-size arrays of non-primitive element types
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, GeneratesFixedSizeStructArrayAsLoop) {
+ // Struct-element fixed arrays get a visible per-element loop because
+ // there's no generic stream >> operator for std::array.
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Points",
+ "opcode": "smsg_points",
+ "direction": "server",
+ "fields": [
+ { "name": "pos", "type": "Vector3", "array": { "size": 3 } }
+ ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ EXPECT_NE(out.content.find("std::array pos{};"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("for(auto& e : pos) {"), std::string::npos) << out.content;
+ // Struct is expanded to its fields under the loop variable.
+ EXPECT_NE(out.content.find("stream >> e.x;"), std::string::npos) << out.content;
+}
+
+// ---------------------------------------------------------------------------
+// external: cpp_type_name, underlying, stream_via
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, ExternalWithCppTypeNameEmitsQualifiedName) {
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "MyFlag": {
+ "kind": "external",
+ "include": "foo/bar.h",
+ "cpp_namespace": "foo::container",
+ "cpp_type_name": "Inner"
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ auto msg = jsoncons::json::parse(R"({
+ "name": "P",
+ "opcode": "smsg_p",
+ "direction": "server",
+ "fields": [ { "name": "f", "type": "MyFlag" } ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ // Member type is the namespace + cpp_type_name, not the schema key.
+ EXPECT_NE(out.content.find("foo::container::Inner f;"), std::string::npos) << out.content;
+}
+
+TEST_F(Protogen, ExternalWithUnderlyingAcceptsAsCast) {
+ // DBC inner enum pattern: external with integral underlying lets a
+ // wire-typed field cast into it via `as`.
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "DbcEnum": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc::Owner",
+ "cpp_type_name": "Kind",
+ "underlying": "int32"
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ auto fields = jsoncons::json::parse(R"([
+ { "name": "kind", "type": "uint8", "as": "DbcEnum" }
+ ])");
+
+ EXPECT_NO_THROW(validate_message_fields(fields, reg, "test"));
+}
+
+TEST_F(Protogen, ExternalWithUnderlyingUsedAsTypeIsAnAlias) {
+ // An external that declares `underlying` and is referenced directly
+ // via `type` (no `as` cast) is a named alias for the primitive — the
+ // generated member takes the primitive type, no include is emitted
+ // for the external header, and the stream op is the plain primitive
+ // op. This is the DBC record-ref pattern (`Map` ≡ `uint32`).
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "Map": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint32"
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Joined",
+ "opcode": "smsg_joined",
+ "direction": "server",
+ "fields": [ { "name": "map", "type": "Map" } ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ EXPECT_NE(out.content.find("std::uint32_t map;"), std::string::npos) << out.content;
+ EXPECT_EQ(out.content.find("ember::dbc::Map"), std::string::npos) << out.content;
+ EXPECT_EQ(out.content.find("#include "), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("stream >> map;"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("stream << map;"), std::string::npos) << out.content;
+}
+
+TEST_F(Protogen, AliasExternalUsableInCondition) {
+ // A field typed as an alias external is comparable — its effective
+ // type is the underlying primitive, so integer conditions validate.
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "Map": {
+ "kind": "external",
+ "include": "dbcs/MemoryDefs.h",
+ "cpp_namespace": "ember::dbc",
+ "underlying": "uint32"
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Q",
+ "opcode": "smsg_q",
+ "direction": "server",
+ "fields": [
+ { "name": "m", "type": "Map" },
+ {
+ "type": "group",
+ "when": { "op": "neq", "field": "m", "value": 0 },
+ "fields": [ { "name": "x", "type": "uint32" } ]
+ }
+ ]
+ })");
+
+ EXPECT_NO_THROW(validate_message_fields(msg["fields"], reg, "test"));
+ const auto out = generate_message(msg, reg, templates_dir);
+ EXPECT_NE(out.content.find("if(m != 0)"), std::string::npos) << out.content;
+}
+
+// ---------------------------------------------------------------------------
+// enum_class: same semantics as enum, different emit
+// ---------------------------------------------------------------------------
+
+TEST_F(Protogen, EnumClassEmitsScopedEnum) {
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "Colour": {
+ "kind": "enum_class",
+ "underlying": "uint8",
+ "values": { "red": 0, "green": 1 }
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ const auto headers = protogen::generate_type_headers(reg, templates_dir);
+ const protogen::GeneratedFile* h = nullptr;
+ for(const auto& f : headers) {
+ if(f.relative_path == "types/Colour.h") { h = &f; }
+ }
+ ASSERT_NE(h, nullptr);
+ EXPECT_NE(h->content.find("enum class Colour : std::uint8_t"), std::string::npos) << h->content;
+}
+
+TEST_F(Protogen, EnumStaysUnscoped) {
+ auto types_doc = jsoncons::json::parse(R"({
+ "types": {
+ "Style": {
+ "kind": "enum",
+ "underlying": "uint8",
+ "values": { "plain": 0, "bold": 1 }
+ }
+ }
+ })");
+
+ auto reg = protogen::build_registry(types_doc);
+ const auto headers = protogen::generate_type_headers(reg, templates_dir);
+ const protogen::GeneratedFile* h = nullptr;
+ for(const auto& f : headers) {
+ if(f.relative_path == "types/Style.h") { h = &f; }
+ }
+ ASSERT_NE(h, nullptr);
+ EXPECT_NE(h->content.find("enum Style : std::uint8_t"), std::string::npos) << h->content;
+ EXPECT_EQ(h->content.find("enum class"), std::string::npos) << h->content;
+}
+
+TEST_F(Protogen, GeneratesFixedSizeStringArrayAsLoop) {
+ auto msg = jsoncons::json::parse(R"({
+ "name": "Names",
+ "opcode": "smsg_names",
+ "direction": "server",
+ "fields": [
+ { "name": "n", "type": "CString", "array": { "size": 4 } }
+ ]
+ })");
+
+ const auto out = generate_message(msg, reg, templates_dir);
+
+ EXPECT_NE(out.content.find("std::array n{};"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("for(auto& e : n) {"), std::string::npos) << out.content;
+ EXPECT_NE(out.content.find("spark::io::null_terminated(e)"), std::string::npos) << out.content;
+}