public int DealDamage(Unit victim, int damage, CleanDamage cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, TrinitySpellInfo spellProto) { // Hook for OnDamage Event //sScriptMgr->OnDamage(this, victim, damage); if (damage < 1) { return(0); } int health = victim.Character.health.CurrentValue; if (health <= damage) { Debug.Log("DealDamage: Victim just died"); Kill(victim); } else { Debug.Log("DealDamage: Alive"); victim.Character.health.Decrease(damage); //victim.ModifyHealth(-damage); } return(damage); }
public static void OnSkillAtk(FrameEventInfo.RoleAtkFrameEventData roleAtkFrameEventData , string id , string damageId , string teamId , SkeletonRenderer skeletonRenderer , ITriggerDelegate triggerDelegate , Quaternion rotation , DamageEffectType baseDamageEffectType = DamageEffectType.Strike , AtkPropertyType baseAtkPropertyType = AtkPropertyType.physicalDamage , float baseAtk = 0 , float baseAtkMin = 0 , float baseAtkMax = 0 , float baseMagicAtkMin = 0 , float baseMagicAtkMax = 0 , float basePoiseCut = 0 , float baseMass = 0 , float criticalRate = 0 , float criticalAtk = 1 , Action <DamageController> onAddDamageController = null) { Vector3 vector = rotation * new Vector3(1, 0, 0); OnRoleAtk(roleAtkFrameEventData, id, damageId, teamId, skeletonRenderer, triggerDelegate, vector, baseDamageEffectType, baseAtkPropertyType, baseAtk, baseAtkMin, baseAtkMax, baseMagicAtkMin, baseMagicAtkMax, basePoiseCut, baseMass, criticalRate, criticalAtk, onAddDamageController); }
/// <summary> /// Creates a new effect that is a health drain. /// </summary> /// <param name="damage">Damage.</param> /// <param name="rounds">Rounds.</param> /// <param name="effectOT">Type of effect fire, poison.</param> public Effect(int damage, int rounds, DamageEffectType effectOT) { EffectValue = damage; EffectType = EffectTypes.HealthDrain; PeriodType = PeriodTypes.EffectOverTime; EffectOverTime = effectOT; Rounds = rounds; }
public DamageInfo(Unit attacker, Unit victim, uint damage, SpellInfo spellInfo, SpellSchoolMask schoolMask, DamageEffectType damageType, WeaponAttackType attackType) { m_attacker = attacker; m_victim = victim; m_damage = damage; m_spellInfo = spellInfo; m_schoolMask = schoolMask; m_damageType = damageType; m_attackType = attackType; }
public void playDamageEffectAnim(DamageEffectType damageEffectType, Vector3 position, float rotation = 0.0f) { switch (damageEffectType) { case DamageEffectType.Slash: { playEffectAnim("qiege2", position, rotation); } break; case DamageEffectType.Strike: { playEffectAnim("daji1", position, rotation); } break; } }
public void Add(byte angle, short damage, BodyPart bodyPart, DamageEffectType damageEffectFlag, float damageEffectValue) { if (Damage == null) { Damage = new Dictionary <byte, byte>(); } if (Damage.ContainsKey(angle)) { var oldDamage = Damage[angle]; Damage[angle] = (byte)(oldDamage + damage); } else { Damage[angle] = (byte)damage; } BodyPartFlag |= (byte)bodyPart; DamageEffectFlag = (int)damageEffectFlag; DamgeEffectValue = damageEffectValue; }
public DamageInfo(SpellNonMeleeDamage spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType) { m_attacker = spellNonMeleeDamage.attacker; m_victim = spellNonMeleeDamage.target; m_damage = spellNonMeleeDamage.damage; m_spellInfo = Global.SpellMgr.GetSpellInfo(spellNonMeleeDamage.SpellId); m_schoolMask = spellNonMeleeDamage.schoolMask; m_damageType = damageType; m_attackType = attackType; m_absorb = spellNonMeleeDamage.absorb; m_resist = spellNonMeleeDamage.resist; m_block = spellNonMeleeDamage.blocked; if (spellNonMeleeDamage.blocked != 0) { m_hitMask |= ProcFlagsHit.Block; } if (spellNonMeleeDamage.absorb != 0) { m_hitMask |= ProcFlagsHit.Absorb; } }
public virtual void DamageDealt(Unit victim, ref uint damage, DamageEffectType damageType) { }
public static DamageController SetDamageEffectType(this DamageController target, DamageEffectType damageEffectType) { target.damageData.damageEffectType = damageEffectType; return(target); }
public static void OnRoleAtk(FrameEventInfo.RoleAtkFrameEventData roleAtkFrameEventData , string id , string damageId , string teamId , SkeletonRenderer skeletonRenderer , ITriggerDelegate triggerDelegate , Vector3 rotation , DamageEffectType baseDamageEffectType = DamageEffectType.Strike , AtkPropertyType baseAtkPropertyType = AtkPropertyType.physicalDamage , float baseAtk = 0 , float baseAtkMin = 0 , float baseAtkMax = 0 , float baseMagicAtkMin = 0 , float baseMagicAtkMax = 0 , float basePoiseCut = 0 , float baseMass = 0 , float criticalRate = 0 , float criticalAtk = 1 , Action <DamageController> onAddDamageController = null) { if (roleAtkFrameEventData == null) { Debug.LogWarning(roleAtkFrameEventData == null); return; } if (roleAtkFrameEventData.type == FrameEventInfo.RoleAtkFrameEventData.Type.Default || roleAtkFrameEventData.type == FrameEventInfo.RoleAtkFrameEventData.Type.Add) { if (roleAtkFrameEventData.bindType == FrameEventInfo.RoleAtkFrameEventData.BindType.Default) { DamageController damageController = RoleAtk(triggerDelegate, id, damageId, teamId, roleAtkFrameEventData.parentType, roleAtkFrameEventData.primitiveType, roleAtkFrameEventData.pos, roleAtkFrameEventData.size, rotation, roleAtkFrameEventData.hitType, roleAtkFrameEventData.targetMoveBy, roleAtkFrameEventData.DamageDirectionType, roleAtkFrameEventData.SpecialEffectOnOff ? roleAtkFrameEventData.damageEffectType : baseDamageEffectType , roleAtkFrameEventData.atkPropertyTypeOnOff ? roleAtkFrameEventData.atkPropertyType : baseAtkPropertyType , roleAtkFrameEventData.atk , roleAtkFrameEventData.poiseCut , baseAtk , baseAtkMin , baseAtkMax , baseMagicAtkMin , baseMagicAtkMax , basePoiseCut , baseMass , criticalRate , criticalAtk ); if (roleAtkFrameEventData.type == FrameEventInfo.RoleAtkFrameEventData.Type.Add) { damageController.SetId(id); } else { damageController.SetId(id); damageController.SetDestroyTime(0.1f); } // 破盾 add by TangJian 2019/4/3 17:00 damageController.SetBreakShiled(roleAtkFrameEventData.breakShield); damageController.SetIgnoreShiled(roleAtkFrameEventData.ignoreShield); if (onAddDamageController != null) { onAddDamageController(damageController); } } else if (roleAtkFrameEventData.bindType == FrameEventInfo.RoleAtkFrameEventData.BindType.BindAnimSlot) { foreach (var slotName in roleAtkFrameEventData.slotList) { DamageController damageController = RoleAtk(triggerDelegate, id, damageId, teamId, roleAtkFrameEventData.parentType, roleAtkFrameEventData.primitiveType, roleAtkFrameEventData.pos, roleAtkFrameEventData.size, rotation, roleAtkFrameEventData.hitType, roleAtkFrameEventData.targetMoveBy, roleAtkFrameEventData.DamageDirectionType, roleAtkFrameEventData.SpecialEffectOnOff ? roleAtkFrameEventData.damageEffectType : baseDamageEffectType , roleAtkFrameEventData.atkPropertyTypeOnOff ? roleAtkFrameEventData.atkPropertyType : baseAtkPropertyType , roleAtkFrameEventData.atk , roleAtkFrameEventData.poiseCut , baseAtk , baseAtkMin , baseAtkMax , baseMagicAtkMin , baseMagicAtkMax , basePoiseCut , baseMass ); // 伤害绑定slot add by TangJian 2018/12/5 17:14 damageController.bindType = FrameEventInfo.RoleAtkFrameEventData.BindType.BindAnimSlot; damageController.bindSkeletonRenderer = skeletonRenderer; damageController.bindSlotName = slotName; if (roleAtkFrameEventData.type == FrameEventInfo.RoleAtkFrameEventData.Type.Add) { damageController.SetId(id); } else { damageController.SetId(id); damageController.SetDestroyTime(0.1f); } // 破盾 add by TangJian 2019/4/3 17:00 damageController.SetBreakShiled(roleAtkFrameEventData.breakShield); damageController.SetIgnoreShiled(roleAtkFrameEventData.ignoreShield); if (onAddDamageController != null) { onAddDamageController(damageController); } } } } else if (roleAtkFrameEventData.type == FrameEventInfo.RoleAtkFrameEventData.Type.Remove) { DamageManager.Instance.Remove(id); } }
public static DamageController Atk(ITriggerDelegate triggerDelegate, string id , string damageId , string teamId , FrameEventInfo.ParentType parentType , PrimitiveType primitiveType , Vector3 pos , Vector3 size , Vector3 orientation , HitType hitType , Vector3 hitMoveBy , DamageDirectionType damageDirectionType , DamageEffectType damageEffectType , AtkPropertyType atkPropertyType , float atk , float poiseCut , float Mass , float criticalRate = 0 , float criticalAtk = 1) { DamageController damageController = DamageManager.Instance.CreateDamage( pos.RotateFrontTo(orientation) , triggerDelegate.transform, parentType , size , primitiveType) // 设置DamageControllerId .SetId(id) //设置damageid .SetDamageId(damageId) // 设置队伍 add by TangJian 2018/10/9 16:17 .SetTeamId(teamId) // 设置拥有者 add by TangJian 2018/10/9 16:43 .SetOwner(triggerDelegate.gameObject) // 设置触发器代理 add by TangJian 2018/10/9 16:55 .SetTriggerDelegate(triggerDelegate) // 设置攻击类型 add by TangJian 2018/10/9 17:29 .SetHitType(hitType) // 设置攻击朝向 add by TangJian 2018/10/9 17:30 .SetDirection(orientation) // 设置击退距离 add by TangJian 2018/10/9 17:30 .SetMoveBy(hitMoveBy.RotateFrontTo(orientation)); damageController.setDamageDirectionType(damageDirectionType); // 伤害效果类型 add by TangJian 2017/08/16 15:33:01 damageController.SetDamageEffectType(damageEffectType); // 攻击属性类型 damageController.SetAtkPropertyType(atkPropertyType); // 削韧 add by TangJian 2018/12/12 12:32 damageController.SetPoiseCut(poiseCut); //攻击质量 damageController.SetDamageMass(Mass); // 暴击 add by TangJian 2019/3/25 15:20 if (Tools.RandomWithWeight(criticalRate.Range(0, 1), 1 - criticalRate.Range(0, 1)) == 0) { damageController.SetCritical(true); } // 设置攻击力 add by TangJian 2018/12/18 20:41 switch (atkPropertyType) { case AtkPropertyType.physicalDamage: { if (damageController.IsCritical()) { damageController.SetAtk(atk * criticalAtk); } else { damageController.SetAtk(atk); } } break; case AtkPropertyType.magicalDamage: { damageController.SetMagical(atk); } break; case AtkPropertyType.mixDamage: { damageController.SetMagical(atk); } break; default: { damageController.SetAtk(atk); } break; } return(damageController); }
// Token: 0x0600202F RID: 8239 RVA: 0x00099BFC File Offset: 0x00097DFC public static void Explode(Vector3 position, int projectileId, float damage, Vector3 dir, float radius, int force, byte slot, int weaponId, UberstrikeItemClass weaponClass, DamageEffectType damageEffectFlag = DamageEffectType.None, float damageEffectValue = 0f) { Collider[] array = Physics.OverlapSphere(position, radius, UberstrikeLayerMasks.ExplosionMask); foreach (Collider collider in array) { BaseGameProp component = collider.transform.GetComponent <BaseGameProp>(); if (component != null && component.RecieveProjectileDamage) { ProjectileDetonator.DoExplosionDamage(component, position, collider.bounds.center, projectileId, damage, dir, radius, force, slot, weaponId, weaponClass, damageEffectFlag, damageEffectValue); } } if (Vector3.Distance(position, GameState.Current.Player.transform.position) < radius) { ProjectileDetonator.DoExplosionDamage(GameState.Current.Player.Character, position, GameState.Current.Player.transform.position, projectileId, damage, dir, radius, force, slot, weaponId, weaponClass, damageEffectFlag, damageEffectValue); } }
// Token: 0x06002019 RID: 8217 RVA: 0x00099B4C File Offset: 0x00097D4C public ProjectileDetonator(float radius, float damage, int force, Vector3 direction, byte slot, int projectileId, int weaponId, UberstrikeItemClass weaponClass, DamageEffectType damageEffectFlag, float damageEffectValue) { this.Radius = radius; this.Damage = damage; this.Force = force; this.Direction = direction; this.Slot = slot; this.ProjectileID = projectileId; this.WeaponID = weaponId; this.WeaponClass = weaponClass; this.DamageEffectFlag = damageEffectFlag; this.DamageEffectValue = damageEffectValue; }
// Token: 0x06002030 RID: 8240 RVA: 0x00099CDC File Offset: 0x00097EDC private static void DoExplosionDamage(IShootable shootable, Vector3 explosionPoint, Vector3 hitPoint, int projectileId, float damage, Vector3 dir, float radius, int force, byte slot, int weaponId, UberstrikeItemClass weaponClass, DamageEffectType damageEffectFlag, float damageEffectValue) { RaycastHit raycastHit; if (!Physics.Linecast(explosionPoint, hitPoint, out raycastHit, UberstrikeLayerMasks.ProtectionMask) || raycastHit.transform == shootable.Transform || raycastHit.transform.GetComponent <BaseGameProp>() != null) { float num = (radius <= 1f) ? 0f : Mathf.Floor(Mathf.Clamp((hitPoint - explosionPoint).magnitude, 0f, radius)); Vector3 vector = (hitPoint - explosionPoint).normalized; if (num < 0.01f) { vector = dir.normalized; } else if (Vector3.Angle(vector, Vector3.up) < 30f) { vector = Vector3.up; num = 0f; } short num2 = Convert.ToInt16(damage * (radius - num) / radius); Vector3 vector2 = vector; if (shootable.IsLocal) { vector2 *= (float)force; num2 /= 2; } shootable.ApplyDamage(new DamageInfo(num2) { Force = vector2, UpwardsForceMultiplier = 5f, Hitpoint = hitPoint, ProjectileID = projectileId, SlotId = slot, WeaponID = weaponId, WeaponClass = weaponClass, DamageEffectFlag = damageEffectFlag, DamageEffectValue = damageEffectValue, Distance = (byte)Mathf.Clamp(Mathf.CeilToInt(num), 0, 255) }); } }
public override void DamageDealt(Unit victim, ref uint damage, DamageEffectType damageType) { GetScript().ProcessEventsFor(SmartEvents.DamagedTarget, victim, damage); }
public static DamageController RoleAtk(ITriggerDelegate triggerDelegate, string id , string damageId , string teamId , FrameEventInfo.ParentType parentType , PrimitiveType primitiveType , Vector3 pos , Vector3 size , Vector3 orientation , HitType hitType , Vector3 hitMoveBy , DamageDirectionType damageDirectionType , DamageEffectType damageEffectType , AtkPropertyType atkPropertyType , float atkScale , float poiseCutScale // 基础值 add by TangJian 2018/12/18 21:03 // , DamageEffectType baseDamageEffectType = DamageEffectType.Strike // , AtkPropertyType baseAtkPropertyType = AtkPropertyType.physicalDamage , float baseAtk = 0 , float baseAtkMin = 0 , float baseAtkMax = 0 , float baseMagicAtkMin = 0 , float baseMagicAtkMax = 0 , float basePoiseCut = 0 , float baseMass = 0 , float criticalRate = 0 , float criticalAtk = 1) { // 根据公式计算攻击力 add by TangJian 2018/12/18 21:27 float atk = 0; switch (atkPropertyType) { case AtkPropertyType.physicalDamage: { atk = (baseAtk + UnityEngine.Random.Range(baseAtkMin, baseAtkMax)) * atkScale; } break; case AtkPropertyType.magicalDamage: { atk = (baseAtk + UnityEngine.Random.Range(baseAtkMin, baseAtkMax)) * atkScale; } break; case AtkPropertyType.mixDamage: { float atk_ = UnityEngine.Random.Range(baseAtkMin, baseAtkMax); float magical = UnityEngine.Random.Range(baseMagicAtkMin, baseMagicAtkMax); atk_ = (baseAtk + atk) * atk_; magical = (baseAtk + magical) * atk_; atk = magical; } break; default: { atk = (baseAtk + UnityEngine.Random.Range(baseAtkMin, baseAtkMax)) * atkScale; } break; } return(Atk(triggerDelegate, id, damageId, teamId, parentType, primitiveType, pos, size, orientation, hitType, hitMoveBy, damageDirectionType, damageEffectType, atkPropertyType, atk, basePoiseCut * poiseCutScale, baseMass, criticalRate, criticalAtk)); }
protected override void Awake() { base.Awake (); // _hitbox = _weapon.HitBox; primaryDamageType = DamageEffectType.Standard; damageModifier = 1f; impactModifier = 1f; }