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); } }
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); }
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 }
public void ApplyStatusEffect(ActionPart part) { MonsterTarget.AddEffect(part.StatusEffect, part.StatusEffectTurns); }