private static bool HandleFlagUsed(GameObject flag, Character user, bool mayReturn) { BattlegroundTeam team = user.Battlegrounds.Team; var wsg = flag.Map as WarsongGulch; if (wsg != null && team != null) { var entry = flag.Entry as GOFlagEntry; if (entry != null) { if (entry.Side != team.Side) { // using opponent's flag WSGFaction flagFaction = wsg.GetFaction(entry.Side); if (flagFaction.CanPickupFlag(user)) { flagFaction.PickupFlag(user); } return(true); } else if (mayReturn) { // using own flag WSGFaction userFaction = wsg.GetFaction(team.Side); if (userFaction.CanReturnFlag(user)) { userFaction.ReturnFlag(user); } } } } return(false); }
public static void SendPvpData(IPacketReceiver reciever, BattlegroundSide side, Battleground bg) { bg.EnsureContext(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.MSG_PVP_LOG_DATA, 10 + bg.PlayerCount * 40)) { BattlegroundTeam winner = bg.Winner; packet.Write(bg.IsArena); if (bg.IsArena) { for (int index = 0; index < 2; ++index) { packet.Write(0); packet.Write(3999); packet.Write(0); } packet.WriteCString(string.Empty); packet.WriteCString(string.Empty); } bool flag = bg.Winner != null; packet.Write(flag); if (flag) { packet.Write((byte)bg.Winner.Side); } List <Character> characters = bg.Characters; List <BattlegroundStats> listStats = new List <BattlegroundStats>(characters.Count); characters.ForEach(chr => listStats.Add(chr.Battlegrounds.Stats)); packet.Write(listStats.Count); for (int index = 0; index < listStats.Count; ++index) { Character character = characters[index]; if (character.IsInBattleground) { BattlegroundStats stats = character.Battlegrounds.Stats; packet.Write(character.EntityId); packet.Write(stats.KillingBlows); if (bg.IsArena) { packet.Write(winner != null && character.Battlegrounds.Team == winner); } else { packet.Write(stats.HonorableKills); packet.Write(stats.Deaths); packet.Write(stats.BonusHonor); } packet.Write(stats.TotalDamage); packet.Write(stats.TotalHealing); packet.Write(stats.SpecialStatCount); stats.WriteSpecialStats(packet); } } reciever.Send(packet, false); } }
private void InformNearVictory(BattlegroundTeam team, int score) { Characters.SendSystemMessage(DefaultAddonLocalizer.Instance.GetTranslations(AddonMsgKey.ABNearVictory), team.Side.ToString(), score); MiscHandler.SendPlaySoundToMap(this, (uint)ABSounds.NearVictory); isInformatedNearVictory = true; }
public static void PvPLogDataRequest(IRealmClient client, RealmPacketIn packet) { Character activeCharacter = client.ActiveCharacter; if (!activeCharacter.IsInBattleground) { return; } BattlegroundTeam team = activeCharacter.Battlegrounds.Team; if (team == null) { return; } SendPvpData(client, team.Side, team.Battleground); }
/// <summary> /// Somebody stepped on the Alliance capture areatrigger /// </summary> /// <param name="at"></param> /// <param name="chr"></param> private static void AllianceCaptureTriggered(AreaTrigger at, Character chr) { // Check whether the battle has started and the Character is actively participating BattlegroundTeam team = chr.Battlegrounds.Team; var wsg = chr.Map as WarsongGulch; if (team != null && wsg != null && wsg.IsActive) { if (team.Side == BattlegroundSide.Alliance) { if (wsg.WarsongClan.FlagCarrier == chr && wsg.Silverwing.IsFlagHome) { wsg.WarsongClan.CaptureFlag(chr); } } } }
public void Win(BattlegroundTeam team) { Winner = team; FinishFight(); }