diff options
author | Tuxity <kevin.darcel@gmail.com> | 2012-11-20 10:37:25 +0100 |
---|---|---|
committer | Tuxity <kevin.darcel@gmail.com> | 2012-11-20 10:37:25 +0100 |
commit | 172c5f0b93d8810ed06dde48af529d0e1998a48c (patch) | |
tree | c45ea1bc76f881394f404eb37c9853e416c4cd16 /src/server/game/Handlers/ArenaTeamHandler.cpp | |
parent | fff684ec7884440500aad7ca5a90e39709dc675e (diff) |
Core/Arenas: Fix arena system, you can now enter in arenas and fight !
Countdown in preparation time are also displayed
EnnemyUnitFrame while fighting works too
N.B: There might be some little typos to fix.
Diffstat (limited to 'src/server/game/Handlers/ArenaTeamHandler.cpp')
-rwxr-xr-x | src/server/game/Handlers/ArenaTeamHandler.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 0790acb4ae6..0d1fa986b87 100755 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -74,6 +74,54 @@ void WorldSession::HandleArenaTeamRosterOpcode(WorldPacket & recvData) arenaTeam->Roster(this); } +void WorldSession::HandleArenaTeamCreateOpcode(WorldPacket & recvData) +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ARENA_TEAM_CREATE"); + + uint32 slot, icon, iconcolor, border, bordercolor, background; + std::string name; + + recvData >> slot; + recvData >> iconcolor; + recvData >> bordercolor; + recvData >> icon; + recvData >> background; + recvData >> border; + name = recvData.ReadString(recvData.ReadBits(8)); + + uint8 type = ArenaTeam::GetTypeBySlot(slot); + + if (_player->GetArenaTeamId(slot)) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName(), ERR_ALREADY_IN_ARENA_TEAM_S); + return; + } + + if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_INVALID); + return; + } + + if (sArenaTeamMgr->GetArenaTeamByName(name)) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S); + return; + } + + ArenaTeam* arenaTeam = new ArenaTeam; + if (!arenaTeam->Create(GUID_LOPART(_player->GetGUID()), type, name, background, icon, iconcolor, border, bordercolor)) + { + sLog->outError(LOG_FILTER_ARENAS, "Arena team create failed."); + delete arenaTeam; + return; + } + + sArenaTeamMgr->AddArenaTeam(arenaTeam); + + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_CREATED); +} + void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_INVITE"); @@ -112,6 +160,12 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recvData) return; } + if (arenaTeam->GetCaptain() != _player->GetGUID()) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS); + return; + } + // OK result but don't send invite if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) return; |