aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-09-10 00:06:47 +0100
committerNay <dnpd.dd@gmail.com>2012-09-10 00:06:47 +0100
commit5226f53b8ae815f707538b66207727e2715af826 (patch)
treeb8b8e5fd59e0fc7cbba95433c27cac543b4be8f8 /src
parentf508f7dbc52f3e41861ef408a440224307a65f61 (diff)
Core/Guilds: Corrections to guild news & rewards commit, fixed build and added missing sql
Closes #7708
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp14
-rw-r--r--src/server/game/Guilds/Guild.cpp17
-rwxr-xr-xsrc/server/game/Guilds/Guild.h7
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp7
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp2
-rwxr-xr-xsrc/server/game/Handlers/GuildHandler.cpp10
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp4
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp2
9 files changed, 35 insertions, 30 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9b80750437c..ee6d71e64b1 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -21496,13 +21496,15 @@ bool Player::BuyItemFromVendorSlot(uint64 vendorguid, uint32 vendorslot, uint32
return false;
}
- bool bought = crItem->maxcount != 0;
-
- if (bought)
- if ((pProto->Quality == ITEM_QUALITY_EPIC && pProto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]) || pProto->Quality > ITEM_QUALITY_EPIC)
+ if (crItem->maxcount != 0) // bought
+ {
+ if (pProto->Quality > ITEM_QUALITY_EPIC || (pProto->Quality == ITEM_QUALITY_EPIC && pProto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
if (Guild* guild = sGuildMgr->GetGuildById(GetGuildId()))
guild->GetNewsLog().AddNewEvent(GUILD_NEWS_ITEM_PURCHASED, time(NULL), GetGUID(), 0, item);
- return bought;
+ return true;
+ }
+
+ return false;
}
uint32 Player::GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const
@@ -24237,7 +24239,7 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot)
--loot->unlootedCount;
if (const ItemTemplate* proto = sObjectMgr->GetItemTemplate(item->itemid))
- if ((proto->Quality == ITEM_QUALITY_EPIC && proto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]) || proto->Quality > ITEM_QUALITY_EPIC)
+ if (proto->Quality > ITEM_QUALITY_EPIC || (proto->Quality == ITEM_QUALITY_EPIC && proto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
if (Guild* guild = sGuildMgr->GetGuildById(GetGuildId()))
guild->GetNewsLog().AddNewEvent(GUILD_NEWS_ITEM_LOOTED, time(NULL), GetGUID(), 0, item->itemid);
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 09188843d52..e7121b0fa81 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -3263,6 +3263,7 @@ void Guild::ResetDailyExperience()
void Guild::GuildNewsLog::AddNewEvent(GuildNews eventType, time_t date, uint64 playerGuid, uint32 flags, uint32 data)
{
uint32 id = _newsLog.size();
+
GuildNewsEntry& log = _newsLog[id];
log.EventType = eventType;
log.PlayerGuid = playerGuid;
@@ -3280,9 +3281,9 @@ void Guild::GuildNewsLog::AddNewEvent(GuildNews eventType, time_t date, uint64 p
stmt->setUInt32(6, uint32(log.Date));
CharacterDatabase.Execute(stmt);
- WorldPacket pData;
- BuildNewsData(id, log, pData);
- GetGuild()->BroadcastPacket(&pData);
+ WorldPacket packet;
+ BuildNewsData(id, log, packet);
+ GetGuild()->BroadcastPacket(&packet);
}
void Guild::GuildNewsLog::LoadFromDB(PreparedQueryResult result)
@@ -3305,10 +3306,10 @@ void Guild::GuildNewsLog::LoadFromDB(PreparedQueryResult result)
void Guild::GuildNewsLog::BuildNewsData(uint32 id, GuildNewsEntry& guildNew, WorldPacket& data)
{
- data.Initialize(SMSG_GUILD_NEWS_UPDATE);
- data.WriteBits(1, 21);
+ data.Initialize(SMSG_GUILD_NEWS_UPDATE, 7 + 32);
+ data.WriteBits(1, 21); // size, we are only sending 1 news here
- data.WriteBits(0, 26); // Other Guids NYI
+ data.WriteBits(0, 26); // Not yet implemented used for guild achievements
ObjectGuid guid = guildNew.PlayerGuid;
data.WriteBit(guid[7]);
@@ -3326,7 +3327,7 @@ void Guild::GuildNewsLog::BuildNewsData(uint32 id, GuildNewsEntry& guildNew, Wor
data << uint32(guildNew.Flags); // 1 sticky
data << uint32(guildNew.Data);
- data << uint32(0);
+ data << uint32(0); // always 0
data.WriteByteSeq(guid[7]);
data.WriteByteSeq(guid[6]);
@@ -3343,7 +3344,7 @@ void Guild::GuildNewsLog::BuildNewsData(uint32 id, GuildNewsEntry& guildNew, Wor
void Guild::GuildNewsLog::BuildNewsData(WorldPacket& data)
{
- data.Initialize(SMSG_GUILD_NEWS_UPDATE);
+ data.Initialize(SMSG_GUILD_NEWS_UPDATE, (21 + _newsLog.size() * (26 + 8)) / 8 + (8 + 6 * 4) * _newsLog.size());
data.WriteBits(_newsLog.size(), 21);
for (GuildNewsLogMap::const_iterator it = _newsLog.begin(); it != _newsLog.end(); it++)
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index c9799fbe5ca..f3e18d8998b 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -230,7 +230,7 @@ enum GuildNews
{
GUILD_NEWS_GUILD_ACHIEVEMENT = 0,
GUILD_NEWS_PLAYER_ACHIEVEMENT = 1,
- GUILD_NEWS_DUNGEON_ENCOUNTER = 2, // Todo Implement
+ GUILD_NEWS_DUNGEON_ENCOUNTER = 2, // @todo Implement
GUILD_NEWS_ITEM_LOOTED = 3,
GUILD_NEWS_ITEM_CRAFTED = 4,
GUILD_NEWS_ITEM_PURCHASED = 5,
@@ -249,15 +249,16 @@ struct GuildNewsEntry
struct GuildReward
{
uint32 Entry;
- uint8 Standing;
int32 Racemask;
uint64 Price;
uint32 AchievementId;
+ uint8 Standing;
};
uint32 const MinNewsItemLevel[MAX_CONTENT] = { 61, 90, 200, 353 };
typedef std::map<uint32, GuildNewsEntry> GuildNewsLogMap;
+
#define GUILD_EXPERIENCE_UNCAPPED_LEVEL 20 ///> Hardcoded in client, starting from this level, guild daily experience gain is unlimited.
////////////////////////////////////////////////////////////////////////////////////////////
@@ -390,7 +391,7 @@ private:
void BuildNewsData(WorldPacket& data);
void BuildNewsData(uint32 id, GuildNewsEntry& guildNew, WorldPacket& data);
void AddNewEvent(GuildNews eventType, time_t date, uint64 playerGuid, uint32 flags, uint32 data);
- GuildNewsEntry* GetNewById(uint32 id)
+ GuildNewsEntry* GetNewsById(uint32 id)
{
GuildNewsLogMap::iterator itr = _newsLog.find(id);
if (itr != _newsLog.end())
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index c611732ab48..8eef6b2ade3 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -436,7 +436,7 @@ void GuildMgr::LoadGuilds()
// 10. Loading Guild news
sLog->outInfo(LOG_FILTER_GENERAL, "Loading Guild News");
{
- for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); itr++)
+ for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_GUILD_NEWS);
stmt->setInt32(0, itr->first);
@@ -474,7 +474,7 @@ void GuildMgr::LoadGuildXpForLevel()
for (uint8 level = 0; level < sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL); ++level)
GuildXPperLevel[level] = 0;
- // 0 1
+ // 0 1
QueryResult result = WorldDatabase.Query("SELECT lvl, xp_for_next_level FROM guild_xp_for_level");
if (!result)
@@ -500,6 +500,7 @@ void GuildMgr::LoadGuildXpForLevel()
GuildXPperLevel[level] = requiredXP;
++count;
+
} while (result->NextRow());
// fill level gaps
@@ -519,7 +520,7 @@ void GuildMgr::LoadGuildRewards()
{
uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4
+ // 0 1 2 3 4
QueryResult result = WorldDatabase.Query("SELECT entry, standing, racemask, price, achievement FROM guild_rewards");
if (!result)
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 66d8acb5d34..f21001ba7bf 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -767,7 +767,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData)
guid[0] = recvData.ReadBit();
guid[1] = recvData.ReadBit();
guid[3] = recvData.ReadBit();
-
+
recvData.ReadByteSeq(guid[0]);
recvData.ReadByteSeq(guid[6]);
recvData.ReadByteSeq(guid[5]);
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index bbd21176511..c0d96b53190 100755
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -791,7 +791,7 @@ void WorldSession::HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket)
{
std::vector<GuildReward> const& rewards = sGuildMgr->GetGuildRewards();
- WorldPacket data(SMSG_GUILD_REWARDS_LIST, (3 + rewards.size() * (4 + 4 + 4 +8 + 4 +4)));
+ WorldPacket data(SMSG_GUILD_REWARDS_LIST, 3 + rewards.size() * (4 + 4 + 4 + 8 + 4 + 4));
data.WriteBits(rewards.size(), 21);
data.FlushBits();
@@ -823,11 +823,11 @@ void WorldSession::HandleGuildQueryNewsOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket)
{
- uint32 newId;
+ uint32 newsId;
bool sticky;
ObjectGuid guid;
- recvPacket >> id;
+ recvPacket >> newsId;
guid[2] = recvPacket.ReadBit();
guid[4] = recvPacket.ReadBit();
@@ -850,7 +850,7 @@ void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket)
if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId()))
{
- if (GuildNewsEntry* newsEntry = guild->GetNewsLog().GetNewById(id))
+ if (GuildNewsEntry* newsEntry = guild->GetNewsLog().GetNewsById(newsId))
{
if (sticky)
newsEntry->Flags |= 1;
@@ -858,7 +858,7 @@ void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket)
newsEntry->Flags &= ~1;
WorldPacket data;
- guild->GetNewsLog().BuildNewsData(id, *newsEntry, data);
+ guild->GetNewsLog().BuildNewsData(newsId, *newsEntry, data);
SendPacket(&data);
}
}
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 095cceab7bf..767f17cd276 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1569,7 +1569,7 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype)
// create the new item and store it
Item* pItem = player->StoreNewItem(dest, newitemid, true, Item::GenerateItemRandomPropertyId(newitemid));
- if ((pProto->Quality == ITEM_QUALITY_EPIC && pProto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]) || pProto->Quality > ITEM_QUALITY_EPIC)
+ if (pProto->Quality > ITEM_QUALITY_EPIC || (pProto->Quality == ITEM_QUALITY_EPIC && pProto->ItemLevel >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))
guild->GetNewsLog().AddNewEvent(GUILD_NEWS_ITEM_CRAFTED, time(NULL), player->GetGUID(), 0, pProto->ItemId);
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 2918a05774d..7b0952dac7b 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -234,9 +234,9 @@ class spell_warr_execute : public SpellScriptLoader
int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_0].CalcValue() * 10;
newRage = std::max(newRage, ragesave);
}
-
+
caster->SetPower(POWER_RAGE, uint32(newRage));
-
+
/// Formula taken from the DBC: "${10+$AP*0.437*$m1/100}"
int32 baseDamage = int32(10 + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.437f * GetEffectValue() / 100.0f);
/// Formula taken from the DBC: "${$ap*0.874*$m1/100-1} = 20 rage"
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 1b17c35284b..3d848f94c00 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -242,7 +242,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(CHAR_UPD_GUILD_EXPERIENCE, "UPDATE guild SET level = ?, experience = ?, todayExperience = ? WHERE guildId = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE, "UPDATE guild SET todayExperience = 0", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_LOAD_GUILD_NEWS, "SELECT id, eventType, playerGuid, data, flags, date FROM guild_news_log WHERE guild = ? ORDER BY guild ASC, id ASC", CONNECTION_SYNCH);
- PREPARE_STATEMENT(CHAR_SAVE_GUILD_NEWS, "INSERT INTO guild_news_log values (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SAVE_GUILD_NEWS, "INSERT INTO guild_news_log (guild, id, eventType, playerGuid, data, flags, date) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
// Chat channel handling
PREPARE_STATEMENT(CHAR_SEL_CHANNEL, "SELECT announce, ownership, password, bannedList FROM channels WHERE name = ? AND team = ?", CONNECTION_SYNCH)