Example #1
0
	public BuffExample () {
		name = "Example buff";
		buffType = BuffType.Timed;
		timeOfBuff = 5.0f;
		timeOfBuffRemaining = 5.0f;
		statModifiers = new StatModifier[2];
		statModifiers[0] = new StatModifier(Stat.AttackSpeed, 5.0f);
		statModifiers[1] = new StatModifier(Stat.MovementSpeed, 5.0f);
	}
 public override void Start()
 {
     _statModifier = new StatModifier<LilithStats>();
     _statModifier.Target = AppliesToMax ? StatModifierTarget.Max : StatModifierTarget.Current;
     _statModifier.Value = Adjustment;
     _statModifier.Type = IsMultiplicative ? StatModifierType.Multiplicative : StatModifierType.Additive;
     Stat.AddModifier(_statModifier);
     TimedTaskManager.Instance.Add(Duration * 1000, () =>
     {
         Finish();
     });
     base.Start();
 }
Example #3
0
        public void AddModifierToStat()
        {
            string name = "sdsd";
            float value = 10.0f;
            Stat stat = new Stat(name, value);

            float modValue = 5.0f;
            string modName = "fsdhnuh";
            StatModifier mod = new StatModifier(modName, modValue);

            stat.AddModifier(mod);

            Assert.IsTrue(stat.Name == name);
            Assert.IsTrue(stat.BaseValue == value);
            Assert.IsTrue(stat.TotalValue == modValue + value);
        }
 public void AddStatModifier(BaseStatModifierType _statModifierType, float _timeExpired, float _param)
 {
     StatModifier statModifier;
     if (Contains(_statModifierType))
     {
         statModifier = statModifierStocks.Find(x => x.stateModifierType == _statModifierType);
     }
     else
     {
         statModifier = new StatModifier();
     }
     statModifier.timeExpired = _timeExpired + Time.time;
     statModifier.stateModifierType = _statModifierType;
     statModifier.param = _param;
     //
     statModifierStocks.Add(statModifier);
 }
Example #5
0
 public void AddModifier(StatModifier mod)
 {
     modList.Add(mod);
     mod.OnValueChange += OnModValueChange;
 }
Example #6
0
        protected override void Update()
        {
            if (m_poisonImmunity == null)
            {
                m_poisonImmunity = new DamageTypeModifier();
                m_poisonImmunity.damageMultiplier = 0f;
                m_poisonImmunity.damageType       = CoreDamageTypes.Poison;
            }
            if (m_fireImmunity == null)
            {
                m_fireImmunity = new DamageTypeModifier();
                m_fireImmunity.damageMultiplier = 0f;
                m_fireImmunity.damageType       = CoreDamageTypes.Fire;
            }
            if (m_electricityImmunity == null)
            {
                m_electricityImmunity = new DamageTypeModifier();
                m_electricityImmunity.damageMultiplier = 0f;
                m_electricityImmunity.damageType       = CoreDamageTypes.Electric;
            }
            if (machoDamageMod == null)
            {
                machoDamageMod             = new StatModifier();
                machoDamageMod.statToBoost = PlayerStats.StatType.Damage;
                machoDamageMod.modifyType  = StatModifier.ModifyMethod.MULTIPLICATIVE;
                machoDamageMod.amount      = 1.3f;
            }

            if (this.m_extantOrbital != null && this.Owner != null)
            {
                if (this.m_extantOrbital.GetComponent <PlayerOrbital>().orbitRadius != overrideOrbitalDistance)
                {
                    this.m_extantOrbital.GetComponent <PlayerOrbital>().orbitRadius = overrideOrbitalDistance;
                }
                if (this.m_extantOrbital.GetComponent <PlayerOrbital>().orbitDegreesPerSecond != overrideOrbitalSpeed)
                {
                    this.m_extantOrbital.GetComponent <PlayerOrbital>().orbitDegreesPerSecond = overrideOrbitalSpeed;
                }
                if (this.m_extantOrbital.GetComponent <PlayerOrbital>().perfectOrbitalFactor != overridePerfectOrbitalFactor)
                {
                    this.m_extantOrbital.GetComponent <PlayerOrbital>().perfectOrbitalFactor = overridePerfectOrbitalFactor;
                }

                if (this.m_extantOrbital.GetComponent <tk2dSprite>().renderer.material.shader != ShaderCache.Acquire("Brave/Internal/RainbowChestShader"))
                {
                    this.m_extantOrbital.GetComponent <tk2dSprite>().sprite.renderer.material.shader = ShaderCache.Acquire("Brave/Internal/RainbowChestShader");
                    this.m_extantOrbital.GetComponent <tk2dSprite>().sprite.renderer.material.SetFloat("_AllColorsToggle", 1f);
                }

                if (canReselectGuonState && Owner)
                {
                    canReselectGuonState = false;
                    ReSelectGuonState();
                    Invoke("resetGuonStateCooldown", 5f);
                }


                if (Owner && Owner.IsInCombat && Owner.specRigidbody.Velocity == Vector2.zero && canFireCyanProjectile)
                {
                    if (RandomlySelectedGuonState == GuonState.CYAN)
                    {
                        FireProjectileFromGuon(CyanGuonStone.cyanGuonProj.gameObject, true, true, 1, 0, 5, true);
                        canFireCyanProjectile = false;
                        if (Owner.PlayerHasActiveSynergy("Rainbower Guon Stone"))
                        {
                            Invoke("resetCyanFireCooldown", 0.16f);
                        }
                        else
                        {
                            Invoke("resetCyanFireCooldown", 0.35f);
                        }
                    }
                }
                if (Owner && Owner.IsInCombat && canFireOrangeProjectile)
                {
                    if (RandomlySelectedGuonState == GuonState.ORANGE)
                    {
                        canFireOrangeProjectile = false;
                        if (Owner.PlayerHasActiveSynergy("Rainbower Guon Stone"))
                        {
                            FireProjectileFromGuon(mockOrangeGuonProj.gameObject, true, true, 1.6f);
                            Invoke("resetOrangeFireCooldown", 0.5f);
                        }
                        else
                        {
                            FireProjectileFromGuon(mockOrangeGuonProj.gameObject, true, true, 1);
                            Invoke("resetOrangeFireCooldown", 1f);
                        }
                    }
                }
            }
            base.Update();
        }
