aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-09-06 23:36:23 +0200
committerShauren <shauren.trinity@gmail.com>2022-02-05 13:57:50 +0100
commit706163743d481e092111401752c9cbb056b35e69 (patch)
treeeca161d19bec27a57de0e7e258019bd40b179149 /src/server/scripts/Commands
parentca498ffab23e9be7a4ffc6ea6adbfa3c01d5e6f6 (diff)
[3.3.5] Scripts/Commands: .arena command conversion (PR #25407)
(cherry picked from commit b63d655e20a0facf14fc77798c52ea67d8551fa7)
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_arena.cpp214
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;
}