Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
 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;
 }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
                    }
                }
            }
        }
Пример #6
0
 public void Win(BattlegroundTeam team)
 {
     Winner = team;
     FinishFight();
 }