Example #7
0
        public override void CompPostTick(ref float severityAdjustment)
        {
            if (this.Pawn.Spawned && !this.Pawn.Dead && !this.Pawn.Downed)
            {
                base.CompPostTick(ref severityAdjustment);
                if (base.Pawn != null & base.parent != null)
                {
                    if (!initialized)
                    {
                        initialized = true;
                        this.Initialize();
                    }
                }

                CompAbilityUserMight comp = this.Pawn.GetComp <CompAbilityUserMight>();
                if (this.doPsionicAttack)
                {
                    this.ticksTillPsionicStrike--;
                    if (this.ticksTillPsionicStrike <= 0)
                    {
                        this.doPsionicAttack = false;
                        MightPowerSkill ver = comp.MightData.MightPowerSkill_PsionicAugmentation.FirstOrDefault((MightPowerSkill x) => x.label == "TM_PsionicAugmentation_ver");
                        if (!threat.Destroyed && !threat.Dead)
                        {
                            TM_MoteMaker.MakePowerBeamMotePsionic(threat.DrawPos.ToIntVec3(), threat.Map, 2f, 2f, .7f, .1f, .6f);
                            DamageInfo dinfo2 = new DamageInfo(TMDamageDefOf.DamageDefOf.TM_PsionicInjury, Rand.Range(6, 12) + (2 * ver.level), 0, -1, this.Pawn, null, null, DamageInfo.SourceCategory.ThingOrUnknown, this.threat);
                            this.threat.TakeDamage(dinfo2);
                        }
                    }
                }

                if (Find.TickManager.TicksGame % 60 == 0)
                {
                    severityAdjustment += (this.Pawn.GetStatValue(StatDefOf.PsychicSensitivity, false) * Rand.Range(.04f, .12f));
                    if (Find.Selector.FirstSelectedObject == this.Pawn)
                    {
                        HediffStage hediffStage = this.Pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("TM_PsionicHD"), false).CurStage;
                        hediffStage.label = this.parent.Severity.ToString("0.00") + "%";
                    }

                    Hediff hediff = this.Pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_Artifact_PsionicBoostHD);
                    float  maxSev = 100;
                    if (hediff != null)
                    {
                        maxSev += hediff.Severity;
                    }
                    this.parent.Severity = Mathf.Clamp(this.parent.Severity, 0, maxSev);
                }

                if (comp.usePsionicAugmentationToggle)
                {
                    if (Find.TickManager.TicksGame % 600 == 0 && !this.Pawn.Drafted)
                    {
                        if (this.parent.Severity >= 95 && this.Pawn.CurJob.targetA.Thing != null)
                        {
                            DeterminePsionicHD();
                            if ((this.Pawn.Position - this.Pawn.CurJob.targetA.Thing.Position).LengthHorizontal > 20 && (this.Pawn.Position - this.Pawn.CurJob.targetA.Thing.Position).LengthHorizontal < 300 && this.Pawn.CurJob.locomotionUrgency >= LocomotionUrgency.Jog && this.Pawn.CurJob.bill == null)
                            {
                                this.parent.Severity -= 10f;
                                if (this.EffVal == 0)
                                {
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicSpeedHD"), 1f + .02f * this.EffVal);
                                }
                                else if (this.EffVal == 1)
                                {
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicSpeedHD_I"), 1f + .02f * this.EffVal);
                                }
                                else if (this.EffVal == 2)
                                {
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicSpeedHD_II"), 1f + .02f * this.EffVal);
                                }
                                else
                                {
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicSpeedHD_III"), 1f + .02f * this.EffVal);
                                }
                                for (int i = 0; i < 12; i++)
                                {
                                    float direction = Rand.Range(0, 360);
                                    TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Psi"), this.Pawn.DrawPos, this.Pawn.Map, Rand.Range(.1f, .4f), 0.2f, .02f, .1f, 0, Rand.Range(8, 10), direction, direction);
                                }
                                comp.MightUserXP += Rand.Range(10, 15);
                            }
                            if (this.Pawn.CurJob.targetA.Thing != null)
                            {
                                if ((this.Pawn.Position - this.Pawn.CurJob.targetA.Thing.Position).LengthHorizontal < 2 && (this.Pawn.CurJob.bill != null || this.Pawn.CurJob.def.defName == "Sow" || this.Pawn.CurJob.def.defName == "FinishFrame" || this.Pawn.CurJob.def.defName == "Deconstruct" || this.Pawn.CurJob.def.defName == "Repair" || this.Pawn.CurJob.def.defName == "Clean" || this.Pawn.CurJob.def.defName == "Mine" || this.Pawn.CurJob.def.defName == "SmoothFloor" || this.Pawn.CurJob.def.defName == "SmoothWall" || this.Pawn.CurJob.def.defName == "Harvest" || this.Pawn.CurJob.def.defName == "HarvestDesignated" || this.Pawn.CurJob.def.defName == "CutPlant" || this.Pawn.CurJob.def.defName == "CutPlantDesignated"))
                                {
                                    this.parent.Severity -= 12f;
                                    if (this.PwrVal == 0)
                                    {
                                        HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicManipulationHD"), 1f + .02f * this.PwrVal);
                                    }
                                    else if (this.PwrVal == 1)
                                    {
                                        HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicManipulationHD_I"), 1f + .02f * this.PwrVal);
                                    }
                                    else if (this.PwrVal == 2)
                                    {
                                        HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicManipulationHD_II"), 1f + .02f * this.PwrVal);
                                    }
                                    else
                                    {
                                        HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicManipulationHD_III"), 1f + .02f * this.PwrVal);
                                    }
                                    for (int i = 0; i < 12; i++)
                                    {
                                        float direction = Rand.Range(0, 360);
                                        TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Psi"), this.Pawn.DrawPos, this.Pawn.Map, Rand.Range(.1f, .4f), 0.2f, .02f, .1f, 0, Rand.Range(8, 10), direction, direction);
                                    }
                                    comp.MightUserXP += Rand.Range(10, 15);
                                }
                            }
                        }
                    }

                    if (this.parent.Severity >= 20)
                    {
                        DeterminePsionicHD();
                        if (Find.TickManager.TicksGame % 180 == 0 && (this.Pawn.Drafted || !this.Pawn.IsColonist) && ((this.Pawn.equipment.Primary != null && !this.Pawn.equipment.Primary.def.IsRangedWeapon) || this.Pawn.equipment.Primary == null))
                        {
                            if (this.Pawn.CurJob.targetA.Thing != null && this.Pawn.CurJob.targetA.Thing is Pawn)
                            {
                                //Log.Message("performing psionic dash - curjob " + this.Pawn.CurJob);
                                //Log.Message("curjob def " + this.Pawn.CurJob.def.defName);
                                //Log.Message("target " + this.Pawn.CurJob.targetA.Thing);
                                //Log.Message("target range " + (this.Pawn.CurJob.targetA.Thing.Position - this.Pawn.Position).LengthHorizontal);
                                Pawn  targetPawn     = this.Pawn.CurJob.targetA.Thing as Pawn;
                                float targetDistance = (this.Pawn.Position - targetPawn.Position).LengthHorizontal;
                                if (targetDistance > 3 && targetDistance < (12 + EffVal) && targetPawn.Map != null && !targetPawn.Downed)
                                {
                                    for (int i = 0; i < 12; i++)
                                    {
                                        float direction = Rand.Range(0, 360);
                                        TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Psi"), this.Pawn.DrawPos, this.Pawn.Map, Rand.Range(.1f, .4f), 0.2f, .02f, .1f, 0, Rand.Range(8, 10), direction, direction);
                                    }
                                    FlyingObject_PsionicLeap flyingObject = (FlyingObject_PsionicLeap)GenSpawn.Spawn(ThingDef.Named("FlyingObject_PsionicLeap"), this.Pawn.Position, this.Pawn.Map);
                                    flyingObject.Launch(this.Pawn, this.Pawn.CurJob.targetA.Thing, this.Pawn);
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicHD"), -3f);
                                    comp.Stamina.CurLevel -= .03f;
                                    comp.MightUserXP      += Rand.Range(20, 30);
                                }
                            }
                        }

                        if (this.nextPsionicAttack < Find.TickManager.TicksGame && this.Pawn.Drafted)
                        {
                            if (this.Pawn.CurJob.def != TorannMagicDefOf.JobDriver_PsionicBarrier && VerVal > 0)
                            {
                                this.threat = TM_Calc.FindNearbyEnemy(this.Pawn, 20 + (2 * verVal)); // GetNearbyTarget(20 + (2 * VerVal));
                                if (threat != null)
                                {
                                    //start psionic attack; ends after delay
                                    SoundInfo info = SoundInfo.InMap(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false), MaintenanceType.None);
                                    TorannMagicDefOf.TM_Implosion.PlayOneShot(info);
                                    Effecter psionicAttack = TorannMagicDefOf.TM_GiantExplosion.Spawn();
                                    psionicAttack.Trigger(new TargetInfo(threat.Position, threat.Map, false), new TargetInfo(threat.Position, threat.Map, false));
                                    psionicAttack.Cleanup();
                                    for (int i = 0; i < 12; i++)
                                    {
                                        float direction = Rand.Range(0, 360);
                                        TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Psi"), this.Pawn.DrawPos, this.Pawn.Map, Rand.Range(.1f, .4f), 0.2f, .02f, .1f, 0, Rand.Range(8, 10), direction, direction);
                                    }
                                    float weaponModifier = 1;
                                    if (this.Pawn.equipment.Primary != null)
                                    {
                                        if (this.Pawn.equipment.Primary.def.IsRangedWeapon)
                                        {
                                            StatModifier wpnMass = this.Pawn.equipment.Primary.def.statBases.FirstOrDefault((StatModifier x) => x.stat.defName == "Mass");
                                            weaponModifier = Mathf.Clamp(wpnMass.value, .8f, 6);
                                        }
                                        else //assume melee weapon
                                        {
                                            StatModifier wpnMass = this.Pawn.equipment.Primary.def.statBases.FirstOrDefault((StatModifier x) => x.stat.defName == "Mass");
                                            weaponModifier = Mathf.Clamp(wpnMass.value, .6f, 5);
                                        }
                                    }
                                    else //unarmed
                                    {
                                        weaponModifier = .4f;
                                    }
                                    this.nextPsionicAttack = Find.TickManager.TicksGame + (int)(Mathf.Clamp((600 - (60 * verVal)) * weaponModifier, 120, 900));
                                    float energyCost = Mathf.Clamp((10f - VerVal) * weaponModifier, 2f, 12f);
                                    HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("TM_PsionicHD"), -energyCost);
                                    comp.MightUserXP           += Rand.Range(8, 12);
                                    this.doPsionicAttack        = true;
                                    this.ticksTillPsionicStrike = 24;
                                }
                            }
                        }
                    }
                }
            }
        }
        // Token: 0x06000005 RID: 5 RVA: 0x00002160 File Offset: 0x00000360
        private StatModifier GetStatModifier(StatRequest req)
        {
            EquipmentRequirementModifiers eqMods = new EquipmentRequirementModifiers();
            Thing        thing;
            bool         flag = (thing = req.Thing) != null && (eqMods = thing.def.GetModExtension <EquipmentRequirementModifiers>()) != null;
            StatModifier result;

            if (flag)
            {
                StatModifier statModifier = eqMods.modifyTheseStats.FirstOrDefault((StatModifier modifier) => modifier.stat == this.parentStat);
                bool         flag2        = statModifier == null;
                if (flag2)
                {
                    result = null;
                }
                else
                {
                    Pawn                  pawn         = null;
                    ThingOwner            holdingOwner = thing.holdingOwner;
                    Pawn_EquipmentTracker pawn_EquipmentTracker;
                    bool                  flag3 = (pawn_EquipmentTracker = (((holdingOwner != null) ? holdingOwner.Owner : null) as Pawn_EquipmentTracker)) != null;
                    if (flag3)
                    {
                        pawn = pawn_EquipmentTracker.pawn;
                    }
                    else
                    {
                        ThingOwner          holdingOwner2 = thing.holdingOwner;
                        Pawn_ApparelTracker pawn_ApparelTracker;
                        bool flag4 = (pawn_ApparelTracker = (((holdingOwner2 != null) ? holdingOwner2.Owner : null) as Pawn_ApparelTracker)) != null;
                        if (flag4)
                        {
                            pawn = pawn_ApparelTracker.pawn;
                        }
                    }
                    bool flag5 = pawn == null;
                    if (flag5)
                    {
                        result = null;
                    }
                    else
                    {
                        bool flag6 = !eqMods.requireAnyOfTheseRaces.NullOrEmpty <string>();
                        if (flag6)
                        {
                            bool flag7 = eqMods.requireAnyOfTheseRaces.Contains(pawn.def.defName);
                            if (flag7)
                            {
                                return(null);
                            }
                        }
                        bool flag8 = !eqMods.requireAnyOfTheseHediffs.NullOrEmpty <string>();
                        if (flag8)
                        {
                            bool flag9 = pawn.health.hediffSet.hediffs.Any((Hediff hediff) => eqMods.requireAnyOfTheseHediffs.Contains(hediff.def.defName));
                            if (flag9)
                            {
                                return(null);
                            }
                        }
                        bool flag10 = !eqMods.requireAnyOfTheseApparels.NullOrEmpty <string>() && pawn.apparel != null;
                        if (flag10)
                        {
                            bool flag11 = pawn.apparel.WornApparel.Any((Apparel apparel) => eqMods.requireAnyOfTheseApparels.Contains(apparel.def.defName));
                            if (flag11)
                            {
                                return(null);
                            }
                        }
                        result = statModifier;
                    }
                }
            }
            else
            {
                result = null;
            }
            return(result);
        }
