Exemplo n.º 1
0
        internal void RemoveRelation(int index, BattlegroundRelation relation, bool isCharActive)
        {
            _chr.EnsureContext();
            _relations[index] = null;

            var invite = Invitation;

            if (invite != null)
            {
                // cancel reserved slot
                invite.Team.ReservedSlots--;
                Invitation = null;
            }

            var bgId = relation.BattlegroundId;
            var bg   = _chr.Map as Battleground;

            if (bg != null &&
                bg.Template.Id == bgId &&
                !relation.IsEnqueued &&
                !_chr.IsTeleporting &&
                isCharActive)
            {
                bg.TeleportOutside(_chr);
            }

            if (isCharActive)
            {
                BattlegroundHandler.ClearStatus(_chr, index);
            }

            if (relation.IsEnqueued && relation.Characters.CharacterCount > 1)
            {
                var group = _chr.Group;
                if (group != null && group.IsLeader(_chr))
                {
                    // also dequeue everyone else
                    relation.Characters.ForeachCharacter(chr =>
                    {
                        if (chr != _chr)
                        {
                            chr.ExecuteInContext(() =>
                            {
                                chr.Battlegrounds.RemoveRelation(bgId);
                            });
                        }
                    });
                }
            }
        }
Exemplo n.º 2
0
        internal void RemoveRelation(int index, BattlegroundRelation relation, bool isCharActive)
        {
            this._chr.EnsureContext();
            this._relations[index] = (BattlegroundRelation)null;
            BattlegroundInvitation invitation = this.Invitation;

            if (invitation != null)
            {
                --invitation.Team.ReservedSlots;
                this.Invitation = (BattlegroundInvitation)null;
            }

            BattlegroundId bgId = relation.BattlegroundId;
            Battleground   map  = this._chr.Map as Battleground;

            if (map != null && map.Template.Id == bgId && (!relation.IsEnqueued && !this._chr.IsTeleporting) &&
                isCharActive)
            {
                map.TeleportOutside(this._chr);
            }
            if (isCharActive)
            {
                BattlegroundHandler.ClearStatus((IPacketReceiver)this._chr, index);
            }
            if (!relation.IsEnqueued || relation.Characters.CharacterCount <= 1)
            {
                return;
            }
            Group group = this._chr.Group;

            if (group == null || !group.IsLeader(this._chr))
            {
                return;
            }
            relation.Characters.ForeachCharacter((Action <Character>)(chr =>
            {
                if (chr == this._chr)
                {
                    return;
                }
                chr.ExecuteInContext((Action)(() => chr.Battlegrounds.RemoveRelation(bgId)));
            }));
        }