Exemple #1
0
        public static bool Prefix(Weapon __instance, RaycastHit _hit, Vector3 _dir)
        {
            Hitbox hitbox            = _hit.collider.GetComponent <Hitbox>();
            var    owner             = __instance.OwnerCharacter;
            var    target            = hitbox.OwnerChar;
            var    m_alreadyHitChars = At.GetValue(typeof(Weapon), __instance, "m_alreadyHitChars") as List <Character>;

            if (!m_alreadyHitChars.Contains(target) && HookUtil.IsElligable(__instance, owner, target))
            {
                bool  blocked = false;
                float num     = Vector3.Angle(hitbox.OwnerChar.transform.forward, owner.transform.position - hitbox.OwnerChar.transform.position);

                if (!__instance.Unblockable && hitbox.OwnerChar.Blocking && num < (float)(hitbox.OwnerChar.ShieldEquipped ? Weapon.SHIELD_BLOCK_ANGLE : Weapon.BLOCK_ANGLE))
                {
                    blocked = true;
                }
                if (!blocked)
                {
                    var getID = At.GetValue(typeof(Weapon), __instance, "m_attackID");
                    if (getID is int attackID && attackID >= 0)
                    {
                        DamageList damages = __instance.GetDamage(attackID).Clone();

                        target.Stats.GetMitigatedDamage(null, ref damages);

                        DamageLabels.AddDamageLabel(damages, _hit.point, target);
                    }
                }
            }

            return(true);
        }
Exemple #2
0
        public static bool Prefix(Weapon __instance, Character _hitCharacter, Vector3 _hitPos, Vector3 _dir, bool _blocked)
        {
            Character selfChar = At.GetValue(typeof(Item), __instance as Item, "m_ownerCharacter") as Character;

            if (At.GetValue(typeof(Weapon), __instance as Weapon, "m_alreadyHitChars") is List <Character> alreadyhit)
            {
                bool eligible = _hitCharacter && (_hitCharacter != selfChar) && (__instance.CanHitEveryoneButOwner || selfChar.TargetingSystem.IsTargetable(_hitCharacter));

                if (eligible && !alreadyhit.Contains((Character)_hitCharacter))
                {
                    if (!_blocked)
                    {
                        DamageList damages = __instance.GetDamage(0);
                        _hitCharacter.Stats.GetMitigatedDamage(null, ref damages);

                        DamageLabels.AddDamageLabel(damages, _hitPos, _hitCharacter);
                    }
                    else
                    {
                        // Attack was blocked.
                    }
                }
            }

            return(true);
        }
Exemple #3
0
        public static bool Prefix(Weapon __instance, Character _hitCharacter, Vector3 _hitPos, Vector3 _dir, bool _blocked)
        {
            var selfChar   = At.GetField(__instance, "m_ownerCharacter") as Character;
            var alreadyhit = At.GetField(__instance, "m_alreadyHitChars") as List <Character>;

            bool eligible = _hitCharacter && (_hitCharacter != selfChar) && (__instance.CanHitEveryoneButOwner || selfChar.TargetingSystem.IsTargetable(_hitCharacter));

            if (eligible && !alreadyhit.Contains(_hitCharacter))
            {
                if (!_blocked)
                {
                    DamageList damages = __instance.GetDamage(0);
                    //_hitCharacter.Stats.GetMitigatedDamage(null, ref damages, false);
                    At.Invoke(_hitCharacter, "ProcessDamageReduction", new object[] { __instance, damages, false });

                    DamageLabels.AddDamageLabel(damages, _hitPos, _hitCharacter);
                }
                else
                {
                    // Attack was blocked.
                }
            }

            return(true);
        }
        internal void Awake()
        {
            Instance = this;

            foreach (Transform child in this.transform)
            {
                LabelHolders.Add(child.gameObject);
            }

            SceneManager.sceneLoaded += OnSceneChange;
        }
Exemple #5
0
        public static void Postfix(PunctualDamage __instance, Character _targetCharacter)
        {
            if (_targetCharacter.Alive)
            {
                var damageList = At.GetField(__instance, "m_tempList") as DamageList;

                DamageList damages = damageList.Clone();
                _targetCharacter.Stats.GetMitigatedDamage(null, ref damages, false);

                DamageLabels.AddDamageLabel(damages, _targetCharacter.CenterPosition, _targetCharacter);
            }
        }
        internal void Awake()
        {
            Instance = this;

            for (int i = 0; i < transform.childCount; i++)
            {
                var child = transform.GetChild(i);
                LabelHolders.Add(child.gameObject);
            }

            SceneManager.sceneLoaded += OnSceneChange;
        }
