Example #1
0
    void ActivateEffect(SkillPO dataPO)
    {
        if (dataPO.Effect.Length % 3 == 0)
        {
            for (int index = 0; index < dataPO.Effect.Length;)
            {
                string effectName = dataPO.Effect[index++];
                string boneName   = dataPO.Effect[index++];
                float  lifeTime   = dataPO.Effect[index++].ToFloat();
                self.AddEffect(effectName, boneName, lifeTime);
            }
        }

        if (dataPO.TriggerSound.Length == 2)
        {
            string sound   = dataPO.TriggerSound[0];
            int    percent = dataPO.TriggerSound[1].ToInt();
            int    seed    = Random.Range(1, 10000);
            if (seed > percent)
            {
                return;
            }
            Main.SoundController.FireEvent(sound);
        }
    }
 public virtual void Apply(Monster m)
 {
     foreach (StatusEffect e in effectsToApply)
     {
         Effect nextEffect = e.Instantiate();
         m.AddEffect(nextEffect);
     }
 }
Example #3
0
    public void Attack(ActionPart part)
    {
        float Attack   = MonsterUser.AfterEffectStats.x;
        float Defense  = MonsterTarget.AfterEffectStats.y;
        float STAB     = Type.SameTypeAttackBonus(MonsterUser.SourceLunen.Elements, Type);
        float Modifier = Type.TypeMatch(Type, MonsterTarget.SourceLunen.Elements);
        float Damage   = (3 + ((float)MonsterUser.Level / 100) * ((float)part.Power / 2) * (1 + Attack / 100) * (1 - (0.004f * Defense))) * STAB * Modifier;

        MonsterTarget.TakeDamage(Mathf.RoundToInt(Damage));
        MonsterTarget.PlayHurtSFXType = Modifier;

        if (MonsterTarget.CooldownDone)
        {
            MonsterTarget.TickUpMoveCooldowns(-1);
        }

        if (MonsterTarget.HasRetaliatoryEffects())
        {
            List <Effects> listOfRetaliatoryEffects = MonsterTarget.GetRetaliatoryEffects();
            foreach (Effects effect in listOfRetaliatoryEffects)
            {
                switch (effect.onTakingDamageDo)
                {
                case Effects.OnTakingDamageDo.InflictEffect:
                    MonsterUser.AddEffect(effect.OnTakeDamageEffect, effect.OnTakeDamageEffectDuration);
                    break;

                case Effects.OnTakingDamageDo.ReduceHealth:
                    int damageValue = 0;
                    if (effect.TakeDamageHealthReduction.StatChangeType == Effects.StatChange.NumberType.Percentage)
                    {
                        damageValue = (int)(MonsterUser.Health.z * (effect.TakeDamageHealthReduction.PercentageChange / 100));
                    }
                    else
                    {
                        damageValue = (effect.TakeDamageHealthReduction.HardNumberChange);
                    }
                    MonsterUser.TakeDamage(damageValue);
                    break;
                }
            }
        }

        MonsterTarget.CurrCooldown += (2f);
        MonsterTarget.CooldownDone  = false;
        if (MonsterTarget.MonsterTeam == Director.Team.PlayerTeam)
        {
            MonsterTarget.currentuiec.SetCollectionState(UITransition.State.Disable);
        }
        //Debug.Log(Damage);
    }
Example #4
0
        public override bool DoSpell(Point target)
        {
            Player  player  = Game.Dungeon.Player;
            Dungeon dungeon = Game.Dungeon;

            //Check the target is within FOV

            //Get the FOV from Dungeon (this also updates the map creature FOV state)
            CreatureFOV currentFOV = Game.Dungeon.CalculateCreatureFOV(player);

            //Is the target in FOV
            if (!currentFOV.CheckTileFOV(target.x, target.y))
            {
                LogFile.Log.LogEntryDebug("Target out of FOV", LogDebugLevel.Medium);
                Game.MessageQueue.AddMessage("Target is out of sight.");

                return(false);
            }

            //Check there is a monster at target
            SquareContents squareContents = dungeon.MapSquareContents(player.LocationLevel, target);

            //Is there no monster here? If so, then slow it
            if (squareContents.monster != null)
            {
                Monster targetM = squareContents.monster;


                LogFile.Log.LogEntryDebug("Slowing " + targetM.SingleDescription, LogDebugLevel.Medium);
                Game.MessageQueue.AddMessage("Slow Monster!");

                //Check magic resistance
                bool monsterResisted = CheckMagicResistance(targetM);
                if (monsterResisted)
                {
                    return(true);
                }

                //Add the slow monster effect
                int duration = 5 * Creature.turnTicks + Game.Random.Next(10 * Creature.turnTicks);
                targetM.AddEffect(new MonsterEffects.SlowDown(duration, targetM.Speed / 2));

                return(true);
            }

            Game.MessageQueue.AddMessage("No target for slow monster.");
            LogFile.Log.LogEntryDebug("No monster to target for Slow Monster", LogDebugLevel.Medium);
            return(false);
        }
    public void OnEquip(Monster m)
    {
        isEquipped = true;
        equippedTo = m;
        m.stats   += addedStats;                                       //Immediate stat benefit
        m.connections.RegenerateStats.AddListener(0, RegenerateStats); //Hook up for next regen

        //Clone effects, so they can reapply
        clonedEffects.Clear();
        foreach (StatusEffect e in addedEffects)
        {
            clonedEffects.Add(e.Instantiate());
        }

        m.AddEffect(clonedEffects.ToArray()); //Immediate status effect add
    }
Example #6
0
 public void ApplyStatusEffect(ActionPart part)
 {
     MonsterTarget.AddEffect(part.StatusEffect, part.StatusEffectTurns);
 }