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); }
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); }
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; }
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; }
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); } } }
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); } }
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); }
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); } }
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); } }