mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-20 23:11:56 -04:00
Core/Arenas: Refactor arena code and db layout
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
-- MySQL dump 10.13 Distrib 5.1.51, for pc-linux-gnu (i686)
|
||||
-- MySQL dump 10.13 Distrib 5.5.9, for Win64 (x86)
|
||||
--
|
||||
-- Host: localhost Database: characters
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 5.1.51-log
|
||||
-- Server version 5.5.9
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
@@ -63,7 +63,6 @@ LOCK TABLES `account_instance_times` WRITE;
|
||||
/*!40000 ALTER TABLE `account_instance_times` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `account_instance_times` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
--
|
||||
-- Table structure for table `account_tutorial`
|
||||
@@ -126,16 +125,22 @@ DROP TABLE IF EXISTS `arena_team`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `arena_team` (
|
||||
`arenateamid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`arenaTeamId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`name` varchar(24) NOT NULL,
|
||||
`captainguid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`captainGuid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`type` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`BackgroundColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`EmblemStyle` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`EmblemColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`BorderStyle` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`BorderColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`arenateamid`)
|
||||
`rating` smallint(5) unsigned NOT NULL,
|
||||
`seasonGames` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`seasonWins` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`weekGames` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`weekWins` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`rank` int(10) unsigned NOT NULL,
|
||||
`backgroundColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`emblemStyle` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`emblemColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`borderStyle` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`borderColor` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`arenaTeamId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
@@ -158,10 +163,11 @@ DROP TABLE IF EXISTS `arena_team_member`;
|
||||
CREATE TABLE `arena_team_member` (
|
||||
`arenateamid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`guid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`played_week` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`wons_week` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`played_season` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`wons_season` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`weekGames` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`weekWins` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`seasonGames` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`seasonWins` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`personalRating` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`arenateamid`,`guid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -175,34 +181,6 @@ LOCK TABLES `arena_team_member` WRITE;
|
||||
/*!40000 ALTER TABLE `arena_team_member` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `arena_team_stats`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `arena_team_stats`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `arena_team_stats` (
|
||||
`arenateamid` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`rating` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`games` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`wins` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`played` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`wins2` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`rank` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`arenateamid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `arena_team_stats`
|
||||
--
|
||||
|
||||
LOCK TABLES `arena_team_stats` WRITE;
|
||||
/*!40000 ALTER TABLE `arena_team_stats` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `arena_team_stats` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `auctionhouse`
|
||||
--
|
||||
@@ -397,8 +375,8 @@ DROP TABLE IF EXISTS `character_arena_stats`;
|
||||
CREATE TABLE `character_arena_stats` (
|
||||
`guid` int(10) NOT NULL,
|
||||
`slot` tinyint(3) NOT NULL,
|
||||
`personal_rating` int(10) NOT NULL,
|
||||
`matchmaker_rating` int(10) NOT NULL,
|
||||
`personalRating` smallint(5) NOT NULL,
|
||||
`matchMakerRating` smallint(5) NOT NULL,
|
||||
PRIMARY KEY (`guid`,`slot`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -2219,4 +2197,4 @@ UNLOCK TABLES;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2011-01-20 1:49:32
|
||||
-- Dump completed on 2011-04-04 21:03:41
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
-- Update arena_team table
|
||||
ALTER TABLE `arena_team`
|
||||
CHANGE `arenateamid` `arenaTeamId` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `captainguid` `captainGuid` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `BackgroundColor` `backgroundColor` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `EmblemStyle` `emblemStyle` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `EmblemColor` `emblemColor` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `BorderStyle` `borderStyle` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `BorderColor` `borderColor` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
ADD COLUMN `rating` SMALLINT(5) UNSIGNED NOT NULL AFTER `type`,
|
||||
ADD COLUMN `seasonGames` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `rating`,
|
||||
ADD COLUMN `seasonWins` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `seasonGames`,
|
||||
ADD COLUMN `weekGames` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `seasonWins`,
|
||||
ADD COLUMN `weekWins` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `weekGames`,
|
||||
ADD COLUMN `rank` INT(10) UNSIGNED NOT NULL AFTER `weekWins`;
|
||||
|
||||
-- Move data from arena_team_stats to new columns in arena_team
|
||||
UPDATE `arena_team` a, `arena_team_stats` s SET
|
||||
`a`.`rating` = `s`.`rating`,
|
||||
`a`.`seasonGames` = `s`.`played`,
|
||||
`a`.`seasonWins` = `s`.`wins2`,
|
||||
`a`.`weekGames` = `s`.`games`,
|
||||
`a`.`weekWins` = `s`.`wins`,
|
||||
`a`.`rank` = `s`.`rank`
|
||||
WHERE `a`.`arenaTeamId` = `s`.`arenateamid`;
|
||||
|
||||
-- Remove arena_team_stats table
|
||||
DROP TABLE `arena_team_stats`;
|
||||
|
||||
-- Update arena_team_member table
|
||||
ALTER TABLE `arena_team_member`
|
||||
CHANGE `arenateamid` `arenaTeamId` INT(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `played_week` `weekGames` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `wons_week` `weekWins` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `played_season` `seasonGames` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
CHANGE `wons_season` `seasonWins` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
ADD COLUMN `personalRating` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `seasonWins`;
|
||||
|
||||
-- Update character_arena_stats table
|
||||
ALTER TABLE `character_arena_stats`
|
||||
CHANGE `personal_rating` `personalRating` SMALLINT(5) NOT NULL,
|
||||
CHANGE `matchmaker_rating` `matchMakerRating` SMALLINT(5) NOT NULL;
|
||||
@@ -1492,7 +1492,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
if (ArenaTeam * at = sObjectMgr->GetArenaTeamById(arena_team_id))
|
||||
if (at->GetType() == reqTeamType)
|
||||
{
|
||||
SetCriteriaProgress(achievementCriteria, at->GetStats().rating, PROGRESS_HIGHEST);
|
||||
SetCriteriaProgress(achievementCriteria, at->GetStats().Rating, PROGRESS_HIGHEST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -72,16 +72,6 @@ ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
|
||||
ERR_ARENA_TEAM_LEVEL_TOO_LOW_I
|
||||
*/
|
||||
|
||||
enum ArenaTeamStatTypes
|
||||
{
|
||||
STAT_TYPE_RATING = 0,
|
||||
STAT_TYPE_GAMES_WEEK = 1,
|
||||
STAT_TYPE_WINS_WEEK = 2,
|
||||
STAT_TYPE_GAMES_SEASON = 3,
|
||||
STAT_TYPE_WINS_SEASON = 4,
|
||||
STAT_TYPE_RANK = 5
|
||||
};
|
||||
|
||||
enum ArenaTeamTypes
|
||||
{
|
||||
ARENA_TEAM_2v2 = 2,
|
||||
@@ -91,15 +81,15 @@ enum ArenaTeamTypes
|
||||
|
||||
struct ArenaTeamMember
|
||||
{
|
||||
uint64 guid;
|
||||
std::string name;
|
||||
uint64 Guid;
|
||||
std::string Name;
|
||||
uint8 Class;
|
||||
uint32 games_week;
|
||||
uint32 wins_week;
|
||||
uint32 games_season;
|
||||
uint32 wins_season;
|
||||
uint32 personal_rating;
|
||||
uint32 matchmaker_rating;
|
||||
uint16 WeekGames;
|
||||
uint16 WeekWins;
|
||||
uint16 SeasonGames;
|
||||
uint16 SeasonWins;
|
||||
uint16 PersonalRating;
|
||||
uint16 MatchMakerRating;
|
||||
|
||||
void ModifyPersonalRating(Player* plr, int32 mod, uint32 slot);
|
||||
void ModifyMatchmakerRating(int32 mod, uint32 slot);
|
||||
@@ -107,12 +97,12 @@ struct ArenaTeamMember
|
||||
|
||||
struct ArenaTeamStats
|
||||
{
|
||||
uint32 rating;
|
||||
uint32 games_week;
|
||||
uint32 wins_week;
|
||||
uint32 games_season;
|
||||
uint32 wins_season;
|
||||
uint32 rank;
|
||||
uint16 Rating;
|
||||
uint16 WeekGames;
|
||||
uint16 WeekWins;
|
||||
uint16 SeasonGames;
|
||||
uint16 SeasonWins;
|
||||
uint32 Rank;
|
||||
};
|
||||
|
||||
#define MAX_ARENA_SLOT 3 // 0..2 slots
|
||||
@@ -123,109 +113,84 @@ class ArenaTeam
|
||||
ArenaTeam();
|
||||
~ArenaTeam();
|
||||
|
||||
bool Create(uint64 captainGuid, uint32 type, std::string ArenaTeamName);
|
||||
void Disband(WorldSession *session);
|
||||
bool Create(uint32 captainGuid, uint8 type, std::string teamName, uint32 backgroundColor, uint8 emblemStyle, uint32 emblemColor, uint8 borderStyle, uint32 borderColor);
|
||||
void Disband(WorldSession* session);
|
||||
|
||||
typedef std::list<ArenaTeamMember> MemberList;
|
||||
|
||||
uint32 GetId() const { return m_TeamId; }
|
||||
uint32 GetType() const { return m_Type; }
|
||||
uint32 GetId() const { return TeamId; }
|
||||
uint32 GetType() const { return Type; }
|
||||
uint8 GetSlot() const { return GetSlotByType(GetType()); }
|
||||
static uint8 GetSlotByType(uint32 type);
|
||||
const uint64& GetCaptain() const { return m_CaptainGuid; }
|
||||
std::string GetName() const { return m_Name; }
|
||||
const ArenaTeamStats& GetStats() const { return m_stats; }
|
||||
void SetStats(uint32 stat_type, uint32 value);
|
||||
uint32 GetRating() const { return m_stats.rating; }
|
||||
uint32 GetAverageMMR(Group *group) const;
|
||||
const uint64& GetCaptain() const { return CaptainGuid; }
|
||||
std::string GetName() const { return TeamName; }
|
||||
const ArenaTeamStats& GetStats() const { return Stats; }
|
||||
|
||||
uint32 GetEmblemStyle() const { return m_EmblemStyle; }
|
||||
uint32 GetEmblemColor() const { return m_EmblemColor; }
|
||||
uint32 GetBorderStyle() const { return m_BorderStyle; }
|
||||
uint32 GetBorderColor() const { return m_BorderColor; }
|
||||
uint32 GetBackgroundColor() const { return m_BackgroundColor; }
|
||||
uint32 GetRating() const { return Stats.Rating; }
|
||||
uint32 GetAverageMMR(Group* group) const;
|
||||
|
||||
void SetCaptain(const uint64& guid);
|
||||
bool AddMember(const uint64& PlayerGuid);
|
||||
|
||||
// Shouldn't be const uint64& ed, because than can reference guid from members on Disband
|
||||
// and this method removes given record from list. So invalid reference can happen.
|
||||
void DelMember(uint64 guid);
|
||||
void DelMember(uint64 guid, bool cleanDb);
|
||||
|
||||
void SetEmblem(uint32 backgroundColor, uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor);
|
||||
size_t GetMembersSize() const { return Members.size(); }
|
||||
bool Empty() const { return Members.empty(); }
|
||||
MemberList::iterator m_membersBegin() { return Members.begin(); }
|
||||
MemberList::iterator m_membersEnd() { return Members.end(); }
|
||||
bool IsMember(const uint64& guid) const;
|
||||
|
||||
size_t GetMembersSize() const { return m_members.size(); }
|
||||
bool Empty() const { return m_members.empty(); }
|
||||
MemberList::iterator m_membersBegin() { return m_members.begin(); }
|
||||
MemberList::iterator m_membersEnd() { return m_members.end(); }
|
||||
bool HaveMember(const uint64& guid) const;
|
||||
|
||||
ArenaTeamMember* GetMember(const uint64& guid)
|
||||
{
|
||||
for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (itr->guid == guid)
|
||||
return &(*itr);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ArenaTeamMember* GetMember(const std::string& name)
|
||||
{
|
||||
for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (itr->name == name)
|
||||
return &(*itr);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
ArenaTeamMember* GetMember(const uint64& guid);
|
||||
ArenaTeamMember* GetMember(const std::string& name);
|
||||
|
||||
bool IsFighting() const;
|
||||
|
||||
bool LoadArenaTeamFromDB(QueryResult arenaTeamDataResult);
|
||||
bool LoadMembersFromDB(QueryResult arenaTeamMembersResult);
|
||||
void LoadStatsFromDB(uint32 ArenaTeamId);
|
||||
|
||||
void SaveToDB();
|
||||
|
||||
void BroadcastPacket(WorldPacket *packet);
|
||||
void BroadcastPacket(WorldPacket* packet);
|
||||
void BroadcastEvent(ArenaTeamEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3);
|
||||
void NotifyStatsChanged();
|
||||
|
||||
void Roster(WorldSession *session);
|
||||
void Query(WorldSession *session);
|
||||
void Stats(WorldSession *session);
|
||||
void InspectStats(WorldSession *session, uint64 guid);
|
||||
void Roster(WorldSession* session);
|
||||
void Query(WorldSession* session);
|
||||
void SendStats(WorldSession* session);
|
||||
void Inspect(WorldSession* session, uint64 guid);
|
||||
|
||||
uint32 GetPoints(uint32 MemberRating);
|
||||
int32 GetRatingMod(uint32 own_rating, uint32 enemy_rating, bool won, bool calculating_mmr = false);
|
||||
int32 GetPersonalRatingMod(int32 base_rating, uint32 own_rating, uint32 enemy_rating);
|
||||
float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating);
|
||||
int32 WonAgainst(uint32 againstRating);
|
||||
void MemberWon(Player * plr, uint32 againstMatchmakerRating, int32 teamratingchange = 12);
|
||||
int32 LostAgainst(uint32 againstRating);
|
||||
void MemberLost(Player * plr, uint32 againstMatchmakerRating, int32 teamratingchange = -12);
|
||||
void OfflineMemberLost(uint64 guid, uint32 againstMatchmakerRating, int32 teamratingchange = -12);
|
||||
int32 GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won, bool calculating_mmr = false);
|
||||
int32 GetPersonalRatingMod(int32 base_rating, uint32 ownRating, uint32 opponentRating);
|
||||
float GetChanceAgainst(uint32 ownRating, uint32 opponentRating);
|
||||
int32 WonAgainst(uint32 againstRating);
|
||||
void MemberWon(Player* plr, uint32 againstMatchmakerRating, int32 teamratingchange = 12);
|
||||
int32 LostAgainst(uint32 againstRating);
|
||||
void MemberLost(Player* plr, uint32 againstMatchmakerRating, int32 teamratingchange = -12);
|
||||
void OfflineMemberLost(uint64 guid, uint32 againstMatchmakerRating, int32 teamratingchange = -12);
|
||||
|
||||
void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
|
||||
|
||||
void NotifyStatsChanged();
|
||||
|
||||
void FinishWeek();
|
||||
void FinishGame(int32 mod);
|
||||
|
||||
protected:
|
||||
|
||||
uint32 m_TeamId;
|
||||
uint32 m_Type;
|
||||
std::string m_Name;
|
||||
uint64 m_CaptainGuid;
|
||||
uint32 TeamId;
|
||||
uint8 Type;
|
||||
std::string TeamName;
|
||||
uint64 CaptainGuid;
|
||||
|
||||
uint32 m_BackgroundColor; // ARGB format
|
||||
uint32 m_EmblemStyle; // icon id
|
||||
uint32 m_EmblemColor; // ARGB format
|
||||
uint32 m_BorderStyle; // border image id
|
||||
uint32 m_BorderColor; // ARGB format
|
||||
uint32 BackgroundColor; // ARGB format
|
||||
uint8 EmblemStyle; // icon id
|
||||
uint32 EmblemColor; // ARGB format
|
||||
uint8 BorderStyle; // border image id
|
||||
uint32 BorderColor; // ARGB format
|
||||
|
||||
MemberList m_members;
|
||||
ArenaTeamStats m_stats;
|
||||
MemberList Members;
|
||||
ArenaTeamStats Stats;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -775,7 +775,7 @@ void Battleground::EndBattleground(uint32 winner)
|
||||
// update achievement BEFORE personal rating update
|
||||
ArenaTeamMember* member = winner_arena_team->GetMember(plr->GetGUID());
|
||||
if (member)
|
||||
plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, member->personal_rating);
|
||||
plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, member->PersonalRating);
|
||||
|
||||
winner_arena_team->MemberWon(plr,loser_matchmaker_rating, winner_change);
|
||||
}
|
||||
|
||||
@@ -16225,6 +16225,7 @@ void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
|
||||
{
|
||||
// arenateamid, played_week, played_season, personal_rating
|
||||
memset((void*)&m_uint32Values[PLAYER_FIELD_ARENA_TEAM_INFO_1_1], 0, sizeof(uint32) * MAX_ARENA_SLOT * ARENA_TEAM_END);
|
||||
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
@@ -16232,63 +16233,46 @@ void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint32 arenateamid = fields[0].GetUInt32();
|
||||
uint32 played_week = fields[1].GetUInt32();
|
||||
uint32 played_season = fields[2].GetUInt32();
|
||||
uint32 wons_season = fields[3].GetUInt32();
|
||||
uint32 arenaTeamId = fields[0].GetUInt32();
|
||||
|
||||
ArenaTeam* aTeam = sObjectMgr->GetArenaTeamById(arenateamid);
|
||||
if (!aTeam)
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (!arenaTeam)
|
||||
{
|
||||
sLog->outError("Player::_LoadArenaTeamInfo: couldn't load arenateam %u", arenateamid);
|
||||
sLog->outError("Player::_LoadArenaTeamInfo: couldn't load arenateam %u", arenaTeamId);
|
||||
continue;
|
||||
}
|
||||
|
||||
uint8 arenaSlot = aTeam->GetSlot();
|
||||
uint8 arenaSlot = arenaTeam->GetSlot();
|
||||
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_ID, arenateamid);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_TYPE, aTeam->GetType());
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_MEMBER, (aTeam->GetCaptain() == GetGUID()) ? 0 : 1);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_WEEK, played_week);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_SEASON, played_season);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_WINS_SEASON, wons_season);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_ID, arenaTeamId);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_TYPE, arenaTeam->GetType());
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_MEMBER, (arenaTeam->GetCaptain() == GetGUID()) ? 0 : 1);
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_WEEK, uint32(fields[1].GetUInt16()));
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_SEASON, uint32(fields[2].GetUInt16()));
|
||||
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_WINS_SEASON, uint32(fields[3].GetUInt16()));
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
void Player::_LoadArenaStatsInfo(PreparedQueryResult result)
|
||||
{
|
||||
uint8 slot = 0;
|
||||
if (!result)
|
||||
uint16 personalRatingCache[] = {0, 0, 0};
|
||||
|
||||
if (result)
|
||||
{
|
||||
for (; slot <= 2; ++slot)
|
||||
do
|
||||
{
|
||||
CharacterDatabase.PExecute("INSERT INTO character_arena_stats (guid, slot, personal_rating, matchmaker_rating) VALUES (%u, %u, 0, 1500)", GetGUIDLow(), slot);
|
||||
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, 0);
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
personalRatingCache[fields[0].GetUInt8()] = fields[1].GetUInt16();
|
||||
}
|
||||
return;
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
do
|
||||
for (uint8 slot = 0; slot <= 2; ++slot)
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint32 personalrating = 0;
|
||||
uint32 matchmakerrating = 1500;
|
||||
if (fields[0].GetUInt8() > slot)
|
||||
{
|
||||
CharacterDatabase.PExecute("INSERT INTO character_arena_stats (guid, slot, personal_rating, matchmaker_rating) VALUES (%u, %u, %u, %u)", GetGUIDLow(), slot, personalrating, matchmakerrating);
|
||||
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, personalrating);
|
||||
slot++;
|
||||
continue;
|
||||
}
|
||||
|
||||
personalrating = fields[1].GetUInt32();
|
||||
matchmakerrating = fields[2].GetUInt32();
|
||||
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, personalrating);
|
||||
slot++;
|
||||
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, uint32(personalRatingCache[slot]));
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
void Player::_LoadEquipmentSets(PreparedQueryResult result)
|
||||
@@ -16549,7 +16533,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
|
||||
continue;
|
||||
|
||||
if (ArenaTeam * at = sObjectMgr->GetArenaTeamById(arena_team_id))
|
||||
if (at->HaveMember(GetGUID()))
|
||||
if (at->IsMember(GetGUID()))
|
||||
continue;
|
||||
|
||||
// arena team not exist or not member, cleanup fields
|
||||
@@ -19732,21 +19716,25 @@ void Player::RemovePetitionsAndSigns(uint64 guid, uint32 type)
|
||||
|
||||
void Player::LeaveAllArenaTeams(uint64 guid)
|
||||
{
|
||||
QueryResult result = CharacterDatabase.PQuery("SELECT arena_team_member.arenateamid FROM arena_team_member JOIN arena_team ON arena_team_member.arenateamid = arena_team.arenateamid WHERE guid='%u'", GUID_LOPART(guid));
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ARENA_TEAMS);
|
||||
stmt->setUInt32(0, GUID_LOPART(guid));
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
uint32 at_id = fields[0].GetUInt32();
|
||||
if (at_id != 0)
|
||||
Field* fields = result->Fetch();
|
||||
uint32 arenaTeamId = fields[0].GetUInt32();
|
||||
if (arenaTeamId != 0)
|
||||
{
|
||||
ArenaTeam * at = sObjectMgr->GetArenaTeamById(at_id);
|
||||
if (at)
|
||||
at->DelMember(guid);
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (arenaTeam)
|
||||
arenaTeam->DelMember(guid, true);
|
||||
}
|
||||
} while (result->NextRow());
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
void Player::SetRestBonus (float rest_bonus_new)
|
||||
|
||||
@@ -3961,11 +3961,14 @@ void ObjectMgr::LoadArenaTeams()
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
// 0 1 2 3 4 5
|
||||
QueryResult result = CharacterDatabase.Query("SELECT arena_team.arenateamid,name,captainguid,type,BackgroundColor,EmblemStyle,"
|
||||
// 6 7 8 9 10 11 12 13 14
|
||||
"EmblemColor,BorderStyle,BorderColor, rating,games,wins,played,wins2,rank "
|
||||
"FROM arena_team LEFT JOIN arena_team_stats ON arena_team.arenateamid = arena_team_stats.arenateamid ORDER BY arena_team.arenateamid ASC");
|
||||
// Clean out the trash before loading anything
|
||||
CharacterDatabase.Execute("DELETE FROM arena_team_member WHERE arenaTeamId NOT IN (SELECT arenaTeamId FROM arena_team)");
|
||||
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
QueryResult result = CharacterDatabase.Query("SELECT arena_team.arenaTeamId, name, captainGuid, type, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor,"
|
||||
// 9 10 11 12 13 14
|
||||
"rating, seasonGames, seasonWins, weekGames, weekWins, rank FROM arena_team ORDER BY arena_team.arenaTeamId ASC");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
@@ -3974,30 +3977,29 @@ void ObjectMgr::LoadArenaTeams()
|
||||
return;
|
||||
}
|
||||
|
||||
// load arena_team members
|
||||
QueryResult arenaTeamMembersResult = CharacterDatabase.Query(
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
"SELECT arenateamid,member.guid,played_week,wons_week,played_season,wons_season,name,class "
|
||||
"FROM arena_team_member member LEFT JOIN characters chars on member.guid = chars.guid ORDER BY member.arenateamid ASC");
|
||||
QueryResult result2 = CharacterDatabase.Query(
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
"SELECT arenaTeamId, atm.guid, atm.weekGames, atm.weekWins, atm.seasonGames, atm.seasonWins, c.name, class, personalRating, matchMakerRating FROM arena_team_member atm"
|
||||
" INNER JOIN arena_team ate USING (arenaTeamId)"
|
||||
" LEFT JOIN characters AS c ON atm.guid = c.guid"
|
||||
" LEFT JOIN character_arena_stats AS cas ON c.guid = cas.guid AND (cas.slot = 0 AND ate.type = 2 OR cas.slot = 1 AND ate.type = 3 OR cas.slot = 2 AND ate.type = 5)"
|
||||
" ORDER BY atm.arenateamid ASC");
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
do
|
||||
{
|
||||
//Field *fields = result->Fetch();
|
||||
ArenaTeam* newArenaTeam = new ArenaTeam;
|
||||
|
||||
++count;
|
||||
|
||||
ArenaTeam *newArenaTeam = new ArenaTeam;
|
||||
if (!newArenaTeam->LoadArenaTeamFromDB(result) ||
|
||||
!newArenaTeam->LoadMembersFromDB(arenaTeamMembersResult))
|
||||
if (!newArenaTeam->LoadArenaTeamFromDB(result) || !newArenaTeam->LoadMembersFromDB(result2))
|
||||
{
|
||||
newArenaTeam->Disband(NULL);
|
||||
delete newArenaTeam;
|
||||
continue;
|
||||
}
|
||||
AddArenaTeam(newArenaTeam);
|
||||
}while (result->NextRow());
|
||||
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
|
||||
sLog->outString();
|
||||
sLog->outString(">> Loaded %u arena team definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
|
||||
@@ -27,74 +27,74 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "SocialMgr.h"
|
||||
|
||||
void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "MSG_INSPECT_ARENA_TEAMS");
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
recvData >> guid;
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));
|
||||
|
||||
if (Player *plr = sObjectMgr->GetPlayer(guid))
|
||||
if (Player* player = sObjectMgr->GetPlayer(guid))
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)
|
||||
{
|
||||
if (uint32 a_id = plr->GetArenaTeamId(i))
|
||||
if (uint32 a_id = player->GetArenaTeamId(i))
|
||||
{
|
||||
if (ArenaTeam *at = sObjectMgr->GetArenaTeamById(a_id))
|
||||
at->InspectStats(this, plr->GetGUID());
|
||||
if (ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(a_id))
|
||||
arenaTeam->Inspect(this, player->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamQueryOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamQueryOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ARENA_TEAM_QUERY");
|
||||
|
||||
uint32 ArenaTeamId;
|
||||
recv_data >> ArenaTeamId;
|
||||
uint32 arenaTeamId;
|
||||
recvData >> arenaTeamId;
|
||||
|
||||
if (ArenaTeam *arenateam = sObjectMgr->GetArenaTeamById(ArenaTeamId))
|
||||
if (ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId))
|
||||
{
|
||||
arenateam->Query(this);
|
||||
arenateam->Stats(this);
|
||||
arenaTeam->Query(this);
|
||||
arenaTeam->SendStats(this);
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamRosterOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamRosterOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ARENA_TEAM_ROSTER");
|
||||
|
||||
uint32 ArenaTeamId; // arena team id
|
||||
recv_data >> ArenaTeamId;
|
||||
uint32 arenaTeamId; // arena team id
|
||||
recvData >> arenaTeamId;
|
||||
|
||||
if (ArenaTeam *arenateam = sObjectMgr->GetArenaTeamById(ArenaTeamId))
|
||||
arenateam->Roster(this);
|
||||
if (ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId))
|
||||
arenaTeam->Roster(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_INVITE");
|
||||
|
||||
uint32 ArenaTeamId; // arena team id
|
||||
std::string Invitedname;
|
||||
uint32 arenaTeamId; // arena team id
|
||||
std::string invitedName;
|
||||
|
||||
Player * player = NULL;
|
||||
Player* player = NULL;
|
||||
|
||||
recv_data >> ArenaTeamId >> Invitedname;
|
||||
recvData >> arenaTeamId >> invitedName;
|
||||
|
||||
if (!Invitedname.empty())
|
||||
if (!invitedName.empty())
|
||||
{
|
||||
if (!normalizePlayerName(Invitedname))
|
||||
if (!normalizePlayerName(invitedName))
|
||||
return;
|
||||
|
||||
player = sObjectAccessor->FindPlayerByName(Invitedname.c_str());
|
||||
player = sObjectAccessor->FindPlayerByName(invitedName.c_str());
|
||||
}
|
||||
|
||||
if (!player)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", Invitedname, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S);
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", invitedName, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -104,14 +104,14 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||
return;
|
||||
}
|
||||
|
||||
ArenaTeam *arenateam = sObjectMgr->GetArenaTeamById(ArenaTeamId);
|
||||
if (!arenateam)
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (!arenaTeam)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM);
|
||||
return;
|
||||
}
|
||||
|
||||
// OK result but not send invite
|
||||
// OK result but don't send invite
|
||||
if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
|
||||
return;
|
||||
|
||||
@@ -121,7 +121,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->GetArenaTeamId(arenateam->GetSlot()))
|
||||
if (player->GetArenaTeamId(arenaTeam->GetSlot()))
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", player->GetName(), ERR_ALREADY_IN_ARENA_TEAM_S);
|
||||
return;
|
||||
@@ -133,19 +133,19 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||
return;
|
||||
}
|
||||
|
||||
if (arenateam->GetMembersSize() >= arenateam->GetType() * 2)
|
||||
if (arenaTeam->GetMembersSize() >= arenaTeam->GetType() * 2)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, arenateam->GetName(), "", ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S);
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, arenaTeam->GetName(), "", ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S);
|
||||
return;
|
||||
}
|
||||
|
||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Player %s Invited %s to Join his ArenaTeam", GetPlayer()->GetName(), Invitedname.c_str());
|
||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Player %s Invited %s to Join his ArenaTeam", GetPlayer()->GetName(), invitedName.c_str());
|
||||
|
||||
player->SetArenaTeamIdInvited(arenateam->GetId());
|
||||
player->SetArenaTeamIdInvited(arenaTeam->GetId());
|
||||
|
||||
WorldPacket data(SMSG_ARENA_TEAM_INVITE, (8+10));
|
||||
data << GetPlayer()->GetName();
|
||||
data << arenateam->GetName();
|
||||
data << arenaTeam->GetName();
|
||||
player->GetSession()->SendPacket(&data);
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_ARENA_TEAM_INVITE");
|
||||
@@ -155,112 +155,117 @@ void WorldSession::HandleArenaTeamAcceptOpcode(WorldPacket & /*recv_data*/)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_ACCEPT"); // empty opcode
|
||||
|
||||
ArenaTeam *at = sObjectMgr->GetArenaTeamById(_player->GetArenaTeamIdInvited());
|
||||
if (!at)
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(_player->GetArenaTeamIdInvited());
|
||||
if (!arenaTeam)
|
||||
return;
|
||||
|
||||
if (_player->GetArenaTeamId(at->GetSlot()))
|
||||
// Check if player is already in another team of the same size
|
||||
if (_player->GetArenaTeamId(arenaTeam->GetSlot()))
|
||||
{
|
||||
// already in arena team that size
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ALREADY_IN_ARENA_TEAM);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(at->GetCaptain()))
|
||||
// Only allow members of the other faction to join the team if cross faction interaction is enabled
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(arenaTeam->GetCaptain()))
|
||||
{
|
||||
// not let enemies sign petition
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!at->AddMember(_player->GetGUID()))
|
||||
// Add player to team
|
||||
if (!arenaTeam->AddMember(_player->GetGUID()))
|
||||
{
|
||||
// arena team not found
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ARENA_TEAM_INTERNAL);
|
||||
return;
|
||||
}
|
||||
|
||||
// event
|
||||
at->BroadcastEvent(ERR_ARENA_TEAM_JOIN_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), "");
|
||||
// Broadcast event
|
||||
arenaTeam->BroadcastEvent(ERR_ARENA_TEAM_JOIN_SS, _player->GetGUID(), 2, _player->GetName(), arenaTeam->GetName(), "");
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamDeclineOpcode(WorldPacket & /*recv_data*/)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_DECLINE"); // empty opcode
|
||||
|
||||
_player->SetArenaTeamIdInvited(0); // no more invited
|
||||
// Remove invite from player
|
||||
_player->SetArenaTeamIdInvited(0);
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_LEAVE");
|
||||
|
||||
uint32 ArenaTeamId; // arena team id
|
||||
recv_data >> ArenaTeamId;
|
||||
uint32 arenaTeamId;
|
||||
recvData >> arenaTeamId;
|
||||
|
||||
ArenaTeam *at = sObjectMgr->GetArenaTeamById(ArenaTeamId);
|
||||
if (!at)
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (!arenaTeam)
|
||||
return;
|
||||
|
||||
if (_player->GetGUID() == at->GetCaptain() && at->GetMembersSize() > 1)
|
||||
// Team captain can't leave the team if other members are still present
|
||||
if (_player->GetGUID() == arenaTeam->GetCaptain() && arenaTeam->GetMembersSize() > 1)
|
||||
{
|
||||
// check for correctness
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S);
|
||||
return;
|
||||
}
|
||||
|
||||
// arena team has only one member (=captain)
|
||||
if (_player->GetGUID() == at->GetCaptain())
|
||||
// If team consists only of the captain, disband the team
|
||||
if (_player->GetGUID() == arenaTeam->GetCaptain())
|
||||
{
|
||||
at->Disband(this);
|
||||
delete at;
|
||||
arenaTeam->Disband(this);
|
||||
delete arenaTeam;
|
||||
return;
|
||||
}
|
||||
else
|
||||
arenaTeam->DelMember(_player->GetGUID(), true);
|
||||
|
||||
at->DelMember(_player->GetGUID());
|
||||
// Broadcast event
|
||||
arenaTeam->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetGUID(), 2, _player->GetName(), arenaTeam->GetName(), "");
|
||||
|
||||
// event
|
||||
at->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), "");
|
||||
|
||||
// send you are no longer member of team
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, at->GetName(), "", 0);
|
||||
// Inform player who left
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, arenaTeam->GetName(), "", 0);
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamDisbandOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamDisbandOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_DISBAND");
|
||||
|
||||
uint32 ArenaTeamId; // arena team id
|
||||
recv_data >> ArenaTeamId;
|
||||
uint32 arenaTeamId;
|
||||
recvData >> arenaTeamId;
|
||||
|
||||
if (ArenaTeam *at = sObjectMgr->GetArenaTeamById(ArenaTeamId))
|
||||
if (ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId))
|
||||
{
|
||||
if (at->GetCaptain() != _player->GetGUID())
|
||||
// Only captain can disband the team
|
||||
if (arenaTeam->GetCaptain() != _player->GetGUID())
|
||||
return;
|
||||
|
||||
if (at->IsFighting())
|
||||
// Teams cannot be disbanded during fights
|
||||
if (arenaTeam->IsFighting())
|
||||
return;
|
||||
|
||||
at->Disband(this);
|
||||
delete at;
|
||||
arenaTeam->Disband(this);
|
||||
delete arenaTeam;
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_REMOVE");
|
||||
|
||||
uint32 ArenaTeamId;
|
||||
uint32 arenaTeamId;
|
||||
std::string name;
|
||||
|
||||
recv_data >> ArenaTeamId;
|
||||
recv_data >> name;
|
||||
recvData >> arenaTeamId;
|
||||
recvData >> name;
|
||||
|
||||
ArenaTeam *at = sObjectMgr->GetArenaTeamById(ArenaTeamId);
|
||||
if (!at) // arena team not found
|
||||
// Check for valid arena team
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (!arenaTeam)
|
||||
return;
|
||||
|
||||
if (at->GetCaptain() != _player->GetGUID())
|
||||
// Only captain can remove members
|
||||
if (arenaTeam->GetCaptain() != _player->GetGUID())
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS);
|
||||
return;
|
||||
@@ -269,40 +274,44 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data)
|
||||
if (!normalizePlayerName(name))
|
||||
return;
|
||||
|
||||
ArenaTeamMember* member = at->GetMember(name);
|
||||
if (!member) // member not found
|
||||
// Check if team member exists
|
||||
ArenaTeamMember* member = arenaTeam->GetMember(name);
|
||||
if (!member)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", name, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S);
|
||||
return;
|
||||
}
|
||||
|
||||
if (at->GetCaptain() == member->guid)
|
||||
// Captain cannot be removed
|
||||
if (arenaTeam->GetCaptain() == member->Guid)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S);
|
||||
return;
|
||||
}
|
||||
|
||||
at->DelMember(member->guid);
|
||||
arenaTeam->DelMember(member->Guid, true);
|
||||
|
||||
// event
|
||||
at->BroadcastEvent(ERR_ARENA_TEAM_REMOVE_SSS, 0, 3, name, at->GetName(), _player->GetName());
|
||||
// Broadcast event
|
||||
arenaTeam->BroadcastEvent(ERR_ARENA_TEAM_REMOVE_SSS, 0, 3, name, arenaTeam->GetName(), _player->GetName());
|
||||
}
|
||||
|
||||
void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data)
|
||||
void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recvData)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_ARENA_TEAM_LEADER");
|
||||
|
||||
uint32 ArenaTeamId;
|
||||
uint32 arenaTeamId;
|
||||
std::string name;
|
||||
|
||||
recv_data >> ArenaTeamId;
|
||||
recv_data >> name;
|
||||
recvData >> arenaTeamId;
|
||||
recvData >> name;
|
||||
|
||||
ArenaTeam *at = sObjectMgr->GetArenaTeamById(ArenaTeamId);
|
||||
if (!at) // arena team not found
|
||||
// Check for valid arena team
|
||||
ArenaTeam* arenaTeam = sObjectMgr->GetArenaTeamById(arenaTeamId);
|
||||
if (!arenaTeam)
|
||||
return;
|
||||
|
||||
if (at->GetCaptain() != _player->GetGUID())
|
||||
// Only captain can pass leadership
|
||||
if (arenaTeam->GetCaptain() != _player->GetGUID())
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS);
|
||||
return;
|
||||
@@ -311,29 +320,31 @@ void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data)
|
||||
if (!normalizePlayerName(name))
|
||||
return;
|
||||
|
||||
ArenaTeamMember* member = at->GetMember(name);
|
||||
if (!member) // member not found
|
||||
// Check if team member exists
|
||||
ArenaTeamMember* member = arenaTeam->GetMember(name);
|
||||
if (!member)
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", name, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S);
|
||||
return;
|
||||
}
|
||||
|
||||
if (at->GetCaptain() == member->guid) // target player already captain
|
||||
// Check if the target is already team captain
|
||||
if (arenaTeam->GetCaptain() == member->Guid)
|
||||
return;
|
||||
|
||||
at->SetCaptain(member->guid);
|
||||
arenaTeam->SetCaptain(member->Guid);
|
||||
|
||||
// event
|
||||
at->BroadcastEvent(ERR_ARENA_TEAM_LEADER_CHANGED_SSS, 0, 3, _player->GetName(), name, at->GetName());
|
||||
// Broadcast event
|
||||
arenaTeam->BroadcastEvent(ERR_ARENA_TEAM_LEADER_CHANGED_SSS, 0, 3, _player->GetName(), name, arenaTeam->GetName());
|
||||
}
|
||||
|
||||
void WorldSession::SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id)
|
||||
void WorldSession::SendArenaTeamCommandResult(uint32 teamAction, const std::string& team, const std::string& player, uint32 errorId)
|
||||
{
|
||||
WorldPacket data(SMSG_ARENA_TEAM_COMMAND_RESULT, 4+team.length()+1+player.length()+1+4);
|
||||
data << uint32(team_action);
|
||||
data << uint32(teamAction);
|
||||
data << team;
|
||||
data << player;
|
||||
data << uint32(error_id);
|
||||
data << uint32(errorId);
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
|
||||
@@ -695,22 +695,30 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
|
||||
|
||||
void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_TURN_IN_PETITION"); // ok
|
||||
//recv_data.hexlike();
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_TURN_IN_PETITION");
|
||||
|
||||
// Get petition guid from packet
|
||||
WorldPacket data;
|
||||
uint64 petitionguid;
|
||||
uint64 petitionGuid;
|
||||
|
||||
recv_data >> petitionGuid;
|
||||
|
||||
// Check if player really has the required petition charter
|
||||
Item* item = _player->GetItemByGuid(petitionGuid);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition %u turned in by %u", GUID_LOPART(petitionGuid), _player->GetGUIDLow());
|
||||
|
||||
// Get petition data from db
|
||||
uint32 ownerguidlo;
|
||||
uint32 type;
|
||||
std::string name;
|
||||
|
||||
recv_data >> petitionguid;
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PETITION);
|
||||
stmt->setUInt32(0, GUID_LOPART(petitionGuid));
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition %u turned in by %u", GUID_LOPART(petitionguid), _player->GetGUIDLow());
|
||||
|
||||
// data
|
||||
QueryResult result = CharacterDatabase.PQuery("SELECT ownerguid, name, type FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
|
||||
if (result)
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
@@ -720,63 +728,27 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog->outError("petition table has broken data!");
|
||||
sLog->outError("Player %s (guid: %u) tried to turn in petition (guid: %u) that is not present in the database", _player->GetName(), _player->GetGUIDLow(), GUID_LOPART(petitionGuid));
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == GUILD_CHARTER_TYPE)
|
||||
{
|
||||
if (_player->GetGuildId())
|
||||
{
|
||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
data << (uint32)PETITION_TURN_ALREADY_IN_GUILD; // already in guild
|
||||
_player->GetSession()->SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint8 slot = ArenaTeam::GetSlotByType(type);
|
||||
if (slot >= MAX_ARENA_SLOT)
|
||||
return;
|
||||
|
||||
if (_player->GetArenaTeamId(slot))
|
||||
{
|
||||
//data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
//data << (uint32)PETITION_TURN_ALREADY_IN_GUILD; // already in guild
|
||||
//_player->GetSession()->SendPacket(&data);
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Only the petition owner can turn in the petition
|
||||
if (_player->GetGUIDLow() != ownerguidlo)
|
||||
return;
|
||||
|
||||
// signs
|
||||
uint8 signs;
|
||||
result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
|
||||
if (result)
|
||||
signs = uint8(result->GetRowCount());
|
||||
else
|
||||
signs = 0;
|
||||
|
||||
uint32 count;
|
||||
//if (signs < sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS))
|
||||
if (type == GUILD_CHARTER_TYPE)
|
||||
count = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
|
||||
else
|
||||
count = type-1;
|
||||
if (signs < count)
|
||||
{
|
||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES; // need more signatures...
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Petition type (guild/arena) specific checks
|
||||
if (type == GUILD_CHARTER_TYPE)
|
||||
{
|
||||
// Check if player is already in a guild
|
||||
if (_player->GetGuildId())
|
||||
{
|
||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
data << (uint32)PETITION_TURN_ALREADY_IN_GUILD;
|
||||
_player->GetSession()->SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if guild name is already taken
|
||||
if (sObjectMgr->GetGuildByName(name))
|
||||
{
|
||||
Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, name);
|
||||
@@ -785,6 +757,19 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Check for valid arena bracket (2v2, 3v3, 5v5)
|
||||
uint8 slot = ArenaTeam::GetSlotByType(type);
|
||||
if (slot >= MAX_ARENA_SLOT)
|
||||
return;
|
||||
|
||||
// Check if player is already in an arena team
|
||||
if (_player->GetArenaTeamId(slot))
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if arena team name is already taken
|
||||
if (sObjectMgr->GetArenaTeamByName(name))
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
|
||||
@@ -792,73 +777,97 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||
}
|
||||
}
|
||||
|
||||
// and at last charter item check
|
||||
Item *item = _player->GetItemByGuid(petitionguid);
|
||||
if (!item)
|
||||
// Get petition signatures from db
|
||||
uint8 signatures;
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PETITION_SIGNATURE);
|
||||
stmt->setUInt32(0, GUID_LOPART(petitionGuid));
|
||||
result = CharacterDatabase.Query(stmt);
|
||||
|
||||
if (result)
|
||||
signatures = uint8(result->GetRowCount());
|
||||
else
|
||||
signatures = 0;
|
||||
|
||||
uint32 requiredSignatures;
|
||||
if (type == GUILD_CHARTER_TYPE)
|
||||
requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
|
||||
else
|
||||
requiredSignatures = type-1;
|
||||
|
||||
// Notify player if signatures are missing
|
||||
if (signatures < requiredSignatures)
|
||||
{
|
||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES;
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
// OK!
|
||||
// Proceed with guild/arena team creation
|
||||
|
||||
// delete charter item
|
||||
// Delete charter item
|
||||
_player->DestroyItem(item->GetBagSlot(),item->GetSlot(), true);
|
||||
|
||||
if (type == GUILD_CHARTER_TYPE) // create guild
|
||||
if (type == GUILD_CHARTER_TYPE)
|
||||
{
|
||||
// Create guild
|
||||
Guild* guild = new Guild;
|
||||
|
||||
if (!guild->Create(_player, name))
|
||||
{
|
||||
delete guild;
|
||||
return;
|
||||
}
|
||||
|
||||
// register guild and add guildmaster
|
||||
// Register guild and add guild master
|
||||
sObjectMgr->AddGuild(guild);
|
||||
|
||||
// add members
|
||||
for (uint8 i = 0; i < signs; ++i)
|
||||
// Add members from signatures
|
||||
for (uint8 i = 0; i < signatures; ++i)
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
guild->AddMember(fields[0].GetUInt64());
|
||||
guild->AddMember(MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER));
|
||||
result->NextRow();
|
||||
}
|
||||
}
|
||||
else // or arena team
|
||||
else
|
||||
{
|
||||
ArenaTeam* at = new ArenaTeam;
|
||||
if (!at->Create(_player->GetGUID(), type, name))
|
||||
// Receive the rest of the packet in arena team creation case
|
||||
uint32 background, icon, iconcolor, border, bordercolor;
|
||||
recv_data >> background >> icon >> iconcolor >> border >> bordercolor;
|
||||
|
||||
// Create arena team
|
||||
ArenaTeam* arenaTeam = new ArenaTeam();
|
||||
|
||||
if (!arenaTeam->Create(_player->GetGUID(), type, name, background, icon, iconcolor, border, bordercolor))
|
||||
{
|
||||
sLog->outError("PetitionsHandler: arena team create failed.");
|
||||
delete at;
|
||||
delete arenaTeam;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 icon, iconcolor, border, bordercolor, backgroud;
|
||||
recv_data >> backgroud >> icon >> iconcolor >> border >> bordercolor;
|
||||
// Register arena team
|
||||
sObjectMgr->AddArenaTeam(arenaTeam);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "PetitonsHandler: Arena team (guid: %u) added to ObjectMgr", arenaTeam->GetId());
|
||||
|
||||
at->SetEmblem(backgroud, icon, iconcolor, border, bordercolor);
|
||||
|
||||
// register team and add captain
|
||||
sObjectMgr->AddArenaTeam(at);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "PetitonsHandler: arena team added to objmrg");
|
||||
|
||||
// add members
|
||||
for (uint8 i = 0; i < signs; ++i)
|
||||
// Add members
|
||||
for (uint8 i = 0; i < signatures; ++i)
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
uint64 memberGUID = fields[0].GetUInt64();
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "PetitionsHandler: adding arena member %u", GUID_LOPART(memberGUID));
|
||||
at->AddMember(memberGUID);
|
||||
uint32 memberGUID = fields[0].GetUInt32();
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "PetitionsHandler: Adding arena team (guid: %u) member %u", arenaTeam->GetId(), memberGUID);
|
||||
arenaTeam->AddMember(MAKE_NEW_GUID(memberGUID, 0, HIGHGUID_PLAYER));
|
||||
result->NextRow();
|
||||
}
|
||||
}
|
||||
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
trans->PAppend("DELETE FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
|
||||
trans->PAppend("DELETE FROM petition_sign WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
|
||||
trans->PAppend("DELETE FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid));
|
||||
trans->PAppend("DELETE FROM petition_sign WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid));
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
// created
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "TURN IN PETITION GUID %u", GUID_LOPART(petitionguid));
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "TURN IN PETITION GUID %u", GUID_LOPART(petitionGuid));
|
||||
|
||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||
data << (uint32)PETITION_TURN_OK;
|
||||
@@ -867,8 +876,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||
|
||||
void WorldSession::HandlePetitionShowListOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received CMSG_PETITION_SHOWLIST"); // ok
|
||||
//recv_data.hexlike();
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received CMSG_PETITION_SHOWLIST");
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
@@ -885,21 +893,12 @@ void WorldSession::SendPetitionShowList(uint64 guid)
|
||||
return;
|
||||
}
|
||||
|
||||
// remove fake death
|
||||
if (GetPlayer()->HasUnitState(UNIT_STAT_DIED))
|
||||
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
uint8 count = 0;
|
||||
if (pCreature->isTabardDesigner())
|
||||
count = 1;
|
||||
else
|
||||
count = 3;
|
||||
|
||||
WorldPacket data(SMSG_PETITION_SHOWLIST, 8+1+4*6);
|
||||
data << guid; // npc guid
|
||||
data << count; // count
|
||||
if (count == 1)
|
||||
|
||||
if (pCreature->isTabardDesigner())
|
||||
{
|
||||
data << uint8(1); // count
|
||||
data << uint32(1); // index
|
||||
data << uint32(GUILD_CHARTER); // charter entry
|
||||
data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||
@@ -909,6 +908,7 @@ void WorldSession::SendPetitionShowList(uint64 guid)
|
||||
}
|
||||
else
|
||||
{
|
||||
data << uint8(3); // count
|
||||
// 2v2
|
||||
data << uint32(1); // index
|
||||
data << uint32(ARENA_TEAM_CHARTER_2v2); // charter entry
|
||||
@@ -931,15 +931,7 @@ void WorldSession::SendPetitionShowList(uint64 guid)
|
||||
data << uint32(5); // unknown
|
||||
data << uint32(5); // required signs?
|
||||
}
|
||||
//for (uint8 i = 0; i < count; ++i)
|
||||
//{
|
||||
// data << uint32(i); // index
|
||||
// data << uint32(GUILD_CHARTER); // charter entry
|
||||
// data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||
// data << uint32(GUILD_CHARTER_COST+i); // charter cost
|
||||
// data << uint32(0); // unknown
|
||||
// data << uint32(9); // required signs?
|
||||
//}
|
||||
|
||||
SendPacket(&data);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Sent SMSG_PETITION_SHOWLIST");
|
||||
}
|
||||
|
||||
@@ -66,7 +66,6 @@ bool CharacterDatabaseConnection::Open()
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_GUILD, "SELECT guildid,rank FROM guild_member WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENAINFO, "SELECT arenateamid, played_week, played_season, wons_season FROM arena_team_member WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_CRITERIAPROGRESS, "SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, "
|
||||
@@ -76,7 +75,7 @@ bool CharacterDatabaseConnection::Open()
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_TALENTS, "SELECT spell, spec FROM character_talent WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_RANDOMBG, "SELECT guid FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENASTATS, "SELECT slot, personal_rating, matchmaker_rating FROM character_arena_stats WHERE guid = ? ORDER BY slot ASC", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENASTATS, "SELECT slot, personalRating FROM character_arena_stats WHERE guid = ? ORDER BY slot ASC", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_BANNED, "SELECT guid FROM character_banned WHERE guid = ? AND active = 1", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_QUESTSTATUSREW, "SELECT quest FROM character_queststatus_rewarded WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_ACCOUNT_INSTANCELOCKTIMES, "SELECT instanceId, releaseTime FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC)
|
||||
@@ -113,6 +112,8 @@ bool CharacterDatabaseConnection::Open()
|
||||
PREPARE_STATEMENT(CHAR_GET_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH)
|
||||
PREPARE_STATEMENT(CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, "DELETE FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_ADD_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_NAME_CLASS, "SELECT name, class FROM characters WHERE guid = ?", CONNECTION_SYNCH);
|
||||
PREPARE_STATEMENT(CHAR_LOAD_MATCH_MAKER_RATING, "SELECT matchMakerRating FROM character_arena_stats WHERE guid = ? AND slot = ?", CONNECTION_SYNCH);
|
||||
|
||||
// Guild handling
|
||||
// 0: uint32, 1: string, 2: uint32, 3: string, 4: string, 5: uint64, 6-10: uint32, 11: uint64
|
||||
@@ -282,6 +283,23 @@ bool CharacterDatabaseConnection::Open()
|
||||
PREPARE_STATEMENT(CHAR_DEL_GAME_EVENT_CONDITION_SAVE, "DELETE FROM game_event_condition_save WHERE eventEntry = ? AND condition_id = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_ADD_GAME_EVENT_CONDITION_SAVE, "INSERT INTO game_event_condition_save (eventEntry, condition_id, done) VALUES (?, ?, ?)", CONNECTION_ASYNC)
|
||||
|
||||
// Petitions
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PETITION, "SELECT ownerguid, name, type FROM petition WHERE petitionguid = ?", CONNECTION_SYNCH);
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PETITION_SIGNATURE, "SELECT playerguid FROM petition_sign WHERE petitionguid = ?", CONNECTION_SYNCH);
|
||||
|
||||
// Arena teams
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENAINFO, "SELECT arenaTeamId, weekGames, seasonGames, seasonWins FROM arena_team_member WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_ADD_ARENA_TEAM, "INSERT INTO arena_team (arenaTeamId, name, captainGuid, type, rating, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_SET_ARENA_TEAM_MEMBER, "INSERT INTO arena_team_member (arenaTeamId, guid) VALUES (?, ?)", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM, "DELETE FROM arena_team where arenaTeamId = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM_MEMBERS, "DELETE FROM arena_team_member WHERE arenaTeamId = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_CAPTAIN, "UPDATE arena_team SET captainGuid = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM_MEMBER, "DELETE FROM arena_team_member WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_STATS, "UPDATE arena_team SET rating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, rank = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_MEMBER_STATS, "REPLACE INTO character_arena_stats (guid, slot, personalRating, matchMakerRating) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENA_TEAMS, "SELECT arena_team_member.arenaTeamId FROM arena_team_member JOIN arena_team ON arena_team_member.arenaTeamId = arena_team.arenaTeamId WHERE guid = ?", CONNECTION_SYNCH);
|
||||
|
||||
for (PreparedStatementMap::const_iterator itr = m_queries.begin(); itr != m_queries.end(); ++itr)
|
||||
PrepareStatement(itr->first, itr->second.first, itr->second.second);
|
||||
|
||||
|
||||
@@ -117,6 +117,8 @@ enum CharacterDatabaseStatements
|
||||
CHAR_GET_ACCOUNT_BY_NAME,
|
||||
CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES,
|
||||
CHAR_ADD_ACCOUNT_INSTANCE_LOCK_TIMES,
|
||||
CHAR_LOAD_PLAYER_NAME_CLASS,
|
||||
CHAR_LOAD_MATCH_MAKER_RATING,
|
||||
|
||||
CHAR_ADD_GUILD,
|
||||
CHAR_DEL_GUILD,
|
||||
@@ -235,6 +237,21 @@ enum CharacterDatabaseStatements
|
||||
CHAR_DEL_GAME_EVENT_CONDITION_SAVE,
|
||||
CHAR_ADD_GAME_EVENT_CONDITION_SAVE,
|
||||
|
||||
CHAR_ADD_ARENA_TEAM,
|
||||
CHAR_SET_ARENA_TEAM_MEMBER,
|
||||
CHAR_DEL_ARENA_TEAM,
|
||||
CHAR_DEL_ARENA_TEAM_MEMBERS,
|
||||
CHAR_UPDATE_ARENA_TEAM_CAPTAIN,
|
||||
CHAR_DEL_ARENA_TEAM_MEMBER,
|
||||
CHAR_UPDATE_ARENA_TEAM_STATS,
|
||||
CHAR_UPDATE_ARENA_TEAM_MEMBER,
|
||||
CHAR_UPDATE_ARENA_TEAM_MEMBER_STATS,
|
||||
CHAR_LOAD_PLAYER_ARENA_TEAMS,
|
||||
|
||||
|
||||
CHAR_LOAD_PETITION,
|
||||
CHAR_LOAD_PETITION_SIGNATURE,
|
||||
|
||||
MAX_CHARACTERDATABASE_STATEMENTS,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user