diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index c4dec4074..a959d9093 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -122,6 +122,7 @@ SET(common_headers cli/terminal_color.hpp data_verification.h database.h + database_schema.h dbcore.h deity.h emu_constants.h diff --git a/common/database_schema.h b/common/database_schema.h new file mode 100644 index 000000000..98cc98a5b --- /dev/null +++ b/common/database_schema.h @@ -0,0 +1,204 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DATABASE_SCHEMA_H +#define EQEMU_DATABASE_SCHEMA_H + +#include + +namespace DatabaseSchema { + + /** + * Gets player tables + * + * @return + */ + static std::vector GetPlayerTables() + { + std::vector tables = { + "adventure_stats", + "char_recipe_list", + "character_activities", + "character_alt_currency", + "character_alternate_abilities", + "character_auras", + "character_bandolier", + "character_bind", + "character_buffs", + "character_corpse_items", + "character_corpses", + "character_currency", + "character_data", + "character_disciplines", + "character_enabledtasks", + "character_inspect_messages", + "character_item_recast", + "character_languages", + "character_leadership_abilities", + "character_material", + "character_memmed_spells", + "character_pet_buffs", + "character_pet_inventory", + "character_potionbelt", + "character_skills", + "character_spells", + "character_tribute", + "completed_tasks", + "faction_values", + "friends", + "guild_members", + "instance_list_player", + "inventory", + "inventory_snapshots", + "keyring", + "mail", + "player_titlesets", + "quest_globals", + "timers", + "titles", + "zone_flags" + }; + + return tables; + } + + /** + * Gets content tables + * + * @return + */ + static std::vector GetContentTables() + { + std::vector tables = { + "aa_ability", + "aa_actions", + "aa_effects", + "aa_rank_effects", + "aa_rank_prereqs", + "aa_ranks", + "aa_required_level_cost", + "adventure_template", + "adventure_template_entry", + "adventure_template_entry_flavor", + "altadv_vars", + "alternate_currency", + "auras", + "base_data", + "blocked_spells", + "books", + "char_create_combinations", + "char_create_point_allocations", + "class_skill", + "damageshieldtypes", + "data_buckets", + "doors", + "faction_base_data", + "faction_list", + "faction_list_mod", + "fear_hints", + "fishing", + "forage", + "global_loot", + "goallists", + "graveyard", + "grid", + "grid_entries", + "ground_spawns", + "horses", + "instance_list", + "items", + "ldon_trap_entries", + "ldon_trap_templates", + "lootdrop", + "lootdrop_entries", + "loottable", + "loottable_entries", + "merchantlist", + "npc_emotes", + "npc_faction", + "npc_faction_entries", + "npc_scale_global_base", + "npc_spells", + "npc_spells_effects", + "npc_spells_effects_entries", + "npc_spells_entries", + "npc_types", + "npc_types_metadata", + "npc_types_tint", + "object", + "pets", + "pets_equipmentset", + "pets_equipmentset_entries", + "proximities", + "races", + "skill_caps", + "spawn2", + "spawn_condition_values", + "spawn_conditions", + "spawn_events", + "spawnentry", + "spawngroup", + "spells_new", + "start_zones", + "starting_items", + "task_activities", + "tasks", + "tasksets", + "titles", + "tradeskill_recipe", + "tradeskill_recipe_entries", + "traps", + "tribute_levels", + "tributes", + "veteran_reward_templates", + "zone", + "zone_points", + "zone_server", + "zoneserver_auth", + }; + + return tables; + } + + /** + * Gets server tables + * + * @return + */ + static std::vector GetServerTables() + { + std::vector tables = { + "bug_reports", + "db_str", + "eqtime", + "level_exp_mods", + "logsys_categories", + "name_filter", + "perl_event_export_settings", + "profanity_list", + "saylink" + }; + + return tables; + } + +} + +#endif //EQEMU_DATABASE_SCHEMA_H diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 72f09462f..7efbc1f31 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -23,6 +23,7 @@ #include "../common/json/json.h" #include "../common/version.h" #include "worlddb.h" +#include "../common/database_schema.h" namespace WorldserverCommandHandler { @@ -49,6 +50,7 @@ namespace WorldserverCommandHandler { function_map["world:version"] = &WorldserverCommandHandler::Version; function_map["database:version"] = &WorldserverCommandHandler::DatabaseVersion; function_map["database:set-account-status"] = &WorldserverCommandHandler::DatabaseSetAccountStatus; + function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); } @@ -135,4 +137,46 @@ namespace WorldserverCommandHandler { ); } + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description) + { + if (cmd[{"-h", "--help"}]) { + return; + } + + Json::Value player_tables_json; + std::vector player_tables = DatabaseSchema::GetPlayerTables(); + for (const auto &table : player_tables) { + player_tables_json.append(table); + } + + Json::Value content_tables_json; + std::vector content_tables = DatabaseSchema::GetContentTables(); + for (const auto &table : content_tables) { + content_tables_json.append(table); + } + + Json::Value server_tables_json; + std::vector server_tables = DatabaseSchema::GetServerTables(); + for (const auto &table : server_tables) { + server_tables_json.append(table); + } + + Json::Value schema; + + schema["server_tables"] = server_tables_json; + schema["player_tables"] = player_tables_json; + schema["content_tables"] = content_tables_json; + + std::stringstream payload; + payload << schema; + + std::cout << payload.str() << std::endl; + } + } \ No newline at end of file diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index af4569dc5..f3d4317f2 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -29,6 +29,7 @@ namespace WorldserverCommandHandler { void Version(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseVersion(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description); + void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); };