Собственно, апдейты апдейтами, и один из них сломал нам БД. Чтобы сохранить актуальную структуру, было решено использовать pdump для чистой базы. Т.к. персонажей много, нужно сдампить их одной коммандой. Вот пример таковой:
bool ChatHandler::HandlePDumpWriteAllCommand(char* args)
{
QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM characters");
if (result)
{
do {
Field *fields = result->Fetch();
uint32 lowguid = fields[0].GetUInt32();
ObjectGuid guid = ObjectGuid(HIGHGUID_PLAYER, lowguid);
std::string file = guid.GetString();
if (!sObjectMgr.GetPlayerAccountIdByGUID(guid)) {
PSendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
PlayerDumpWriter().WriteDump(file, lowguid);
PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS, lowguid);
}
while (result->NextRow());
}
}
данный хендлер регистрируется в чат-коммпандах player3.cpp, и его вызов регистрируется там-же
static ChatCommand pdumpCommandTable[] =
{
{ "load", SEC_ADMINISTRATOR, true, &ChatHandler::HandlePDumpLoadCommand, "", nullptr },
{ "write", SEC_ADMINISTRATOR, true, &ChatHandler::HandlePDumpWriteCommand, "", nullptr },
{ "writeall", SEC_ADMINISTRATOR, true, &ChatHandler::HandlePDumpWriteAllCommand, "", nullptr },
{ nullptr, 0, false, nullptr, "", nullptr }
};