Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 /// <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;
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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;
            }
        }
Ejemplo n.º 8
0
 public virtual void DamageDealt(Unit victim, ref uint damage, DamageEffectType damageType)
 {
 }
Ejemplo n.º 9
0
 public static DamageController SetDamageEffectType(this DamageController target, DamageEffectType damageEffectType)
 {
     target.damageData.damageEffectType = damageEffectType;
     return(target);
 }
Ejemplo n.º 10
0
        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);
            }
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
 // 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);
     }
 }
Ejemplo n.º 13
0
 // 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;
 }
Ejemplo n.º 14
0
    // 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)
            });
        }
    }
Ejemplo n.º 15
0
 public override void DamageDealt(Unit victim, ref uint damage, DamageEffectType damageType)
 {
     GetScript().ProcessEventsFor(SmartEvents.DamagedTarget, victim, damage);
 }
Ejemplo n.º 16
0
        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));
        }
Ejemplo n.º 17
0
 protected override void Awake()
 {
     base.Awake ();
     //		_hitbox = _weapon.HitBox;
     primaryDamageType = DamageEffectType.Standard;
     damageModifier = 1f;
     impactModifier = 1f;
 }