aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2012_08_04_01_world_player_classlevelstats_4x.sql1
-rwxr-xr-xsrc/server/authserver/Server/AuthSocket.cpp4
-rwxr-xr-xsrc/server/game/AI/EventAI/CreatureEventAIMgr.cpp2
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/BattlegroundMgr.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRV.cpp2
-rwxr-xr-xsrc/server/game/Chat/Chat.cpp18
-rwxr-xr-xsrc/server/game/Chat/Chat.h4
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.cpp6
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h3
-rwxr-xr-xsrc/server/game/DataStores/DBCStructure.h18
-rwxr-xr-xsrc/server/game/DataStores/DBCfmt.h3
-rwxr-xr-xsrc/server/game/Entities/Creature/GossipDef.cpp2
-rwxr-xr-xsrc/server/game/Entities/Item/Item.cpp12
-rwxr-xr-xsrc/server/game/Entities/Item/Item.h4
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp66
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h19
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp126
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.h10
-rwxr-xr-xsrc/server/game/Guilds/Guild.cpp469
-rwxr-xr-xsrc/server/game/Guilds/Guild.h122
-rwxr-xr-xsrc/server/game/Handlers/AuthHandler.cpp2
-rwxr-xr-xsrc/server/game/Handlers/ChatHandler.cpp59
-rwxr-xr-xsrc/server/game/Handlers/GuildHandler.cpp355
-rwxr-xr-xsrc/server/game/Handlers/ItemHandler.cpp130
-rwxr-xr-xsrc/server/game/Handlers/MiscHandler.cpp9
-rwxr-xr-xsrc/server/game/Handlers/NPCHandler.cpp2
-rwxr-xr-xsrc/server/game/Handlers/PetitionsHandler.cpp22
-rwxr-xr-xsrc/server/game/Handlers/TradeHandler.cpp8
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp8
-rwxr-xr-xsrc/server/game/Miscellaneous/SharedDefines.h2
-rwxr-xr-xsrc/server/game/Scripting/ScriptSystem.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp75
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h8
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp13
-rwxr-xr-xsrc/server/game/Server/WorldSession.h13
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/scripts/Commands/cs_cast.cpp2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/undercity.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ashenvale.cpp2
-rw-r--r--src/server/scripts/Kalimdor/azshara.cpp6
-rw-r--r--src/server/scripts/Kalimdor/azuremyst_isle.cpp4
-rw-r--r--src/server/scripts/Kalimdor/felwood.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp4
-rw-r--r--src/server/shared/AutoPtr.h2
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp2
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist8
54 files changed, 1078 insertions, 605 deletions
diff --git a/sql/updates/world/2012_08_04_01_world_player_classlevelstats_4x.sql b/sql/updates/world/2012_08_04_01_world_player_classlevelstats_4x.sql
new file mode 100644
index 00000000000..9b2bcb6d6ca
--- /dev/null
+++ b/sql/updates/world/2012_08_04_01_world_player_classlevelstats_4x.sql
@@ -0,0 +1 @@
+DROP TABLE IF EXISTS `player_classlevelstats`; \ No newline at end of file
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp
index 2537a93fe43..4e4965c526f 100755
--- a/src/server/authserver/Server/AuthSocket.cpp
+++ b/src/server/authserver/Server/AuthSocket.cpp
@@ -868,10 +868,10 @@ bool AuthSocket::_HandleRealmList()
++RealmListSize;
}
-
+
pkt << uint8(0x10);
pkt << uint8(0x00);
-
+
// make a ByteBuffer which stores the RealmList's size
ByteBuffer RealmListSizeBuffer;
diff --git a/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp b/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
index a863f2f89cf..d95074d9052 100755
--- a/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
+++ b/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
@@ -211,7 +211,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
sLog->outErrorDb("CreatureEventAI: Event %u has script for non-existing creature entry (%u), skipping.", i, creature_id);
continue;
}
-
+
// Only on the first script
if (cInfo->AIName != "EventAI" && m_CreatureEventAI_Event_Map[creature_id].empty())
sLog->outErrorDb("Creature entry %u has EventAI scripts, but its AIName is not 'EventAI' - possible AI-mismatch?", temp.creature_id);
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 4e25fa03a42..a0e3b923406 100755
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -1013,6 +1013,8 @@ void AchievementMgr<Guild>::SendCriteriaUpdate(AchievementCriteriaEntry const* e
data.WriteBit(counter[7]);
data.WriteBit(guid[4]);
+ data.FlushBits();
+
data.WriteByteSeq(guid[5]);
data << uint32(progress->date); // unknown date
data.WriteByteSeq(counter[3]);
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index b8f4d7de3c0..4444f1860e4 100755
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1721,6 +1721,8 @@ void Battleground::SendWarningToAll(int32 entry, ...)
data << (uint32)(msg.length() + 1);
data << msg.c_str();
data << (uint8)0;
+ data << (float)0.0f; // added in 4.2.0, unk
+ data << (uint8)0; // added in 4.2.0, unk
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
if (player->GetSession())
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 0d4fc458faa..8205c30dd1e 100755
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -772,7 +772,7 @@ void BattlegroundMgr::CreateInitialBattlegrounds()
}
data.StartMaxDist = fields[9].GetFloat();
-
+
selectionWeight = fields[10].GetUInt8();
data.scriptId = sObjectMgr->GetScriptId(fields[11].GetCString());
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
index 6869a899305..2b8f5925265 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
@@ -245,6 +245,6 @@ void BattlegroundRV::TogglePillarCollision()
gob->SendUpdateToPlayer(player);
}
}
-
+
SetPillarCollision(!apply);
} \ No newline at end of file
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 65cdca70aba..b95b5f41921 100755
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -747,7 +747,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
}
//Note: target_guid used only in CHAT_MSG_WHISPER_INFORM mode (in this case channelName ignored)
-void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker)
+void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker, const char* addonPrefix /*= NULL*/)
{
uint32 messageLength = (message ? strlen(message) : 0) + 1;
@@ -801,6 +801,13 @@ void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint
*data << uint32(messageLength);
*data << message;
*data << uint8(0);
+
+ if (type == CHAT_MSG_RAID_BOSS_WHISPER || type == CHAT_MSG_RAID_BOSS_EMOTE)
+ {
+ *data << float(0.0f); // Added in 4.2.0, unk
+ *data << uint8(0); // Added in 4.2.0, unk
+ }
+
return;
}
default:
@@ -816,9 +823,16 @@ void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint
{
ASSERT(channelName);
*data << channelName;
+ *data << uint64(target_guid);
}
+ else if (type == CHAT_MSG_ADDON)
+ {
+ ASSERT(addonPrefix);
+ *data << addonPrefix;
+ }
+ else
+ *data << uint64(target_guid);
- *data << uint64(target_guid);
*data << uint32(messageLength);
*data << message;
if (session != 0 && type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index af06b4f760a..84a2b601472 100755
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -51,7 +51,7 @@ class ChatHandler
explicit ChatHandler(Player* player) : m_session(player->GetSession()) {}
virtual ~ChatHandler() {}
- static void FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker);
+ static void FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker, const char* addonPrefix = NULL);
void FillMessageData(WorldPacket* data, uint8 type, uint32 language, uint64 target_guid, const char* message)
{
@@ -123,7 +123,7 @@ class ChatHandler
void SetSentErrorMessage(bool val){ sentErrorMessage = val; }
static bool LoadCommandTable() { return load_command_table; }
static void SetLoadCommandTable(bool val) { load_command_table = val; }
-
+
// cs_character
void HandleCharacterLevel(Player* player, uint64 playerGuid, uint32 oldLevel, uint32 newLevel);
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index a9de83d3f80..098b61c6306 100755
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -107,6 +107,8 @@ DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore(GtOCTRegenHPfmt);
DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore(GtRegenHPPerSptfmt);
DBCStorage <gtOCTHpPerStaminaEntry> sGtOCTHpPerStaminaStore(GtOCTHpPerStaminafmt);
DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore(GtRegenMPPerSptfmt);
+DBCStorage <GtOCTBaseHPByClassEntry> sGtOCTBaseHPByClassStore(GtOCTBaseHPByClassfmt);
+DBCStorage <GtOCTBaseMPByClassEntry> sGtOCTBaseMPByClassStore(GtOCTBaseMPByClassfmt);
DBCStorage <HolidaysEntry> sHolidaysStore(Holidaysfmt);
@@ -115,6 +117,7 @@ DBCStorage <ImportPriceQualityEntry> sImportPriceQualityStore(ImportPriceQu
DBCStorage <ImportPriceShieldEntry> sImportPriceShieldStore(ImportPriceShieldfmt);
DBCStorage <ImportPriceWeaponEntry> sImportPriceWeaponStore(ImportPriceWeaponfmt);
DBCStorage <ItemPriceBaseEntry> sItemPriceBaseStore(ItemPriceBasefmt);
+DBCStorage <ItemReforgeEntry> sItemReforgeStore(ItemReforgefmt);
DBCStorage <ItemArmorQualityEntry> sItemArmorQualityStore(ItemArmorQualityfmt);
DBCStorage <ItemArmorShieldEntry> sItemArmorShieldStore(ItemArmorShieldfmt);
DBCStorage <ItemArmorTotalEntry> sItemArmorTotalStore(ItemArmorTotalfmt);
@@ -395,6 +398,8 @@ void LoadDBCStores(const std::string& dataPath)
//LoadDBC(dbcCount, availableDbcLocales, bad_dbc_files, sGtOCTRegenMPStore, dbcPath, "gtOCTRegenMP.dbc"); -- not used currently
//LoadDBC(availableDbcLocales, bad_dbc_files, sGtRegenHPPerSptStore, dbcPath, "gtRegenHPPerSpt.dbc");//14545
LoadDBC(availableDbcLocales, bad_dbc_files, sGtRegenMPPerSptStore, dbcPath, "gtRegenMPPerSpt.dbc");//14545
+ LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTBaseHPByClassStore, dbcPath, "gtOCTBaseHPByClass.dbc");//15595
+ LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTBaseMPByClassStore, dbcPath, "gtOCTBaseMPByClass.dbc");//15595
LoadDBC(availableDbcLocales, bad_dbc_files, sHolidaysStore, dbcPath, "Holidays.dbc");//14545
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceArmorStore, dbcPath, "ImportPriceArmor.dbc"); // 15595
@@ -402,6 +407,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceShieldStore, dbcPath, "ImportPriceShield.dbc"); // 15595
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceWeaponStore, dbcPath, "ImportPriceWeapon.dbc"); // 15595
LoadDBC(availableDbcLocales, bad_dbc_files, sItemPriceBaseStore, dbcPath, "ItemPriceBase.dbc"); // 15595
+ LoadDBC(availableDbcLocales, bad_dbc_files, sItemReforgeStore, dbcPath, "ItemReforge.dbc"); // 15595
LoadDBC(availableDbcLocales, bad_dbc_files, sItemBagFamilyStore, dbcPath, "ItemBagFamily.dbc");//14545
LoadDBC(availableDbcLocales, bad_dbc_files, sItemClassStore, dbcPath, "ItemClass.dbc"); // 15595
//LoadDBC(dbcCount, availableDbcLocales, bad_dbc_files, sItemDisplayInfoStore, dbcPath, "ItemDisplayInfo.dbc"); -- not used currently
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 252d8c53d92..94615d8c435 100755
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -120,12 +120,15 @@ extern DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingSca
extern DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore;
extern DBCStorage <gtOCTHpPerStaminaEntry> sGtOCTHpPerStaminaStore;
extern DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore;
+extern DBCStorage <GtOCTBaseHPByClassEntry> sGtOCTBaseHPByClassStore;
+extern DBCStorage <GtOCTBaseMPByClassEntry> sGtOCTBaseMPByClassStore;
extern DBCStorage <HolidaysEntry> sHolidaysStore;
extern DBCStorage <ImportPriceArmorEntry> sImportPriceArmorStore;
extern DBCStorage <ImportPriceQualityEntry> sImportPriceQualityStore;
extern DBCStorage <ImportPriceShieldEntry> sImportPriceShieldStore;
extern DBCStorage <ImportPriceWeaponEntry> sImportPriceWeaponStore;
extern DBCStorage <ItemPriceBaseEntry> sItemPriceBaseStore;
+extern DBCStorage <ItemReforgeEntry> sItemReforgeStore;
extern DBCStorage <ItemArmorQualityEntry> sItemArmorQualityStore;
extern DBCStorage <ItemArmorShieldEntry> sItemArmorShieldStore;
extern DBCStorage <ItemArmorTotalEntry> sItemArmorTotalStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index 1a9c7b16398..6cb013bec50 100755
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -1117,6 +1117,15 @@ struct GtRegenMPPerSptEntry
float ratio;
};
+struct GtOCTBaseHPByClassEntry
+{
+ float ratio;
+};
+
+struct GtOCTBaseMPByClassEntry
+{
+ float ratio;
+};
/* no used
struct HolidayDescriptionsEntry
{
@@ -1192,6 +1201,15 @@ struct ItemPriceBaseEntry
float WeaponFactor; // 4 Price factor for weapons
};
+struct ItemReforgeEntry
+{
+ uint32 Id;
+ uint32 FinalStat;
+ float FinalMultiplier;
+ uint32 SourceStat;
+ float SourceMultiplier;
+};
+
// common struct for:
// ItemDamageAmmo.dbc
// ItemDamageOneHand.dbc
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 03521512c99..6561fd9029c 100755
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -77,12 +77,15 @@ const char GtOCTRegenHPfmt[]="f";
//const char GtOCTRegenMPfmt[]="f";
const char GtRegenHPPerSptfmt[]="f";
const char GtRegenMPPerSptfmt[]="xf";
+const char GtOCTBaseHPByClassfmt[]="df";
+const char GtOCTBaseMPByClassfmt[]="df";
const char Holidaysfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiixxsiix";
const char ImportPriceArmorfmt[]="nffff";
const char ImportPriceQualityfmt[]="nf";
const char ImportPriceShieldfmt[]="nf";
const char ImportPriceWeaponfmt[]="nf";
const char ItemPriceBasefmt[]="diff";
+const char ItemReforgefmt[]="nifif";
const char ItemBagFamilyfmt[]="nx";
const char ItemArmorQualityfmt[]="nfffffffi";
const char ItemArmorShieldfmt[]="nifffffff";
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 21c5aa38a19..e2f5ad99b78 100755
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -339,7 +339,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
data << uint32(quest->GetRequiredSpell()); // 4.x
quest->BuildExtraQuestInfo(data, _session->GetPlayer());
-
+
data << uint32(QUEST_EMOTE_COUNT);
for (uint8 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 9c5d03f5440..f0cd629b5e3 100755
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1424,7 +1424,7 @@ uint32 Item::GetSellPrice(bool& normalSellPrice) const
}
}
-uint32 Item::GetTransmogrifyCost() const
+uint32 Item::GetSpecialPrice(uint32 minimumPrice) const
{
ItemTemplate const* proto = GetTemplate();
uint32 cost = 0;
@@ -1435,7 +1435,7 @@ uint32 Item::GetTransmogrifyCost() const
{
bool normalPrice;
cost = GetSellPrice(normalPrice);
-
+
if (!normalPrice)
{
if (proto->BuyCount <= 1)
@@ -1452,9 +1452,9 @@ uint32 Item::GetTransmogrifyCost() const
else
cost = proto->SellPrice;
}
-
- if (cost < 10000)
- cost = 10000;
-
+
+ if (cost < minimumPrice)
+ cost = minimumPrice;
+
return cost;
}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 2d5ebaa555f..e8bf234c591 100755
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -163,7 +163,7 @@ enum EnchantmentSlot
BONUS_ENCHANTMENT_SLOT = 5,
PRISMATIC_ENCHANTMENT_SLOT = 6, // added at apply special permanent enchantment
//TODO: 7,
- //TODO: 8,
+ REFORGE_ENCHANTMENT_SLOT = 8,
TRANSMOGRIFY_ENCHANTMENT_SLOT = 9,
MAX_INSPECTED_ENCHANTMENT_SLOT = 10,
@@ -350,7 +350,7 @@ class Item : public Object
bool CanBeTransmogrified() const;
bool CanTransmogrify() const;
static bool CanTransmogrifyItemWithItem(Item const* transmogrified, Item const* transmogrifier);
- uint32 GetTransmogrifyCost() const;
+ uint32 GetSpecialPrice(uint32 minimumPrice = 10000) const;
uint32 GetVisibleEntry() const
{
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 9f386a54246..0baec0c2e95 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2279,6 +2279,8 @@ void WorldObject::BuildMonsterChat(WorldPacket* data, uint8 msgtype, char const*
*data << (uint32)(strlen(text)+1);
*data << text;
*data << (uint8)0; // ChatTag
+ *data << (float)0.0f; // added in 4.2.0, unk
+ *data << (uint8)0; // added in 4.2.0, unk
}
void Unit::BuildHeartBeatMsg(WorldPacket* data) const
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 28a559d80f1..258f139ef02 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3062,15 +3062,15 @@ void Player::GiveLevel(uint8 level)
PlayerLevelInfo info;
sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), level, &info);
- PlayerClassLevelInfo classInfo;
- sObjectMgr->GetPlayerClassLevelInfo(getClass(), level, &classInfo);
+ uint32 basehp = 0, basemana = 0;
+ sObjectMgr->GetPlayerClassLevelInfo(getClass(), level, basehp, basemana);
// send levelup info to client
WorldPacket data(SMSG_LEVELUP_INFO, (4+4+MAX_STORED_POWERS*4+MAX_STATS*4));
data << uint32(level);
- data << uint32(int32(classInfo.basehealth) - int32(GetCreateHealth()));
+ data << uint32(int32(basehp) - int32(GetCreateHealth()));
// for (int i = 0; i < MAX_STORED_POWERS; ++i) // Powers loop (0-10)
- data << uint32(int32(classInfo.basemana) - int32(GetCreateMana()));
+ data << uint32(int32(basemana) - int32(GetCreateMana()));
data << uint32(0);
data << uint32(0);
data << uint32(0);
@@ -3096,8 +3096,8 @@ void Player::GiveLevel(uint8 level)
for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i)
SetCreateStat(Stats(i), info.stats[i]);
- SetCreateHealth(classInfo.basehealth);
- SetCreateMana(classInfo.basemana);
+ SetCreateHealth(basehp);
+ SetCreateMana(basemana);
InitTalentForLevel();
InitTaxiNodesForLevel();
@@ -3191,8 +3191,8 @@ void Player::InitStatsForLevel(bool reapplyMods)
if (reapplyMods) //reapply stats values only on .reset stats (level) command
_RemoveAllStatBonuses();
- PlayerClassLevelInfo classInfo;
- sObjectMgr->GetPlayerClassLevelInfo(getClass(), getLevel(), &classInfo);
+ uint32 basehp = 0, basemana = 0;
+ sObjectMgr->GetPlayerClassLevelInfo(getClass(), getLevel(), basehp, basemana);
PlayerLevelInfo info;
sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), getLevel(), &info);
@@ -3219,10 +3219,10 @@ void Player::InitStatsForLevel(bool reapplyMods)
for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i)
SetStat(Stats(i), info.stats[i]);
- SetCreateHealth(classInfo.basehealth);
+ SetCreateHealth(basehp);
//set create powers
- SetCreateMana(classInfo.basemana);
+ SetCreateMana(basemana);
SetArmor(int32(m_createStats[STAT_AGILITY]*2));
@@ -3302,7 +3302,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
for (uint8 i = POWER_MANA; i < MAX_POWERS; ++i)
SetMaxPower(Powers(i), GetCreatePowers(Powers(i)));
- SetMaxHealth(classInfo.basehealth); // stamina bonus will applied later
+ SetMaxHealth(basehp); // stamina bonus will applied later
// cleanup mounted state (it will set correctly at aura loading if player saved at mount.
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
@@ -19715,13 +19715,16 @@ void Player::StopCastingCharm()
}
}
-inline void Player::BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std::string& text, uint32 language) const
+inline void Player::BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std::string& text, uint32 language, const char* addonPrefix /*= NULL*/) const
{
*data << uint8(msgtype);
*data << uint32(language);
*data << uint64(GetGUID());
- *data << uint32(language); //language 2.1.0 ?
- *data << uint64(GetGUID());
+ *data << uint32(0); // constant unknown time
+ if (addonPrefix)
+ *data << addonPrefix;
+ else
+ *data << uint64(GetGUID());
*data << uint32(text.length() + 1);
*data << text;
*data << uint8(GetChatTag());
@@ -19757,13 +19760,20 @@ void Player::TextEmote(const std::string& text)
SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT));
}
-void Player::Whisper(const std::string& text, uint32 language, uint64 receiver)
+void Player::WhisperAddon(const std::string& text, const std::string& prefix, uint64 receiver)
{
- bool isAddonMessage = language == LANG_ADDON;
+ Player* rPlayer = ObjectAccessor::FindPlayer(receiver);
- if (!isAddonMessage) // if not addon data
- language = LANG_UNIVERSAL; // whispers should always be readable
+ std::string _text(text);
+ sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, LANG_UNIVERSAL, _text, rPlayer);
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ BuildPlayerChat(&data, CHAT_MSG_WHISPER, _text, LANG_UNIVERSAL, prefix.c_str());
+ rPlayer->GetSession()->SendPacket(&data);
+}
+
+void Player::Whisper(const std::string& text, uint32 language, uint64 receiver)
+{
Player* rPlayer = ObjectAccessor::FindPlayer(receiver);
std::string _text(text);
@@ -19776,22 +19786,13 @@ void Player::Whisper(const std::string& text, uint32 language, uint64 receiver)
BuildPlayerChat(&data, CHAT_MSG_WHISPER, _text, language);
rPlayer->GetSession()->SendPacket(&data);
- // not send confirmation for addon messages
- if (!isAddonMessage)
- {
- data.Initialize(SMSG_MESSAGECHAT, 200);
- rPlayer->BuildPlayerChat(&data, CHAT_MSG_WHISPER_INFORM, _text, language);
- GetSession()->SendPacket(&data);
- }
+ data.Initialize(SMSG_MESSAGECHAT, 200);
+ rPlayer->BuildPlayerChat(&data, CHAT_MSG_WHISPER_INFORM, _text, language);
+ GetSession()->SendPacket(&data);
}
- else if (!isAddonMessage)
- // announce to player that player he is whispering to is dnd and cannot receive his message
+ else // announce to player that player he is whispering to is dnd and cannot receive his message
ChatHandler(this).PSendSysMessage(LANG_PLAYER_DND, rPlayer->GetName(), rPlayer->dndMsg.c_str());
- // rest stuff shouldn't happen in case of addon message
- if (isAddonMessage)
- return;
-
if (!isAcceptWhispers() && !isGameMaster() && !rPlayer->isGameMaster())
{
SetAcceptWhispers(true);
@@ -25052,6 +25053,7 @@ void Player::SetReputation(uint32 factionentry, uint32 value)
{
GetReputationMgr().SetReputation(sFactionStore.LookupEntry(factionentry), value);
}
+
uint32 Player::GetReputation(uint32 factionentry)
{
return GetReputationMgr().GetReputation(sFactionStore.LookupEntry(factionentry));
@@ -25059,7 +25061,7 @@ uint32 Player::GetReputation(uint32 factionentry)
std::string Player::GetGuildName()
{
- return sGuildMgr->GetGuildById(GetGuildId())->GetName();
+ return GetGuildId() ? sGuildMgr->GetGuildById(GetGuildId())->GetName() : "";
}
void Player::SendDuelCountdown(uint32 counter)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 06ec352c6fa..e8dde100473 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -221,20 +221,6 @@ struct PlayerCreateInfoItem
typedef std::list<PlayerCreateInfoItem> PlayerCreateInfoItems;
-struct PlayerClassLevelInfo
-{
- PlayerClassLevelInfo() : basehealth(0), basemana(0) {}
- uint16 basehealth;
- uint16 basemana;
-};
-
-struct PlayerClassInfo
-{
- PlayerClassInfo() : levelInfo(NULL) { }
-
- PlayerClassLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1
-};
-
struct PlayerLevelInfo
{
PlayerLevelInfo() { for (uint8 i=0; i < MAX_STATS; ++i) stats[i] = 0; }
@@ -1250,7 +1236,8 @@ class Player : public Unit, public GridObject<Player>
void Yell(const std::string& text, const uint32 language);
void TextEmote(const std::string& text);
void Whisper(const std::string& text, const uint32 language, uint64 receiver);
- void BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std::string& text, uint32 language) const;
+ void WhisperAddon(const std::string& text, const std::string& prefix, uint64 receiver);
+ void BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std::string& text, uint32 language, const char* addonPrefix = NULL) const;
/*********************************************************/
/*** STORAGE SYSTEM ***/
@@ -1895,7 +1882,7 @@ class Player : public Unit, public GridObject<Player>
}
void SetRank(uint8 rankId) { SetUInt32Value(PLAYER_GUILDRANK, rankId); }
- uint8 GetRank() { return uint8(GetUInt32Value(PLAYER_GUILDRANK)); }
+ uint32 GetRank() { return GetUInt32Value(PLAYER_GUILDRANK); }
void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; }
uint32 GetGuildId() const { return GetUInt32Value(OBJECT_FIELD_DATA); /* return only lower part */ }
static uint32 GetGuildIdFromDB(uint64 guid);
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 1c56c64c985..b1d84ddda39 100755
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -244,10 +244,6 @@ ObjectMgr::~ObjectMgr()
for (PetLevelInfoContainer::iterator i = _petInfoStore.begin(); i != _petInfoStore.end(); ++i)
delete[] i->second;
- // free only if loaded
- for (int class_ = 0; class_ < MAX_CLASSES; ++class_)
- delete[] _playerClassInfo[class_].levelInfo;
-
for (int race = 0; race < MAX_RACES; ++race)
for (int class_ = 0; class_ < MAX_CLASSES; ++class_)
delete[] _playerInfo[race][class_].levelInfo;
@@ -3252,87 +3248,6 @@ void ObjectMgr::LoadPlayerInfo()
}
}
- // Loading levels data (class only dependent)
- sLog->outString("Loading Player Create Level HP/Mana Data...");
- {
- uint32 oldMSTime = getMSTime();
-
- // 0 1 2 3
- QueryResult result = WorldDatabase.Query("SELECT class, level, basehp, basemana FROM player_classlevelstats");
-
- if (!result)
- {
- sLog->outErrorDb(">> Loaded 0 level health/mana definitions. DB table `game_event_condition` is empty.");
- sLog->outString();
- exit(1);
- }
-
- uint32 count = 0;
-
- do
- {
- Field* fields = result->Fetch();
-
- uint32 current_class = fields[0].GetUInt8();
- if (current_class >= MAX_CLASSES)
- {
- sLog->outErrorDb("Wrong class %u in `player_classlevelstats` table, ignoring.", current_class);
- continue;
- }
-
- uint8 current_level = fields[1].GetUInt8(); // Can't be > than STRONG_MAX_LEVEL (hardcoded level maximum) due to var type
- if (current_level > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- {
- sLog->outDetail("Unused (> MaxPlayerLevel in worldserver.conf) level %u in `player_classlevelstats` table, ignoring.", current_level);
- ++count; // make result loading percent "expected" correct in case disabled detail mode for example.
- continue;
- }
-
- PlayerClassInfo* pClassInfo = &_playerClassInfo[current_class];
-
- if (!pClassInfo->levelInfo)
- pClassInfo->levelInfo = new PlayerClassLevelInfo[sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)];
-
- PlayerClassLevelInfo* pClassLevelInfo = &pClassInfo->levelInfo[current_level-1];
-
- pClassLevelInfo->basehealth = fields[2].GetUInt16();
- pClassLevelInfo->basemana = fields[3].GetUInt16();
-
- ++count;
- }
- while (result->NextRow());
-
- // Fill gaps and check integrity
- for (int class_ = 0; class_ < MAX_CLASSES; ++class_)
- {
- // skip non existed classes
- if (!sChrClassesStore.LookupEntry(class_))
- continue;
-
- PlayerClassInfo* pClassInfo = &_playerClassInfo[class_];
-
- // fatal error if no level 1 data
- if (!pClassInfo->levelInfo || pClassInfo->levelInfo[0].basehealth == 0)
- {
- sLog->outErrorDb("Class %i Level 1 does not have health/mana data!", class_);
- exit(1);
- }
-
- // fill level gaps
- for (uint8 level = 1; level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL); ++level)
- {
- if (pClassInfo->levelInfo[level].basehealth == 0)
- {
- sLog->outErrorDb("Class %i Level %i does not have health/mana data. Using stats data of level %i.", class_, level+1, level);
- pClassInfo->levelInfo[level] = pClassInfo->levelInfo[level-1];
- }
- }
- }
-
- sLog->outString(">> Loaded %u level health/mana definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
- sLog->outString();
- }
-
// Loading levels data (class/race dependent)
sLog->outString("Loading Player Create Level Stats Data...");
{
@@ -3507,17 +3422,25 @@ void ObjectMgr::LoadPlayerInfo()
}
}
-void ObjectMgr::GetPlayerClassLevelInfo(uint32 class_, uint8 level, PlayerClassLevelInfo* info) const
+void ObjectMgr::GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseHP, uint32& baseMana) const
{
if (level < 1 || class_ >= MAX_CLASSES)
return;
- PlayerClassInfo const* pInfo = &_playerClassInfo[class_];
-
if (level > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
level = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
- *info = pInfo->levelInfo[level-1];
+ GtOCTBaseHPByClassEntry const* hp = sGtOCTBaseHPByClassStore.LookupEntry((class_-1) * GT_MAX_LEVEL + level-1);
+ GtOCTBaseMPByClassEntry const* mp = sGtOCTBaseMPByClassStore.LookupEntry((class_-1) * GT_MAX_LEVEL + level-1);
+
+ if (!hp || !mp)
+ {
+ sLog->outError("Tried to get non-existant Class-Level combination data for base hp/mp. Class %u Level %u", class_, level);
+ return;
+ }
+
+ baseHP = uint32(hp->ratio);
+ baseMana = uint32(mp->ratio);
}
void ObjectMgr::GetPlayerLevelInfo(uint32 race, uint32 class_, uint8 level, PlayerLevelInfo* info) const
@@ -4484,20 +4407,21 @@ void ObjectMgr::LoadQuestLocales()
{
LocaleConstant locale = (LocaleConstant) i;
- AddLocaleString(fields[1 + 11 * (i - 1)].GetString(), locale, data.Title);
- AddLocaleString(fields[1 + 11 * (i - 1) + 1].GetString(), locale, data.Details);
- AddLocaleString(fields[1 + 11 * (i - 1) + 2].GetString(), locale, data.Objectives);
- AddLocaleString(fields[1 + 11 * (i - 1) + 3].GetString(), locale, data.OfferRewardText);
- AddLocaleString(fields[1 + 11 * (i - 1) + 4].GetString(), locale, data.RequestItemsText);
- AddLocaleString(fields[1 + 11 * (i - 1) + 5].GetString(), locale, data.EndText);
- AddLocaleString(fields[1 + 11 * (i - 1) + 6].GetString(), locale, data.CompletedText);
- AddLocaleString(fields[1 + 11 * (i - 1) + 7].GetString(), locale, data.QuestGiverTextWindow);
- AddLocaleString(fields[1 + 11 * (i - 1) + 8].GetString(), locale, data.QuestGiverTargetName);
- AddLocaleString(fields[1 + 11 * (i - 1) + 9].GetString(), locale, data.QuestTurnTextWindow);
- AddLocaleString(fields[1 + 11 * (i - 1) + 10].GetString(), locale, data.QuestTurnTargetName);
+ AddLocaleString(fields[1 + 15 * (i - 1)].GetString(), locale, data.Title);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 1].GetString(), locale, data.Details);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 2].GetString(), locale, data.Objectives);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 3].GetString(), locale, data.OfferRewardText);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 4].GetString(), locale, data.RequestItemsText);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 5].GetString(), locale, data.EndText);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 6].GetString(), locale, data.CompletedText);
for (uint8 k = 0; k < 4; ++k)
- AddLocaleString(fields[1 + 11 * (i - 1) + 7 + k].GetString(), locale, data.ObjectiveText[k]);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 7 + k].GetString(), locale, data.ObjectiveText[k]);
+
+ AddLocaleString(fields[1 + 15 * (i - 1) + 11].GetString(), locale, data.QuestGiverTextWindow);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 12].GetString(), locale, data.QuestGiverTargetName);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 13].GetString(), locale, data.QuestTurnTextWindow);
+ AddLocaleString(fields[1 + 15 * (i - 1) + 14].GetString(), locale, data.QuestTurnTargetName);
}
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index a13108bd7f3..0350d519aff 100755
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -652,13 +652,7 @@ class ObjectMgr
PetLevelInfo const* GetPetLevelInfo(uint32 creature_id, uint8 level) const;
- PlayerClassInfo const* GetPlayerClassInfo(uint32 class_) const
- {
- if (class_ >= MAX_CLASSES)
- return NULL;
- return &_playerClassInfo[class_];
- }
- void GetPlayerClassLevelInfo(uint32 class_, uint8 level, PlayerClassLevelInfo* info) const;
+ void GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseHP, uint32& baseMana) const;
PlayerInfo const* GetPlayerInfo(uint32 race, uint32 class_) const
{
@@ -1255,8 +1249,6 @@ class ObjectMgr
// PetLevelInfoContainer[creature_id][level]
PetLevelInfoContainer _petInfoStore; // [creature_id][level]
- PlayerClassInfo _playerClassInfo[MAX_CLASSES];
-
void BuildPlayerLevelInfo(uint8 race, uint8 class_, uint8 level, PlayerLevelInfo* plinfo) const;
PlayerInfo _playerInfo[MAX_RACES][MAX_CLASSES];
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index ac4802a3091..e2e2f31c30c 100755
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -220,17 +220,6 @@ void Guild::RankInfo::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
-void Guild::RankInfo::WritePacket(WorldPacket& data) const
-{
- data << uint32(m_rights);
- data << uint32(m_bankMoneyPerDay); // In game set in gold, in packet set in bronze.
- for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; ++i)
- {
- data << uint32(m_bankTabRightsAndSlots[i].rights);
- data << uint32(m_bankTabRightsAndSlots[i].slots);
- }
-}
-
void Guild::RankInfo::SetName(const std::string& name)
{
if (m_name == name)
@@ -621,35 +610,6 @@ bool Guild::Member::CheckStats() const
return true;
}
-void Guild::Member::WritePacket(WorldPacket& data) const
-{
- if (Player* player = FindPlayer())
- {
- data << uint64(player->GetGUID());
- data << uint8(1);
- data << player->GetName();
- data << uint32(m_rankId);
- data << uint8(player->getLevel());
- data << uint8(player->getClass());
- data << uint8(0); // new 2.4.0
- data << uint32(player->GetZoneId());
- }
- else
- {
- data << m_guid;
- data << uint8(0);
- data << m_name;
- data << uint32(m_rankId);
- data << uint8(m_level);
- data << uint8(m_class);
- data << uint8(0); // new 2.4.0
- data << uint32(m_zoneId);
- data << float(float(::time(NULL) - m_logoutTime) / DAY);
- }
- data << m_publicNote;
- data << m_officerNote;
-}
-
// Decreases amount of money/slots left for today.
// If (tabId == GUILD_BANK_MAX_TABS) decrease money amount.
// Otherwise decrease remaining items amount for specified tab.
@@ -1145,6 +1105,8 @@ bool Guild::Create(Player* pLeader, const std::string& name)
// Call scripts on successful create
sScriptMgr->OnGuildCreate(this, pLeader, name);
+ _BroadcastEvent(GE_FOUNDER, m_leaderGuid);
+
return ret;
}
@@ -1203,18 +1165,95 @@ void Guild::Disband()
// HANDLE CLIENT COMMANDS
void Guild::HandleRoster(WorldSession* session /*= NULL*/)
{
+ ByteBuffer memberData(100);
// Guess size
- WorldPacket data(SMSG_GUILD_ROSTER, (4 + m_motd.length() + 1 + m_info.length() + 1 + 4 + _GetRanksSize() * (4 + 4 + GUILD_BANK_MAX_TABS * (4 + 4)) + m_members.size() * 50));
- data << uint32(m_members.size());
- data << m_motd;
- data << m_info;
-
- data << uint32(_GetRanksSize());
- for (Ranks::const_iterator ritr = m_ranks.begin(); ritr != m_ranks.end(); ++ritr)
- ritr->WritePacket(data);
+ WorldPacket data(SMSG_GUILD_ROSTER, 100);
+ data.WriteBits(m_motd.length(), 11);
+ data.WriteBits(m_members.size(), 18);
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
- itr->second->WritePacket(data);
+ {
+ Member* member = itr->second;
+ Player* player = member->FindPlayer();
+ size_t pubNoteLength = member->GetPublicNote().length();
+ size_t offNoteLength = member->GetOfficerNote().length();
+
+ ObjectGuid guid = member->GetGUID();
+ data.WriteBit(guid[3]);
+ data.WriteBit(guid[4]);
+ data.WriteBit(0); // unk
+ data.WriteBit(0); // unk
+ data.WriteBits(pubNoteLength, 8);
+ data.WriteBits(offNoteLength, 8);
+ data.WriteBit(guid[0]);
+ data.WriteBits(member->GetName().length(), 7);
+ data.WriteBit(guid[1]);
+ data.WriteBit(guid[2]);
+ data.WriteBit(guid[6]);
+ data.WriteBit(guid[5]);
+ data.WriteBit(guid[7]);
+
+ uint8 flags = GUILDMEMBER_STATUS_NONE;
+ if (player)
+ {
+ flags |= GUILDMEMBER_STATUS_ONLINE;
+ if (player->isAFK())
+ flags |= GUILDMEMBER_STATUS_AFK;
+ if (player->isDND())
+ flags |= GUILDMEMBER_STATUS_DND;
+ }
+
+ memberData << uint8(member->GetClass());
+ memberData << int32(0); // unk
+ memberData.WriteByteSeq(guid[0]);
+ memberData << uint64(0); // weekly activity
+ memberData << uint32(member->GetRankId());
+ memberData << uint32(0); // player->GetAchievementMgr().GetCompletedAchievementsAmount()
+
+ // for (2 professions)
+ memberData << uint32(0) << uint32(0) << uint32(0);
+ memberData << uint32(0) << uint32(0) << uint32(0);
+
+ memberData.WriteByteSeq(guid[2]);
+ memberData << uint8(flags);
+ memberData << uint32(player ? player->GetZoneId() : member->GetZone());
+ memberData << uint64(0); // Total activity
+ memberData.WriteByteSeq(guid[7]);
+ memberData << uint32(0); // Remaining guild week Rep
+
+ if (pubNoteLength)
+ memberData.append(member->GetPublicNote().c_str(), pubNoteLength);
+
+ memberData.WriteByteSeq(guid[3]);
+ memberData << uint8(player ? player->getLevel() : member->GetLevel());
+ memberData << int32(0); // unk
+ memberData.WriteByteSeq(guid[5]);
+ memberData.WriteByteSeq(guid[4]);
+ memberData << uint8(0); // unk
+ memberData.WriteByteSeq(guid[1]);
+ memberData << float(player ? 0.0f : float(::time(NULL) - member->GetLogoutTime()) / DAY);
+
+ if (offNoteLength)
+ memberData.append(member->GetOfficerNote().c_str(), offNoteLength);
+
+ memberData.WriteByteSeq(guid[6]);
+ memberData.append(member->GetName().c_str(), member->GetName().length());
+ }
+
+ size_t infoLength = m_info.length();
+ data.WriteBits(infoLength, 12);
+
+ data.FlushBits();
+ data.append(memberData);
+
+ if (infoLength)
+ data.append(m_info.c_str(), infoLength);
+
+ data.append(m_motd.c_str(), m_motd.length());
+ data << uint32(0);
+ data << uint32(0);
+ data << uint32(0);
+ data << uint32(0);
if (session)
session->SendPacket(&data);
@@ -1249,16 +1288,11 @@ void Guild::HandleQuery(WorldSession* session)
}
// Rank order of "importance" (sorting by rights)
- Ranks ranks = m_ranks;
- std::sort(ranks.begin(), ranks.end());
- Ranks::iterator it;
-
for (uint8 i = 0; i < GUILD_RANKS_MAX_COUNT; ++i)
{
if (i < _GetRanksSize())
{
- it = std::find(ranks.begin(), ranks.end(), m_ranks[i]);
- data << std::distance(ranks.begin(), it);
+ data << uint32(m_ranks[i].GetId());
}
else
data << uint32(0);
@@ -1272,6 +1306,44 @@ void Guild::HandleQuery(WorldSession* session)
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent (SMSG_GUILD_QUERY_RESPONSE)");
}
+void Guild::HandleGuildRanks(WorldSession* session)
+{
+ // perhaps move to guild.cpp.....
+ ByteBuffer rankData(100);
+ WorldPacket data(SMSG_GUILD_RANK, 100);
+
+ data.WriteBits(_GetRanksSize(), 18);
+
+ for (uint8 i = 0; i < _GetRanksSize(); i++)
+ {
+ RankInfo* rankInfo = GetRankInfo(i);
+ if (!rankInfo)
+ continue;
+
+ data.WriteBits(rankInfo->GetName().length(), 7);
+
+ rankData << uint32(i);
+
+ for (uint8 j = 0; j < GUILD_BANK_MAX_TABS; ++j)
+ {
+ rankData << uint32(rankInfo->GetBankTabSlotsPerDay(j));
+ rankData << uint32(rankInfo->GetBankTabRights(j));
+ }
+
+ rankData << uint32(rankInfo->GetBankMoneyPerDay());
+ rankData << uint32(rankInfo->GetRights());
+
+ if (rankInfo->GetName().length())
+ rankData.append(rankInfo->GetName().c_str(), rankInfo->GetName().length());
+
+ rankData << uint32(rankInfo->GetId());
+ }
+
+ data.FlushBits();
+ data.append(rankData);
+ session->SendPacket(&data);
+}
+
void Guild::HandleSetMOTD(WorldSession* session, const std::string& motd)
{
if (m_motd == motd)
@@ -1279,7 +1351,7 @@ void Guild::HandleSetMOTD(WorldSession* session, const std::string& motd)
// Player must have rights to set MOTD
if (!_HasRankRight(session->GetPlayer(), GR_RIGHT_SETMOTD))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
else
{
m_motd = motd;
@@ -1302,7 +1374,7 @@ void Guild::HandleSetInfo(WorldSession* session, const std::string& info)
// Player must have rights to set guild's info
if (!_HasRankRight(session->GetPlayer(), GR_RIGHT_MODIFY_GUILD_INFO))
- SendCommandResult(session, GUILD_CREATE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_CREATE, ERR_GUILD_PERMISSIONS);
else
{
m_info = info;
@@ -1344,7 +1416,7 @@ void Guild::HandleSetLeader(WorldSession* session, const std::string& name)
Player* player = session->GetPlayer();
// Only leader can assign new leader
if (!_IsLeader(player))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
// Old leader must be a member of guild
else if (Member* pOldLeader = GetMember(player->GetGUID()))
{
@@ -1357,7 +1429,7 @@ void Guild::HandleSetLeader(WorldSession* session, const std::string& name)
}
}
else
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
}
void Guild::HandleSetBankTabInfo(WorldSession* session, uint8 tabId, const std::string& name, const std::string& icon)
@@ -1370,27 +1442,26 @@ void Guild::HandleSetBankTabInfo(WorldSession* session, uint8 tabId, const std::
}
}
-void Guild::HandleSetMemberNote(WorldSession* session, const std::string& name, const std::string& note, bool officer)
+void Guild::HandleSetMemberNote(WorldSession* session, std::string const& note, uint64 guid, bool isPublic)
{
// Player must have rights to set public/officer note
- if (!_HasRankRight(session->GetPlayer(), officer ? GR_RIGHT_EOFFNOTE : GR_RIGHT_EPNOTE))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
- // Noted player must be a member of guild
- else if (Member* member = GetMember(session, name))
+ if (!_HasRankRight(session->GetPlayer(), isPublic ? GR_RIGHT_EPNOTE : GR_RIGHT_EOFFNOTE))
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
+ else if (Member* member = GetMember(guid))
{
- if (officer)
- member->SetOfficerNote(note);
- else
+ if (isPublic)
member->SetPublicNote(note);
+ else
+ member->SetOfficerNote(note);
HandleRoster(session);
}
}
-void Guild::HandleSetRankInfo(WorldSession* session, uint8 rankId, const std::string& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec rightsAndSlots)
+void Guild::HandleSetRankInfo(WorldSession* session, uint32 rankId, const std::string& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec rightsAndSlots)
{
// Only leader can modify ranks
if (!_IsLeader(session->GetPlayer()))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
else if (RankInfo* rankInfo = GetRankInfo(rankId))
{
sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Changed RankName to '%s', rights to 0x%08X", name.c_str(), rights);
@@ -1436,7 +1507,7 @@ void Guild::HandleInviteMember(WorldSession* session, const std::string& name)
Player* pInvitee = sObjectAccessor->FindPlayerByName(name.c_str());
if (!pInvitee)
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PLAYER_NOT_FOUND_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PLAYER_NOT_FOUND_S, name);
return;
}
@@ -1446,25 +1517,25 @@ void Guild::HandleInviteMember(WorldSession* session, const std::string& name)
return;
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeam() != player->GetTeam())
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_NOT_ALLIED, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_NOT_ALLIED, name);
return;
}
// Invited player cannot be in another guild
- if (pInvitee->GetGuildId())
+ /*if (pInvitee->GetGuildId())
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_ALREADY_IN_GUILD_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_ALREADY_IN_GUILD_S, name);
return;
- }
+ }*/
// Invited player cannot be invited
if (pInvitee->GetGuildIdInvited())
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_ALREADY_INVITED_TO_GUILD_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, name);
return;
}
// Inviting player must have rights to invite
if (!_HasRankRight(player, GR_RIGHT_INVITE))
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
return;
}
@@ -1473,9 +1544,65 @@ void Guild::HandleInviteMember(WorldSession* session, const std::string& name)
pInvitee->SetGuildIdInvited(m_id);
_LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUIDLow(), pInvitee->GetGUIDLow());
- WorldPacket data(SMSG_GUILD_INVITE, 8 + 10); // Guess size
- data << player->GetName();
- data << m_name;
+ WorldPacket data(SMSG_GUILD_INVITE, 100);
+ data << uint32(1); // Guild Level
+ data << uint32(m_emblemInfo.GetStyle());
+ data << uint32(m_emblemInfo.GetBorderColor());
+ data << uint32(m_emblemInfo.GetBorderStyle());
+ data << uint32(m_emblemInfo.GetBackgroundColor());
+ data << uint32(m_emblemInfo.GetColor());
+
+ ObjectGuid oldGuildGuid = MAKE_NEW_GUID(pInvitee->GetGuildId(), 0, pInvitee->GetGuildId() ? HIGHGUID_GUILD : 0);
+ ObjectGuid newGuildGuid = GetGUID();
+
+ data.WriteBit(newGuildGuid[3]);
+ data.WriteBit(newGuildGuid[2]);
+ data.WriteBits(pInvitee->GetGuildName().length(), 8);
+ data.WriteBit(newGuildGuid[1]);
+ data.WriteBit(oldGuildGuid[6]);
+ data.WriteBit(oldGuildGuid[4]);
+ data.WriteBit(oldGuildGuid[1]);
+ data.WriteBit(oldGuildGuid[5]);
+ data.WriteBit(oldGuildGuid[7]);
+ data.WriteBit(oldGuildGuid[2]);
+ data.WriteBit(newGuildGuid[7]);
+ data.WriteBit(newGuildGuid[0]);
+ data.WriteBit(newGuildGuid[6]);
+ data.WriteBits(m_name.length(), 8);
+ data.WriteBit(oldGuildGuid[3]);
+ data.WriteBit(oldGuildGuid[0]);
+ data.WriteBit(newGuildGuid[5]);
+ data.WriteBits(strlen(player->GetName()), 7);
+ data.WriteBit(newGuildGuid[4]);
+
+ data.FlushBits();
+
+ data.WriteByteSeq(newGuildGuid[1]);
+ data.WriteByteSeq(oldGuildGuid[3]);
+ data.WriteByteSeq(newGuildGuid[6]);
+ data.WriteByteSeq(oldGuildGuid[2]);
+ data.WriteByteSeq(oldGuildGuid[1]);
+ data.WriteByteSeq(newGuildGuid[0]);
+
+ if (!pInvitee->GetGuildName().empty())
+ data.append(pInvitee->GetGuildName().c_str(), pInvitee->GetGuildName().length());
+
+ data.WriteByteSeq(newGuildGuid[7]);
+ data.WriteByteSeq(newGuildGuid[2]);
+
+ data.append(player->GetName(), strlen(player->GetName()));
+
+ data.WriteByteSeq(oldGuildGuid[7]);
+ data.WriteByteSeq(oldGuildGuid[6]);
+ data.WriteByteSeq(oldGuildGuid[5]);
+ data.WriteByteSeq(oldGuildGuid[0]);
+ data.WriteByteSeq(newGuildGuid[4]);
+
+ data.append(m_name.c_str(), m_name.length());
+
+ data.WriteByteSeq(newGuildGuid[5]);
+ data.WriteByteSeq(newGuildGuid[3]);
+ data.WriteByteSeq(oldGuildGuid[4]);
pInvitee->GetSession()->SendPacket(&data);
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent (SMSG_GUILD_INVITE)");
@@ -1503,7 +1630,7 @@ void Guild::HandleLeaveMember(WorldSession* session)
{
if (m_members.size() > 1)
// Leader cannot leave if he is not the last member
- SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_LEADER_LEAVE);
+ SendCommandResult(session, GUILD_QUIT, ERR_GUILD_LEADER_LEAVE);
else
// Guild is disbanded if leader leaves.
Disband();
@@ -1515,49 +1642,57 @@ void Guild::HandleLeaveMember(WorldSession* session)
_LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUIDLow());
_BroadcastEvent(GE_LEFT, player->GetGUID(), player->GetName());
- SendCommandResult(session, GUILD_QUIT_S, ERR_PLAYER_NO_MORE_IN_GUILD, m_name);
+ SendCommandResult(session, GUILD_QUIT, ERR_PLAYER_NO_MORE_IN_GUILD, m_name);
}
}
-void Guild::HandleRemoveMember(WorldSession* session, const std::string& name)
+void Guild::HandleRemoveMember(WorldSession* session, uint64 guid)
{
Player* player = session->GetPlayer();
+ Player* removedPlayer = ObjectAccessor::FindPlayer(guid);
+ Member* member = GetMember(guid);
+
// Player must have rights to remove members
if (!_HasRankRight(player, GR_RIGHT_REMOVE))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
- // Removed player must be a member of guild
- else if (Member* member = GetMember(session, name))
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
+ // Removed player must be a member of the guild
+ else if (member && removedPlayer)
{
- // Leader cannot be removed
+ // Guild masters cannot be removed
if (member->IsRank(GR_GUILDMASTER))
- SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_LEADER_LEAVE);
+ SendCommandResult(session, GUILD_QUIT, ERR_GUILD_LEADER_LEAVE);
// Do not allow to remove player with the same rank or higher
else if (member->IsRankNotLower(player->GetRank()))
- SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_RANK_TOO_HIGH_S, name);
+ SendCommandResult(session, GUILD_QUIT, ERR_GUILD_RANK_TOO_HIGH_S, removedPlayer->GetName());
else
{
- uint64 guid = member->GetGUID();
// After call to DeleteMember pointer to member becomes invalid
DeleteMember(guid, false, true);
_LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), GUID_LOPART(guid));
- _BroadcastEvent(GE_REMOVED, 0, name.c_str(), player->GetName());
+ _BroadcastEvent(GE_REMOVED, 0, removedPlayer->GetName(), player->GetName());
}
}
+ else if (removedPlayer)
+ SendCommandResult(session, GUILD_QUIT, ERR_PLAYER_NO_MORE_IN_GUILD, removedPlayer->GetName());
}
-void Guild::HandleUpdateMemberRank(WorldSession* session, const std::string& name, bool demote)
+void Guild::HandleUpdateMemberRank(WorldSession* session, uint64 targetGuid, bool demote)
{
Player* player = session->GetPlayer();
- // Player must have rights to promote
- if (!_HasRankRight(player, demote ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+
// Promoted player must be a member of guild
- else if (Member* member = GetMember(session, name))
+ if (Member* member = GetMember(targetGuid))
{
+ if (!_HasRankRight(player, demote ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE))
+ {
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
+ return;
+ }
+
// Player cannot promote himself
if (member->IsSamePlayer(player->GetGUID()))
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_NAME_INVALID);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_NAME_INVALID);
return;
}
@@ -1566,13 +1701,13 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, const std::string& nam
// Player can demote only lower rank members
if (member->IsRankNotLower(player->GetRank()))
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_RANK_TOO_HIGH_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_RANK_TOO_HIGH_S, member->GetName());
return;
}
// Lowest rank cannot be demoted
if (member->GetRankId() >= _GetLowestRankId())
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_RANK_TOO_LOW_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_RANK_TOO_LOW_S, member->GetName());
return;
}
}
@@ -1582,27 +1717,50 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, const std::string& nam
// member->GetRank() + 1 is the highest rank that current player can promote to
if (member->IsRankNotLower(player->GetRank() + 1))
{
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_RANK_TOO_HIGH_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_RANK_TOO_HIGH_S, member->GetName());
return;
}
}
- // When promoting player, rank is decreased, when demoting - increased
uint32 newRankId = member->GetRankId() + (demote ? 1 : -1);
member->ChangeRank(newRankId);
_LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUIDLow(), GUID_LOPART(member->GetGUID()), newRankId);
- _BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, 0, player->GetName(), name.c_str(), _GetRankName(newRankId).c_str());
+ _BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, 0, player->GetName(), member->GetName().c_str(), _GetRankName(newRankId).c_str());
}
}
-void Guild::HandleAddNewRank(WorldSession* session, const std::string& name)
+void Guild::HandleSetMemberRank(WorldSession* session, uint64 targetGuid, uint64 setterGuid, uint32 rank)
+{
+ Player* player = session->GetPlayer();
+
+ // Promoted player must be a member of guild
+ if (Member* member = GetMember(targetGuid))
+ {
+ if (!_HasRankRight(player, rank > member->GetRankId() ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE))
+ {
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
+ return;
+ }
+
+ // Player cannot promote himself
+ if (member->IsSamePlayer(player->GetGUID()))
+ {
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_NAME_INVALID);
+ return;
+ }
+
+ SendGuildRanksUpdate(setterGuid, targetGuid, rank);
+ }
+}
+
+void Guild::HandleAddNewRank(WorldSession* session, std::string const& name) //, uint32 rankId)
{
if (_GetRanksSize() >= GUILD_RANKS_MAX_COUNT)
return;
// Only leader can add new rank
if (!_IsLeader(session->GetPlayer()))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
else
{
_CreateRank(name, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK);
@@ -1611,7 +1769,7 @@ void Guild::HandleAddNewRank(WorldSession* session, const std::string& name)
}
}
-void Guild::HandleRemoveLowestRank(WorldSession* session)
+void Guild::HandleRemoveRank(WorldSession* session, uint32 rankId)
{
// Cannot remove rank if total count is minimum allowed by the client
if (_GetRanksSize() <= GUILD_RANKS_MIN_COUNT)
@@ -1619,22 +1777,21 @@ void Guild::HandleRemoveLowestRank(WorldSession* session)
// Only leader can delete ranks
if (!_IsLeader(session->GetPlayer()))
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
else
{
- uint8 rankId = _GetLowestRankId();
// Delete bank rights for rank
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_BANK_RIGHTS_FOR_RANK);
stmt->setUInt32(0, m_id);
- stmt->setUInt8 (1, rankId);
+ stmt->setUInt8(1, rankId);
CharacterDatabase.Execute(stmt);
// Delete rank
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_LOWEST_RANK);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_RANK);
stmt->setUInt32(0, m_id);
- stmt->setUInt8 (1, rankId);
+ stmt->setUInt8(1, rankId);
CharacterDatabase.Execute(stmt);
- m_ranks.pop_back();
+ m_ranks.erase(m_ranks.begin() + rankId-1);
HandleQuery(session);
HandleRoster(); // Broadcast for tab rights update
@@ -1732,7 +1889,7 @@ void Guild::HandleDisband(WorldSession* session)
{
// Only leader can disband guild
if (!_IsLeader(session->GetPlayer()))
- Guild::SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PERMISSIONS);
+ Guild::SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PERMISSIONS);
else
{
Disband();
@@ -1787,6 +1944,7 @@ void Guild::SendBankTabData(WorldSession* session, uint8 tabId) const
void Guild::SendBankTabsInfo(WorldSession* session) const
{
+ // TODO
WorldPacket data(SMSG_GUILD_BANK_LIST, 500);
data << uint64(m_bankMoney);
@@ -1813,7 +1971,7 @@ void Guild::SendBankTabText(WorldSession* session, uint8 tabId) const
void Guild::SendPermissions(WorldSession* session) const
{
uint64 guid = session->GetPlayer()->GetGUID();
- uint8 rankId = session->GetPlayer()->GetRank();
+ uint32 rankId = session->GetPlayer()->GetRank();
WorldPacket data(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, 4 * 15 + 1);
data << uint32(rankId);
data << uint32(_GetPurchasedTabsSize());
@@ -1827,7 +1985,7 @@ void Guild::SendPermissions(WorldSession* session) const
}
session->SendPacket(&data);
- sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (MSG_GUILD_PERMISSIONS)");
+ sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent (SMSG_GUILD_PERMISSIONS_QUERY_RESULTS)");
}
void Guild::SendMoneyInfo(WorldSession* session) const
@@ -1835,7 +1993,7 @@ void Guild::SendMoneyInfo(WorldSession* session) const
WorldPacket data(SMSG_GUILD_BANK_MONEY_WITHDRAWN, 4);
data << uint64(_GetMemberRemainingMoney(session->GetPlayer()->GetGUID()));
session->SendPacket(&data);
- sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent MSG_GUILD_BANK_MONEY_WITHDRAWN");
+ sLog->outDebug(LOG_FILTER_GUILD, "WORLD: Sent SMSG_GUILD_BANK_MONEY_WITHDRAWN");
}
void Guild::SendLoginInfo(WorldSession* session) const
@@ -2069,6 +2227,20 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, const std:
}
}
+void Guild::BroadcastAddonToGuild(WorldSession* session, bool officerOnly, const std::string& msg, const std::string& prefix) const
+{
+ if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
+ {
+ WorldPacket data;
+ ChatHandler::FillMessageData(&data, session, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, CHAT_MSG_ADDON, NULL, 0, msg.c_str(), NULL, prefix.c_str());
+ for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
+ if (Player* player = itr->second->FindPlayer())
+ if (player->GetSession() && _HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) &&
+ !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow()))
+ player->GetSession()->SendPacket(&data);
+ }
+}
+
void Guild::BroadcastPacketToRank(WorldPacket* packet, uint8 rankId) const
{
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
@@ -2327,7 +2499,7 @@ void Guild::_CreateRank(const std::string& name, uint32 rights)
return;
// Ranks represent sequence 0, 1, 2, ... where 0 means guildmaster
- uint8 newRankId = _GetRanksSize();
+ uint32 newRankId = _GetRanksSize();
RankInfo info(m_id, newRankId, name, rights, 0);
m_ranks.push_back(info);
@@ -2414,7 +2586,7 @@ void Guild::_SetLeaderGUID(Member* pLeader)
CharacterDatabase.Execute(stmt);
}
-void Guild::_SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay)
+void Guild::_SetRankBankMoneyPerDay(uint32 rankId, uint32 moneyPerDay)
{
if (RankInfo* rankInfo = GetRankInfo(rankId))
{
@@ -2426,7 +2598,7 @@ void Guild::_SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay)
}
}
-void Guild::_SetRankBankTabRightsAndSlots(uint8 rankId, uint8 tabId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB)
+void Guild::_SetRankBankTabRightsAndSlots(uint32 rankId, uint8 tabId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB)
{
if (tabId >= _GetPurchasedTabsSize())
return;
@@ -2441,28 +2613,28 @@ void Guild::_SetRankBankTabRightsAndSlots(uint8 rankId, uint8 tabId, GuildBankRi
}
}
-inline std::string Guild::_GetRankName(uint8 rankId) const
+inline std::string Guild::_GetRankName(uint32 rankId) const
{
if (const RankInfo* rankInfo = GetRankInfo(rankId))
return rankInfo->GetName();
return "<unknown>";
}
-inline uint32 Guild::_GetRankRights(uint8 rankId) const
+inline uint32 Guild::_GetRankRights(uint32 rankId) const
{
if (const RankInfo* rankInfo = GetRankInfo(rankId))
return rankInfo->GetRights();
return 0;
}
-inline uint32 Guild::_GetRankBankMoneyPerDay(uint8 rankId) const
+inline uint32 Guild::_GetRankBankMoneyPerDay(uint32 rankId) const
{
if (const RankInfo* rankInfo = GetRankInfo(rankId))
return rankInfo->GetBankMoneyPerDay();
return 0;
}
-inline uint32 Guild::_GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const
+inline uint32 Guild::_GetRankBankTabSlotsPerDay(uint32 rankId, uint8 tabId) const
{
if (tabId < _GetPurchasedTabsSize())
if (const RankInfo* rankInfo = GetRankInfo(rankId))
@@ -2470,7 +2642,7 @@ inline uint32 Guild::_GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const
return 0;
}
-inline uint8 Guild::_GetRankBankTabRights(uint8 rankId, uint8 tabId) const
+inline uint32 Guild::_GetRankBankTabRights(uint32 rankId, uint8 tabId) const
{
if (const RankInfo* rankInfo = GetRankInfo(rankId))
return rankInfo->GetBankTabRights(tabId);
@@ -2777,3 +2949,56 @@ void Guild::_BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* par
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_GUILD_EVENT");
}
+
+void Guild::SendGuildRanksUpdate(uint64 setterGuid, uint64 targetGuid, uint32 rank)
+{
+ ObjectGuid tarGuid = targetGuid;
+ ObjectGuid setGuid = setterGuid;
+
+ Member* member = GetMember(targetGuid);
+ ASSERT(member);
+
+ WorldPacket data(SMSG_GUILD_RANKS_UPDATE, 100);
+ data.WriteBit(setGuid[7]);
+ data.WriteBit(setGuid[2]);
+ data.WriteBit(tarGuid[2]);
+ data.WriteBit(setGuid[1]);
+ data.WriteBit(tarGuid[1]);
+ data.WriteBit(tarGuid[7]);
+ data.WriteBit(tarGuid[0]);
+ data.WriteBit(tarGuid[5]);
+ data.WriteBit(tarGuid[4]);
+ data.WriteBit(rank < member->GetRankId()); // 1 == higher, 0 = lower?
+ data.WriteBit(setGuid[5]);
+ data.WriteBit(setGuid[0]);
+ data.WriteBit(tarGuid[6]);
+ data.WriteBit(setGuid[3]);
+ data.WriteBit(setGuid[6]);
+ data.WriteBit(tarGuid[3]);
+ data.WriteBit(setGuid[4]);
+
+ data.FlushBits();
+
+ data << uint32(rank);
+ data.WriteByteSeq(setGuid[3]);
+ data.WriteByteSeq(tarGuid[7]);
+ data.WriteByteSeq(setGuid[6]);
+ data.WriteByteSeq(setGuid[2]);
+ data.WriteByteSeq(tarGuid[5]);
+ data.WriteByteSeq(tarGuid[0]);
+ data.WriteByteSeq(setGuid[7]);
+ data.WriteByteSeq(setGuid[5]);
+ data.WriteByteSeq(tarGuid[2]);
+ data.WriteByteSeq(tarGuid[1]);
+ data.WriteByteSeq(setGuid[0]);
+ data.WriteByteSeq(setGuid[4]);
+ data.WriteByteSeq(setGuid[1]);
+ data.WriteByteSeq(tarGuid[3]);
+ data.WriteByteSeq(tarGuid[6]);
+ data.WriteByteSeq(tarGuid[4]);
+ BroadcastPacket(&data);
+
+ member->ChangeRank(rank);
+
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_GUILD_RANKS_UPDATE");
+}
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 446eede5dc8..5e02e88a224 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -77,12 +77,23 @@ enum GuildRankRights
enum GuildCommandType
{
- GUILD_CREATE_S = 0x00,
- GUILD_INVITE_S = 0x01,
- GUILD_QUIT_S = 0x03,
- GUILD_FOUNDER_S = 0x0E,
- GUILD_UNK1 = 0x13,
- GUILD_UNK2 = 0x14
+ GUILD_CREATE = 0x00,
+ GUILD_INVITE = 0x01,
+ GUILD_QUIT = 0x03,
+ GUILD_ROSTER = 0x05,
+ GUILD_PROMOTE = 0x06,
+ GUILD_DEMOTE = 0x07,
+ GUILD_KICK = 0x08,
+ GUILD_LEADER = 0x0A,
+ GUILD_MOTD = 0x0B,
+ GUILD_GUILDCHAT = 0x0D,
+ GUILD_FOUNDER = 0x0E,
+ GUILD_CHANGE_RANK = 0x10,
+ GUILD_EDIT_PUB_NOTE = 0x13,
+ GUILD_UNK = 0x14,
+ GUILD_VIEW_TAB = 0x15,
+ GUILD_MOVE_ITEM = 0x16,
+ GUILD_REPAIR = 0x19,
};
enum GuildCommandError
@@ -110,12 +121,15 @@ enum GuildCommandError
ERR_GUILD_WITHDRAW_LIMIT = 0x19,
ERR_GUILD_NOT_ENOUGH_MONEY = 0x1A,
ERR_GUILD_BANK_FULL = 0x1C,
- ERR_GUILD_ITEM_NOT_FOUND = 0x1D
+ ERR_GUILD_ITEM_NOT_FOUND = 0x1D,
+ ERR_GUILD_TOO_MUCH_MONEY = 0x1F,
+ ERR_GUILD_WRONG_TAB = 0x20,
+ ERR_GUILD_REQ_AUTHENTICATOR = 0x22,
+ ERR_GUILD_BANK_VOUCHER_FAILED = 0x23,
};
enum GuildEvents
{
- // TODO Verify this enum, it changed in 4.x
GE_PROMOTION = 1,
GE_DEMOTION = 2,
GE_MOTD = 3,
@@ -130,18 +144,18 @@ enum GuildEvents
GE_RANK_CREATED = 12,
GE_RANK_DELETED = 13,
GE_RANK_ORDER_CHANGED = 14,
- // Unk15 = 15, // At guild creation - Set founder
+ GE_FOUNDER = 15, // At guild creation - Set founder
GE_SIGNED_ON = 16,
GE_SIGNED_OFF = 17,
GE_GUILDBANKBAGSLOTS_CHANGED = 18,
GE_BANK_TAB_PURCHASED = 19,
GE_BANK_TAB_UPDATED = 20,
- GE_BANK_UPDATE_MONEY = 21,
-
- // To be found:
- // GE_BANK_MONEY_WITHDRAWN = 19,
- // GE_BANK_TEXT_CHANGED = 20,
- // GE_UPDATE_ROSTER = 12,
+ GE_BANK_MONEY_UPDATED = 21,
+ GE_BANK_MONEY_WITHDRAWN = 22,
+ GE_BANK_TEXT_CHANGED = 23,
+ // 24 - error 795
+ GE_SIGNED_ON_MOBILE = 25,
+ GE_SIGNED_Off_MOBILE = 26,
};
enum PetitionTurns
@@ -185,7 +199,7 @@ enum GuildBankEventLogTypes
GUILD_BANK_LOG_REPAIR_MONEY = 6,
GUILD_BANK_LOG_MOVE_ITEM2 = 7,
GUILD_BANK_LOG_UNK1 = 8,
- GUILD_BANK_LOG_UNK2 = 9,
+ GUILD_BANK_LOG_BUY_SLOT = 9,
};
enum GuildEventLogTypes
@@ -208,6 +222,15 @@ enum GuildEmblemError
ERR_GUILDEMBLEM_INVALIDVENDOR = 5
};
+enum GuildMemberFlags
+{
+ GUILDMEMBER_STATUS_NONE = 0x0000,
+ GUILDMEMBER_STATUS_ONLINE = 0x0001,
+ GUILDMEMBER_STATUS_AFK = 0x0002,
+ GUILDMEMBER_STATUS_DND = 0x0004,
+ GUILDMEMBER_STATUS_MOBILE = 0x0008, // remote chat from mobile app
+};
+
////////////////////////////////////////////////////////////////////////////////////////////
// Emblem info
class EmblemInfo
@@ -238,7 +261,7 @@ private:
struct GuildBankRightsAndSlots
{
GuildBankRightsAndSlots() : rights(0), slots(0) { }
- GuildBankRightsAndSlots(uint8 _rights, uint32 _slots) : rights(_rights), slots(_slots) { }
+ GuildBankRightsAndSlots(uint32 _rights, uint32 _slots) : rights(_rights), slots(_slots) { }
inline bool IsEqual(GuildBankRightsAndSlots const& rhs) const { return rights == rhs.rights && slots == rhs.slots; }
void SetGuildMasterValues()
@@ -247,7 +270,7 @@ struct GuildBankRightsAndSlots
slots = uint32(GUILD_WITHDRAW_SLOT_UNLIMITED);
}
- uint8 rights;
+ uint32 rights;
uint32 slots;
};
typedef std::vector <GuildBankRightsAndSlots> GuildBankRightsAndSlotsVec;
@@ -269,7 +292,7 @@ private:
};
public:
- Member(uint32 guildId, uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { }
+ Member(uint32 guildId, uint64 guid, uint32 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { }
void SetStats(Player* player);
void SetStats(const std::string& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId);
@@ -278,14 +301,20 @@ private:
void SetPublicNote(const std::string& publicNote);
void SetOfficerNote(const std::string& officerNote);
+ std::string GetPublicNote() { return m_publicNote; };
+ std::string GetOfficerNote() { return m_officerNote; };
+
bool LoadFromDB(Field* fields);
void SaveToDB(SQLTransaction& trans) const;
- void WritePacket(WorldPacket& data) const;
uint64 GetGUID() const { return m_guid; }
std::string GetName() const { return m_name; }
uint32 GetAccountId() const { return m_accountId; }
- uint8 GetRankId() const { return m_rankId; }
+ uint32 GetRankId() const { return m_rankId; }
+ uint8 GetClass() const { return m_class; }
+ uint8 GetLevel() const { return m_level; }
+ uint8 GetZone() const { return m_zoneId; }
+ uint64 GetLogoutTime() const { return m_logoutTime; }
void ChangeRank(uint8 newRank);
@@ -313,7 +342,7 @@ private:
uint64 m_logoutTime;
uint32 m_accountId;
// Fields from guild_member table
- uint8 m_rankId;
+ uint32 m_rankId;
std::string m_publicNote;
std::string m_officerNote;
@@ -426,14 +455,13 @@ private:
{
public:
RankInfo(uint32 guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
- RankInfo(uint32 guildId, uint8 rankId, const std::string& name, uint32 rights, uint32 money) :
+ RankInfo(uint32 guildId, uint32 rankId, const std::string& name, uint32 rights, uint32 money) :
m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { }
void LoadFromDB(Field* fields);
void SaveToDB(SQLTransaction& trans) const;
- void WritePacket(WorldPacket& data) const;
- uint8 GetId() const { return m_rankId; }
+ uint32 GetId() const { return m_rankId; }
std::string GetName() const { return m_name; }
void SetName(const std::string& name);
@@ -447,7 +475,7 @@ private:
uint32 GetBankMoneyPerDay() const { return m_rankId == GR_GUILDMASTER ? GUILD_WITHDRAW_MONEY_UNLIMITED : m_bankMoneyPerDay; }
void SetBankMoneyPerDay(uint32 money);
- inline uint8 GetBankTabRights(uint8 tabId) const { return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].rights : 0; }
+ inline uint32 GetBankTabRights(uint8 tabId) const { return tabId < GUILD_BANK_MAX_TABS ? m_bankTabRightsAndSlots[tabId].rights : 0; }
inline uint32 GetBankTabSlotsPerDay(uint8 tabId) const
{
if (tabId < GUILD_BANK_MAX_TABS)
@@ -458,8 +486,7 @@ private:
private:
uint32 m_guildId;
-
- uint8 m_rankId;
+ uint32 m_rankId;
std::string m_name;
uint32 m_rights;
uint32 m_bankMoneyPerDay;
@@ -614,21 +641,23 @@ public:
// Handle client commands
void HandleRoster(WorldSession* session = NULL); // NULL = broadcast
void HandleQuery(WorldSession* session);
+ void HandleGuildRanks(WorldSession* session);
void HandleSetMOTD(WorldSession* session, const std::string& motd);
void HandleSetInfo(WorldSession* session, const std::string& info);
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);
void HandleSetLeader(WorldSession* session, const std::string& name);
void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, const std::string& name, const std::string& icon);
- void HandleSetMemberNote(WorldSession* session, const std::string& name, const std::string& note, bool officer);
- void HandleSetRankInfo(WorldSession* session, uint8 rankId, const std::string& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec rightsAndSlots);
+ void HandleSetMemberNote(WorldSession* session, std::string const& note, uint64 guid, bool isPublic);
+ void HandleSetRankInfo(WorldSession* session, uint32 rankId, const std::string& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec rightsAndSlots);
void HandleBuyBankTab(WorldSession* session, uint8 tabId);
void HandleInviteMember(WorldSession* session, const std::string& name);
void HandleAcceptMember(WorldSession* session);
void HandleLeaveMember(WorldSession* session);
- void HandleRemoveMember(WorldSession* session, const std::string& name);
- void HandleUpdateMemberRank(WorldSession* session, const std::string& name, bool demote);
+ void HandleRemoveMember(WorldSession* session, uint64 guid);
+ void HandleUpdateMemberRank(WorldSession* session, uint64 targetGuid, bool demote);
+ void HandleSetMemberRank(WorldSession* session, uint64 targetGuid, uint64 setterGuid, uint32 rank);
void HandleAddNewRank(WorldSession* session, const std::string& name);
- void HandleRemoveLowestRank(WorldSession* session);
+ void HandleRemoveRank(WorldSession* session, uint32 rankId);
void HandleMemberDepositMoney(WorldSession* session, uint32 amount);
bool HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool repair = false);
void HandleMemberLogout(WorldSession* session);
@@ -658,6 +687,7 @@ public:
// Broadcasts
void BroadcastToGuild(WorldSession* session, bool officerOnly, const std::string& msg, uint32 language = LANG_UNIVERSAL) const;
+ void BroadcastAddonToGuild(WorldSession* session, bool officerOnly, const std::string& msg, const std::string& prefix) const;
void BroadcastPacketToRank(WorldPacket* packet, uint8 rankId) const;
void BroadcastPacket(WorldPacket* packet) const;
@@ -714,11 +744,11 @@ protected:
uint32 m_level;
private:
- inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
- inline const RankInfo* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; }
- inline RankInfo* GetRankInfo(uint8 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; }
+ inline uint32 _GetRanksSize() const { return uint32(m_ranks.size()); }
+ inline const RankInfo* GetRankInfo(uint32 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; }
+ inline RankInfo* GetRankInfo(uint32 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : NULL; }
inline bool _HasRankRight(Player* player, uint32 right) const { return (_GetRankRights(player->GetRank()) & right) != GR_RIGHT_EMPTY; }
- inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); }
+ inline uint32 _GetLowestRankId() const { return uint32(m_ranks.size() - 1); }
inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; }
@@ -740,7 +770,7 @@ private:
if (itr->second->GetName() == name)
return itr->second;
- SendCommandResult(session, GUILD_INVITE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD_S, name);
+ SendCommandResult(session, GUILD_INVITE, ERR_GUILD_PLAYER_NOT_IN_GUILD_S, name);
return NULL;
}
inline void _DeleteMemberFromDB(uint32 lowguid) const
@@ -765,13 +795,13 @@ private:
bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add);
void _SetLeaderGUID(Member* pLeader);
- void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
- void _SetRankBankTabRightsAndSlots(uint8 rankId, uint8 tabId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
- uint8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const;
- uint32 _GetRankRights(uint8 rankId) const;
- uint32 _GetRankBankMoneyPerDay(uint8 rankId) const;
- uint32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const;
- std::string _GetRankName(uint8 rankId) const;
+ void _SetRankBankMoneyPerDay(uint32 rankId, uint32 moneyPerDay);
+ void _SetRankBankTabRightsAndSlots(uint32 rankId, uint8 tabId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
+ uint32 _GetRankBankTabRights(uint32 rankId, uint8 tabId) const;
+ uint32 _GetRankRights(uint32 rankId) const;
+ uint32 _GetRankBankMoneyPerDay(uint32 rankId) const;
+ uint32 _GetRankBankTabSlotsPerDay(uint32 rankId, uint8 tabId) const;
+ std::string _GetRankName(uint32 rankId) const;
uint32 _GetMemberRemainingSlots(uint64 guid, uint8 tabId) const;
uint32 _GetMemberRemainingMoney(uint64 guid) const;
@@ -791,6 +821,8 @@ private:
void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
+ void SendGuildRanksUpdate(uint64 setterGuid, uint64 targetGuid, uint32 rank);
+
void _BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const;
};
#endif
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp
index 4a3f8d55fdc..5085bb15584 100755
--- a/src/server/game/Handlers/AuthHandler.cpp
+++ b/src/server/game/Handlers/AuthHandler.cpp
@@ -28,6 +28,8 @@ void WorldSession::SendAuthResponse(uint8 code, bool queued, uint32 queuePos)
packet.WriteBit(1); // has account info
+ packet.FlushBits();
+
// account info
packet << uint32(0); // BillingTimeRemaining
packet << uint8(Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, 3 - CATA; must be set in database manually for each account
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 41e9664b69f..707d985cd3f 100755
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -180,7 +180,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
// LANG_ADDON should not be changed nor be affected by flood control
else
{
- // send in universal language if player in .gmon mode (ignore spell effects)
+ // send in universal language if player in .gm on mode (ignore spell effects)
if (sender->isGameMaster())
lang = LANG_UNIVERSAL;
else
@@ -225,6 +225,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
}
}
}
+ else
+ lang = LANG_UNIVERSAL;
if (sender->HasAura(1852) && type != CHAT_MSG_WHISPER)
{
@@ -538,23 +540,41 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
return;
}
- uint32 msgLen = recvData.ReadBits(9);
- uint32 prefixLen = recvData.ReadBits(5);
- std::string message = "";
- std::string prefix = "";
- std::string targetName = "";
+ std::string message;
+ std::string prefix;
+ std::string targetName;
- if (type == CHAT_MSG_WHISPER)
- {
- uint32 targetLen = recvData.ReadBits(10);
- message = recvData.ReadString(msgLen);
- prefix = recvData.ReadString(prefixLen);
- targetName = recvData.ReadString(targetLen);
- }
- else
+ switch (type)
{
- message = recvData.ReadString(msgLen);
- prefix = recvData.ReadString(prefixLen);
+ case CHAT_MSG_WHISPER:
+ {
+ uint32 msgLen = recvData.ReadBits(9);
+ uint32 prefixLen = recvData.ReadBits(5);
+ uint32 targetLen = recvData.ReadBits(10);
+ message = recvData.ReadString(msgLen);
+ prefix = recvData.ReadString(prefixLen);
+ targetName = recvData.ReadString(targetLen);
+ break;
+ }
+ case CHAT_MSG_PARTY:
+ case CHAT_MSG_RAID:
+ case CHAT_MSG_OFFICER:
+ {
+ uint32 prefixLen = recvData.ReadBits(5);
+ uint32 msgLen = recvData.ReadBits(9);
+ prefix = recvData.ReadString(prefixLen);
+ message = recvData.ReadString(msgLen);
+ break;
+ }
+ case CHAT_MSG_GUILD:
+ case CHAT_MSG_BATTLEGROUND:
+ {
+ uint32 msgLen = recvData.ReadBits(9);
+ uint32 prefixLen = recvData.ReadBits(5);
+ message = recvData.ReadString(msgLen);
+ prefix = recvData.ReadString(prefixLen);
+ break;
+ }
}
// Logging enabled?
@@ -585,10 +605,11 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
break;
}
case CHAT_MSG_GUILD:
+ case CHAT_MSG_OFFICER:
{
if (sender->GetGuildId())
if (Guild* guild = sGuildMgr->GetGuildById(sender->GetGuildId()))
- guild->BroadcastToGuild(this, false, message, LANG_ADDON);
+ guild->BroadcastAddonToGuild(this, type == CHAT_MSG_OFFICER, message, prefix);
break;
}
case CHAT_MSG_WHISPER:
@@ -599,7 +620,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
if (!receiver)
break;
- sender->Whisper(message, LANG_ADDON, receiver->GetGUID());
+ sender->WhisperAddon(message, prefix, receiver->GetGUID());
break;
}
// Messages sent to "RAID" while in a party will get delivered to "PARTY"
@@ -612,7 +633,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
break;
WorldPacket data;
- ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL);
+ ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL, prefix.c_str());
group->BroadcastPacket(&data, true, -1, group->GetMemberGroup(sender->GetGUID()));
break;
}
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 53862e99db9..5ed44b61333 100755
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -36,7 +36,7 @@ inline Guild* _GetPlayerGuild(WorldSession* session, bool sendError = false)
if (Guild* guild = sGuildMgr->GetGuildById(guildId)) // Find guild by id
return guild;
if (sendError)
- Guild::SendCommandResult(session, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD);
+ Guild::SendCommandResult(session, GUILD_CREATE, ERR_GUILD_PLAYER_NOT_IN_GUILD);
return NULL;
}
@@ -55,7 +55,7 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
return;
}
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_PLAYER_NOT_IN_GUILD);
}
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
@@ -79,8 +79,8 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INVITE");
- std::string invitedName;
- recvPacket >> invitedName;
+ uint32 nameLength = recvPacket.ReadBits(7);
+ std::string invitedName = recvPacket.ReadString(nameLength);
if (normalizePlayerName(invitedName))
if (Guild* guild = _GetPlayerGuild(this, true))
@@ -91,12 +91,28 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_REMOVE");
- std::string playerName;
- recvPacket >> playerName;
+ ObjectGuid playerGuid;
+
+ playerGuid[6] = recvPacket.ReadBit();
+ playerGuid[5] = recvPacket.ReadBit();
+ playerGuid[4] = recvPacket.ReadBit();
+ playerGuid[0] = recvPacket.ReadBit();
+ playerGuid[1] = recvPacket.ReadBit();
+ playerGuid[3] = recvPacket.ReadBit();
+ playerGuid[7] = recvPacket.ReadBit();
+ playerGuid[2] = recvPacket.ReadBit();
+
+ recvPacket.ReadByteSeq(playerGuid[2]);
+ recvPacket.ReadByteSeq(playerGuid[6]);
+ recvPacket.ReadByteSeq(playerGuid[5]);
+ recvPacket.ReadByteSeq(playerGuid[7]);
+ recvPacket.ReadByteSeq(playerGuid[1]);
+ recvPacket.ReadByteSeq(playerGuid[4]);
+ recvPacket.ReadByteSeq(playerGuid[3]);
+ recvPacket.ReadByteSeq(playerGuid[0]);
- if (normalizePlayerName(playerName))
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleRemoveMember(this, playerName);
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleRemoveMember(this, playerGuid);
}
void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
@@ -129,36 +145,114 @@ void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ROSTER");
+ recvPacket.rfinish();
- uint64 guildGuid = 0;
-
- if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
- if (guild->IsMember(GetPlayer()->GetGUID()))
- guild->HandleRoster(this);
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleRoster(this);
}
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_PROMOTE");
- std::string playerName;
- recvPacket >> playerName;
+ ObjectGuid targetGuid;
+
+ targetGuid[7] = recvPacket.ReadBit();
+ targetGuid[2] = recvPacket.ReadBit();
+ targetGuid[5] = recvPacket.ReadBit();
+ targetGuid[6] = recvPacket.ReadBit();
+ targetGuid[1] = recvPacket.ReadBit();
+ targetGuid[0] = recvPacket.ReadBit();
+ targetGuid[3] = recvPacket.ReadBit();
+ targetGuid[4] = recvPacket.ReadBit();
+
+ recvPacket.ReadByteSeq(targetGuid[0]);
+ recvPacket.ReadByteSeq(targetGuid[5]);
+ recvPacket.ReadByteSeq(targetGuid[2]);
+ recvPacket.ReadByteSeq(targetGuid[3]);
+ recvPacket.ReadByteSeq(targetGuid[6]);
+ recvPacket.ReadByteSeq(targetGuid[4]);
+ recvPacket.ReadByteSeq(targetGuid[1]);
+ recvPacket.ReadByteSeq(targetGuid[7]);
- if (normalizePlayerName(playerName))
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleUpdateMemberRank(this, playerName, false);
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleUpdateMemberRank(this, targetGuid, false);
}
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_DEMOTE");
- std::string playerName;
- recvPacket >> playerName;
+ ObjectGuid targetGuid;
+
+ targetGuid[7] = recvPacket.ReadBit();
+ targetGuid[1] = recvPacket.ReadBit();
+ targetGuid[5] = recvPacket.ReadBit();
+ targetGuid[6] = recvPacket.ReadBit();
+ targetGuid[2] = recvPacket.ReadBit();
+ targetGuid[3] = recvPacket.ReadBit();
+ targetGuid[0] = recvPacket.ReadBit();
+ targetGuid[4] = recvPacket.ReadBit();
+
+ recvPacket.ReadByteSeq(targetGuid[1]);
+ recvPacket.ReadByteSeq(targetGuid[2]);
+ recvPacket.ReadByteSeq(targetGuid[7]);
+ recvPacket.ReadByteSeq(targetGuid[5]);
+ recvPacket.ReadByteSeq(targetGuid[6]);
+ recvPacket.ReadByteSeq(targetGuid[0]);
+ recvPacket.ReadByteSeq(targetGuid[4]);
+ recvPacket.ReadByteSeq(targetGuid[3]);
- if (normalizePlayerName(playerName))
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleUpdateMemberRank(this, playerName, true);
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleUpdateMemberRank(this, targetGuid, true);
+}
+
+void WorldSession::HandleGuildAssignRankOpcode(WorldPacket& recvPacket)
+{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ASSIGN_MEMBER_RANK");
+
+ ObjectGuid targetGuid;
+ ObjectGuid setterGuid;
+
+ uint32 rankId;
+ recvPacket >> rankId;
+
+ targetGuid[1] = recvPacket.ReadBit();
+ targetGuid[7] = recvPacket.ReadBit();
+ setterGuid[4] = recvPacket.ReadBit();
+ setterGuid[2] = recvPacket.ReadBit();
+ targetGuid[4] = recvPacket.ReadBit();
+ targetGuid[5] = recvPacket.ReadBit();
+ targetGuid[6] = recvPacket.ReadBit();
+ setterGuid[1] = recvPacket.ReadBit();
+ setterGuid[7] = recvPacket.ReadBit();
+ targetGuid[2] = recvPacket.ReadBit();
+ targetGuid[3] = recvPacket.ReadBit();
+ targetGuid[0] = recvPacket.ReadBit();
+ setterGuid[6] = recvPacket.ReadBit();
+ setterGuid[3] = recvPacket.ReadBit();
+ setterGuid[0] = recvPacket.ReadBit();
+ setterGuid[5] = recvPacket.ReadBit();
+
+ recvPacket.ReadByteSeq(targetGuid[0]);
+ recvPacket.ReadByteSeq(setterGuid[1]);
+ recvPacket.ReadByteSeq(setterGuid[3]);
+ recvPacket.ReadByteSeq(setterGuid[5]);
+ recvPacket.ReadByteSeq(targetGuid[7]);
+ recvPacket.ReadByteSeq(targetGuid[3]);
+ recvPacket.ReadByteSeq(setterGuid[0]);
+ recvPacket.ReadByteSeq(targetGuid[1]);
+ recvPacket.ReadByteSeq(setterGuid[6]);
+ recvPacket.ReadByteSeq(targetGuid[2]);
+ recvPacket.ReadByteSeq(targetGuid[5]);
+ recvPacket.ReadByteSeq(targetGuid[4]);
+ recvPacket.ReadByteSeq(setterGuid[2]);
+ recvPacket.ReadByteSeq(setterGuid[4]);
+ recvPacket.ReadByteSeq(targetGuid[6]);
+ recvPacket.ReadByteSeq(setterGuid[7]);
+
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleSetMemberRank(this, targetGuid, setterGuid, rankId);
}
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
@@ -193,107 +287,104 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_MOTD");
- std::string motd; // Empty by default
- if (!recvPacket.empty())
- recvPacket >> motd;
+ uint32 motdLength = recvPacket.ReadBits(11);
+ std::string motd = recvPacket.ReadString(motdLength);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMOTD(this, motd);
}
-void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE");
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_NOTE");
- std::string playerName;
- recvPacket >> playerName;
+ ObjectGuid playerGuid;
- std::string publicNote;
- recvPacket >> publicNote;
+ playerGuid[1] = recvPacket.ReadBit();
+ playerGuid[4] = recvPacket.ReadBit();
+ playerGuid[5] = recvPacket.ReadBit();
+ playerGuid[3] = recvPacket.ReadBit();
+ playerGuid[0] = recvPacket.ReadBit();
+ playerGuid[7] = recvPacket.ReadBit();
+ bool type = recvPacket.ReadBit(); // 0 == Officer, 1 == Public
+ playerGuid[6] = recvPacket.ReadBit();
+ uint32 noteLength = recvPacket.ReadBits(8);
+ playerGuid[2] = recvPacket.ReadBit();
- if (normalizePlayerName(playerName))
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleSetMemberNote(this, playerName, publicNote, false);
-}
+ recvPacket.ReadByteSeq(playerGuid[4]);
+ recvPacket.ReadByteSeq(playerGuid[5]);
+ recvPacket.ReadByteSeq(playerGuid[0]);
+ recvPacket.ReadByteSeq(playerGuid[3]);
+ recvPacket.ReadByteSeq(playerGuid[1]);
+ recvPacket.ReadByteSeq(playerGuid[6]);
+ recvPacket.ReadByteSeq(playerGuid[7]);
+ std::string note = recvPacket.ReadString(noteLength);
+ recvPacket.ReadByteSeq(playerGuid[2]);
-void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
-{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE");
-
- std::string playerName;
- recvPacket >> playerName;
-
- std::string officerNote;
- recvPacket >> officerNote;
-
- if (normalizePlayerName(playerName))
- if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleSetMemberNote(this, playerName, officerNote, true);
+ if (Guild* guild = _GetPlayerGuild(this, true))
+ guild->HandleSetMemberNote(this, note, playerGuid, type);
}
-void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildQueryRanksOpcode(WorldPacket& recvData)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_RANK");
-
- Guild* guild = _GetPlayerGuild(this, true);
- if (!guild)
- {
- recvPacket.rpos(recvPacket.wpos());
- return;
- }
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_QUERY_RANKS");
- uint32 rankId;
- recvPacket >> rankId;
-
- uint32 rights;
- recvPacket >> rights;
-
- std::string rankName;
- recvPacket >> rankName;
-
- uint32 money;
- recvPacket >> money;
-
- GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
- for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
- {
- uint32 bankRights;
- uint32 slots;
+ ObjectGuid guildGuid;
- recvPacket >> bankRights;
- recvPacket >> slots;
+ guildGuid[2] = recvData.ReadBit();
+ guildGuid[3] = recvData.ReadBit();
+ guildGuid[0] = recvData.ReadBit();
+ guildGuid[6] = recvData.ReadBit();
+ guildGuid[4] = recvData.ReadBit();
+ guildGuid[7] = recvData.ReadBit();
+ guildGuid[5] = recvData.ReadBit();
+ guildGuid[1] = recvData.ReadBit();
- rightsAndSlots[tabId] = GuildBankRightsAndSlots(uint8(bankRights), slots);
- }
+ recvData.ReadByteSeq(guildGuid[3]);
+ recvData.ReadByteSeq(guildGuid[4]);
+ recvData.ReadByteSeq(guildGuid[5]);
+ recvData.ReadByteSeq(guildGuid[7]);
+ recvData.ReadByteSeq(guildGuid[1]);
+ recvData.ReadByteSeq(guildGuid[0]);
+ recvData.ReadByteSeq(guildGuid[6]);
+ recvData.ReadByteSeq(guildGuid[2]);
- guild->HandleSetRankInfo(this, rankId, rankName, rights, money, rightsAndSlots);
+ if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
+ if (guild->IsMember(_player->GetGUID()))
+ guild->HandleGuildRanks(this);
}
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ADD_RANK");
- std::string rankName;
- recvPacket >> rankName;
+ uint32 rankId;
+ recvPacket >> rankId;
+
+ uint32 length = recvPacket.ReadBits(7);
+ std::string rankName = recvPacket.ReadString(length);
if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleAddNewRank(this, rankName);
+ guild->HandleAddNewRank(this, rankName); //, rankId);
}
-void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildDelRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_DEL_RANK");
+ uint32 rankId;
+ recvPacket >> rankId;
+
if (Guild* guild = _GetPlayerGuild(this, true))
- guild->HandleRemoveLowestRank(this);
+ guild->HandleRemoveRank(this, rankId);
}
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INFO_TEXT");
- std::string info;
- recvPacket >> info;
+ uint32 length = recvPacket.ReadBits(12);
+ std::string info = recvPacket.ReadString(length);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetInfo(this, info);
@@ -347,7 +438,7 @@ void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket & /* recv_data */)
void WorldSession::HandleGuildPermissions(WorldPacket& /* recv_data */)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received (MSG_GUILD_PERMISSIONS)");
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received (CMSG_GUILD_PERMISSIONS)");
if (Guild* guild = _GetPlayerGuild(this))
guild->SendPermissions(this);
@@ -369,7 +460,7 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket & recv_data)
if (Guild* guild = _GetPlayerGuild(this))
guild->SendBankTabsInfo(this);
else
- Guild::SendCommandResult(this, GUILD_UNK1, ERR_GUILD_PLAYER_NOT_IN_GUILD);
+ Guild::SendCommandResult(this, GUILD_VIEW_TAB, ERR_GUILD_PLAYER_NOT_IN_GUILD);
}
}
@@ -459,13 +550,14 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket & recv_data)
uint8 destSlotId;
recv_data >> destSlotId;
- recv_data.read_skip<uint32>(); // Always 0
+
+ uint32 destItemEntry;
+ recv_data >> destItemEntry;
recv_data >> tabId;
recv_data >> slotId;
recv_data >> itemEntry;
recv_data.read_skip<uint8>(); // Always 0
-
recv_data >> splitedAmount;
guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount);
@@ -515,7 +607,7 @@ void WorldSession::HandleGuildBankBuyTab(WorldPacket & recv_data)
uint8 tabId;
recv_data >> tabId;
- if (GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
+ if (!GoGuid || GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
if (Guild* guild = _GetPlayerGuild(this))
guild->HandleBuyBankTab(this, tabId);
}
@@ -578,26 +670,71 @@ void WorldSession::HandleSetGuildBankTabText(WorldPacket& recv_data)
guild->SetBankTabText(tabId, text);
}
-void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recv_data)
+void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_QUERY_GUILD_XP");
- /*
- Bitstream is correct, it just needs a proper guild implementation
- uint64 playerGuid = 0;
- BitStream mask = recv_data.ReadBitStream(8);
+ ObjectGuid guildGuid;
+
+ guildGuid[2] = recvData.ReadBit();
+ guildGuid[1] = recvData.ReadBit();
+ guildGuid[0] = recvData.ReadBit();
+ guildGuid[5] = recvData.ReadBit();
+ guildGuid[4] = recvData.ReadBit();
+ guildGuid[7] = recvData.ReadBit();
+ guildGuid[6] = recvData.ReadBit();
+ guildGuid[3] = recvData.ReadBit();
- ByteBuffer bytes(8, true);
+ recvData.ReadByteSeq(guildGuid[7]);
+ recvData.ReadByteSeq(guildGuid[2]);
+ recvData.ReadByteSeq(guildGuid[3]);
+ recvData.ReadByteSeq(guildGuid[6]);
+ recvData.ReadByteSeq(guildGuid[1]);
+ recvData.ReadByteSeq(guildGuid[5]);
+ recvData.ReadByteSeq(guildGuid[0]);
+ recvData.ReadByteSeq(guildGuid[4]);
- recv_data.ReadXorByte(mask[5], bytes[6]);
- recv_data.ReadXorByte(mask[1], bytes[2]);
- recv_data.ReadXorByte(mask[7], bytes[1]);
- recv_data.ReadXorByte(mask[4], bytes[4]);
- recv_data.ReadXorByte(mask[0], bytes[0]);
- recv_data.ReadXorByte(mask[6], bytes[3]);
- recv_data.ReadXorByte(mask[3], bytes[5]);
- recv_data.ReadXorByte(mask[2], bytes[7]);
+ //if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
+ // guild->Send SMSG_GUILD_XP
+}
+
+void WorldSession::HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket)
+{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_RANK_PERMISSIONS");
+
+ Guild* guild = _GetPlayerGuild(this, true);
+ if (!guild)
+ {
+ recvPacket.rfinish();
+ return;
+ }
+
+ uint32 unk;
+ uint32 rankId;
+ uint32 oldRights;
+ uint32 newRights;
+ uint32 moneyPerDay;
+
+ recvPacket >> unk;
+ recvPacket >> oldRights;
+ recvPacket >> newRights;
+
+ GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
+ for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
+ {
+ uint32 bankRights;
+ uint32 slots;
+
+ recvPacket >> bankRights;
+ recvPacket >> slots;
+
+ rightsAndSlots[tabId] = GuildBankRightsAndSlots(uint8(bankRights), slots);
+ }
+
+ recvPacket >> moneyPerDay;
+ recvPacket >> rankId;
+ uint32 nameLength = recvPacket.ReadBits(7);
+ std::string rankName = recvPacket.ReadString(nameLength);
- playerGuid = BitConverter::ToUInt64(bytes);
- */
+ guild->HandleSetRankInfo(this, rankId, rankName, newRights, moneyPerDay, rightsAndSlots);
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 18859e766d1..c44cef555db 100755
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -664,24 +664,15 @@ void WorldSession::HandleBuyItemInSlotOpcode(WorldPacket & recv_data)
return; // cheating
uint8 bag = NULL_BAG; // init for case invalid bagGUID
-
+ Item* bagItem = NULL;
// find bag slot by bag guid
if (bagguid == _player->GetGUID())
bag = INVENTORY_SLOT_BAG_0;
else
- {
- for (int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i)
- {
- if (Bag* pBag = _player->GetBagByPos(i))
- {
- if (bagguid == pBag->GetGUID())
- {
- bag = i;
- break;
- }
- }
- }
- }
+ bagItem = _player->GetItemByGuid(bagguid);
+
+ if (bagItem && bagItem->IsBag())
+ bag = bagItem->GetSlot();
// bag not found, cheating?
if (bag == NULL_BAG)
@@ -690,15 +681,15 @@ void WorldSession::HandleBuyItemInSlotOpcode(WorldPacket & recv_data)
GetPlayer()->BuyItemFromVendorSlot(vendorguid, slot, item, count, bag, bagslot);
}
-void WorldSession::HandleBuyItemOpcode(WorldPacket & recv_data)
+void WorldSession::HandleBuyItemOpcode(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_BUY_ITEM");
- uint64 vendorguid, unk2; // unk2 can be 0?
+ uint64 vendorguid, bagGuid;
uint32 item, slot, count;
- uint8 unk1; // if this is == 2 then the count might be multiplied by 100
- int8 unk3; // only known value = -1, according to the client it can take more values
+ uint8 itemType; // 1 = item, 2 = currency
+ int8 bagSlot;
- recv_data >> vendorguid >> unk1 >> item >> slot >> count >> unk2 >> unk3;
+ recv_data >> vendorguid >> itemType >> item >> slot >> count >> bagGuid >> bagSlot;
// client expects count starting at 1, and we send vendorslot+1 to client already
if (slot > 0)
@@ -706,7 +697,12 @@ void WorldSession::HandleBuyItemOpcode(WorldPacket & recv_data)
else
return; // cheating
- GetPlayer()->BuyItemFromVendorSlot(vendorguid, slot, item, count, NULL_BAG, NULL_SLOT);
+ Item* bagItem = _player->GetItemByGuid(bagGuid);
+
+ if (bagItem && bagItem->IsBag())
+ bag = bagItem->GetSlot();
+
+ GetPlayer()->BuyItemFromVendorSlot(vendorguid, slot, item, count, bag, bagSlot);
}
void WorldSession::HandleListInventoryOpcode(WorldPacket & recv_data)
@@ -1617,16 +1613,98 @@ void WorldSession::HandleTransmogrifyItems(WorldPacket& recvData)
itemTransmogrifier->SetNotRefundable(player);
itemTransmogrifier->ClearSoulboundTradeable(player);
- cost += itemTransmogrified->GetTransmogrifyCost();
+ cost += itemTransmogrified->GetSpecialPrice();
}
-
- // trusting the client, if it got here it has to have enough money
- // ... unless client was modified
- if (cost) // 0 cost if reverting look
- player->ModifyMoney(-cost);
}
+ // trusting the client, if it got here it has to have enough money
+ // ... unless client was modified
+ if (cost) // 0 cost if reverting look
+ player->ModifyMoney(-cost);
+
+
delete[] itemGuids;
delete[] newEntries;
delete[] slots;
}
+
+void WorldSession::SendReforgeResult(bool success)
+{
+ WorldPacket data(SMSG_REFORGE_RESULT, 1);
+ data.WriteBit(success);
+ data.FlushBits();
+ SendPacket(&data);
+}
+
+void WorldSession::HandleReforgeItemOpcode(WorldPacket& recvData)
+{
+ uint32 slot, reforgeEntry;
+ ObjectGuid guid;
+ uint32 bag;
+ Player* player = GetPlayer();
+
+ recvData >> reforgeEntry >> slot >> bag;
+
+ guid[2] = recvData.ReadBit();
+ guid[6] = recvData.ReadBit();
+ guid[3] = recvData.ReadBit();
+ guid[4] = recvData.ReadBit();
+ guid[1] = recvData.ReadBit();
+ guid[0] = recvData.ReadBit();
+ guid[7] = recvData.ReadBit();
+ guid[5] = recvData.ReadBit();
+
+ recvData.ReadByteSeq(guid[2]);
+ recvData.ReadByteSeq(guid[3]);
+ recvData.ReadByteSeq(guid[6]);
+ recvData.ReadByteSeq(guid[4]);
+ recvData.ReadByteSeq(guid[1]);
+ recvData.ReadByteSeq(guid[0]);
+ recvData.ReadByteSeq(guid[7]);
+ recvData.ReadByteSeq(guid[5]);
+
+ if (!player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_REFORGER))
+ {
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleReforgeItemOpcode - Unit (GUID: %u) not found or player can't interact with it.", GUID_LOPART(guid));
+ SendReforgeResult(false);
+ return;
+ }
+
+ Item* item = player->GetItemByPos(bag, slot);
+
+ if (!item)
+ {
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleReforgeItemOpcode - Player (Guid: %u Name: %s) tried to reforge an invalid/non-existant item.", player->GetGUIDLow(), player->GetName());
+ SendReforgeResult(false);
+ return;
+ }
+
+ if (!reforgeEntry)
+ {
+ // Reset the item
+ item->ClearEnchantment(REFORGE_ENCHANTMENT_SLOT);
+ SendReforgeResult(true);
+ return;
+ }
+
+ if (!sItemReforgeStore.LookupEntry(reforgeEntry))
+ {
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleReforgeItemOpcode - Player (Guid: %u Name: %s) tried to reforge an item with invalid reforge entry (%u).", player->GetGUIDLow(), player->GetName(), reforgeEntry);
+ SendReforgeResult(false);
+ return;
+ }
+
+ if (player->HasEnoughMoney(uint64(item->GetSpecialPrice()))) // cheating
+ {
+ SendReforgeResult(false);
+ return;
+ }
+
+ player->ModifyMoney(-int64(item->GetSpecialPrice()));
+
+ item->SetEnchantment(REFORGE_ENCHANTMENT_SLOT, reforgeEntry, 0, 0);
+
+ SendReforgeResult(true);
+
+ // ToDo: Apply and remove the destination/source stats to the player
+}
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index cfb865f8d09..4e708553ee0 100755
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -520,11 +520,10 @@ void WorldSession::HandleStandStateChangeOpcode(WorldPacket & recv_data)
_player->SetStandState(animstate);
}
-void WorldSession::HandleContactListOpcode(WorldPacket & recv_data)
+void WorldSession::HandleContactListOpcode(WorldPacket& recvData)
{
- uint32 unk;
- recv_data >> unk;
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_CONTACT_LIST - Unk: %d", unk);
+ recvData.read_skip<uint32>(); // always 1
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_CONTACT_LIST");
_player->GetSocial()->SendSocialList(_player);
}
@@ -606,7 +605,7 @@ void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent (SMSG_FRIEND_STATUS)");
}
-void WorldSession::HandleDelFriendOpcode(WorldPacket & recv_data)
+void WorldSession::HandleDelFriendOpcode(WorldPacket& recv_data)
{
uint64 FriendGUID;
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index e9b070b2aa2..bc3a22cdf05 100755
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -881,7 +881,7 @@ void WorldSession::HandleStableSwapPetCallback(PreparedQueryResult result, uint3
SendStableResult(STABLE_SUCCESS_UNSTABLE);
}
-void WorldSession::HandleRepairItemOpcode(WorldPacket & recv_data)
+void WorldSession::HandleRepairItemOpcode(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_REPAIR_ITEM");
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 06dc82315bc..f2aa66d4e66 100755
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -157,12 +157,12 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket & recv_data)
{
if (sGuildMgr->GetGuildByName(name))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, name);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NAME_EXISTS_S, name);
return;
}
if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, name);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NAME_INVALID, name);
return;
}
}
@@ -423,12 +423,12 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
{
if (sGuildMgr->GetGuildByName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, newName);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NAME_EXISTS_S, newName);
return;
}
if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, newName);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NAME_INVALID, newName);
return;
}
}
@@ -498,7 +498,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
if (type != GUILD_CHARTER_TYPE)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
else
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NOT_ALLIED);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NOT_ALLIED);
return;
}
@@ -530,12 +530,12 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
{
if (_player->GetGuildId())
{
- Guild::SendCommandResult(this, GUILD_INVITE_S, ERR_ALREADY_IN_GUILD_S, _player->GetName());
+ Guild::SendCommandResult(this, GUILD_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName());
return;
}
if (_player->GetGuildIdInvited())
{
- Guild::SendCommandResult(this, GUILD_INVITE_S, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
+ Guild::SendCommandResult(this, GUILD_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
return;
}
}
@@ -658,7 +658,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
if (type != GUILD_CHARTER_TYPE)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
else
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NOT_ALLIED);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NOT_ALLIED);
return;
}
@@ -692,13 +692,13 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
{
if (player->GetGuildId())
{
- Guild::SendCommandResult(this, GUILD_INVITE_S, ERR_ALREADY_IN_GUILD_S, _player->GetName());
+ Guild::SendCommandResult(this, GUILD_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName());
return;
}
if (player->GetGuildIdInvited())
{
- Guild::SendCommandResult(this, GUILD_INVITE_S, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
+ Guild::SendCommandResult(this, GUILD_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
return;
}
}
@@ -790,7 +790,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
// Check if guild name is already taken
if (sGuildMgr->GetGuildByName(name))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, name);
+ Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_NAME_EXISTS_S, name);
return;
}
}
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index 5c01bc7ea64..f510e7eca73 100755
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -42,29 +42,33 @@ void WorldSession::SendTradeStatus(TradeStatus status)
{
case TRADE_STATUS_BEGIN_TRADE:
data.WriteBits(0, 8); // zero guid
+ data.FlushBits();
break;
case TRADE_STATUS_OPEN_WINDOW:
+ data.FlushBits();
data << uint32(0); // unk
break;
case TRADE_STATUS_CLOSE_WINDOW:
data.WriteBit(0); // unk
+ data.FlushBits();
data << uint32(0); // unk
data << uint32(0); // unk
break;
case TRADE_STATUS_ONLY_CONJURED:
case TRADE_STATUS_NOT_ELIGIBLE:
+ data.FlushBits();
data << uint8(0); // unk
break;
case TRADE_STATUS_CURRENCY: // Not implemented
case TRADE_STATUS_CURRENCY_NOT_TRADABLE: // Not implemented
+ data.FlushBits();
data << uint32(0); // unk
data << uint32(0); // unk
default:
+ data.FlushBits();
break;
}
- data.FlushBits();
-
SendPacket(&data);
}
diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp
index 5e3ecc89e21..d937656cf31 100644
--- a/src/server/game/Handlers/VoidStorageHandler.cpp
+++ b/src/server/game/Handlers/VoidStorageHandler.cpp
@@ -161,7 +161,7 @@ void WorldSession::HandleVoidStorageQuery(WorldPacket& recvData)
itemData.WriteByteSeq(itemId[0]);
itemData.WriteByteSeq(itemId[6]);
itemData.WriteByteSeq(creatorGuid[0]);
-
+
itemData << uint32(item->ItemRandomPropertyId);
itemData.WriteByteSeq(itemId[4]);
@@ -196,7 +196,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData)
npcGuid[1] = recvData.ReadBit();
uint32 countDeposit = recvData.ReadBits(26);
-
+
if (countDeposit > 9)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleVoidStorageTransfer - Player (GUID: %u, name: %s) wants to deposit more than 9 items (%u).", player->GetGUIDLow(), player->GetName(), countDeposit);
@@ -462,7 +462,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData)
data.WriteByteSeq(itemId[1]);
data << uint32(depositItems[i].second); // slot
-
+
data.WriteByteSeq(creatorGuid[2]);
data.WriteByteSeq(itemId[7]);
@@ -518,7 +518,7 @@ void WorldSession::HandleVoidSwapItem(WorldPacket& recvData)
recvData.ReadByteSeq(npcGuid[7]);
recvData.ReadByteSeq(npcGuid[4]);
recvData.ReadByteSeq(itemId[7]);
-
+
Creature* unit = player->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_VAULTKEEPER);
if (!unit)
{
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index e17bbc0729f..bd3fffe47e4 100755
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -3530,7 +3530,7 @@ enum TradeStatus
// 28 - nonexistent
TRADE_STATUS_TARGET_STUNNED = 29,
// 30 - nonexistent
- TRADE_STATUS_CLOSE_WINDOW = 31,
+ TRADE_STATUS_CLOSE_WINDOW = 31,
};
enum XPColorChar
diff --git a/src/server/game/Scripting/ScriptSystem.cpp b/src/server/game/Scripting/ScriptSystem.cpp
index c38d559372f..e48404b0643 100755
--- a/src/server/game/Scripting/ScriptSystem.cpp
+++ b/src/server/game/Scripting/ScriptSystem.cpp
@@ -30,7 +30,7 @@ void SystemMgr::LoadScriptTexts()
sLog->outString("TSCR: Loading Script Texts additional data...");
uint32 oldMSTime = getMSTime();
-
+
// 0 1 2 3
QueryResult result = WorldDatabase.Query("SELECT entry, sound, type, language, emote FROM script_texts");
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 2e3ccf00e60..046a7b0076f 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -114,7 +114,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_BUYBACK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuybackItem );
//DEFINE_OPCODE_HANDLER(CMSG_BUY_BANK_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyBankSlotOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_BUY_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyItemOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_BUY_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyItemOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_BUY_ITEM_IN_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyItemInSlotOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_BUY_LOTTERY_TICKET_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_BUY_STABLE_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyStableSlot );
@@ -204,7 +204,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_COMPLETE_ACHIEVEMENT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_COMPLETE_CINEMATIC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteCinematic );
//DEFINE_OPCODE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(CMSG_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_CONTROLLER_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEjectPassenger );
//DEFINE_OPCODE_HANDLER(CMSG_COOLDOWN_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_CORPSE_MAP_POSITION_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCorpseMapPositionQuery );
@@ -224,7 +224,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_DECHARGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_DECLINE_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChannelDeclineInvite );
//DEFINE_OPCODE_HANDLER(CMSG_DELETE_DANCE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(CMSG_DEL_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelFriendOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_DEL_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelFriendOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_DEL_IGNORE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelIgnoreOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_DEL_PVP_MEDAL_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_DEL_VOICE_IGNORE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -320,35 +320,38 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_GROUP_SWAP_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupSwapSubGroupOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GROUP_UNINVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupUninviteOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GROUP_UNINVITE_GUID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupUninviteGuidOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptOpcode );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_ACHIEVEMENT_PROGRESS_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAchievementProgressQuery);
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAddRankOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAddRankOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAssignRankOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankerActivate );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_BUY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankBuyTab );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_BUY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankBuyTab );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_DEPOSIT_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankDepositMoney );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_MONEY_WITHDRAWN_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankMoneyWithdrawn );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankQueryTab );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSwapItems );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankUpdateTab );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankQueryTab );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSwapItems );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankUpdateTab );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_BANK_WITHDRAW_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankWithdrawMoney );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_CREATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildCreateOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_DECLINE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDeclineOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_DEL_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDelRankOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_DEMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_DECLINE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDeclineOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_DEL_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDelRankOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_DEMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_DISBAND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDisbandOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInfoOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_INFO_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildChangeInfoTextOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_INFO_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildChangeInfoTextOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildLeaderOpcode );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildLeaveOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_MOTD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildMOTDOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_PROMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPromoteOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_MOTD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildMOTDOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPermissions );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_PROMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPromoteOpcode );
DEFINE_OPCODE_HANDLER(CMSG_GUILD_QUERY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRankOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_REMOVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRemoveOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_SET_OFFICER_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetOfficerNoteOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_SET_PUBLIC_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetPublicNoteOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_QUERY_RANKS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryRanksOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_REMOVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRemoveOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_SET_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetNoteOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_SET_RANK_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetRankPermissionsOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthAndResurrect );
//DEFINE_OPCODE_HANDLER(CMSG_IGNORE_DIMINISHING_RETURNS_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_IGNORE_KNOCKBACK_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -474,7 +477,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_PETGODMODE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_PETITION_BUY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionBuyOpcode );
DEFINE_OPCODE_HANDLER(CMSG_PETITION_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionQueryOpcode );
- //DEFINE_OPCODE_HANDLER(CMSG_PETITION_SHOWLIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionShowListOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_PETITION_SHOWLIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionShowListOpcode );
DEFINE_OPCODE_HANDLER(CMSG_PETITION_SHOW_SIGNATURES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionShowSignOpcode );
DEFINE_OPCODE_HANDLER(CMSG_PETITION_SIGN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionSignOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_PET_ABANDON, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetAbandon );
@@ -500,6 +503,11 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_PROFILEDATA_REQUEST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_PUSHQUESTTOPARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty );
//DEFINE_OPCODE_HANDLER(CMSG_PVP_QUEUE_STATS_REQUEST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ //DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_MAX_XP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ //DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_MEMBERS_FOR_RECIPE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ //DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_MEMBER_RECIPES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ //DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_RECIPES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ //DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_REWARDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_QUERY_GUILD_XP, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryXPOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryInspectAchievements );
//DEFINE_OPCODE_HANDLER(CMSG_QUERY_OBJECT_POSITION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -532,8 +540,10 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_REDIRECTION_AUTH_PROOF, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_REDIRECTION_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_REFER_A_FRIEND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER(CMSG_REFORGE_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleReforgeItemOpcode );
+ DEFINE_OPCODE_HANDLER(SMSG_REFORGE_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(CMSG_REMOVE_GLYPH, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRemoveGlyph );
- //DEFINE_OPCODE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequestOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_REPORT_PVP_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData );
@@ -709,7 +719,6 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(MSG_GM_SUMMON, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_GUILD_BANK_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankLogQuery );
//DEFINE_OPCODE_HANDLER(MSG_GUILD_EVENT_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildEventLogQueryOpcode );
- DEFINE_OPCODE_HANDLER(MSG_GUILD_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPermissions );
//DEFINE_OPCODE_HANDLER(MSG_INSPECT_ARENA_TEAMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectArenaTeamsOpcode );
//DEFINE_OPCODE_HANDLER(MSG_INSPECT_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectHonorStatsOpcode );
//DEFINE_OPCODE_HANDLER(MSG_LIST_STABLED_PETS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleListStabledPetsOpcode );
@@ -930,7 +939,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_DAMAGE_CALC_LOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DANCE_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DBLOOKUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_DB_REPLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_DB_REPLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEATH_RELEASE_LOC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEBUGAURAPROC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEBUG_AISTATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1014,16 +1023,18 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_GUILD_BANK_LIST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_BANK_MONEY_WITHDRAWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DELETED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_GUILD_DECLINE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_DECLINE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_EVENT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_GUILD_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_GUILD_INVITE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_INVITE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GUILD_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_RANK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_RANKS_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_HEALTH_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_HOTFIX_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1098,8 +1109,8 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_LOTTERY_RESULT_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MAIL_LIST_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MEETINGSTONE_MEMBER_ADDED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MEETINGSTONE_SETQUEUE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MESSAGECHAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ //DEFINE_OPCODE_HANDLER(SMSG_MEETINGSTONE_SETQUEUE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MESSAGECHAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MINIGAME_MOVE_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MINIGAME_SETUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MINIGAME_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 5bf515da064..7acaedfaa93 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -264,18 +264,17 @@ enum Opcodes
CMSG_GUILD_EVENT_LOG_QUERY = 0x1220,
CMSG_GUILD_INFO = 0x0000,
CMSG_GUILD_INFO_TEXT = 0x3227,
- CMSG_GUILD_INVITE = 0x0000,
- CMSG_GUILD_INVITE_BY_NAME = 0x24B0,
+ CMSG_GUILD_INVITE = 0x24B0,
CMSG_GUILD_LEADER = 0x0000,
CMSG_GUILD_LEAVE = 0x1021,
CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0x3225,
CMSG_GUILD_MOTD = 0x1035,
CMSG_GUILD_NEWS_UPDATE_STICKY = 0x3223,
+ CMSG_GUILD_PERMISSIONS = 0x3022,
CMSG_GUILD_PROMOTE = 0x1030,
CMSG_GUILD_QUERY = 0x4426,
CMSG_GUILD_QUERY_NEWS = 0x3020,
- CMSG_GUILD_RANK = 0x0000,
- CMSG_GUILD_RANKS = 0x1026,
+ CMSG_GUILD_QUERY_RANKS = 0x1026,
CMSG_GUILD_REMOVE = 0x1231,
CMSG_GUILD_REPLACE_GUILD_MASTER = 0x1034,
CMSG_GUILD_REQUEST_CHALLENGE_UPDATE = 0x1224,
@@ -606,7 +605,6 @@ enum Opcodes
MSG_GM_SUMMON = 0x0000,
MSG_GUILD_BANK_LOG_QUERY = 0x0000,
MSG_GUILD_EVENT_LOG_QUERY = 0x0000,
- MSG_GUILD_PERMISSIONS = 0x3022,
MSG_INSPECT_ARENA_TEAMS = 0x2704,
MSG_LIST_STABLED_PETS = 0x0834,
MSG_MINIMAP_PING = 0x6635,
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 518a3743d66..0f7a63076e3 100755
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -181,7 +181,7 @@ uint32 WorldSession::GetGuidLow() const
}
/// Send a packet to the client
-void WorldSession::SendPacket(WorldPacket const* packet)
+void WorldSession::SendPacket(WorldPacket const* packet, bool forced /*= false*/)
{
if (!m_Socket)
return;
@@ -192,10 +192,13 @@ void WorldSession::SendPacket(WorldPacket const* packet)
return;
}
- if (!opcodeTable[packet->GetOpcode()])
+ if (!forced)
{
- sLog->outError("Prevented sending disabled opcode %d (hex 0x%04X)", packet->GetOpcode(), packet->GetOpcode());
- return;
+ if (!opcodeTable[packet->GetOpcode()])
+ {
+ sLog->outError("Prevented sending disabled opcode %d (hex 0x%04X)", packet->GetOpcode(), packet->GetOpcode());
+ return;
+ }
}
#ifdef TRINITY_DEBUG
@@ -669,6 +672,7 @@ void WorldSession::SendAuthWaitQue(uint32 position)
WorldPacket packet(SMSG_AUTH_RESPONSE, 1);
packet.WriteBit(0); // has queue info
packet.WriteBit(0); // has account info
+ packet.FlushBits();
packet << uint8(AUTH_OK);
SendPacket(&packet);
}
@@ -678,6 +682,7 @@ void WorldSession::SendAuthWaitQue(uint32 position)
packet.WriteBit(1); // has queue info
packet.WriteBit(0); // unk queue bool
packet.WriteBit(0); // has account info
+ packet.FlushBits();
packet << uint8(AUTH_WAIT_QUEUE);
packet << uint32(position);
SendPacket(&packet);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 5a8a8da04aa..0433ef5581d 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -236,7 +236,7 @@ class WorldSession
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
void WriteMovementInfo(WorldPacket &data, MovementInfo* mi);
- void SendPacket(WorldPacket const* packet);
+ void SendPacket(WorldPacket const* packet, bool forced = false);
void SendNotification(const char *format, ...) ATTR_PRINTF(2, 3);
void SendNotification(uint32 string_id, ...);
void SendPetNameInvalid(uint32 error, const std::string& name, DeclinedName *declinedName);
@@ -574,13 +574,14 @@ class WorldSession
void HandleGuildRosterOpcode(WorldPacket& recvPacket);
void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
+ void HandleGuildAssignRankOpcode(WorldPacket& recvPacket);
void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
void HandleGuildLeaderOpcode(WorldPacket& recvPacket);
void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
- void HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket);
- void HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket);
- void HandleGuildRankOpcode(WorldPacket& recvPacket);
+ void HandleGuildSetNoteOpcode(WorldPacket& recvPacket);
+ void HandleGuildQueryRanksOpcode(WorldPacket& recvPacket);
+ void HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket);
void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
void HandleGuildDelRankOpcode(WorldPacket& recvPacket);
void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
@@ -922,6 +923,10 @@ class WorldSession
// Transmogrification
void HandleTransmogrifyItems(WorldPacket& recvData);
+ // Reforge
+ void HandleReforgeItemOpcode(WorldPacket& recvData);
+ void SendReforgeResult(bool success);
+
// Miscellaneous
void HandleSpellClick(WorldPacket& recv_data);
void HandleMirrorImageDataRequest(WorldPacket& recv_data);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 6ce3fc2c228..cbc59e8f740 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3877,8 +3877,8 @@ void Spell::SendSpellStart()
data << uint8(m_cast_count); // pending spell cast?
data << uint32(m_spellInfo->Id); // spellId
data << uint32(castFlags); // cast flags
- data << int32(m_timer); // delay?
- data << uint32(0);
+ data << uint32(m_timer); // delay?
+ data << uint32(m_casttime);
m_targets.Write(data);
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index 33983411427..70cfb8cb830 100644
--- a/src/server/scripts/Commands/cs_cast.cpp
+++ b/src/server/scripts/Commands/cs_cast.cpp
@@ -33,7 +33,7 @@ public:
ChatCommand* GetCommands() const
{
static ChatCommand castCommandTable[] =
- {
+ {
{ "back", SEC_ADMINISTRATOR, false, &HandleCastBackCommand, "", NULL },
{ "dist", SEC_ADMINISTRATOR, false, &HandleCastDistCommand, "", NULL },
{ "self", SEC_ADMINISTRATOR, false, &HandleCastSelfCommand, "", NULL },
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 6accc96260b..874c7ab81b0 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -416,7 +416,7 @@ public:
}
sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending opcode %u", data.GetOpcode());
data.hexlike();
- player->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data, true);
handler->PSendSysMessage(LANG_COMMAND_OPCODESENT, data.GetOpcode(), unit->GetName());
return true;
}
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index 65e3daaaebc..a453122aef6 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -51,7 +51,7 @@ public:
};
return commandTable;
}
-
+
/** \brief GM command level 3 - Create a guild.
*
* This command allows a GM (level 3) to create a guild.
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
index aa43cb3702f..6545509c0f1 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
@@ -218,25 +218,25 @@ public:
{
switch (identifier)
{
- case DATA_SELIN:
+ case DATA_SELIN:
return SelinGUID;
- case DATA_DELRISSA:
+ case DATA_DELRISSA:
return DelrissaGUID;
- case DATA_VEXALLUS_DOOR:
+ case DATA_VEXALLUS_DOOR:
return VexallusDoorGUID;
- case DATA_SELIN_DOOR:
+ case DATA_SELIN_DOOR:
return SelinDoorGUID;
- case DATA_SELIN_ENCOUNTER_DOOR:
+ case DATA_SELIN_ENCOUNTER_DOOR:
return SelinEncounterDoorGUID;
- case DATA_DELRISSA_DOOR:
+ case DATA_DELRISSA_DOOR:
return DelrissaDoorGUID;
- case DATA_KAEL_DOOR:
+ case DATA_KAEL_DOOR:
return KaelDoorGUID;
- case DATA_KAEL_STATUE_LEFT:
+ case DATA_KAEL_STATUE_LEFT:
return KaelStatue[0];
- case DATA_KAEL_STATUE_RIGHT:
+ case DATA_KAEL_STATUE_RIGHT:
return KaelStatue[1];
- case DATA_ESCAPE_ORB:
+ case DATA_ESCAPE_ORB:
return EscapeOrbGUID;
case DATA_FEL_CRYSTAL:
diff --git a/src/server/scripts/EasternKingdoms/undercity.cpp b/src/server/scripts/EasternKingdoms/undercity.cpp
index a9b627ded34..7649be59e40 100644
--- a/src/server/scripts/EasternKingdoms/undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/undercity.cpp
@@ -173,13 +173,13 @@ public:
if (me->GetDistance(victim) > 10.0f)
DoCast(victim, SPELL_MULTI_SHOT);
} else FadeTimer -= diff;
-
+
if (SummonSkeletonTimer <= diff)
{
DoCast(me, SPELL_SUMMON_SKELETON);
SummonSkeletonTimer = 20000 + rand()%10000;
} else SummonSkeletonTimer -= diff;
-
+
if (BlackArrowTimer <= diff)
{
if (Unit* victim = me->getVictim())
@@ -188,7 +188,7 @@ public:
BlackArrowTimer = 15000 + rand()%5000;
}
} else BlackArrowTimer -= diff;
-
+
if (ShotTimer <= diff)
{
if (Unit* victim = me->getVictim())
@@ -197,7 +197,7 @@ public:
ShotTimer = 8000 + rand()%2000;
}
} else ShotTimer -= diff;
-
+
if (MultiShotTimer <= diff)
{
if (Unit* victim = me->getVictim())
@@ -205,7 +205,7 @@ public:
DoCast(victim, SPELL_MULTI_SHOT);
MultiShotTimer = 10000 + rand()%3000;
}
- } else MultiShotTimer -= diff;
+ } else MultiShotTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index d3218e1729e..01c1617aba4 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -38,7 +38,7 @@ enum Spells
SPELL_BANSHEE_CURSE = 31651,
SPELL_BANSHEE_WAIL = 38183,
SPELL_ANTI_MAGIC_SHELL = 31662,
- SPELL_WEB = 28991,
+ SPELL_WEB = 28991,
SPELL_MANA_BURN = 31729,
SPELL_FROST_BREATH = 31688,
SPELL_GARGOYLE_STRIKE = 31664,
diff --git a/src/server/scripts/Kalimdor/ashenvale.cpp b/src/server/scripts/Kalimdor/ashenvale.cpp
index 9e8cdaa8b92..248932ecbb6 100644
--- a/src/server/scripts/Kalimdor/ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/ashenvale.cpp
@@ -174,7 +174,7 @@ enum RuulSnowhoof
NPC_THISTLEFUR_URSA = 3921,
NPC_THISTLEFUR_TOTEMIC = 3922,
NPC_THISTLEFUR_PATHFINDER = 3926,
-
+
QUEST_FREEDOM_TO_RUUL = 6482,
GO_CAGE = 178147
diff --git a/src/server/scripts/Kalimdor/azshara.cpp b/src/server/scripts/Kalimdor/azshara.cpp
index eae5baa8db2..8d08c26f0a7 100644
--- a/src/server/scripts/Kalimdor/azshara.cpp
+++ b/src/server/scripts/Kalimdor/azshara.cpp
@@ -182,9 +182,9 @@ public:
enum RizzleSprysprocketData
{
QUEST_CHASING_THE_MOONSTONE = 10994,
-
+
MOB_DEPTH_CHARGE = 23025,
-
+
SPELL_RIZZLE_BLACKJACK = 39865,
SPELL_RIZZLE_ESCAPE = 39871,
SPELL_RIZZLE_FROST_GRENADE = 40525,
@@ -490,7 +490,7 @@ public:
{
if (WeMustDieTimer <= diff)
me->DespawnOrUnsummon();
- else
+ else
WeMustDieTimer -= diff;
}
return;
diff --git a/src/server/scripts/Kalimdor/azuremyst_isle.cpp b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
index 608117ca9af..22686cac4b2 100644
--- a/src/server/scripts/Kalimdor/azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
@@ -549,7 +549,7 @@ public:
(*itr)->Respawn();
}
}
- else
+ else
sLog->outError("SD2 ERROR: FlagList is empty!");
}
@@ -560,7 +560,7 @@ public:
if (EventStarted)
SayTimer = NextStep(Step++);
}
- else
+ else
SayTimer -= diff;
}
};
diff --git a/src/server/scripts/Kalimdor/felwood.cpp b/src/server/scripts/Kalimdor/felwood.cpp
index 9243ea0017e..1a0aa7b21c0 100644
--- a/src/server/scripts/Kalimdor/felwood.cpp
+++ b/src/server/scripts/Kalimdor/felwood.cpp
@@ -40,10 +40,10 @@ EndContentData */
enum RiverbreezeAndSilversky
{
SPELL_CENARION_BEACON = 15120,
-
+
NPC_ARATHANDRIS_SILVERSKY = 9528,
NPC_MAYBESS_RIVERBREEZE = 9529,
-
+
QUEST_CLEASING_FELWOOD_A = 4101,
QUEST_CLEASING_FELWOOD_H = 4102
};
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index 18d8b2b5a1e..e70157e5e4f 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -199,7 +199,7 @@ public:
JustCreated = false;
} else CanAttack = true;
-
+
for (uint8 i = 0; i < 4; ++i)
if (Unit* remo = Unit::GetUnit(*me, ShieldGeneratorChannel[i]))
remo->setDeathState(JUST_DIED);
@@ -353,7 +353,7 @@ public:
// Static Charge
// Used on random people (only 1 person at any given time) in Phases 1 and 3, it's a debuff doing 2775 to 3225 Nature damage to the target and everybody in about 5 yards around it, every 1 seconds for 30 seconds. It can be removed by Cloak of Shadows, Iceblock, Divine Shield, etc, but not by Cleanse or Dispel Magic.
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200, true);
- if (target && !target->HasAura(SPELL_STATIC_CHARGE_TRIGGER))
+ if (target && !target->HasAura(SPELL_STATIC_CHARGE_TRIGGER))
DoCast(target, SPELL_STATIC_CHARGE_TRIGGER); // cast Static Charge every 2 seconds for 20 seconds
StaticChargeTimer = 10000+rand()%20000;
diff --git a/src/server/shared/AutoPtr.h b/src/server/shared/AutoPtr.h
index 988c46cc5a2..19f0680c267 100644
--- a/src/server/shared/AutoPtr.h
+++ b/src/server/shared/AutoPtr.h
@@ -27,7 +27,7 @@ namespace Trinity
{
public:
AutoPtr() : ACE_Strong_Bound_Ptr<Pointer, Lock>() {}
-
+
AutoPtr(Pointer* x)
{
ACE_Strong_Bound_Ptr<Pointer, Lock>::reset(x);
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 1d6d9be4a33..222e212a08f 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -161,7 +161,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
// 0: uint32, 1: uint8, 3: string, 4: uint32
PREPARE_STATEMENT(CHAR_INS_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
- PREPARE_STATEMENT(CHAR_DEL_GUILD_LOWEST_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid >= ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
+ PREPARE_STATEMENT(CHAR_DEL_GUILD_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)", CONNECTION_ASYNC) // 0: uint32, 1: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index 5dac60d6ba8..01db91320f5 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -166,7 +166,7 @@ enum CharacterDatabaseStatements
CHAR_DEL_GUILD_MEMBERS,
CHAR_INS_GUILD_RANK,
CHAR_DEL_GUILD_RANKS,
- CHAR_DEL_GUILD_LOWEST_RANK,
+ CHAR_DEL_GUILD_RANK,
CHAR_INS_GUILD_BANK_TAB,
CHAR_DEL_GUILD_BANK_TAB,
CHAR_DEL_GUILD_BANK_TABS,
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 65ba2350775..71ec75ea678 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1490,7 +1490,7 @@ Warden.ClientCheckHoldOff = 30
#
# Warden.ClientCheckFailAction
# Description: Default action being taken if a client check failed. Actions can be
-# overwritten for each single check via warden_action table in characters
+# overwritten for each single check via warden_action table in characters
# database.
# Default: 0 - (Disabled, Logging only)
# 1 - (Kick)
@@ -2253,9 +2253,9 @@ Rate.MoveSpeed = 1
#
# Rate.InstanceResetTime
-# Description: Multiplier for the rate between global raid/heroic instance resets
-# (dbc value). Higher value increases the time between resets,
-# lower value lowers the time, you need clean instance_reset in
+# Description: Multiplier for the rate between global raid/heroic instance resets
+# (dbc value). Higher value increases the time between resets,
+# lower value lowers the time, you need clean instance_reset in
# characters db in order to let new values work.
# Default: 1