Пример #1
0
        private void Dodge(FightingObjectView attackTarget, Evade evadeMethod)
        {
            Vector3 movePosition;

            switch (evadeMethod)
            {
            case Evade.Behind:
                movePosition = (attackTarget.transform.position - attackTarget.transform.forward * 3);
                _player.RequestMove(movePosition);
                break;

            case Evade.Left:
                movePosition = (attackTarget.transform.position - attackTarget.transform.right * 3);
                _player.RequestMove(movePosition);
                break;

            case Evade.Defensive:
                // Not implemented yet.
                break;

            case Evade.Tank:
            default:
                break;
            }
        }
        public static bool IsInLineOfSight(this LocalPlayerCharacterView instance, FightingObjectView target)
        {
            var targetPos    = target.FightingObject.h1();
            var sightChecker = instance.PlayerCharacter.zb <ayw>();

            return(!ObjectManager.GetInstance().ObjectManager_Internal.y().f(sightChecker.n().h1(), targetPos, out var outPoint, 2));
        }
Пример #3
0
        public static bool IsReadyToCast(this FightingObjectView instance, SpellSlotIndex slot)
        {
            var eventHandler = new CastSpellEventHandler(instance.GetEventHandler <auy>());

            if (eventHandler != null && eventHandler.IsReady((byte)slot))
            {
                return(true);
            }

            return(false);
        }
Пример #4
0
        public static FightingObjectView GetAttackTarget(this FightingObjectView instance)
        {
            var attackTargetId = instance.GetFightingObject().GetTargetId();

            if(attackTargetId > 0)
            {
                ObjectManager manager = ObjectManager.GetInstance();
                if (manager.GetObject(attackTargetId).GetView() is FightingObjectView target)
                    return target;
            }

            return default(FightingObjectView);
        }
Пример #5
0
        public static FightingObjectView GetAttackTarget(this FightingObjectView instance)
        {
            var attackTargetId = instance.FightingObject.v8();

            if (attackTargetId > 0L)
            {
                var client = Client.Instance;

                if (client.GetEntity(attackTargetId) is FightingObjectView target)
                {
                    return(target);
                }
            }

            return(default(FightingObjectView));
        }
Пример #6
0
        public static bool IsUnderAttack(this LocalPlayerCharacterView view, out FightingObjectView attacker)
        {
            var entities = GameManager.GetInstance().GetEntities <MobView>((entity) => {
                var target = ((FightingObjectView)entity).GetAttackTarget();

                if (target != null && target == view)
                {
                    return(true);
                }

                return(false);
            });

            attacker = entities.FirstOrDefault();

            return(attacker != default(FightingObjectView));
        }
        public static bool IsUnderAttack(this LocalPlayerCharacterView instance, out FightingObjectView attacker)
        {
            var entities = Client.Instance.GetEntities <MobView>((entity) =>
            {
                var target = entity.GetAttackTarget();

                if (target != null && target.Equals(instance))
                {
                    return(true);
                }

                return(false);
            });

            attacker = entities.FirstOrDefault();

            return(attacker != default(FightingObjectView));
        }
Пример #8
0
        private bool IsSpecialMob(FightingObjectView target, out Evade evade)
        {
            evade = Evade.Tank;
            if (!target.IsCasting())
            {
                return(false);
            }

            var targetName    = target.name;
            var spellName     = target.GetSpellCasted().d6;
            var spellTarget   = target.GetSpellCasted().d1;
            var spellCategory = target.GetSpellCasted().d4;

            var mob      = _mobList.Find(s => s.GetName().Equals(targetName));
            var mobSpell = mob.GetSpell(spellName, spellCategory, spellTarget);

            if (mobSpell == null)
            {
                return(false);
            }
            evade = mobSpell.GetEvadeMethod();
            return(true);
        }
Пример #9
0
 public static FightingObjectView GetAttackTarget(this FightingObjectView view) => view.GetFightingObject().GetAttackTarget();
