diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-09-06 23:36:23 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-05 13:57:50 +0100 |
commit | 706163743d481e092111401752c9cbb056b35e69 (patch) | |
tree | eca161d19bec27a57de0e7e258019bd40b179149 /src/server/scripts | |
parent | ca498ffab23e9be7a4ffc6ea6adbfa3c01d5e6f6 (diff) |
[3.3.5] Scripts/Commands: .arena command conversion (PR #25407)
(cherry picked from commit b63d655e20a0facf14fc77798c52ea67d8551fa7)
Diffstat (limited to 'src/server/scripts')
-rw-r--r-- | src/server/scripts/Commands/cs_arena.cpp | 214 |
1 files changed, 52 insertions, 162 deletions
diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index bd80a423662..1bcb04b99c0 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -33,6 +33,8 @@ EndScriptData */ #include "RBAC.h" #include "WorldSession.h" + +using namespace Trinity::ChatCommands; class arena_commandscript : public CommandScript { public: @@ -56,28 +58,8 @@ public: return commandTable; } - static bool HandleArenaCreateCommand(ChatHandler* handler, char const* args) + static bool HandleArenaCreateCommand(ChatHandler* handler, Optional<PlayerIdentifier> captain, QuotedString name, ArenaTeamTypes type) { - if (!*args) - return false; - - Player* target; - if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, &target)) - return false; - - char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; - if (!tailStr) - return false; - - char* name = handler->extractQuotedArg(tailStr); - if (!name) - return false; - - char* typeStr = strtok(nullptr, ""); - if (!typeStr) - return false; - - int8 type = atoi(typeStr); if (sArenaTeamMgr->GetArenaTeamByName(name)) { handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, name); @@ -85,47 +67,36 @@ public: return false; } - if (type == 2 || type == 3 || type == 5 ) + if (!captain) + captain = PlayerIdentifier::FromTargetOrSelf(handler); + if (!captain) + return false; + + if (sCharacterCache->GetCharacterArenaTeamIdByGuid(captain->GetGUID(), type) != 0) { - if (sCharacterCache->GetCharacterArenaTeamIdByGuid(target->GetGUID(), type) != 0) - { - handler->PSendSysMessage(LANG_ARENA_ERROR_SIZE, target->GetName().c_str()); - handler->SetSentErrorMessage(true); - return false; - } + handler->PSendSysMessage(LANG_ARENA_ERROR_SIZE, captain->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } - ArenaTeam* arena = new ArenaTeam(); + ArenaTeam* arena = new ArenaTeam(); - if (!arena->Create(target->GetGUID(), type, name, 4293102085, 101, 4293253939, 4, 4284049911)) - { - delete arena; - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - - sArenaTeamMgr->AddArenaTeam(arena); - handler->PSendSysMessage(LANG_ARENA_CREATE, arena->GetName().c_str(), arena->GetId(), arena->GetType(), arena->GetCaptain().ToString().c_str()); - } - else + if (!arena->Create(captain->GetGUID(), type, name, 4293102085, 101, 4293253939, 4, 4284049911)) { + delete arena; handler->SendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); return false; } + sArenaTeamMgr->AddArenaTeam(arena); + handler->PSendSysMessage(LANG_ARENA_CREATE, arena->GetName().c_str(), arena->GetId(), arena->GetType(), arena->GetCaptain().ToString().c_str()); + return true; } - static bool HandleArenaDisbandCommand(ChatHandler* handler, char const* args) + static bool HandleArenaDisbandCommand(ChatHandler* handler, uint32 teamId) { - if (!*args) - return false; - - uint32 teamId = atoul(args); - if (!teamId) - return false; - ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId); if (!arena) @@ -144,52 +115,25 @@ public: std::string name = arena->GetName(); arena->Disband(); - if (handler->GetSession()) - TC_LOG_DEBUG("bg.arena", "GameMaster: %s %s disbanded arena team type: %u [Id: %u].", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), arena->GetType(), teamId); - else - TC_LOG_DEBUG("bg.arena", "Console: disbanded arena team type: %u [Id: %u].", arena->GetType(), teamId); - - delete(arena); + delete arena; handler->PSendSysMessage(LANG_ARENA_DISBAND, name.c_str(), teamId); return true; } - static bool HandleArenaRenameCommand(ChatHandler* handler, char const* _args) + static bool HandleArenaRenameCommand(ChatHandler* handler, QuotedString oldName, QuotedString newName) { - if (!*_args) - return false; - - char* args = (char *)_args; - - char const* oldArenaStr = handler->extractQuotedArg(args); - if (!oldArenaStr) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - - char const* newArenaStr = handler->extractQuotedArg(strtok(nullptr, "")); - if (!newArenaStr) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - - ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamByName(oldArenaStr); + ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamByName(oldName); if (!arena) { - handler->PSendSysMessage(LANG_AREAN_ERROR_NAME_NOT_FOUND, oldArenaStr); + handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, oldName.c_str()); handler->SetSentErrorMessage(true); return false; } - if (sArenaTeamMgr->GetArenaTeamByName(newArenaStr)) + if (sArenaTeamMgr->GetArenaTeamByName(newName)) { - handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, oldArenaStr); + handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, newName.c_str()); handler->SetSentErrorMessage(true); return false; } @@ -201,45 +145,22 @@ public: return false; } - if (!arena->SetName(newArenaStr)) + if (arena->SetName(newName)) + { + handler->PSendSysMessage(LANG_ARENA_RENAME, arena->GetId(), oldName.c_str(), newName.c_str()); + return true; + } + else { handler->SendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); return false; } - - handler->PSendSysMessage(LANG_ARENA_RENAME, arena->GetId(), oldArenaStr, newArenaStr); - if (handler->GetSession()) - TC_LOG_DEBUG("bg.arena", "GameMaster: %s %s rename arena team \"%s\"[Id: %u] to \"%s\"", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), oldArenaStr, arena->GetId(), newArenaStr); - else - TC_LOG_DEBUG("bg.arena", "Console: rename arena team \"%s\"[Id: %u] to \"%s\"", oldArenaStr, arena->GetId(), newArenaStr); - - return true; } - static bool HandleArenaCaptainCommand(ChatHandler* handler, char const* args) + static bool HandleArenaCaptainCommand(ChatHandler* handler, uint32 teamId, Optional<PlayerIdentifier> target) { - if (!*args) - return false; - - char* idStr; - char* nameStr; - handler->extractOptFirstArg((char*)args, &idStr, &nameStr); - if (!idStr) - return false; - - uint32 teamId = atoul(idStr); - if (!teamId) - return false; - - Player* target; - ObjectGuid targetGuid; - if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid)) - return false; - ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId); - if (!arena) { handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_FOUND, teamId); @@ -247,13 +168,6 @@ public: return false; } - if (!target) - { - handler->PSendSysMessage(LANG_PLAYER_NOT_EXIST_OR_OFFLINE, nameStr); - handler->SetSentErrorMessage(true); - return false; - } - if (arena->IsFighting()) { handler->SendSysMessage(LANG_ARENA_ERROR_COMBAT); @@ -261,49 +175,36 @@ public: return false; } - if (!arena->IsMember(targetGuid)) - { - handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_MEMBER, nameStr, arena->GetName().c_str()); - handler->SetSentErrorMessage(true); + if (!target) + target = PlayerIdentifier::FromTargetOrSelf(handler); + if (!target) return false; - } - if (arena->GetCaptain() == targetGuid) + if (!arena->IsMember(target->GetGUID())) { - handler->PSendSysMessage(LANG_ARENA_ERROR_CAPTAIN, nameStr, arena->GetName().c_str()); + handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_MEMBER, target->GetName().c_str(), arena->GetName().c_str()); handler->SetSentErrorMessage(true); return false; } - arena->SetCaptain(targetGuid); - - std::string oldCaptainName; - if (!sCharacterCache->GetCharacterNameByGuid(arena->GetCaptain(), oldCaptainName)) + if (arena->GetCaptain() == target->GetGUID()) { + handler->PSendSysMessage(LANG_ARENA_ERROR_CAPTAIN, target->GetName().c_str(), arena->GetName().c_str()); handler->SetSentErrorMessage(true); return false; } - handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainName.c_str(), target->GetName().c_str()); - if (handler->GetSession()) - TC_LOG_DEBUG("bg.arena", "GameMaster: %s %s promoted player: %s %s to leader of arena team \"%s\"[Id: %u]", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), target->GetName().c_str(), target->GetGUID().ToString().c_str(), arena->GetName().c_str(), arena->GetId()); - else - TC_LOG_DEBUG("bg.arena", "Console: promoted player: %s %s to leader of arena team \"%s\"[Id: %u]", - target->GetName().c_str(), target->GetGUID().ToString().c_str(), arena->GetName().c_str(), arena->GetId()); + CharacterCacheEntry const* oldCaptainNameData = sCharacterCache->GetCharacterCacheByGuid(arena->GetCaptain()); + char const* oldCaptainName = oldCaptainNameData ? oldCaptainNameData->Name.c_str() : "<unknown>"; + + arena->SetCaptain(target->GetGUID()); + handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainName, target->GetName().c_str()); return true; } - static bool HandleArenaInfoCommand(ChatHandler* handler, char const* args) + static bool HandleArenaInfoCommand(ChatHandler* handler, uint32 teamId) { - if (!*args) - return false; - - uint32 teamId = atoul(args); - if (!teamId) - return false; - ArenaTeam* arena = sArenaTeamMgr->GetArenaTeamById(teamId); if (!arena) @@ -320,30 +221,19 @@ public: return true; } - static bool HandleArenaLookupCommand(ChatHandler* handler, char const* args) + static bool HandleArenaLookupCommand(ChatHandler* handler, Tail needle) { - if (!*args) + if (needle.empty()) return false; - std::string namepart = args; - std::wstring wnamepart; - - if (!Utf8toWStr(namepart, wnamepart)) - return false; - - wstrToLower(wnamepart); - bool found = false; - ArenaTeamMgr::ArenaTeamContainer::const_iterator i = sArenaTeamMgr->GetArenaTeamMapBegin(); - for (; i != sArenaTeamMgr->GetArenaTeamMapEnd(); ++i) + for (auto [teamId, team] : sArenaTeamMgr->GetArenaTeams()) { - ArenaTeam* arena = i->second; - - if (Utf8FitTo(arena->GetName(), wnamepart)) + if (StringContainsStringI(team->GetName(), needle)) { if (handler->GetSession()) { - handler->PSendSysMessage(LANG_ARENA_LOOKUP, arena->GetName().c_str(), arena->GetId(), arena->GetType(), arena->GetType()); + handler->PSendSysMessage(LANG_ARENA_LOOKUP, team->GetName().c_str(), team->GetId(), team->GetType(), team->GetType()); found = true; continue; } @@ -351,7 +241,7 @@ public: } if (!found) - handler->PSendSysMessage(LANG_AREAN_ERROR_NAME_NOT_FOUND, namepart.c_str()); + handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_NOT_FOUND, std::string(needle).c_str()); return true; } |