Ejemplo n.º 1
0
        private string GetSoundBySkills(BoardSkill skill)
        {
            string soundFileName = string.Empty;

            switch (skill.Skill.OverlordSkill)
            {
            case Enumerators.OverlordSkill.ICE_BOLT:
            case Enumerators.OverlordSkill.FREEZE:
            case Enumerators.OverlordSkill.POISON_DART:
            case Enumerators.OverlordSkill.FIRE_BOLT:
                soundFileName = skill.Skill.OverlordSkill.ToString().ToLower();
                break;

            case Enumerators.OverlordSkill.HEALING_TOUCH:
            case Enumerators.OverlordSkill.FIREBALL:
            case Enumerators.OverlordSkill.TOXIC_POWER:
            case Enumerators.OverlordSkill.MEND:
            case Enumerators.OverlordSkill.HARDEN:
            case Enumerators.OverlordSkill.STONE_SKIN:
            case Enumerators.OverlordSkill.PUSH:
            case Enumerators.OverlordSkill.DRAW:
            default:
                break;
            }

            return(soundFileName);
        }
Ejemplo n.º 2
0
 public void SetPlayerSkills(GameplayPage rootPage, HeroSkill primary, HeroSkill secondary)
 {
     _playerPrimarySkill = new BoardSkill(rootPage.PlayerPrimarySkillHandler.gameObject,
                                          _gameplayManager.CurrentPlayer, primary, true);
     _playerSecondarySkill = new BoardSkill(rootPage.PlayerSecondarySkillHandler.gameObject,
                                            _gameplayManager.CurrentPlayer, secondary, false);
 }
Ejemplo n.º 3
0
 public void SetOpponentSkills(GameplayPage rootPage, HeroSkill primary, HeroSkill secondary)
 {
     OpponentPrimarySkill = new BoardSkill(rootPage.OpponentPrimarySkillHandler.gameObject,
                                           _gameplayManager.OpponentPlayer, primary, true);
     OpponentSecondarySkill = new BoardSkill(rootPage.OpponentSecondarySkillHandler.gameObject,
                                             _gameplayManager.OpponentPlayer, secondary, false);
 }
Ejemplo n.º 4
0
        private void HealingTouchAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            if (target is Player)
            {
                Player player = target as Player;

                _battleController.HealPlayerBySkill(owner, skill, player);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/HealingTouchVFX"), player);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                        Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
            else
            {
                BoardUnit unit = target as BoardUnit;

                _battleController.HealUnitBySkill(owner, skill, unit);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/HealingTouchVFX"), unit);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                        Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
        }
Ejemplo n.º 5
0
 private void FireBoltAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
 {
     AttackWithModifiers(owner, boardSkill, skill, target, Enumerators.SetType.FIRE, Enumerators.SetType.TOXIC);
     _vfxController.CreateVfx(_loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/FireBolt_ImpactVFX"),
                              target);
     _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower() + "_Impact",
                             Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
 }
Ejemplo n.º 6
0
        private void DoActionByType(BoardSkill skill, object target)
        {
            switch (skill.Skill.OverlordSkill)
            {
            case Enumerators.OverlordSkill.FREEZE:
                FreezeAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.ICE_BOLT:
                IceBoltAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.POISON_DART:
                PoisonDartAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.TOXIC_POWER:
                ToxicPowerAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.HEALING_TOUCH:
                HealingTouchAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.MEND:
                MendAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.FIRE_BOLT:
                FireBoltAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.RABIES:
                RabiesAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.HARDEN:
                HardenAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.STONE_SKIN:
                StoneskinAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.PUSH:
                PushAction(skill.Owner, skill, skill.Skill, target);
                break;

            case Enumerators.OverlordSkill.DRAW:
                DrawAction(skill.Owner, skill, skill.Skill, target);
                break;
            }
        }
Ejemplo n.º 7
0
        private void HardenAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            _battleController.HealPlayerBySkill(owner, skill, owner);

            // TODO: remove this empty gameobject logic
            Transform transform = new GameObject().transform;

            transform.position  = owner.AvatarObject.transform.position;
            transform.position -= Vector3.up * 3.3f;

            _vfxController.CreateVfx(_loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/StoneskinVFX"),
                                     transform);
        }
Ejemplo n.º 8
0
        private void MendAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            owner.Health = Mathf.Clamp(owner.Health + skill.Value, 0, owner.MaxCurrentHp);

            // TODO: remove this empty gameobject logic
            Transform transform = new GameObject().transform;

            transform.position  = owner.AvatarObject.transform.position;
            transform.position += Vector3.up * 2;
            _vfxController.CreateVfx(_loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/MendVFX"),
                                     transform);
            _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                    Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
        }
