Description
Voici un patch qui vous permettra de remettre en place les marques de BG enlevées en 3.2 par Blizzard (il me semble).
Je me suis basé sur l'ancien code de MaNGOS.
Diff
[code=diff]diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 13e05..4e8a22e 100755
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -805,12 +805,17 @@ void Battleground::EndBattleground(uint32 winner)
plr->SetRandomWinner(true);
}
+ // Marques de BG
+ RewardMark(plr, ITEM_WINNER_COUNT);
plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
}
else
{
if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
UpdatePlayerScore(plr, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
+
+ // Marques de BG
+ RewardMark(plr, ITEM_LOSER_COUNT);
}
plr->ResetAllPowers();
@@ -1853,3 +1858,75 @@ void Battleground::RewardXPAtKill(Player* killer, Player* victim)
if (sWorld->getBoolConfig(CONFIG_BG_XP_FOR_KILL) && killer && victim)
killer->RewardPlayerAndGroupAtKill(victim, true);
}
+
+// Marques de BG
+void Battleground::RewardMark(Player *plr, uint32 count)
+{
+ // 'Inactive' this aura prevents the player from gaining honor points and battleground tokens
+ if(plr->HasAura(SPELL_AURA_PLAYER_INACTIVE))
+ return;
+
+ BattlegroundMarks mark;
+ switch (GetTypeID())
+ {
+ case BATTLEGROUND_AV:
+ mark = ITEM_AV_MARK_OF_HONOR;
+ break;
+ case BATTLEGROUND_WS:
+ mark = ITEM_WS_MARK_OF_HONOR;
+ break;
+ case BATTLEGROUND_AB:
+ mark = ITEM_AB_MARK_OF_HONOR;
+ break;
+ case BATTLEGROUND_EY:
+ mark = ITEM_EY_MARK_OF_HONOR;
+ break;
+ default:
+ return;
+ }
+
+ if (!sObjectMgr->GetItemTemplate(mark))
+ return;
+
+ if (!plr->AddItem(mark, count))
+ SendRewardMarkByMail(plr, mark, count);
+}
+
+void Battleground::SendRewardMarkByMail(Player *plr, uint32 mark, uint32 count)
+{
+ uint32 bmEntry = GetBattlemasterEntry();
+ if(!bmEntry)
+ return;
+
+ Item* markItem = Item::CreateItem(mark, count, plr);
+ if (!markItem)
+ return;
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ // save new item before send
+ markItem->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted
+
+ ItemTemplate const* markProto = sObjectMgr->GetItemTemplate(mark);
+
+ // subject: item name
+ std::string subject = markProto->Name1;
+ int loc_idx = plr->GetSession()->GetSessionDbLocaleIndex();
+ if (loc_idx >= 0)
+ if (ItemLocale const* il = sObjectMgr->GetItemLocale(markProto->ItemId))
+ if (il->Name.size() > loc_idx && !il->Name[loc_idx].empty())
+ subject = il->Name[loc_idx];
+
+ // text
+ std::string textFormat = plr->GetSession()->GetTrinityString(LANG_BG_MARK_BY_MAIL);
+ char textChar;
+ sprintf(textChar, textFormat.c_str(), GetName(), GetName());
+ std::string text = textChar;
+
+ // send mail
+ MailDraft draft(subject, text);
+ draft.AddItem(markItem);
+ draft.SendMailTo(trans, MailReceiver(plr, plr->GetGUIDLow()), MailSender(plr, MAIL_STATIONERY_DEFAULT), MAIL_CHECK_MASK_NONE);
+
+ CharacterDatabase.CommitTransaction(trans);
+}
\ No newline at end of file
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 086efb0..3be5f0d 100755
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -572,6 +572,9 @@ class Battleground
void RewardXPAtKill(Player* killer, Player* victim);
bool CanAwardArenaPoints() const { return m_LevelMin >= BG_AWARD_ARENA_POINTS_MIN_LEVEL; }
+ // Marques de BG
+ void RewardMark(Player *plr, uint32 count);
+ void SendRewardMarkByMail(Player *plr, uint32 mark, uint32 count);
protected:
// this method is called, when BG cannot spawn its own spirit guide, or something is wrong, It correctly ends Battleground
void EndNow();[/code]