diff options
Diffstat (limited to 'src/game/ArenaTeam.cpp')
-rw-r--r-- | src/game/ArenaTeam.cpp | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index c498ed33be4..0e2ea0d341d 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -297,34 +297,43 @@ void ArenaTeam::Disband(WorldSession *session) CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u'", Id); //< this should be alredy done by calling DelMember(memberGuids[j]); for each member CharacterDatabase.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", Id); CharacterDatabase.CommitTransaction(); - objmgr.RemoveArenaTeam(this); + objmgr.RemoveArenaTeam(Id); } void ArenaTeam::Roster(WorldSession *session) { Player *pl = NULL; + uint8 unk308 = 0; + WorldPacket data(SMSG_ARENA_TEAM_ROSTER, 100); data << uint32(GetId()); // arena team id + data << uint8(unk308); // 308 unknown value but affect packet structure data << uint32(GetMembersSize()); // members count data << uint32(GetType()); // arena team type? - for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { pl = objmgr.GetPlayer(itr->guid); - data << uint64(itr->guid); // guid - data << uint8((pl ? 1 : 0)); // online flag - data << itr->name; // member name + data << uint64(itr->guid); // guid + data << uint8((pl ? 1 : 0)); // online flag + data << itr->name; // member name data << uint32((itr->guid == GetCaptain() ? 0 : 1));// captain flag 0 captain 1 member - data << uint8((pl ? pl->getLevel() : 0)); // unknown, level? - data << uint8(itr->Class); // class - data << uint32(itr->games_week); // played this week - data << uint32(itr->wins_week); // wins this week - data << uint32(itr->games_season); // played this season - data << uint32(itr->wins_season); // wins this season - data << uint32(itr->personal_rating); // personal rating + data << uint8((pl ? pl->getLevel() : 0)); // unknown, level? + data << uint8(itr->Class); // class + data << uint32(itr->games_week); // played this week + data << uint32(itr->wins_week); // wins this week + data << uint32(itr->games_season); // played this season + data << uint32(itr->wins_season); // wins this season + data << uint32(itr->personal_rating); // personal rating + if(unk308) + { + data << float(0.0); // 308 unk + data << float(0.0); // 308 unk + } } + session->SendPacket(&data); sLog.outDebug("WORLD: Sent SMSG_ARENA_TEAM_ROSTER"); } @@ -361,7 +370,7 @@ void ArenaTeam::NotifyStatsChanged() { // this is called after a rated match ended // updates arena team stats for every member of the team (not only the ones who participated!) - for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player * plr = objmgr.GetPlayer(itr->guid); if(plr) @@ -434,7 +443,7 @@ void ArenaTeam::SetStats(uint32 stat_type, uint32 value) void ArenaTeam::BroadcastPacket(WorldPacket *packet) { - for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player *player = objmgr.GetPlayer(itr->guid); if(player) @@ -641,6 +650,19 @@ void ArenaTeam::FinishWeek() } } +bool ArenaTeam::IsFighting() const +{ + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) + { + if (Player *p = objmgr.GetPlayer(itr->guid)) + { + if (p->GetMap()->IsBattleArena()) + return true; + } + } + return false; +} + /* arenateam fields (id from 2.3.3 client): 1414 - arena team id 2v2 |