Example #9
0
 /// <summary>
 /// Add a modifier to the end of the stack. This will recompute the Stats so it now include the new modifier.
 /// </summary>
 /// <param name="modifier"></param>
 public void AddModifier(StatModifier modifier)
 {
     m_ModifiersStack.Add(modifier);
     UpdateFinalStats();
 }
Example #10
0
 public abstract void RemoveStatModifier(StatType statusType, StatModifier statModifier);
Example #11
0
     generateEffect(EffectType type, float modifier, bool affectsCaster, 
                    StatModifier statMod, IEnumerable<Effect> causedEffects)
 {
     switch(type)
     {
         case EffectType.Increase:
             return (c1, c2, dt, v) => v + modifier;
         case EffectType.Multiply:
             return (c1, c2, dt, v) => v * modifier;
         case EffectType.DamageOrHeal:
             if(affectsCaster)
                 return (c1, c2, dt, v) => 
                 {
                     c1.DamageOrHeal(c1, modifier, dt, false);
                     return v;
                 };
             else
                 return (c1, c2, dt, v) => 
                 {
                     c1.DamageOrHeal(c2, modifier, dt, false);
                     return v;
                 };
         case EffectType.DamageOrHealUnmodified:
             if(affectsCaster)
                 return (c1, c2, dt, v) => 
                 {
                     c1.AttackTarget(c1, modifier, dt);
                     return v;
                 };
             else
                 return (c1, c2, dt, v) => 
                 {
                     c1.AttackTarget(c2, modifier, dt);
                     return v;
                 };
         case EffectType.ModifySecondary:
             if(affectsCaster)
                 return (c1, c2, dt, v) => 
                 {
                     c1.ModifySecondary(c1, modifier, dt, false);
                     return v;
                 };
             else
                 return (c1, c2, dt, v) => 
                 {
                     c2.ModifySecondary(c2, modifier, dt, false);
                     return v;
                 };
         case EffectType.ApplyStatModifier:
             if(affectsCaster)
                 return (c1, c2, dt, v) => 
                 { 
                     c1.AddModifier(statMod);
                     return v;
                 };
             else
                 return (c1, c2, dt, v) => 
                 { 
                     c2.AddModifier(statMod);
                     return v;
                 };
         case EffectType.RemoveStatModifier:
             if(affectsCaster)
                 return (c1, c2, dt, v) => 
                 { 
                     c1.RemoveModifier(statMod);
                     return v;
                 };
             else
                 return (c1, c2, dt, v) => 
                 { 
                     c2.RemoveModifier(statMod);
                     return v;
                 };
         case EffectType.CallEffect:
             return (c1, c2, dt, v) => 
             {
                 foreach(Effect causedEffect in causedEffects)
                     causedEffect.Call(c1, c2, dt, v);
                 return v;
             };
         default:
             return (c1, c2, dt, v) => v;
     }
 }