Ejemplo n.º 9
0
        private void RabiesAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            if (target != null && target is BoardUnit)
            {
                BoardUnit unit = target as BoardUnit;

                unit.SetAsFeralUnit();

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/RabiesVFX"), unit);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                        Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
        }
Ejemplo n.º 10
0
        private void DrawAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            _cardsController.AddCardToHand(owner);

            _vfxController.CreateVfx(_loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/DrawCardVFX"),
                                     owner);
            _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                    Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);

            _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                             Enumerators.ActionType.DRAW_CARD_SKILL, new object[]
            {
                owner, skill
            }));
        }
Ejemplo n.º 11
0
        private void PushAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            BoardUnit   targetUnit    = target as BoardUnit;
            Player      unitOwner     = targetUnit.OwnerPlayer;
            WorkingCard returningCard = targetUnit.Card;

            returningCard.InitialCost = returningCard.LibraryCard.Cost;
            returningCard.RealCost    = returningCard.InitialCost;

            Vector3 unitPosition = targetUnit.Transform.position;

            _vfxController.CreateVfx(_loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/PushVFX"),
                                     targetUnit);

            _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.Skill.Trim().ToLower(),
                                    Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);

            _timerManager.AddTimer(
                x =>
            {
                // STEP 1 - REMOVE UNIT FROM BOARD
                unitOwner.BoardCards.Remove(targetUnit);

                // STEP 2 - DESTROY UNIT ON THE BOARD OR ANIMATE;
                targetUnit.Die(true);
                Object.Destroy(targetUnit.GameObject);

                // STEP 3 - REMOVE WORKING CARD FROM BOARD
                unitOwner.RemoveCardFromBoard(returningCard);

                // STEP 4 - RETURN CARD TO HAND
                _cardsController.ReturnToHandBoardUnit(returningCard, unitOwner, unitPosition);

                // STEP 4 - REARRANGE HANDS
                _gameplayManager.RearrangeHands();

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.RETURN_TO_HAND_CARD_SKILL, new object[]
                {
                    owner, skill, targetUnit
                }));

                // _gameplayManager.GetController<RanksController>().UpdateRanksBuffs(unitOwner);
            },
                null,
                2f);
        }
Ejemplo n.º 12
0
        private void ToxicPowerAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            if (target != null && target is BoardUnit)
            {
                BoardUnit unit = target as BoardUnit;

                _battleController.AttackUnitBySkill(owner, skill, unit, 0);

                unit.BuffedDamage  += skill.Attack;
                unit.CurrentDamage += skill.Attack;

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/ToxicAttackVFX"), unit);
                //_soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.Skill.Trim().ToLower(),
                //  Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
        }
Ejemplo n.º 13
0
        private void IceBoltAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            if (target != null && target is BoardUnit)
            {
                BoardUnit unit = target as BoardUnit;

                _battleController.AttackUnitBySkill(owner, skill, unit, 0);

                if (unit.CurrentHp > 0)
                {
                    unit.Stun(Enumerators.StunType.FREEZE, 1);
                }

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/IceBolt_Impact"), unit);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower() + "_Impact",
                                        Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
        }
Ejemplo n.º 14
0
        private void StoneskinAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            if (target != null && target is BoardUnit)
            {
                BoardUnit unit = target as BoardUnit;

                unit.BuffedHp  += skill.Value;
                unit.CurrentHp += skill.Value;

                // TODO: remove this empty gameobject logic
                Transform transform = new GameObject().transform;
                transform.position  = unit.Transform.position;
                transform.position -= Vector3.up * 3.3f;

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/StoneskinVFX"), transform);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, skill.OverlordSkill.ToString().ToLower(),
                                        Constants.OverlordAbilitySoundVolume, Enumerators.CardSoundType.NONE);
            }
        }
Ejemplo n.º 15
0
 private void AttackWithModifiers(
     Player owner,
     BoardSkill boardSkill,
     HeroSkill skill,
     object target,
     Enumerators.SetType attackType,
     Enumerators.SetType setType)
 {
     if (target is Player player)
     {
         // TODO additional damage to heros
         _battleController.AttackPlayerBySkill(owner, skill, player);
     }
     else
     {
         BoardUnit creature       = target as BoardUnit;
         int       attackModifier = 0;
         _battleController.AttackUnitBySkill(owner, skill, creature, attackModifier);
     }
 }
