public void CastSpell(Fighter fighter, Game.Spells.WorldSpell spell, int level, int cellid) { Engines.Spells.SpellLevel spellLevel = spell.Template.Engine.GetLevel(level); if (fighter.CurrentAP >= spellLevel.CostPA) { if (!fighter.CanCastSpell(spellLevel.Engine.Spell.ID)) { fighter.Client.Action.SystemMessage("Le cooldown du sort n'est pas encore lever !"); return; } fighter.Send("GAS" + fighter.ID); fighter.CurrentAP -= spellLevel.CostPA; bool failedHit = false; if (Utilities.Basic.Rand(0, spellLevel.TauxEC) == 1) { failedHit = true; } if (!failedHit) { this.Send("GA;300;" + fighter.ID + ";" + spell.Template.ID + "," + cellid + "," + spell.Template.SpriteID + "," + level + "," + spell.Template.SpriteInfos); bool criticatHit = false; int tauxCC = spellLevel.TauxCC - fighter.Stats.CriticalBonus.Total; if (tauxCC < 2) tauxCC = 2; if (Utilities.Basic.Rand(0, tauxCC) == 1) { criticatHit = true; } if (fighter.IsHuman) { if (fighter.Client.Action.GodMode) { criticatHit = true; } } if (criticatHit && spellLevel.Effects.FindAll(x => x.Effect != Enums.SpellsEffects.DoNothing && x.Effect != Enums.SpellsEffects.None).Count > 0) { this.Send("GA;301;" + fighter.ID + ";" + spell.SpellID); this.ApplyEffects(fighter, spellLevel, spellLevel.Effects, cellid, criticatHit, false); } else { this.ApplyEffects(fighter, spellLevel, spellLevel.CriticalEffects, cellid, criticatHit, false); } //Apply new cooldown (FIXED IN THE 1.0.2.1) if (spellLevel.TurnNumber > 0) { if (!fighter.Cooldowns.ContainsKey(spellLevel.Engine.Spell.ID)) { fighter.Cooldowns.Add(spellLevel.Engine.Spell.ID, new FightSpellCooldown(spellLevel.Engine.Spell.ID, spellLevel.TurnNumber)); } } } else { this.Send("GA;302;" + fighter.ID + ";" + spell.SpellID); if (spellLevel.ECCanEndTurn) { FinishTurnRequest(fighter); } } this.Send("GA;102;" + fighter.ID + ";" + fighter.ID + ",-" + spellLevel.CostPA); fighter.Send("GAF0|" + fighter.ID); } else { fighter.Client.Action.SystemMessage("Le nombre de PA requis est supérieur aux votre actuellement !"); } }