public void ModifyDamage(DamagableObject target, InputDamage inputDamage) { if (nebulaObject.Type == (byte)ItemType.Avatar) { if (HasSkill(m43AID)) { var skill = GetSkillById(m43AID); if (skill.isOn) { var m43a = skill.GetExecutor() as Skill_0000043A; if (target.health < target.maximumHealth * m43a.hpPc) { if (false == Mathf.Approximately(m43a.dmgMult, 0f)) { //log.InfoFormat("modify damage on {0}% with skill 43A", m43a.dmgMult); inputDamage.Mult(m43a.dmgMult); //return inputDamage; } } } } } //return inputDamage; }
public virtual InputDamage ReceiveDamage(InputDamage inputDamage) { nebulaObject.SetInvisibility(false); if (mBonuses) { inputDamage.Mult((1.0f + mBonuses.inputDamagePcBonus)); //inputDamage.SetDamage(inputDamage.damage * (1.0f + mBonuses.inputDamagePcBonus)); ApplyReflection(inputDamage); } if (inputDamage.hasDamager) { var damagerBons = inputDamage.source.Bonuses(); if (damagerBons) { float vampPc = damagerBons.vampirismPcBonus; float hp = inputDamage.totalDamage * vampPc; var dDamagable = inputDamage.source.Damagable(); if (dDamagable) { dDamagable.Heal(new InputHeal(hp)); } } } return(inputDamage); }
private void ApplyDamage(ref WeaponHitInfo hit, DamagableObject target, float damageMult, bool useDamageMultSelfAsDamage, InputDamage inputDamage) { inputDamage.Mult(damageMult * Rand.NormalNumber(0.8f, 1.2f)); if (useDamageMultSelfAsDamage) { WeaponDamage dmg = new WeaponDamage(inputDamage.weaponBaseType, 0, 0, 0); dmg.SetBaseTypeDamage(damageMult); inputDamage.CopyValues(dmg); } if (cachedSkills) { cachedSkills.ModifyDamage(target, inputDamage); } int level = 1; byte workshop = (byte)Workshop.Arlen; byte race = (byte)Race.None; level = cachedCharacter.level; workshop = cachedCharacter.workshop; RaceableObject raceable = nebulaObject.Raceable(); if (raceable) { race = raceable.race; } var copy = inputDamage.CreateCopy(); if (false == ReflectDamage(target, ref hit, inputDamage)) { target.ReceiveDamage(inputDamage); StartDamageDron(target, inputDamage.CreateCopy(), workshop, level, race); } hit.SetRemainTargetHp(target.health); if (m_Achievments != null) { m_Achievments.OnMakeDamage(copy); } }
//private float ApplyResistPassiveBonus(float inputResist) { // if(nebulaObject.IsPlayer()) { // if(mPassiveBonuses != null && mPassiveBonuses.resistTier > 0 ) { // return Mathf.Clamp01(inputResist + mPassiveBonuses.resistBonus); // } // } // return inputResist; //} public override InputDamage ReceiveDamage(InputDamage inputDamage) { //firs call base behaviour inputDamage = base.ReceiveDamage(inputDamage); if (!nebulaObject) { inputDamage.ClearAllDamages(); //inputDamage.SetDamage(0.0f); return(inputDamage); } nebulaObject.SendMessage(ComponentMessages.InCombat); if (ignoreDamageAtStart || god) { //if (GetComponent<MmoActor>()) { // log.Info("player damage ignored"); //} //return 0f; inputDamage.ClearAllDamages(); //inputDamage.SetDamage(0.0f); return(inputDamage); } //if(god) { // //log.Info("ShipBasedDamagableObject is GOD, return 0 damage"); // return 0f; //} if (mShip == null) { mShip = GetComponent <BaseShip>(); } float resist = 0f; float acidResist = 0.0f; float laserResist = 0.0f; float rocketResist = 0.0f; if (mShip != null) { resist = mShip.commonResist; acidResist = mShip.acidResist; laserResist = mShip.laserResist; rocketResist = mShip.rocketResist; } //resist = ApplyResistPassiveBonus(resist); inputDamage.Mult(1.0f - Mathf.Clamp01(resist)); inputDamage.Mult(WeaponBaseType.Acid, 1.0f - Mathf.Clamp01(acidResist)); inputDamage.Mult(WeaponBaseType.Laser, 1.0f - Mathf.Clamp01(laserResist)); inputDamage.Mult(WeaponBaseType.Rocket, 1.0f - Mathf.Clamp01(rocketResist)); //inputDamage.SetDamage(inputDamage.damage * (1.0f - Mathf.Clamp01(resist))); AbsorbDamage(inputDamage); //inputDamage.CopyValues(AbsorbDamage(inputDamage.damage)); if (!god) { if (mBonuses) { if (mBonuses.isImmuneToDamage) { inputDamage.ClearAllDamages(); //inputDamage.SetDamage(0f); } } if (nebulaObject.IsPlayer()) { mTarget.MoveDamageToSubscriber(inputDamage); } SubHealth(inputDamage.totalDamage); } if (inputDamage.hasDamager) { AddDamager( inputDamage.sourceId, inputDamage.sourceType, inputDamage.totalDamage, (byte)inputDamage.workshop, inputDamage.level, (byte)inputDamage.race, inputDamage.source); } //if(mEventedObject != null && inputDamage.hasDamager) { // mEventedObject.ReceiveDamage(new DamageInfo(inputDamage.sourceId, inputDamage.sourceType, inputDamage.damage, (byte)inputDamage.workshop, inputDamage.level, (byte)inputDamage.race)); //} if (health <= 0f) { if (NotRespawnBySkill()) { SetWasKilled(true); } else { if (nebulaObject.Type == (byte)ItemType.Avatar) { if (m_Message) { m_Message.ResurrectBySkillEffect(); } } } } return(inputDamage); }