|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Удаление спелов после входа в игру. |
Удаление спелов после входа в игру. |
На сервере была прописана команда reset all spells, из-за чего каждый персонаж который входит в игру теряет все спелы, включая маунтов и профессии.
Как можно это остановить? Просто есть еще очень много персонажей которые не заходили в игру, и хотелось бы их сохранить. |
Что за бред?)
Сообщение # 4 написано 03.06.2018 в 11:03
|
На сколько я знаю, то команда ".reset all spells" очищает таблицы с навыками и заклинаниями в базе персонажей, так что восстановить эти данные можно только с бэкапа. Могу конечно ошибаться, но если я говорю бред, то пожалуйста аргументируй хотя бы это, а не просто пустозвонь.
Сообщение # 5 написано 03.06.2018 в 17:21
|
На сколько я знаю, то команда ".reset all spells" очищает таблицы с навыками и заклинаниями в базе персонажей, так что восстановить эти данные можно только с бэкапа. Могу конечно ошибаться, но если я говорю бред, то пожалуйста аргументируй хотя бы это, а не просто пустозвонь. Если просите от собеседника аргументировать утверждения, то будьте и сами готовы следовать этому принципу. "На пальцах": При "разучивании" способностей клиент отображает список потерь. Откуда он его узнает, если данные были очищены без его участия и в его отсутствие? Из кода: 1) Фрагмент обработчика подкоманды "spells" команды "reset": Код PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); stmt->setUInt16(0, uint16(AT_LOGIN_RESET_SPELLS)); stmt->setUInt64(1, targetGuid.GetCounter()); CharacterDatabase.Execute(stmt); handler->PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, targetName.c_str()); 2) Подготавливаемый запрос: Код PrepareStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?", CONNECTION_ASYNC); 3а) Определение перечисления `AtLoginFlags`, откуда можно получить значение члена 'AT_LOGIN_RESET_SPELLS': Код enum AtLoginFlags { AT_LOGIN_NONE = 0x000, AT_LOGIN_RENAME = 0x001, AT_LOGIN_RESET_SPELLS = 0x002, AT_LOGIN_RESET_TALENTS = 0x004, AT_LOGIN_CUSTOMIZE = 0x008, AT_LOGIN_RESET_PET_TALENTS = 0x010, AT_LOGIN_FIRST = 0x020, AT_LOGIN_CHANGE_FACTION = 0x040, AT_LOGIN_CHANGE_RACE = 0x080, AT_LOGIN_RESURRECT = 0x100, }; 3б) Фрагмент void WorldSession::HandlePlayerLogin(LoginQueryHolder*): Код // Apply at_login requests if (pCurrChar->HasAtLoginFlag(AT_LOGIN_RESET_SPELLS)) { pCurrChar->ResetSpells(); SendNotification(LANG_RESET_SPELLS); } Настоящее пятиминутное расследование позволяет однозначно заключить наличие возможности "спасения" всех необработанных персонажей удалением соответствующего флага из маски, которую содержит их запись в таблице `characters.characters`: Код UPDATE `characters` SET `at_login` = 'at_login' & ~2; (исполнять в базу `characters`) P.S: Все сниппеты предоставлены из последней на момент составления сообщения ревизии ветки 'master' (Legion 7.3.5) официального репозитория. |
Я бы, конечно, предоставил аргументы, но, по моему мнению, изначально лучше узнать мнение собеседника, особенно когда оно ошибочное, а лиишь только после этого объяснить. Если же объяснять сразу, то так не интересно мнее эффективнее чтоле или получится некий монолог, а так все красиво
Сообщение # 8 написано 04.06.2018 в 19:04
|
| |||
| |||