Ejemplo n.º 16
0
        private GameObject GetVfxPrefabBySkill(BoardSkill skill)
        {
            GameObject prefab;

            switch (skill.Skill.OverlordSkill)
            {
            case Enumerators.OverlordSkill.ICE_BOLT:
                prefab = _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/IceBoltVFX");
                break;

            case Enumerators.OverlordSkill.FREEZE:
                prefab = _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/FreezeVFX");
                break;

            case Enumerators.OverlordSkill.POISON_DART:
                prefab = _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/PoisonDartVFX");
                break;

            case Enumerators.OverlordSkill.FIREBALL:
            case Enumerators.OverlordSkill.FIRE_BOLT:
                prefab = _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/FireBoltVFX");
                break;

            case Enumerators.OverlordSkill.HEALING_TOUCH:
                prefab = _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/HealingTouchVFX");
                break;

            case Enumerators.OverlordSkill.TOXIC_POWER:
            case Enumerators.OverlordSkill.MEND:
            case Enumerators.OverlordSkill.HARDEN:
            case Enumerators.OverlordSkill.STONE_SKIN:
            case Enumerators.OverlordSkill.PUSH:
            case Enumerators.OverlordSkill.DRAW:
            default:
                prefab = new GameObject();
                break;
            }

            return(prefab);
        }
Ejemplo n.º 17
0
        private void FreezeAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            switch (target)
            {
            case BoardUnit unit:
                unit.Stun(Enumerators.StunType.FREEZE, skill.Value);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/Freeze_ImpactVFX"), unit);

                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES,
                                        skill.OverlordSkill.ToString().ToLower() + "_Impact", Constants.OverlordAbilitySoundVolume,
                                        Enumerators.CardSoundType.NONE);

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.STUN_UNIT_BY_SKILL, new object[]
                {
                    owner, unit
                }));
                break;

            case Player player:
                player.Stun(Enumerators.StunType.FREEZE, skill.Value);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/Freeze_ImpactVFX"), player);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES,
                                        skill.OverlordSkill.ToString().ToLower() + "_Impact", Constants.OverlordAbilitySoundVolume,
                                        Enumerators.CardSoundType.NONE);

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.STUN_PLAYER_BY_SKILL, new object[]
                {
                    owner, player
                }));
                break;
            }
        }
