mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 19:37:02 +00:00
[7235] New command: .reset achievements
This commit is contained in:
parent
cb0ebde926
commit
74ec17a273
9 changed files with 87 additions and 4 deletions
|
|
@ -22,7 +22,7 @@
|
||||||
DROP TABLE IF EXISTS `db_version`;
|
DROP TABLE IF EXISTS `db_version`;
|
||||||
CREATE TABLE `db_version` (
|
CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`required_7230_02_mangos_spell_bonus_data` bit(1) default NULL
|
`required_7235_01_mangos_command` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -425,6 +425,7 @@ INSERT INTO `command` VALUES
|
||||||
('reload all_locales',3,'Syntax: .reload all_locales\r\n\r\nReload all `locales_*` tables with reload support added and that can be _safe_ reloaded.'),
|
('reload all_locales',3,'Syntax: .reload all_locales\r\n\r\nReload all `locales_*` tables with reload support added and that can be _safe_ reloaded.'),
|
||||||
('reload config',3,'Syntax: .reload config\r\n\r\nReload config settings (by default stored in mangosd.conf). Not all settings can be change at reload: some new setting values will be ignored until restart, some values will applied with delay or only to new objects/maps, some values will explicitly rejected to change at reload.'),
|
('reload config',3,'Syntax: .reload config\r\n\r\nReload config settings (by default stored in mangosd.conf). Not all settings can be change at reload: some new setting values will be ignored until restart, some values will applied with delay or only to new objects/maps, some values will explicitly rejected to change at reload.'),
|
||||||
('repairitems',2,'Syntax: .repairitems\r\n\r\nRepair all selected player''s items.'),
|
('repairitems',2,'Syntax: .repairitems\r\n\r\nRepair all selected player''s items.'),
|
||||||
|
('reset achievements',3,'Syntax: .reset achievements [$playername]\r\n\r\nReset achievements data for selected or named (online or offline) character. Achievements for persistance progress data like completed quests/etc re-filled at reset. Achievements for events like kills/casts/etc will lost.'),
|
||||||
('reset all',3,'Syntax: .reset all spells\r\n\r\nSyntax: .reset all talents\r\n\r\nRequest reset spells or talents at next login each existed character.'),
|
('reset all',3,'Syntax: .reset all spells\r\n\r\nSyntax: .reset all talents\r\n\r\nRequest reset spells or talents at next login each existed character.'),
|
||||||
('reset honor',3,'Syntax:\r\n.reset honor [Playername]\r\n Reset all honor data for targeted character.'),
|
('reset honor',3,'Syntax:\r\n.reset honor [Playername]\r\n Reset all honor data for targeted character.'),
|
||||||
('reset level',3,'Syntax:\r\n.reset level [Playername]\r\n Reset level to 1 including reset stats and talents. Equipped items with greater level requirement can be lost.'),
|
('reset level',3,'Syntax:\r\n.reset level [Playername]\r\n Reset level to 1 including reset stats and talents. Equipped items with greater level requirement can be lost.'),
|
||||||
|
|
|
||||||
5
sql/updates/7235_01_mangos_command.sql
Normal file
5
sql/updates/7235_01_mangos_command.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_7230_02_mangos_spell_bonus_data required_7235_01_mangos_command bit;
|
||||||
|
|
||||||
|
DELETE FROM `command` WHERE `name` = 'reset achievements';
|
||||||
|
INSERT INTO `command` VALUES
|
||||||
|
('reset achievements',3,'Syntax: .reset achievements [$playername]\r\n\r\nReset achievements data for selected or named (online or offline) character. Achievements for persistance progress data like completed quests/etc re-filled at reset. Achievements for events like kills/casts/etc will lost.');
|
||||||
|
|
@ -167,6 +167,7 @@ pkgdata_DATA = \
|
||||||
7214_02_mangos_mangos_string.sql \
|
7214_02_mangos_mangos_string.sql \
|
||||||
7230_01_mangos_spell_chain.sql \
|
7230_01_mangos_spell_chain.sql \
|
||||||
7230_02_mangos_spell_bonus_data.sql \
|
7230_02_mangos_spell_bonus_data.sql \
|
||||||
|
7235_01_mangos_command.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -314,4 +315,5 @@ EXTRA_DIST = \
|
||||||
7214_02_mangos_mangos_string.sql \
|
7214_02_mangos_mangos_string.sql \
|
||||||
7230_01_mangos_spell_chain.sql \
|
7230_01_mangos_spell_chain.sql \
|
||||||
7230_02_mangos_spell_bonus_data.sql \
|
7230_02_mangos_spell_bonus_data.sql \
|
||||||
|
7235_01_mangos_command.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,38 @@ AchievementMgr::~AchievementMgr()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AchievementMgr::Reset()
|
||||||
|
{
|
||||||
|
for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); ++iter)
|
||||||
|
{
|
||||||
|
WorldPacket data(SMSG_ACHIEVEMENT_DELETED,4);
|
||||||
|
data << uint32(iter->first);
|
||||||
|
m_player->SendDirectMessage(&data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter!=m_criteriaProgress.end(); ++iter)
|
||||||
|
{
|
||||||
|
WorldPacket data(SMSG_CRITERIA_DELETED,4);
|
||||||
|
data << uint32(iter->first);
|
||||||
|
m_player->SendDirectMessage(&data);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_completedAchievements.clear();
|
||||||
|
m_criteriaProgress.clear();
|
||||||
|
DeleteFromDB(m_player->GetGUIDLow());
|
||||||
|
|
||||||
|
// re-fill data
|
||||||
|
CheckAllAchievementCriteria();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AchievementMgr::DeleteFromDB(uint32 lowguid)
|
||||||
|
{
|
||||||
|
CharacterDatabase.BeginTransaction ();
|
||||||
|
CharacterDatabase.PExecute("DELETE FROM character_achievement WHERE guid = %u",lowguid);
|
||||||
|
CharacterDatabase.PExecute("DELETE FROM character_achievement_progress WHERE guid = %u",lowguid);
|
||||||
|
CharacterDatabase.CommitTransaction ();
|
||||||
|
}
|
||||||
|
|
||||||
void AchievementMgr::SaveToDB()
|
void AchievementMgr::SaveToDB()
|
||||||
{
|
{
|
||||||
if(!m_completedAchievements.empty())
|
if(!m_completedAchievements.empty())
|
||||||
|
|
@ -99,7 +131,7 @@ void AchievementMgr::SaveToDB()
|
||||||
bool need_execute = false;
|
bool need_execute = false;
|
||||||
std::ostringstream ssdel;
|
std::ostringstream ssdel;
|
||||||
std::ostringstream ssins;
|
std::ostringstream ssins;
|
||||||
for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); iter++)
|
for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); ++iter)
|
||||||
{
|
{
|
||||||
if(!iter->second.changed)
|
if(!iter->second.changed)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -314,7 +346,7 @@ void AchievementMgr::SendCriteriaUpdate(uint32 id, CriteriaProgress const* progr
|
||||||
void AchievementMgr::CheckAllAchievementCriteria()
|
void AchievementMgr::CheckAllAchievementCriteria()
|
||||||
{
|
{
|
||||||
// suppress sending packets
|
// suppress sending packets
|
||||||
for(uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; i++)
|
for(uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i)
|
||||||
UpdateAchievementCriteria(AchievementCriteriaTypes(i));
|
UpdateAchievementCriteria(AchievementCriteriaTypes(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,8 @@ class AchievementMgr
|
||||||
AchievementMgr(Player* pl);
|
AchievementMgr(Player* pl);
|
||||||
~AchievementMgr();
|
~AchievementMgr();
|
||||||
|
|
||||||
|
void Reset();
|
||||||
|
static void DeleteFromDB(uint32 lowguid);
|
||||||
void LoadFromDB(QueryResult *achievementResult, QueryResult *criteriaResult);
|
void LoadFromDB(QueryResult *achievementResult, QueryResult *criteriaResult);
|
||||||
void SaveToDB();
|
void SaveToDB();
|
||||||
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0, Unit *unit=NULL, uint32 time=0);
|
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0, Unit *unit=NULL, uint32 time=0);
|
||||||
|
|
|
||||||
|
|
@ -365,6 +365,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||||
|
|
||||||
static ChatCommand resetCommandTable[] =
|
static ChatCommand resetCommandTable[] =
|
||||||
{
|
{
|
||||||
|
{ "achievements", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetAchievementsCommand, "", NULL },
|
||||||
{ "honor", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetHonorCommand, "", NULL },
|
{ "honor", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetHonorCommand, "", NULL },
|
||||||
{ "level", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetLevelCommand, "", NULL },
|
{ "level", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetLevelCommand, "", NULL },
|
||||||
{ "spells", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetSpellsCommand, "", NULL },
|
{ "spells", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetSpellsCommand, "", NULL },
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,7 @@ class ChatHandler
|
||||||
bool HandleDelTeleCommand(const char * args);
|
bool HandleDelTeleCommand(const char * args);
|
||||||
bool HandleListAurasCommand(const char * args);
|
bool HandleListAurasCommand(const char * args);
|
||||||
|
|
||||||
|
bool HandleResetAchievementsCommand(const char * args);
|
||||||
bool HandleResetHonorCommand(const char * args);
|
bool HandleResetHonorCommand(const char * args);
|
||||||
bool HandleResetLevelCommand(const char * args);
|
bool HandleResetLevelCommand(const char * args);
|
||||||
bool HandleResetSpellsCommand(const char * args);
|
bool HandleResetSpellsCommand(const char * args);
|
||||||
|
|
|
||||||
|
|
@ -4294,6 +4294,45 @@ bool ChatHandler::HandleListAurasCommand (const char * /*args*/)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ChatHandler::HandleResetAchievementsCommand (const char * args)
|
||||||
|
{
|
||||||
|
char* pName = strtok((char*)args, "");
|
||||||
|
Player *player = NULL;
|
||||||
|
uint64 guid = 0;
|
||||||
|
if (pName)
|
||||||
|
{
|
||||||
|
std::string name = extractPlayerNameFromLink(pName);
|
||||||
|
if(name.empty())
|
||||||
|
{
|
||||||
|
SendSysMessage(LANG_PLAYER_NOT_FOUND);
|
||||||
|
SetSentErrorMessage(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
guid = objmgr.GetPlayerGUIDByName(name);
|
||||||
|
player = objmgr.GetPlayer(guid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player = getSelectedPlayer();
|
||||||
|
if(player)
|
||||||
|
guid = player->GetGUID();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!player && !guid)
|
||||||
|
{
|
||||||
|
SendSysMessage(LANG_NO_CHAR_SELECTED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(player)
|
||||||
|
player->GetAchievementMgr().Reset();
|
||||||
|
else if(guid)
|
||||||
|
AchievementMgr::DeleteFromDB(GUID_LOPART(guid));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ChatHandler::HandleResetHonorCommand (const char * args)
|
bool ChatHandler::HandleResetHonorCommand (const char * args)
|
||||||
{
|
{
|
||||||
char* pName = strtok((char*)args, "");
|
char* pName = strtok((char*)args, "");
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7234"
|
#define REVISION_NR "7235"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue