public void MoveDamageToSubscriber(InputDamage inputDamage) { float movedDamage = inputDamage.totalDamage; if (nebulaObject.IsPlayer()) { var meRaceable = nebulaObject.Raceable(); foreach (var subscriber in mSubscribers) { if (subscriber.Value) { if (subscriber.Value.IsPlayer()) { if (subscriber.Value.Raceable().race == meRaceable.race) { if (subscriber.Value.Skills().MoveDamageFromAlly(inputDamage.totalDamage, ref movedDamage)) { inputDamage.ClearAllDamages(); inputDamage.SetBaseDamage(movedDamage); } } } } } } }
//public void SetAbsorbDamage(float absorb) { // mAbsorbedDamage = absorb; //} protected virtual void AbsorbDamage(InputDamage inputDamage) { float absorbed = 0; float ret = inputDamage.totalDamage; /* * if(mAbsorbedDamage > 0) { * mAbsorbedDamage -= inputDamage.totalDamage; * if(mAbsorbedDamage >= 0f ) { * absorbed = inputDamage.totalDamage; * ret = 0f; * * } else { * float result = Mathf.Abs(mAbsorbedDamage); * mAbsorbedDamage = NO_ABSORB; * absorbed = Mathf.Abs(inputDamage.totalDamage - result); * ret = result; * * } * }*/ if (mBonuses) { if (ret > 0) { float absorbCnt = mBonuses.absorbDamageCntBonus; if (Mathf.NotEqual(absorbCnt, 0.0f)) { float remainAbsorb = absorbCnt - ret; ret -= absorbCnt; mBonuses.SetAbsrobBuff(remainAbsorb, nebulaObject); } } if (ret > 0) { float absorbPC = mBonuses.absrodDamagePcBonus; float dmgToAbsorbe = ret * absorbPC; ret -= dmgToAbsorbe; float restoreHpPc = mBonuses.convertAbsorbedDamageToHpPcBonus; float hp = (absorbed + dmgToAbsorbe) * restoreHpPc; Heal(new InputHeal(hp)); } } if (ret < 0) { ret = 0; } inputDamage.ClearAllDamages(); inputDamage.SetBaseDamage(ret); //return inputDamage; }
protected override void ModifyDamage(InputDamage damage) { if (damage.ignoreFixedDamage) { //we ignore damage } else { damage.ClearAllDamages(); damage.SetBaseDamage(m_FixedDamage); } }