Ejemplo n.º 18
0
        private void DoBoardSkill(BoardSkill skill)
        {
            object target = null;

            Enumerators.AffectObjectType selectedObjectType = Enumerators.AffectObjectType.NONE;

            switch (skill.Skill.OverlordSkill)
            {
            case Enumerators.OverlordSkill.HARDEN:
            case Enumerators.OverlordSkill.STONE_SKIN:
            case Enumerators.OverlordSkill.DRAW:
            {
                selectedObjectType = Enumerators.AffectObjectType.PLAYER;
                target             = _gameplayManager.OpponentPlayer;
            }

            break;

            case Enumerators.OverlordSkill.HEALING_TOUCH:
            case Enumerators.OverlordSkill.MEND:
            {
                target             = _gameplayManager.OpponentPlayer;
                selectedObjectType = Enumerators.AffectObjectType.PLAYER;

                if (_gameplayManager.OpponentPlayer.Health > 13)
                {
                    if (skill.Skill.ElementTargetTypes.Count > 0)
                    {
                        _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x =>
                                                                                                    !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType));
                    }

                    List <BoardUnit> units = GetUnitsWithLowHp(_unitsToIgnoreThisTurn);

                    if (units.Count > 0)
                    {
                        target             = units[0];
                        selectedObjectType = Enumerators.AffectObjectType.CHARACTER;
                    }
                }
            }

            break;

            case Enumerators.OverlordSkill.RABIES:
            {
                _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x =>
                                                                                            skill.Skill.ElementTargetTypes.Count > 0 &&
                                                                                            !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType) ||
                                                                                            x.NumTurnsOnBoard > 0 || x.HasFeral);
                BoardUnit unit = GetRandomUnit(false, _unitsToIgnoreThisTurn);

                if (unit != null)
                {
                    target             = unit;
                    selectedObjectType = Enumerators.AffectObjectType.CHARACTER;
                }
            }

            break;

            case Enumerators.OverlordSkill.POISON_DART:
            case Enumerators.OverlordSkill.TOXIC_POWER:
            case Enumerators.OverlordSkill.ICE_BOLT:
            case Enumerators.OverlordSkill.FREEZE:
            case Enumerators.OverlordSkill.FIRE_BOLT:
            {
                target             = _gameplayManager.CurrentPlayer;
                selectedObjectType = Enumerators.AffectObjectType.PLAYER;

                BoardUnit unit = GetRandomOpponentUnit();

                if (unit != null)
                {
                    target             = unit;
                    selectedObjectType = Enumerators.AffectObjectType.CHARACTER;
                }
            }

            break;

            case Enumerators.OverlordSkill.PUSH:
            {
                if (skill.Skill.ElementTargetTypes.Count > 0)
                {
                    _unitsToIgnoreThisTurn = _gameplayManager.OpponentPlayer.BoardCards.FindAll(x =>
                                                                                                !skill.Skill.ElementTargetTypes.Contains(x.Card.LibraryCard.CardSetType));
                }

                List <BoardUnit> units = GetUnitsWithLowHp(_unitsToIgnoreThisTurn);

                if (units.Count > 0)
                {
                    target = units[0];

                    _unitsToIgnoreThisTurn.Add(target as BoardUnit);

                    selectedObjectType = Enumerators.AffectObjectType.CHARACTER;
                }
                else
                {
                    BoardUnit unit = GetRandomOpponentUnit(_unitsToIgnoreThisTurn);

                    if (unit != null)
                    {
                        target = unit;

                        _unitsToIgnoreThisTurn.Add(target as BoardUnit);

                        selectedObjectType = Enumerators.AffectObjectType.CHARACTER;
                    }
                    else
                    {
                        return;
                    }
                }
            }

            break;

            default: return;
            }

            skill.StartDoSkill();

            if (selectedObjectType == Enumerators.AffectObjectType.PLAYER)
            {
                skill.FightTargetingArrow = CreateOpponentTarget(
                    true,
                    skill.IsPrimary,
                    skill.SelfObject,
                    target as Player,
                    () =>
                {
                    skill.FightTargetingArrow.SelectedPlayer = target as Player;
                    skill.EndDoSkill();
                });
            }
            else
            {
                if (target != null)
                {
                    BoardUnit unit = target as BoardUnit;

                    skill.FightTargetingArrow = CreateOpponentTarget(
                        true,
                        skill.IsPrimary,
                        skill.SelfObject,
                        unit,
                        () =>
                    {
                        skill.FightTargetingArrow.SelectedCard = unit;
                        skill.EndDoSkill();
                    });
                }
            }
        }
Ejemplo n.º 19
0
        public void DoSkillAction(BoardSkill skill, object target = null)
        {
            if (skill == null)
            {
                return;
            }

            if (!skill.IsUsing)
            {
                return;
            }

            if (skill.FightTargetingArrow != null)
            {
                if (skill.FightTargetingArrow.SelectedPlayer != null)
                {
                    Player targetPlayer = skill.FightTargetingArrow.SelectedPlayer;

                    string soundFile = GetSoundBySkills(skill);
                    if (!string.IsNullOrEmpty(soundFile))
                    {
                        _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                    }

                    _vfxController.CreateSkillVfx(
                        GetVfxPrefabBySkill(skill),
                        skill.SelfObject.transform.position,
                        targetPlayer,
                        x =>
                    {
                        skill.UseSkill(targetPlayer);
                        DoActionByType(skill, targetPlayer);
                        _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                    });
                }
                else if (skill.FightTargetingArrow.SelectedCard != null)
                {
                    BoardUnit targetUnit = skill.FightTargetingArrow.SelectedCard;

                    string soundFile = GetSoundBySkills(skill);
                    if (!string.IsNullOrEmpty(soundFile))
                    {
                        _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                    }

                    _vfxController.CreateSkillVfx(
                        GetVfxPrefabBySkill(skill),
                        skill.SelfObject.transform.position,
                        targetUnit,
                        x =>
                    {
                        DoActionByType(skill, targetUnit);
                        skill.UseSkill(targetUnit);
                        _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                    });
                }

                skill.CancelTargetingArrows();
                skill.FightTargetingArrow = null;
            }
            else if (target != null)
            {
                string soundFile = GetSoundBySkills(skill);
                if (!string.IsNullOrEmpty(soundFile))
                {
                    _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                }

                _vfxController.CreateSkillVfx(
                    GetVfxPrefabBySkill(skill),
                    skill.SelfObject.transform.position,
                    target,
                    x =>
                {
                    DoActionByType(skill, target);
                    skill.UseSkill(target);
                    _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                });
            }
        }