Example #12
0
        public void CreateStatModifier()
        {
            float Value = 10.0f;
            string Name = "fsdhnuh";
            StatModifier mod = new StatModifier(Name, Value);

            Assert.IsTrue(mod.Value == Value);
            Assert.IsTrue(mod.Name == Name);
        }
Example #13
0
 public void AddModifier(StatModifier mod)
 {
     Modifiers.Add(mod);
 }
    IEnumerator ExpireCumulativeMod(ModifiableStat ms, StatModifier mod, float expireyTime)
    {
        yield return(new WaitForSeconds(expireyTime));

        ms.RemoveModifier(mod);
    }
Example #15
0
 public virtual void AddModifier(StatModifier mod)
 {
     IsDirty = true;
     StatModifiers.Add(mod);
 }
        private void HandleRandomEffect(PlayerController player)
        {
            if (m_PickedUp | AllowedEffects == null | AllowedEffects.Count <= 0)
            {
                return;
            }

            ExpandShaders.Instance.GlitchScreenForDuration();

            AllowedEffects = AllowedEffects.Shuffle();

            m_SelectedEffect = BraveUtility.RandomElement(AllowedEffects);

            if (m_SelectedEffect == ItemEffectType.ArmorUp)
            {
                player.healthHaver.Armor += 10f;
            }
            else if (m_SelectedEffect == ItemEffectType.BigCash)
            {
                player.carriedConsumables.Currency = 999;
            }
            else if (m_SelectedEffect == ItemEffectType.ManyKeys)
            {
                player.carriedConsumables.KeyBullets = 999;
            }
            else if (m_SelectedEffect == ItemEffectType.BlanksRUS)
            {
                PickupObject blankPickup = PickupObjectDatabase.GetById(224);
                for (int i = 0; i < UnityEngine.Random.Range(5, 10); i++)
                {
                    if (blankPickup)
                    {
                        LootEngine.GivePrefabToPlayer(blankPickup.gameObject, player);
                    }
                }
            }
            else if (m_SelectedEffect == ItemEffectType.HealthPak)
            {
                if (player.characterIdentity != PlayableCharacters.Robot)
                {
                    StatModifier healthUp = new StatModifier()
                    {
                        statToBoost   = PlayerStats.StatType.Health,
                        amount        = UnityEngine.Random.Range(4, 6),
                        modifyType    = StatModifier.ModifyMethod.ADDITIVE,
                        isMeatBunBuff = false,
                    };
                    player.ownerlessStatModifiers.Add(healthUp);
                    player.stats.RecalculateStats(player, false, false);
                }
                else
                {
                    player.healthHaver.Armor += UnityEngine.Random.Range(4, 6);
                }
            }
            else if (m_SelectedEffect == ItemEffectType.DrStone)
            {
                PickupObject glassStone = PickupObjectDatabase.GetById(565);
                for (int i = 0; i < UnityEngine.Random.Range(8, 12); i++)
                {
                    if (glassStone)
                    {
                        LootEngine.GivePrefabToPlayer(glassStone.gameObject, player);
                    }
                }
            }
            else if (m_SelectedEffect == ItemEffectType.MuchAmmo)
            {
                StatModifier ManyBullets = new StatModifier()
                {
                    statToBoost   = PlayerStats.StatType.AmmoCapacityMultiplier,
                    amount        = UnityEngine.Random.Range(1.5f, 3),
                    modifyType    = StatModifier.ModifyMethod.MULTIPLICATIVE,
                    isMeatBunBuff = false,
                };
                player.ownerlessStatModifiers.Add(ManyBullets);
                player.stats.RecalculateStats(player, false, false);
            }
            return;
        }
Example #17
0
 public void AddModifier(StatModifier mod)
 {
     isModded = true;
     statModifiers.Add(mod);
     statModifiers.Sort(CompareModifierOrder);
 }
Example #18
0
    public void Equip(IHasStat stat)
    {
        foreach (var mod in m_ModifierContainers)
        {
            StatModifier modifier = new StatModifier(mod.Value, mod.ModType, mod.Order, this);

            switch (mod.StatType)
            {
            case StatType.MaxHealth:
                stat.MaxHealth.AddModifier(modifier);
                break;

            case StatType.HealthRecovery:
                stat.HealthRecovery.AddModifier(modifier);
                break;

            case StatType.MaxMainStamina:
                stat.MaxMainStamina.AddModifier(modifier);
                break;

            case StatType.MaxSubStamina:
                stat.MaxSubStamina.AddModifier(modifier);
                break;

            case StatType.PhysicalDamage:
                stat.PhysicalDamage.AddModifier(modifier);
                break;

            case StatType.MagicalDamage:
                stat.MagicalDamage.AddModifier(modifier);
                break;

            case StatType.PhysicalResistence:
                stat.PhysicalResistence.AddModifier(modifier);
                break;

            case StatType.MagicalResistence:
                stat.MagicalResistence.AddModifier(modifier);
                break;

            case StatType.PhysicalDurability:
                stat.PhysicalDurability.AddModifier(modifier);
                break;

            case StatType.MagicalDurability:
                stat.MagicalDurability.AddModifier(modifier);
                break;

            case StatType.Stability:
                stat.Stability.AddModifier(modifier);
                break;

            case StatType.JumpCount:
                stat.JumpCount.AddModifier(modifier);
                break;

            case StatType.CanWallJump:
                stat.CanWallJump.AddModifier(modifier);
                break;
            }
        }
    }
 protected FloatInputWidget <StatModifier> CreateFloatInput(StatModifier sm)
 {
     return(new FloatInputWidget <StatModifier>(sm, sm.stat.label, (StatModifier m) => m.value, (StatModifier m, float f) => m.value = f));
 }
Example #20
0
 public void AddModifier(StatModifier mod)
 {
     _stats.AddModifier(mod);
 }
