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)); }
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); }
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); }
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)); }
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)); }
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); }
public static FightingObjectView GetAttackTarget(this FightingObjectView view) => view.GetFightingObject().GetAttackTarget();
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 }); }
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); }
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); }
public static string GetDisplayName(this FightingObjectView instance) { return(instance.FightingObject.ir()); }
public static FightingObject GetFightingObject(this FightingObjectView view) => view.FightingObject;
public static long GetTargetId(this FightingObjectView view) => view.GetFightingObject().GetTargetId();
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); }