Пример #10
0
 public static void CastOn(this LocalInputHandler instance, CharacterSpellSlot slot, FightingObjectView target) => _startCastInternalTarget.Invoke(instance, new object[] { (byte)slot, target });
 public static void CastOn(this LocalPlayerCharacterView instance, CharacterSpellSlot slot, FightingObjectView target) => instance.InputHandler.CastOn(slot, target);
 public static void CastOn(this LocalPlayerCharacterView instance, SpellSlotIndex slot, FightingObjectView target)
 {
     _startCastInternalTarget.Invoke(instance.InputHandler, new object[] { (byte)slot, target });
 }
Пример #13
0
        public void Fight()
        {
            if (_localPlayerCharacterView.IsMounted)
            {
                Core.Log("Player Mounted. Dismount now.");
                _localPlayerCharacterView.MountOrDismount();
                return;
            }

            if (_combatCooldown > 0 || _localPlayerCharacterView.bIsChanneling())
            {
                Core.LogOnce("Combat Cooldown > 0. Player is channeling: " + _localPlayerCharacterView.bIsChanneling());
                _combatCooldown -= UnityEngine.Time.deltaTime;
                return;
            }

            _combatPlayer = _localPlayerCharacterView.GetLocalPlayerCharacter();
            _combatTarget = _localPlayerCharacterView.GetAttackTarget();
            _combatSpells = _combatPlayer.GetSpellSlotsIndexed().Ready(_localPlayerCharacterView).Ignore("ESCAPE_DUNGEON").Ignore("PLAYER_COUPDEGRACE").Ignore("AMBUSH");

            if (_localPlayerCharacterView.IsCasting() || _combatPlayer.GetIsCasting())
            {
                Core.Log("You are casting. Wait for casting to finish");
                return;
            }

            if (_combatTarget != null && !_combatTarget.IsCasting())
            {
                //Ignore the Spell Interrupt to have it up if needed!
                _combatSpells = _combatSpells.Ignore("INTERRUPT");
            }
            else
            {
                //if Interrupt Spell is useable use it to interrupt the cast and dont run like a pussy and die.
                if (_combatTarget != null && _combatTarget.IsCasting() && _combatSpells.First().GetSpellDescriptor().TryGetName() == "INTERRUPT2")
                {
                    Core.Log("Interrupt ready. Use it!");
                }
                else if (_combatTarget != null && _combatTarget.IsCasting())
                {
                    Core.Log("Running away from Spell");
                    // Choose a random point behind Player.
                    Vector3 back      = _localPlayerCharacterView.transform.forward * 15f;
                    float   randAngle = UnityEngine.Random.Range(-75f, 75f);
                    back = Quaternion.AngleAxis(randAngle, Vector3.up) * back;
                    Vector3 randPos = back + _localPlayerCharacterView.transform.position;

                    _localPlayerCharacterView.StopAnyActionObject();
                    _localPlayerCharacterView.RequestMove(randPos);
                    _combatCooldown = 0.3f;
                }
            }

            if (_combatCooldown > 0 || _localPlayerCharacterView.bIsChanneling())
            {
                Core.LogOnce("Combat Cooldown > 0. Player is channeling: " + _localPlayerCharacterView.bIsChanneling());
                _combatCooldown -= UnityEngine.Time.deltaTime;
                return;
            }

            if (_combatTarget != null && !_combatTarget.IsDead() && SpellPriorityList.Any(s => TryToCastSpell(s.Item1, s.Item2, s.Item3)))
            {
                return;
            }

            if (_localPlayerCharacterView.IsUnderAttack(out FightingObjectView attacker))
            {
                Core.LogOnce("You are under attack. Attack the attacker");
                _localPlayerCharacterView.SetSelectedObject(attacker);
                _localPlayerCharacterView.AttackSelectedObject();
                return;
            }

            if (_combatPlayer.GetIsCasting())
            {
                Core.Log("You are casting. Wait for casting to finish");
                return;
            }

            if (_combatPlayer.GetHealth().GetValue() < (_combatPlayer.GetHealth().GetMaximum() * 0.8f))
            {
                Core.LogOnce("Health below 80%");
                var healSpell = _combatSpells.Target(SpellTarget.Self).Category(SpellCategory.Heal);

                if (healSpell.Any())
                {
                    Core.Log("Cast heal spell on self");
                    _localPlayerCharacterView.CastOnSelf(healSpell.FirstOrDefault().Slot);
                }
                return;
            }

            _currentTarget         = null;
            _harvestPathingRequest = null;

            Core.Log("[Eliminated]");
            _state.Fire(Trigger.EliminatedAttacker);
        }
