GameFramework.EntityController.ImpactDamage C# (CSharp) Method

ImpactDamage() private method

private ImpactDamage ( int srcObjId, int targetId, int impactId, int seq ) : void
srcObjId int
targetId int
impactId int
seq int
return void
        internal void ImpactDamage(int srcObjId, int targetId, int impactId, int seq)
        {
            EntityInfo targetObj = m_Scene.EntityManager.GetEntityInfo(targetId);
            EntityInfo srcObj = m_Scene.EntityManager.GetEntityInfo(srcObjId);
            if (null != targetObj && !targetObj.IsDead()) {
                ImpactInfo impactInfo = targetObj.GetSkillStateInfo().GetImpactInfoBySeq(seq);
                if (null != impactInfo && impactId == impactInfo.ImpactId) {
                    TableConfig.Skill cfg = impactInfo.ConfigData;
                    int targetType = impactInfo.TargetType;
                    float damage = impactInfo.DamageData.Damage;
                    int addShield = impactInfo.DamageData.AddShield;
                    int hpRecover = impactInfo.DamageData.HpRecover;

                    if (hpRecover != 0) {
                        targetObj.SetHp(Operate_Type.OT_Relative, (int)impactInfo.DamageData.HpRecover);
                        targetObj.SetAttackerInfo(srcObjId, false, true, false, -impactInfo.DamageData.HpRecover, 0);
                    }
                    if (addShield != 0) {
                        targetObj.SetShield(Operate_Type.OT_Relative, impactInfo.DamageData.AddShield);
                    }
                    if ((targetType == (int)SkillTargetType.Enemy || targetType == (int)SkillTargetType.RandEnemy) && damage != 0) {
                        if (targetObj.EntityType == (int)EntityTypeEnum.Tower) {
                            if (null != srcObj && srcObj.NormalSkillId != impactInfo.SkillId) {
                                //技能打塔不产生伤害
                                return;
                            }
                        }
                        bool isKiller = false;
                        if (targetObj.Shield >= damage) {
                            targetObj.SetShield(Operate_Type.OT_Relative, -(int)damage);
                        } else if (targetObj.Shield > 0) {
                            int leftDamage = (int)damage - targetObj.Shield;
                            targetObj.SetShield(Operate_Type.OT_Absolute, 0);
                            targetObj.SetHp(Operate_Type.OT_Relative, -(int)leftDamage);
                            if (targetObj.Hp <= 0) {
                                isKiller = true;
                            }
                        } else {
                            targetObj.SetHp(Operate_Type.OT_Relative, -(int)damage);
                            if (targetObj.Hp <= 0) {
                                isKiller = true;
                            }
                        }
                        if (isKiller) {
                            targetObj.GetCombatStatisticInfo().AddDeadCount(1);
                            if (null != srcObj) {
                                EntityInfo killer = srcObj;
                                if (killer.SummonerId > 0) {
                                    killer = m_Scene.EntityManager.GetEntityInfo(killer.SummonerId);
                                }
                                if (targetObj.EntityType == (int)EntityTypeEnum.Tower) {
                                    killer.GetCombatStatisticInfo().AddKillTowerCount(1);
                                } else if (targetObj.EntityType == (int)EntityTypeEnum.Hero) {
                                    killer.GetCombatStatisticInfo().AddKillHeroCount(1);
                                    killer.GetCombatStatisticInfo().AddMultiKillCount(1);
                                } else {
                                    killer.GetCombatStatisticInfo().AddKillNpcCount(1);
                                }
                            }
                        }
                        targetObj.SetAttackerInfo(srcObjId, isKiller, true, false, (int)damage, 0);
                    }
                }
            }
        }

Same methods

EntityController::ImpactDamage ( int srcObjId, int targetId, int impactId, int seq, bool isFinal ) : void

Usage Example

Example #1
0
 static public int ImpactDamage(IntPtr l)
 {
     try {
         GameFramework.EntityController self = (GameFramework.EntityController)checkSelf(l);
         System.Int32 a1;
         checkType(l, 2, out a1);
         System.Int32 a2;
         checkType(l, 3, out a2);
         System.Int32 a3;
         checkType(l, 4, out a3);
         System.Int32 a4;
         checkType(l, 5, out a4);
         System.Boolean a5;
         checkType(l, 6, out a5);
         self.ImpactDamage(a1, a2, a3, a4, a5);
         pushValue(l, true);
         return(1);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }