diff options
author | Nay <dnpd.dd@gmail.com> | 2012-09-10 00:06:47 +0100 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2012-09-10 00:06:47 +0100 |
commit | 5226f53b8ae815f707538b66207727e2715af826 (patch) | |
tree | b8b8e5fd59e0fc7cbba95433c27cac543b4be8f8 /src | |
parent | f508f7dbc52f3e41861ef408a440224307a65f61 (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.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 17 | ||||
-rwxr-xr-x | src/server/game/Guilds/Guild.h | 7 | ||||
-rw-r--r-- | src/server/game/Guilds/GuildMgr.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Handlers/GuildHandler.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 4 | ||||
-rwxr-xr-x | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 2 |
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) |