Example #21
0
 private bool GetSatsFromSource(StatModifier statModifier, object source)
 {
     return(statModifier.Source == source);
 }
Example #22
0
 public static void RemoveModifier(Unit unit, StatModifier mod)
 {
     // UNDONE: checks?
     //unit.stats[mod.statType].mods.Remove(mod);
 }
Example #23
0
 public abstract void AddStatModifier(StatType statusType, StatModifier statModifier);
        public ABuildableDefWidget(D def, DefType type) : base(def, type)
        {
            if (base.Def.statBases == null)
            {
                base.Def.statBases = new List <StatModifier>();
            }

            this.inputWidgets = new List <IInputWidget>()
            {
                new EnumInputWidget <D, Traversability>(base.Def, "Passability", 200, d => d.passability, (d, v) => d.passability = v),
                new IntInputWidget <D>(base.Def, "Path Cost", d => d.pathCost, (d, v) => d.pathCost = v),
                new BoolInputWidget <D>(base.Def, "Path Cost Ignore Repeat", d => d.pathCostIgnoreRepeat, (d, v) => d.pathCostIgnoreRepeat = v),
                new FloatInputWidget <D>(base.Def, "Fertility", d => d.fertility, (d, v) => d.fertility = v),
                new IntInputWidget <D>(base.Def, "Cost Stuff Count", d => d.costStuffCount, (d, v) => d.costStuffCount = v),
                new IntInputWidget <D>(base.Def, "Placing Draggable Dimensions", d => d.placingDraggableDimensions, (d, v) => d.placingDraggableDimensions = v),
                new BoolInputWidget <D>(base.Def, "Clear Building Area", d => d.clearBuildingArea, (d, v) => d.clearBuildingArea = v),
                new FloatInputWidget <D>(base.Def, "Resources Fraction When Deconstructed", d => d.resourcesFractionWhenDeconstructed, (d, v) => d.resourcesFractionWhenDeconstructed = v),
                new IntInputWidget <D>(base.Def, "Construction Skill Prerequisite", d => d.constructionSkillPrerequisite, (d, v) => d.constructionSkillPrerequisite = v),
                new EnumInputWidget <D, TechLevel>(base.Def, "Min Tech Level To Build", 200, d => d.minTechLevelToBuild, (d, v) => d.minTechLevelToBuild            = v),
                new EnumInputWidget <D, TechLevel>(base.Def, "Max Tech Level To Build", 200, d => d.maxTechLevelToBuild, (d, v) => d.maxTechLevelToBuild            = v),
                new EnumInputWidget <D, AltitudeLayer>(base.Def, "Altitude Layer", 200, d => d.altitudeLayer, (d, v) => d.altitudeLayer    = v),
                new FloatInputWidget <D>(base.Def, "Special Display Radius", d => d.specialDisplayRadius, (d, v) => d.specialDisplayRadius = v),

                new DefInputWidget <D, TerrainAffordanceDef>(base.Def, "Terrain Affordance Needed", 200, d => d.terrainAffordanceNeeded, (d, v) => d.terrainAffordanceNeeded = v, true),
                new DefInputWidget <D, EffecterDef>(base.Def, "Repair Effect", 200, d => d.repairEffect, (d, v) => d.repairEffect          = v, true),
                new DefInputWidget <D, EffecterDef>(base.Def, "Construct Effect", 200, d => d.constructEffect, (d, v) => d.constructEffect = v, true),
                new DefInputWidget <D, DesignationCategoryDef>(base.Def, "Designation Category", 200, d => d.designationCategory, (d, v) => d.designationCategory  = v, true),
                new DefInputWidget <D, DesignatorDropdownGroupDef>(base.Def, "Designator Dropdown", 200, d => d.designatorDropdown, (d, v) => d.designatorDropdown = v, true),
                new DefInputWidget <D, KeyBindingDef>(base.Def, "Key Binding", 200, d => d.designationHotKey, (d, v) => d.designationHotKey = v, true),
                new DefInputWidget <D, ThingDef>(base.Def, "Blueprint", 200, d => d.blueprintDef, (d, v) => d.blueprintDef = v, true),
                new DefInputWidget <D, ThingDef>(base.Def, "Install Blueprint", 200, d => d.installBlueprintDef, (d, v) => d.installBlueprintDef = v, true),
                new DefInputWidget <D, ThingDef>(base.Def, "Frame", 200, d => d.frameDef, (d, v) => d.frameDef = v, true),

                new EnumInputWidget <D, Direction>(base.Def, "Default Placing Rotation", 200,
                                                   d =>
                {
                    switch (d.defaultPlacingRot.AsAngle)
                    {
                    case 0f:
                        return(Direction.North);

                    case 90f:
                        return(Direction.East);

                    case 180f:
                        return(Direction.South);

                    default:
                        return(Direction.West);
                    }
                },
                                                   (d, v) =>
                {
                    switch (v)
                    {
                    case Direction.North:
                        d.defaultPlacingRot = Rot4.North;
                        break;

                    case Direction.East:
                        d.defaultPlacingRot = Rot4.East;
                        break;

                    case Direction.South:
                        d.defaultPlacingRot = Rot4.South;
                        break;

                    default:
                        d.defaultPlacingRot = Rot4.West;
                        break;
                    }
                }),
            };

            this.statBasesPlusMinus = new WindowUtil.PlusMinusArgs <StatDef>()
            {
                allItems       = DefDatabase <StatDef> .AllDefs,
                getDisplayName = d => Util.GetLabel(d),
                beingUsed      = () =>
                {
                    List <StatDef> l = new List <StatDef>(base.Def.statBases.Count);
                    base.Def.statBases.ForEach(v => l.Add(v.stat));
                    return(l);
                },
                onAdd = v =>
                {
                    StatModifier sm = new StatModifier()
                    {
                        stat = v, value = 0
                    };
                    base.Def.statBases.Add(sm);
                    this.statBases.Add(this.CreateFloatInput(sm));
                },
                onRemove = v =>
                {
                    base.Def.statBases.RemoveAll(sm => sm.stat == v);
                    this.statBases.RemoveAll(w => w.Parent.stat == v);
                },
            };
        }
Example #25
0
 public static void AddModifier(Unit unit, StatModifier mod)
 {
     //unit.stats[mod.statType].mods.Add(mod);
 }
Example #26
0
 public virtual void AddModifier(StatModifier mod)
 {
     isDirty = true;
     statModifiers.Add(mod);
     statModifiers.Sort(CompareModifierOrder);
 }
    public static void RemoveTrackedStatMod(StatCollection source, StatCollection target, StatType stat, StatModifier mod, params StatModifierOption[] statOptions)
    {
        GameObject s = source != null ? source.Owner : null;
        GameObject t = target != null ? target.Owner : null;

        if (t != null)
        {
            target.RemoveTrackedMod(stat, mod, s, statOptions);
            SendStatChangeEvent(source.Owner, t, stat, -mod.Value);
        }
        else
        {
            Debug.LogWarning("a stat mod: " + mod + " could not be removed from a target because it was null");
        }
    }
