public void Save(XmlWriter writer)
{
switch (_actorType)
{
case ActorType.Enemy:
writer.WriteStartElement("Enemy");
break;
case ActorType.NPC:
writer.WriteStartElement("NPC");
break;
case ActorType.Player:
writer.WriteStartElement("Player");
break;
default:
writer.WriteStartElement("Actor");
break;
}
if (_id != -1)
writer.WriteAttributeString("id", _id.ToString());
if (_name != "")
writer.WriteAttributeString("name", _name);
if (_online != false)
writer.WriteAttributeString("online", _online.ToString());
if (_maxhealth != 100)
writer.WriteAttributeString("maxhp", Convert.ToString(_maxhealth));
if (_health != _maxhealth)
writer.WriteAttributeString("hp", Convert.ToString(_health));
if (_level != 0)
writer.WriteAttributeString("level", Convert.ToString(_level));
if (_mana != _maxMana)
writer.WriteAttributeString("mana", Convert.ToString(_mana));
if (_evade != 0)
writer.WriteAttributeString("evade", Convert.ToString(_evade));
if (_block != 0)
writer.WriteAttributeString("block", Convert.ToString(_block));
if (_penetrate != 0)
writer.WriteAttributeString("penetrate", Convert.ToString(_penetrate));
if (_animationFile != "")
writer.WriteAttributeString("file", Convert.ToString(_animationFile));
if (_healthReg != 0)
writer.WriteAttributeString("healthReg", Convert.ToString(_healthReg));
if (_skills != 0)
writer.WriteAttributeString("skills", Convert.ToString(_skills));
if (_abilityPoints != 0)
writer.WriteAttributeString("abilityPoints", Convert.ToString(_abilityPoints));
if (_armor != 0)
writer.WriteAttributeString("armor", Convert.ToString(_armor));
if (_stealHealth != 0) writer.WriteAttributeString("stealHealth", Convert.ToString(_stealHealth));
if (_stealMana != 0) writer.WriteAttributeString("stealMana", Convert.ToString(_stealMana));
if (_fireDamage != 0) writer.WriteAttributeString("fireDamage", Convert.ToString(_fireDamage));
if (_iceDamage != 0) writer.WriteAttributeString("iceDamage", Convert.ToString(_iceDamage));
if (_crazy) writer.WriteAttributeString("crazy", Convert.ToString(_crazy));
if (_ranged) writer.WriteAttributeString("ranged", Convert.ToString(_ranged));
if (_aggro) writer.WriteAttributeString("aggro", Convert.ToString(_aggro));
bool hasQuests = false;
if (this is Player && (this as Player).quests.Length > 0)
{
writer.WriteAttributeString("hasQuests", "1");
hasQuests = true;
}
if (_fireDefense > 0)
writer.WriteAttributeString("fireDefense", Convert.ToString(_fireDefense));
if (_fireDamage > 0)
writer.WriteAttributeString("iceDefense", Convert.ToString(_iceDefense));
writer.WriteAttributeString("expNeeded", Convert.ToString(_expNeeded));
writer.WriteAttributeString("exp", Convert.ToString(_exp));
if (_resist > 0)
writer.WriteAttributeString("resist", Convert.ToString(_resist));
if (_damage > 0)
writer.WriteAttributeString("damage", Convert.ToString(_damage));
if (_gold > 0)
writer.WriteAttributeString("gold", Convert.ToString(_gold));
if ((this is Player && (_lives > 0) && (_lastCheckpoint > 0)))
{
writer.WriteAttributeString("lastCheckpoint", Convert.ToString(_lastCheckpoint));
writer.WriteAttributeString("cpX", _checkPointCoords.x.ToString());
writer.WriteAttributeString("cpY", _checkPointCoords.y.ToString());
}
if (_manaReg > 0)
writer.WriteAttributeString("manaReg", Convert.ToString(_manaReg));
if (_maxMana != 100)
writer.WriteAttributeString("maxMana", Convert.ToString(_maxMana));
if (_destroyWeapon != 0)
writer.WriteAttributeString("destroyWeapon", Convert.ToString(_destroyWeapon));
if (_destroyArmor != 0)
writer.WriteAttributeString("destroyArmor", Convert.ToString(_destroyArmor));
if (_viewRange != 4)
writer.WriteAttributeString("viewRange", Convert.ToString(_viewRange));
if (_GUID != "") writer.WriteAttributeString("GUID", Convert.ToString(GUID));
if (_stunned != 0) writer.WriteAttributeString("stunned", Convert.ToString(_stunned));
if (_charmed != 0) writer.WriteAttributeString("charmed", Convert.ToString(_charmed));
if (_lives != -1) writer.WriteAttributeString("lives", Convert.ToString(_lives));
if (_direction != Direction.None) writer.WriteAttributeString("direction", Convert.ToString(direction));
if (_friendly) writer.WriteAttributeString("friendly", Convert.ToString(_friendly));
if (_scared != 0) writer.WriteAttributeString("scared", Convert.ToString(_scared));
if (actorType == ActorType.NPC)
{
NPC n = this as NPC;
if (n != null)
{
writer.WriteAttributeString("love", Convert.ToString(n.love));
writer.WriteAttributeString("hasShop", Convert.ToString(n.hasShop));
writer.WriteAttributeString("hasDialogue", Convert.ToString(n.hasDialog));
}
}
writer.WriteStartElement("Inventory");
foreach (Item item in _inventory)
{
if (!item.destroyed)
item.Save(writer);
}
writer.WriteEndElement();
writer.WriteStartElement("Abilities");
foreach (Ability ability in _abilities)
{
ability.Save(writer);
}
writer.WriteEndElement();
if (hasQuests)
{
writer.WriteStartElement("Quests");
foreach (Quest q in (this as Player).quests)
{
//TODO: Rewrite saving / loading of quests
/* if (!q.done)
{
writer.WriteStartElement("Quest");
writer.WriteAttributeString("type", q.type.ToString());
writer.WriteAttributeString("text", q.text.ToString());
writer.WriteAttributeString("xp", q.xp.ToString());
writer.WriteAttributeString("goal", q.goal.ToString());
writer.WriteStartElement("Items");
foreach (Item i in q.itemList)
{
i.Save(writer);
}
writer.WriteEndElement();
writer.WriteEndElement();
}*/
}
writer.WriteEndElement();
}
writer.WriteStartElement("Toolbar");
for (int i = 0; i < 10; ++i)
{
writer.WriteStartElement("Ability" + i.ToString());
writer.WriteAttributeString("id", _quicklist[i].ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndElement();
}