Exemple #7
0
        public static void Postfix(PunctualDamage __instance, Character _targetCharacter)
        {
            if (_targetCharacter.Alive)
            {
                if (At.GetValue(typeof(PunctualDamage), __instance, "m_tempList") is DamageList damagelist)
                {
                    DamageList damages = damagelist.Clone();
                    _targetCharacter.Stats.GetMitigatedDamage(null, ref damages);

                    DamageLabels.AddDamageLabel(damages, _targetCharacter.CenterPosition, _targetCharacter);
                }
            }
        }
Exemple #8
0
        public static void Postfix(PunctualDamage __instance, Character _targetCharacter)
        {
            if (_targetCharacter.Alive)
            {
                DamageList damages = (At.GetField(__instance, "m_tempList") as DamageList).Clone();

                Weapon weapon = At.GetField(__instance, "m_weapon") as Weapon;

                At.Invoke(_targetCharacter, "ProcessDamageReduction", new object[] { weapon, damages, false });

                // _targetCharacter.Stats.GetMitigatedDamage(null, ref damages, false);

                DamageLabels.AddDamageLabel(damages, _targetCharacter.CenterPosition, _targetCharacter);
            }
        }
Exemple #9
0
        public static bool Prefix(Weapon __instance, RaycastHit _hit, Vector3 _dir)
        {
            Hitbox hitbox = _hit.collider?.GetComponent <Hitbox>();

            if (!hitbox)
            {
                return(true);
            }

            var owner  = __instance.OwnerCharacter;
            var target = hitbox.OwnerChar;

            if (!target || !owner)
            {
                return(true);
            }

            var m_alreadyHitChars = (List <Character>)At.GetField(__instance, "m_alreadyHitChars");

            if (!m_alreadyHitChars.Contains(target) && HookUtil.IsElligable(__instance, owner, target))
            {
                bool  blocked = false;
                float num     = Vector3.Angle(hitbox.OwnerChar.transform.forward, owner.transform.position - hitbox.OwnerChar.transform.position);

                if (!__instance.Unblockable && hitbox.OwnerChar.Blocking && num < (float)(hitbox.OwnerChar.ShieldEquipped ? Weapon.SHIELD_BLOCK_ANGLE : Weapon.BLOCK_ANGLE))
                {
                    blocked = true;
                }
                if (!blocked)
                {
                    var attackID = (int)At.GetField(__instance, "m_attackID");
                    if (attackID >= 0)
                    {
                        DamageList damages = __instance.GetDamage(attackID).Clone();

                        //target.Stats.GetMitigatedDamage(null, ref damages, false);
                        At.Invoke(target, "ProcessDamageReduction", new object[] { __instance, damages, false });

                        DamageLabels.AddDamageLabel(damages, _hit.point, target);
                    }
                }
            }

            return(true);
        }
Exemple #10
0
        public static void Postfix(PunctualDamage __instance, Character _targetCharacter)
        {
            if (_targetCharacter.Alive)
            {
                var damageList = At.GetField(__instance, "m_tempList") as DamageList;

                bool ignoreBarrier = false;
                if (__instance.ParentSynchronizer is StatusEffect status)
                {
                    ignoreBarrier = status.IgnoreBarrier;
                }

                DamageList damages = damageList.Clone();
                _targetCharacter.Stats.GetMitigatedDamage(null, ref damages, ignoreBarrier);

                DamageLabels.AddDamageLabel(damages, _targetCharacter.CenterPosition, _targetCharacter);
            }
        }
Exemple #11
0
        public static void Postfix(PunctualDamage __instance, Character _targetCharacter)
        {
            if (_targetCharacter.Alive)
            {
                bool ignoreBarrier = false;
                if (__instance.ParentSynchronizer is StatusEffect status)
                {
                    ignoreBarrier = status.IgnoreBarrier;
                }

                DamageList damages = (At.GetField(__instance, "m_tempList") as DamageList).Clone();

                At.Invoke(_targetCharacter, "ProcessDamageReduction", new object[] { __instance.ParentSynchronizer, damages, ignoreBarrier });

                // _targetCharacter.Stats.GetMitigatedDamage(null, ref damages, ignoreBarrier);

                DamageLabels.AddDamageLabel(damages, _targetCharacter.CenterPosition, _targetCharacter);
            }
        }