// Helper static bool CanDamage(SkEntity e1, SkEntity e2) { Pathea.Projectile.SkProjectile p = e1 as Pathea.Projectile.SkProjectile; if (p != null) { SkEntity caster = p.GetSkEntityCaster(); if (caster == null) { return(false); } else { e1 = p.GetSkEntityCaster(); } } int p1 = System.Convert.ToInt32(e1.GetAttribute((int)Pathea.AttribType.DefaultPlayerID)); int p2 = System.Convert.ToInt32(e2.GetAttribute((int)Pathea.AttribType.DefaultPlayerID)); int d1 = System.Convert.ToInt32(e1.GetAttribute((int)Pathea.AttribType.DamageID)); int d2 = System.Convert.ToInt32(e2.GetAttribute((int)Pathea.AttribType.DamageID)); return(PETools.PEUtil.CanDamageReputation(p1, p2) && ForceSetting.Instance.Conflict(p1, p2) && Pathea.DamageData.GetValue(d1, d2) != 0); }
public void TryGetHurt(float dmg, float exp = 0) { SkInst skInst = SkRuntimeInfo.Current as SkInst; if (null != skInst) { if (skInst._colInfo != null && skInst._colInfo.damageScale > PETools.PEMath.Epsilon) { dmg *= skInst._colInfo.damageScale; } } SkEntity caster = SkRuntimeInfo.Current.Caster; SkEntity target = SkRuntimeInfo.Current.Target; if (CanDamage(caster, target)) { if (caster is Pathea.Projectile.SkProjectile) { Pathea.Projectile.SkProjectileDamageScale damageScale = caster.GetComponent <Pathea.Projectile.SkProjectileDamageScale>(); if (null != damageScale) { dmg *= damageScale.damageScale; } } float shield = _parent.sums[(int)Pathea.AttribType.Shield]; if (shield > 0 && caster is Pathea.Projectile.SkProjectile) { if (shield * ShieldToHP < dmg) { _parent.sums[(int)Pathea.AttribType.Shield] = 0; _parent.raws[(int)Pathea.AttribType.Hp] -= dmg - shield * ShieldToHP; _parent.sums[(int)Pathea.AttribType.Hp] -= dmg - shield * ShieldToHP; _parent.modflags[(int)Pathea.AttribType.Hp] = false; } else { _parent.sums[(int)Pathea.AttribType.Shield] -= dmg / ShieldToHP; } } else { _parent.raws[(int)Pathea.AttribType.Hp] -= dmg; _parent.sums[(int)Pathea.AttribType.Hp] -= dmg; _parent.modflags[(int)Pathea.AttribType.Hp] = false; } float curTime = Time.time; if (caster != null) { caster._lastestTimeOfHurtingSb = curTime; } if (target != null) { target._lastestTimeOfGettingHurt = curTime; } SkInst inst = SkRuntimeInfo.Current as SkInst; if (inst != null) { inst.Caster.OnHurtSb(inst, dmg); inst.Target.OnGetHurt(inst, dmg); } } if (exp > PETools.PEMath.Epsilon) { SkEntity parentCaster = caster; if (caster is Pathea.Projectile.SkProjectile) { parentCaster = (parentCaster as Pathea.Projectile.SkProjectile).parentSkEntity; } parentCaster.SetAttribute((int)Pathea.AttribType.Exp, parentCaster.GetAttribute((int)Pathea.AttribType.Exp) + exp, false); } }