Example #28
0
        protected override void FillTab()
        {
            //Log.Message("ITab_Avali_Pack");

            Rect rect1 = new Rect(0, 0, WinSize.x, WinSize.y).ContractedBy(10f);

            Text.Font = GameFont.Small;
            oldColor  = GUI.color;

            Hediff avaliBiology = SelPawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.AvaliBiology);

            if (avaliBiology == null)
            {
                NotInPack(rect1);
                return;
            }

            HediffDef   packHediffDef  = (HediffDef)Traverse.Create(avaliBiology).Field("packHediffDef").GetValue();
            List <Pawn> relatedPawns   = (List <Pawn>)Traverse.Create(avaliBiology).Field("relatedPawns").GetValue();
            Pawn        packLeader     = null;
            int         maxPawnsInPack = (int)Traverse.Create(avaliBiology).Field("maxPawnsInPack").GetValue();

            if (packHediffDef == null ||
                maxPawnsInPack < 2 ||
                relatedPawns == null)
            {
                NotInPack(rect1);
                return;
            }

            for (int i = 0; i < relatedPawns.Count; i++)
            {
                Pawn relatedPawn = relatedPawns[i];
                if (SelPawn.relations.DirectRelationExists(PawnRelationDefOf.PackLeader, relatedPawn))
                {
                    packLeader = relatedPawn;
                    break;
                }
            }
            if (packLeader == null)
            {
                packLeader = SelPawn;
            }

            packHediff = SelPawn.health.hediffSet.GetFirstHediffOfDef(packHediffDef);
            if (packHediff == null)
            {
                NotInPack(rect1);
                return;
            }

            /* --------------------------------------------------------------------------------------------- //
            *
            *  Specialization: packHediff.LabelCap
            *  Pack Leader: packLeader
            *  Pack members: 6/6
            *
            *  Pack activity effects:
            *  ...
            *
            *  // --------------------------------------------------------------------------------------------- */

            Rect rect2 = new Rect(0, startPosY, WinSize.x, 42).ContractedBy(10f);

            NewRect(rect2, "PackSpecialization".Translate(), packHediff.LabelCap, rect2, "PackSpecializationDesc".Translate());

            DrawLineHorizontalWithColor(10, startPosY + labelSizeY * 1 + 8, WinSize.x - 20, Color.gray);
            //GUI.color = oldColor;

            Rect rect3 = new Rect(0, startPosY + labelSizeY * 1, WinSize.x, 42).ContractedBy(10f);

            NewRect(rect3, "PackLeader".Translate(), packLeader.Name.ToString(), rect3, "PackLeaderDesc".Translate());

            Rect   rect4            = new Rect(0, startPosY + labelSizeY * 2, WinSize.x, 42).ContractedBy(10f);
            string packMembers      = SelPawn.Name.ToString();
            int    packMembersCount = 1;

            for (int i = 0; i < relatedPawns.Count; i++)
            {
                Pawn relatedPawn = relatedPawns[i];
                if (relatedPawn == SelPawn)
                {
                    continue;
                }
                packMembers += "\n" + relatedPawn.Name;
                packMembersCount++;
            }
            NewRect(rect4, "PackMembers".Translate(), packMembersCount + "/" + maxPawnsInPack, rect4, packMembers);

            if (packHediff.CurStage == null || packHediff.CurStage.statOffsets == null || packHediff.CurStage.statOffsets.Count == 0)
            {
                NotInPack(rect1);
                return;
            }

            DrawLineHorizontalWithColor(10, startPosY + labelSizeY * 5 + 8, WinSize.x - 20, Color.gray);
            //GUI.color = oldColor;

            Rect  rect5        = new Rect(0, startPosY + labelSizeY * 4, WinSize.x, 42).ContractedBy(10f);
            float hearingRange = 30 * SelPawn.health.capacities.GetLevel(PawnCapacityDefOf.Hearing);

            NewRect(rect5, "PackEffects".Translate(), "", rect5, string.Format("PackEffectsDesc".Translate(), (int)hearingRange));

            float yPosition = startPosY + labelSizeY * 5;
            List <StatModifier> statOffsets = packHediff.CurStage.statOffsets;

            if (statOffsets.Count > 1)
            {
                int secondColumnStart = statOffsets.Count / 2;

                for (int i = secondColumnStart; i < statOffsets.Count; i++)
                {
                    StatModifier packStatMod = statOffsets[i];
                    if (packStatMod == null)
                    {
                        continue;
                    }

                    Rect rect      = new Rect(WinSize.x / 2 - 10, yPosition, WinSize.x / 2 + 10, 42).ContractedBy(10f);
                    Rect labelRect = new Rect(WinSize.x - 75, yPosition + 10, 1000, 42);
                    NewRect(rect, packStatMod.stat.LabelCap, packStatMod.ValueToStringAsOffset, labelRect, packStatMod.stat.description);
                    yPosition += labelSizeY;
                }
            }

            yPosition = startPosY + labelSizeY * 5;
            for (int i = 0; i < statOffsets.Count / 2; i++)
            {
                StatModifier packStatMod = statOffsets[i];
                if (packStatMod == null)
                {
                    continue;
                }

                Rect rect      = new Rect(0, yPosition, WinSize.x / 2 + 10, 42).ContractedBy(10f);
                Rect labelRect = new Rect(WinSize.x / 2 - 75, yPosition + 10, 1000, 42);
                NewRect(rect, packStatMod.stat.LabelCap, packStatMod.ValueToStringAsOffset, labelRect, packStatMod.stat.description);
                yPosition += labelSizeY;
            }
        }
