public static void Serialize(XmlWriter xWrite, Castable contents) { XmlSerializer Writer = new XmlSerializer(contents.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", "http://www.hybrasyl.com/XML/Actions"); Writer.Serialize(xWrite, contents, ns); }
public override void Attack(Castable castObject) { //do monster aoe }
public override void Attack(Castable castObject, Creature target = null) { //do monster spell }
public override void Attack(Castable castObject) { base.Attack(castObject); }
public override void Attack(Castable castObject, Creature target = null) { base.Attack(castObject, target); }
public override void Attack(Direction direction, Castable castObject = null, Creature target = null) { if (target != null) { var damage = castObject.Effects.Damage; if (damage.Formula == null) //will need to be expanded. also will need to account for damage scripts { var simple = damage.Simple; var damageType = EnumUtil.ParseEnum<Enums.DamageType>(damage.Type.ToString(), Enums.DamageType.Magical); Random rand = new Random(); var dmg = rand.Next(Convert.ToInt32(simple.Min), Convert.ToInt32(simple.Max)); //these need to be set to integers as attributes. note to fix. target.Damage(dmg, OffensiveElement, damageType, this); } else { var formula = damage.Formula; var damageType = EnumUtil.ParseEnum<Enums.DamageType>(damage.Type.ToString(), Enums.DamageType.Magical); FormulaParser parser = new FormulaParser(this, castObject, target); var dmg = parser.Eval(formula); target.Damage(dmg, OffensiveElement, damageType, this); } } }
public bool AddSpell(Castable item, byte slot) { // Quantity check - if we already have an item with the same name, will // adding the MaximumStack) if (SpellBook.Contains(item.Id)) { SendSystemMessage("You already know this spell."); return false; } Logger.DebugFormat("Attempting to add spell to spellbook slot {0}", slot); if (!SpellBook.Insert(slot, item)) { Logger.DebugFormat("Slot was invalid or not null"); return false; } SendSpellUpdate(item, slot); return true; }
public bool AddSpell(Castable castable) { if (SpellBook.IsFull) { SendSystemMessage("You cannot learn any more spells."); return false; } return AddSkill(castable, SkillBook.FindEmptySlot()); }
public void SendSpellUpdate(Castable item, int slot) { if (item == null) { SendClearSkill(slot); return; } Logger.DebugFormat("Adding spell {0} to slot {2}", item.Name, slot); var x17 = new ServerPacket(0x17); x17.WriteByte((byte)slot); x17.WriteUInt16((ushort)(item.Icon)); x17.WriteByte(0x00); //spell type? how are we determining this? x17.WriteString8(item.Name); x17.WriteString8(item.Name); //prompt? what is this? x17.WriteByte((byte)item.Lines); x17.WriteByte(0); //current level x17.WriteByte((byte)100); //this will need to be updated Enqueue(x17); }
public void SendSkillUpdate(Castable item, int slot) { if(item == null) { SendClearSkill(slot); return; } Logger.DebugFormat("Adding skill {0} to slot {2}", item.Name, slot); var x2C = new ServerPacket(0x2C); x2C.WriteByte((byte)slot); x2C.WriteUInt16((ushort)(item.Icon)); x2C.WriteString8(item.Name); x2C.WriteByte(0); //current level x2C.WriteByte((byte)100); //this will need to be updated Enqueue(x2C); }
public FormulaParser(Creature caster, Castable castable, Creature target = null) { _caster = caster; _castable = castable; _target = target; }
public static Castable Deserialize(XmlReader reader, Castable contents = null) { if (contents == null) contents = new Castable(); //reader.Settings.IgnoreWhitespace = false; XmlSerializer XmlSerial = new XmlSerializer(contents.GetType()); if (XmlSerial.CanDeserialize(reader)) { var xContents = XmlSerial.Deserialize(reader); contents = (Castable)xContents; } return contents; }