Пример #14
0
 public static T GetEventHandler <T>(this FightingObjectView instance) where T : asa
 {
     return(_getEventHandler.MakeGenericMethod(new Type[] { typeof(T) })
            .Invoke(instance.FightingObject, new object[0]) as T);
 }
Пример #15
0
 public static string GetDisplayName(this FightingObjectView instance)
 {
     return(instance.FightingObject.ir());
 }
Пример #16
0
 public static FightingObject GetFightingObject(this FightingObjectView view) => view.FightingObject;
Пример #17
0
 public static long GetTargetId(this FightingObjectView view) => view.GetFightingObject().GetTargetId();
Пример #18
0
        public void Fight()
        {
            if (_localPlayerCharacterView.IsMounted)
            {
                _localPlayerCharacterView.MountOrDismount();
                return;
            }

            if (_combatCooldown > 0)
            {
                _combatCooldown -= UnityEngine.Time.deltaTime;
                return;
            }
            //Core.Log($" Game Time Now {GameTimeStamp.Now.ToString()}");
            //Core.Log($" Cast End Time  {castEnd.ToString()}");
            //Core.Log($" Cast2 End Time  {castEnd2.ToString()}");


            //Core.Log($" Cast start Time  {castStart1.ToString()}");
            //Core.Log($" Cast2 start Time  {castStart2.ToString()}");


            //Core.Log($"{castEnd2.CompareTo(GameTimeStamp.Now)}");



            //if (castEnd2.CompareTo(GameTimeStamp.Now) == 1)
            //{
            //    Core.Log("Channelling");
            //    return;
            //}

            _combatPlayer = _localPlayerCharacterView.GetLocalPlayerCharacter();
            _combatTarget = _localPlayerCharacterView.GetAttackTarget();
            _combatSpells = _combatPlayer.GetSpellSlotsIndexed().Ready(_localPlayerCharacterView).Ignore("ESCAPE_DUNGEON").Ignore("PLAYER_COUPDEGRACE").Ignore("AMBUSH");

            foreach (var cs in _combatSpells)
            {
                // Core.Log($"{cs.GetSpellDescriptor().TryGetName()}");
                //Core.Log($"{cs.GetSpellDescriptor().TryGetTarget()}");
                //Core.Log($"{cs.GetSpellDescriptor().TryGetCategory()}");
            }



            if (_combatTarget != null && !_combatTarget.IsDead() && SpellPriorityList.Any(s => TryToCastSpell(s.Item1, s.Item2, s.Item3)))
            {
                return;
            }

            if (_localPlayerCharacterView.IsUnderAttack(out FightingObjectView attacker))
            {
                _localPlayerCharacterView.SetSelectedObject(attacker);
                _localPlayerCharacterView.AttackSelectedObject();
                return;
            }

            // if (GameTimeStamp.Now < channelEnd)
            // Core.Log($"{GameTimeStamp.Now.ToString()}");
            if (_combatPlayer.GetIsCasting())
            {
                return;
            }

            if (_combatPlayer.GetHealth().GetValue() < (_combatPlayer.GetHealth().GetMaximum() * 0.8f))
            {
                var healSpell = _combatSpells.Target(SpellTarget.Self).Category(SpellCategory.Heal);

                if (healSpell.Any())
                {
                    _localPlayerCharacterView.CastOnSelf(healSpell.FirstOrDefault().Slot);
                }
                return;
            }

            _currentTarget         = null;
            _harvestPathingRequest = null;

            Core.Log("[Eliminated]");
            _state.Fire(Trigger.EliminatedAttacker);
        }