Example #29
0
    override protected void Update()
    {
        if (battleGroup == null)
        {
            return;
        }



        base.Update();

        //추락
        if ((airborneCoroutine == null && falldownCoroutine == null && coroutineShake == null) && (isDie || isBlockMove))
        {
            skeletonAnimation.transform.localPosition = Vector2.Lerp(skeletonAnimation.transform.localPosition, Vector2.zero, 2f * Time.deltaTime);
        }


        //공중 높이 복귀
        if (skeletonAnimState != SkeletonAnimState.Skill && airborneCoroutine == null && falldownCoroutine == null && coroutineShake == null)
        {
            if (skeletonAnimation.transform.localPosition.y < originalPosY || skeletonAnimation.transform.localPosition.y > originalPosY)
            {
                //공중 복귀
                if (originalPosY > 0f)
                {
                    if (skeletonAnimation.transform.localPosition.y < originalPosY + 0.02f && skeletonAnimation.transform.localPosition.y > originalPosY - 0.02f)
                    {
                        skeletonAnimation.transform.localPosition = new Vector2(0f, originalPosY);
                    }
                    else
                    {
                        skeletonAnimation.transform.localPosition = Vector2.Lerp(skeletonAnimation.transform.localPosition, new Vector2(0f, originalPosY), 2f * Time.deltaTime);
                    }
                }
                //추락
                else
                {
                    Vector2 destPos = Vector2.MoveTowards(skeletonAnimation.transform.localPosition, new Vector2(0f, originalPosY), fallingSpeed * Time.deltaTime);
                    if (skeletonAnimation.transform.localPosition.y < originalPosY && destPos.y >= originalPosY ||
                        skeletonAnimation.transform.localPosition.y > originalPosY && destPos.y <= originalPosY
                        )
                    {
                        skeletonAnimation.transform.localPosition = new Vector2(0f, originalPosY);
                        fallingSpeed = 2f;
                    }
                    else
                    {
                        float acc = originalPosY > 0f ? 2f : 9.8f;
                        skeletonAnimation.transform.localPosition = destPos;

                        fallingSpeed += acc * Time.deltaTime;
                    }
                }
            }
        }
        Renderer r = skeletonAnimation.GetComponent <Renderer>();

        //최종 이동 속도 적용. 이동속도 증가량, 식량 상태에 의한 보정
        if (isDie)
        {
            skeletonAnimation.timeScale = 1f;

            mpb.SetColor("_OverlayColor", new Color(0f, 0f, 0f, 0.5f));
            r.SetPropertyBlock(mpb);
        }
        else if (shakeAmount > 0.01f)
        {
            skeletonAnimation.timeScale = 0f;
            if (coroutineLevelUp == null)
            {
                mpb.SetColor("_OverlayColor", new Color(1f, 0f, 0f, 0.5f));
                r.SetPropertyBlock(mpb);
            }
        }
        else if (airborneCoroutine != null || falldownCoroutine != null)
        {
            skeletonAnimation.timeScale = 0f;
        }
        else
        {
            Stat statMoveSpeed   = stats.GetParam(StatType.MoveSpeed);
            Stat statAttackSpeed = stats.GetParam(StatType.AttackSpeed);

            if (skeletonAnimation.AnimationName == runAnimation || skeletonAnimation.AnimationName == idleAnimation)
            {
                skeletonAnimation.timeScale = Mathf.Max(0.1f, (float)(statMoveSpeed.value * 0.0001f));
            }
            else
            {
                skeletonAnimation.timeScale = Mathf.Max(0.1f, (float)(statAttackSpeed.value * 0.0001f));
            }


            if (coroutineLevelUp == null)
            {
                r.SetPropertyBlock(null);
            }
        }

        //if(shakeAmount > 0f)
        {
            float a = 0f;
            if (shakeAmount > 0f)
            {
                a = Mathf.Sin(Time.time * 20f);
                if (a > 0)
                {
                    a = 1;
                }
                else if (a < 0)
                {
                    a = -1;
                }
            }

            float   s        = shakeAmount * a;// UnityEngine.Random.Range(-shakeAmount, shakeAmount);
            Vector3 shakePos = new Vector3(s, 0f, 0f);


            Vector3 localPos = new Vector3(0f, skeletonAnimation.transform.localPosition.y, skeletonAnimation.transform.localPosition.z);
            skeletonAnimation.transform.localPosition = Vector3.Lerp(skeletonAnimation.transform.localPosition, localPos + shakePos, 10f * Time.deltaTime);
        }


        ////스탯 테스트
        //if (!UnityEditor.Selection.Contains(gameObject))
        //    return;

        if (Input.GetKeyDown(KeyCode.KeypadPlus))
        {
            StatModifier mod = new StatModifier();
            mod.type  = StatModifier.Type.BaseValuePercent;
            mod.value = 1000f;
            stats.AddStatModifier(StatType.MoveSpeed, mod);
        }
        else if (Input.GetKeyDown(KeyCode.KeypadMinus))
        {
            var mod = stats.GetParam <ModifiableStat>(StatType.MoveSpeed).modifiers.Find(x => x.type == StatModifier.Type.BaseValuePercent);
            stats.RemoveModifier(StatType.MoveSpeed, mod);
        }
    }
