/// <summary> /// Delve Info for Spells (V1.110+) /// </summary> /// <param name="clt">Client</param> /// <param name="id">SpellID</param> /// <returns></returns> public static string DelveSpell(GameClient clt, int id) { var dw = new DelveWriter(); var spell = SkillBase.GetSpellByID(id); //if (spell != null && spellLine != null) { /* var spellLine = clt.Player.GetSpellLines()[lineId] as SpellLine; if (spellLine != null) { Spell spell = null; foreach (Spell spl in SkillBase.GetSpellList(spellLine.KeyName)) { if (spl.Level == level) { spell = spl; break; } }*/ //if (spell != null) { // NOT GOOD SOLUTION SPELLLINE IS BETTER INCLUDED IN SPELL ISpellHandler spellHandler = ScriptMgr.CreateSpellHandler(clt.Player, spell,SkillBase.GetSpellLine(GlobalSpellsLines.Mob_Spells)); if (spellHandler != null) { dw.Begin("Spell") .Value("Index", id) .Value("Name", spell.Name) //.Value("Function", spellHandler.FunctionName ?? "0") .Value("cast_timer", spell.CastTime - 2000, spell.CastTime > 2000) //minus 2 seconds (why mythic?) .Value("instant","1",spell.CastTime==0) //.Value("damage", spellHandler.GetDelveValueDamage, spellHandler.GetDelveValueDamage != 0) .Value("damage_type", (int) spell.DamageType + 1, (int) spell.DamageType > 0) // Damagetype not the same as dol //.Value("type1", spellHandler.GetDelveValueType1, spellHandler.GetDelveValueType1 > 0) .Value("level", spell.Level, spell.Level > 0) .Value("power_cost", spell.Power, spell.Power != 0) //.Value("round_cost",spellHandler.GetDelveValueRoundCost,spellHandler.GetDelveValueRoundCost!=0) //.Value("power_level", spellHandler.GetDelveValuePowerLevel,spellHandler.GetDelveValuePowerLevel!=0) .Value("range", spell.Range, spell.Range > 0) .Value("duration", spell.Duration/1000, spell.Duration > 0) //seconds .Value("dur_type", GetDurrationType(spell), GetDurrationType(spell) > 0) //.Value("parm",spellHandler.GetDelveValueParm,spellHandler.GetDelveValueParm>0) .Value("timer_value", spell.RecastDelay/1000, spell.RecastDelay > 1000) //.Value("bonus", spellHandler.GetDelveValueBonus, spellHandler.GetDelveValueBonus > 0) //.Value("no_combat"," ",Util.Chance(50))//TODO //.Value("link",14000) //.Value("ability",4) // ?? //.Value("use_timer",4) .Value("target", GetSpellTargetType(spell.Target), GetSpellTargetType(spell.Target) > 0) //.Value("frequency", spellHandler.GetDelveValueFrequency, spellHandler.GetDelveValueFrequency != 0) .Value("description_string", spell.Description, !string.IsNullOrEmpty(spell.Description)) .Value("radius", spell.Radius, spell.Radius > 0) .Value("concentration_points", spell.Concentration, spell.Concentration > 0) //.Value("num_targets", spellHandler.GetDelveValueNumTargets, spellHandler.GetDelveValueNumTargets>0) //.Value("no_interrupt", spell.Interruptable ? (char)0 : (char)1) //Buggy? ; //log.Info(dw.ToString()); return dw.ToString(); // } } } // not found return dw.Begin("Spell").Value("Name", "(not found)").Value("Index", id).ToString(); }
/// <summary> /// Delve Info for Songs (V1.110+) /// </summary> /// <param name="clt">Client</param> /// <param name="id">SpellID</param> /// <returns></returns> public static string DelveSong(GameClient clt, int id) { var dw = new DelveWriter(); Spell spell = SkillBase.GetSpellByID(id); if (spell != null) { dw.Begin("Song") .Value("Index", id) .Value("Name", spell.Name) .Value("effect", spell.ClientEffect) .Value("description_string", spell.Description, !string.IsNullOrEmpty(spell.Description)) ; //log.Info(dw.ToString()); return dw.ToString(); } // not found return dw.Begin("Song").Value("Name", "(not found)").Value("Index", id).ToString(); }