Esempio n. 1
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        //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;
        }
Esempio n. 3
0
 protected override void ModifyDamage(InputDamage damage)
 {
     if (damage.ignoreFixedDamage)
     {
         //we ignore damage
     }
     else
     {
         damage.ClearAllDamages();
         damage.SetBaseDamage(m_FixedDamage);
     }
 }