Example #30
0
 /// <summary>
 /// Remove a modifier from the stack. This modifier need to already be on the stack. e.g. used by the equipment
 /// effect that store the modifier they add on equip and remove it when unequipped.
 /// </summary>
 /// <param name="modifier"></param>
 public void RemoveModifier(StatModifier modifier)
 {
     m_ModifiersStack.Remove(modifier);
     UpdateFinalStats();
 }
 public override void ExecuteEffect(UsableItem parentItem, Player player)
 {
     if (StrengthBuff != 0)
     {
         StatModifier strengthStatModifier = new StatModifier(StrengthBuff, StatModType.Flat, parentItem);
         player.Strength.AddModifier(strengthStatModifier);
         player.StartCoroutine(RemoveBuff(player, strengthStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (AgilityBuff != 0)
     {
         StatModifier agilityStatModifier = new StatModifier(AgilityBuff, StatModType.Flat, parentItem);
         player.Agility.AddModifier(agilityStatModifier);
         player.StartCoroutine(RemoveBuff(player, agilityStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (IntelligenceBuff != 0)
     {
         StatModifier intelligenceStatModifier = new StatModifier(IntelligenceBuff, StatModType.Flat, parentItem);
         player.Intelligence.AddModifier(intelligenceStatModifier);
         player.StartCoroutine(RemoveBuff(player, intelligenceStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (VitalityBuff != 0)
     {
         StatModifier vitalityStatModifier = new StatModifier(VitalityBuff, StatModType.Flat, parentItem);
         player.Vitality.AddModifier(vitalityStatModifier);
         player.StartCoroutine(RemoveBuff(player, vitalityStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (LuckBuff != 0)
     {
         StatModifier luckStatModifier = new StatModifier(LuckBuff, StatModType.Flat, parentItem);
         player.Dexterity.AddModifier(luckStatModifier);
         player.StartCoroutine(RemoveBuff(player, luckStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (AttackBuff != 0)
     {
         StatModifier attackStatModifier = new StatModifier(AttackBuff, StatModType.Flat, parentItem);
         player.Attack.AddModifier(attackStatModifier);
         player.StartCoroutine(RemoveBuff(player, attackStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (DefenseBuff != 0)
     {
         StatModifier defenseStatModifier = new StatModifier(DefenseBuff, StatModType.Flat, parentItem);
         player.Defense.AddModifier(defenseStatModifier);
         player.StartCoroutine(RemoveBuff(player, defenseStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (CritBuff != 0)
     {
         StatModifier critStatModifier = new StatModifier(CritBuff, StatModType.Flat, parentItem);
         player.Crit.AddModifier(critStatModifier);
         player.StartCoroutine(RemoveBuff(player, critStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (MagicAttackBuff != 0)
     {
         StatModifier magicAttackStatModifier = new StatModifier(MagicAttackBuff, StatModType.Flat, parentItem);
         player.MagicAttack.AddModifier(magicAttackStatModifier);
         player.StartCoroutine(RemoveBuff(player, magicAttackStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (MagicDefenseBuff != 0)
     {
         StatModifier magicDefenseStatModifier = new StatModifier(MagicDefenseBuff, StatModType.Flat, parentItem);
         player.Toughness.AddModifier(magicDefenseStatModifier);
         player.StartCoroutine(RemoveBuff(player, magicDefenseStatModifier, Duration));
         player.character.UpdateStatValues();
     }
     if (AttackSpeedBuff != 0)
     {
         StatModifier attackSpeedStatModifier = new StatModifier(AttackSpeedBuff, StatModType.Flat, parentItem);
         player.AttackSpeed.AddModifier(attackSpeedStatModifier);
         player.StartCoroutine(RemoveBuff(player, attackSpeedStatModifier, Duration));
         player.character.UpdateStatValues();
     }
 }
Example #32
0
 public override void ModifyWeaponDamage(Player player, ref StatModifier damage)
 {
     SetUseStats(player); // Always displays left-click stats
     Tools.HandleAltUseAnimation(player);
 }
 public virtual void AddModifier(StatModifier modifier)
 {
     isChanged = true;
     statModifiers.Add(modifier);
 }
Example #34
0
 public void AddModifier(StatModifier modifier)
 {
     mModifiers.Add(modifier);
 }
Example #35
0
 public virtual void ModifyStat(StatModifier mod)
 {
     mods.Add(mod);
 }
Example #36
0
            public static void PanaceaUseHook(Action <Panacea, PlayerController> orig, Panacea self, PlayerController user)
            {
                orig(self, user);
                List <int> OptionalItemIDs = new List <int>
                {
                    64,
                    174,
                    267,
                    168,
                    205,
                    427,
                    426,
                    424
                };
                bool hasMysteriousBrewSynergy = false;

                foreach (PlayerItem active in user.activeItems)
                {
                    if (OptionalItemIDs.Contains(active.PickupObjectId))
                    {
                        hasMysteriousBrewSynergy = true;
                    }
                }
                foreach (PassiveItem passive in user.passiveItems)
                {
                    if (OptionalItemIDs.Contains(passive.PickupObjectId))
                    {
                        hasMysteriousBrewSynergy = true;
                    }
                }
                if (hasMysteriousBrewSynergy)
                {
                    int    value  = UnityEngine.Random.Range(1, 9);
                    string header = "";
                    string text   = "";
                    if (value == 1)
                    {
                        header = "?";
                        text   = "Nothing happened.";
                    }
                    else if (value == 2)
                    {
                        header = "Invigorated";
                        text   = "You feel healthier.";
                        StatModifier mod = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.Health,
                            amount      = 1,
                            modifyType  = StatModifier.ModifyMethod.ADDITIVE,
                        };
                        user.ownerlessStatModifiers.Add(mod);
                        user.stats.RecalculateStats(user, true, false);
                    }
                    else if (value == 3)
                    {
                        header = "Overloaded";
                        text   = "The brew explodes.";
                        Exploder.DoDefaultExplosion(user.sprite.WorldCenter, new Vector2());
                    }
                    else if (value == 4)
                    {
                        header = "Pathetic";
                        text   = "You feel weaker.";
                        StatModifier mod = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.Damage,
                            amount      = -0.20f,
                            modifyType  = StatModifier.ModifyMethod.ADDITIVE,
                        };
                        StatModifier mod2 = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.ThrownGunDamage,
                            amount      = 0,
                            modifyType  = StatModifier.ModifyMethod.MULTIPLICATIVE,
                        };
                        user.ownerlessStatModifiers.Add(mod);
                        user.ownerlessStatModifiers.Add(mod2);
                        user.stats.RecalculateStats(user, true, false);
                    }
                    else if (value == 5)
                    {
                        header = "Fast Reaction";
                        text   = "Bullets are slow to you.";
                        StatModifier mod2 = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.EnemyProjectileSpeedMultiplier,
                            amount      = 0.90f,
                            modifyType  = StatModifier.ModifyMethod.MULTIPLICATIVE,
                        };
                        user.ownerlessStatModifiers.Add(mod2);
                        user.stats.RecalculateStats(user, true, false);
                    }
                    else if (value == 6)
                    {
                        header = "Slow Hands";
                        text   = "Slower charge and reload.";
                        StatModifier mod2 = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.ReloadSpeed,
                            amount      = 0.10f,
                            modifyType  = StatModifier.ModifyMethod.ADDITIVE,
                        };
                        StatModifier mod1 = new StatModifier
                        {
                            statToBoost = PlayerStats.StatType.ChargeAmountMultiplier,
                            amount      = -0.10f,
                            modifyType  = StatModifier.ModifyMethod.ADDITIVE,
                        };
                        user.ownerlessStatModifiers.Add(mod2);
                        user.ownerlessStatModifiers.Add(mod1);
                        user.stats.RecalculateStats(user, true, false);
                    }
                    else if (value == 7)
                    {
                        header = "Flammable";
                        text   = "You feel vulnerable to fire.";
                        DamageTypeModifier mod = new DamageTypeModifier
                        {
                            damageType       = CoreDamageTypes.Fire,
                            damageMultiplier = 2
                        };
                        user.healthHaver.damageTypeModifiers.Add(mod);
                    }
                    else if (value == 8)
                    {
                        header = "Obsidian Skin";
                        text   = "You feel immune to fire.";
                        DamageTypeModifier mod = new DamageTypeModifier
                        {
                            damageType       = CoreDamageTypes.Fire,
                            damageMultiplier = 0
                        };
                        user.healthHaver.damageTypeModifiers.Add(mod);
                    }
                    else if (value == 9)
                    {
                        header = "Bulletproof";
                        text   = "You feel almost invulnerable!";
                        void ModifyDamageEvent(HealthHaver healthHaver, HealthHaver.ModifyDamageEventArgs args)
                        {
                            if (args == EventArgs.Empty)
                            {
                                return;
                            }
                            if (UnityEngine.Random.value < 0.2f)
                            {
                                args.ModifiedDamage = 0f;
                            }
                        }

                        user.healthHaver.ModifyDamage += ModifyDamageEvent;
                    }

                    NoPseudosynergiesModule.Notify(header, text, self.sprite);
                }
            }
Example #37
0
 public virtual void ModifyStat(StatModifier mod, ref float update)
 {
     ModifyStat(mod);
     update = ModifiedValue;
 }
Example #38
0
 public void RemoveModifier(StatModifier mod)
 {
     modList.Remove(mod);
     mod.OnValueChange -= OnModValueChange;
 }
Example #39
0
 /// <summary>
 /// Compares orders of two StatModifier objects.
 /// </summary>
 /// <param name="a"></param>
 /// <param name="b"></param>
 private int CompareModifierOrder(StatModifier a, StatModifier b)
 {
     return(a.Order - b.Order);
 }
Example #40
0
        public string GetDisplayValue(float value, StatModifier mod)
        {
            var displayValue = new StringBuilder(mod == StatModifier.Add ? "+" : "x");
            switch (type)
            {
                case StatType.Flat:
                    displayValue.Append(value);
                    break;
                case StatType.Multiplier:
                case StatType.Proc:
                case StatType.Resistance:
                    displayValue.Append(mod == StatModifier.Add ? (value * 100).ToString() + "%"
                                                                : (1 + value).ToString());
                    break;
                case StatType.Turn:
                    displayValue.Append(mod == StatModifier.Add ? value + "/turn"
                                                                : value.ToString());
                    break;
            }

            return displayValue.ToString();
        }
Example #41
0
 /// <summary>
 /// Adds a modifier to StatModifier list.
 /// </summary>
 /// <param name="modifier"></param>
 public void AddModifier(StatModifier modifier)
 {
     Recaliberate = true;
     statModifiers.Add(modifier);
     statModifiers.Sort(CompareModifierOrder);
 }
Example #42
0
 public void RemoveModifier(StatModifier mod)
 {
     _stats.RemoveModifier(mod);
 }
Example #43
0
 public Effect(EffectType type, bool affectsCaster, StatModifier statMod)
 {
     effect = generateEffect(type, 0, affectsCaster, statMod, null);
 }