fix: Changes on Animals to use code generation (#1306)

This commit is contained in:
Arutosio 2022-12-21 08:31:44 +01:00 • committed by GitHub
parent 7a1d5131c8
commit 6eebf358da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
176 changed files with 1177 additions and 2479 deletions

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Bear")]
public class BlackBear : BaseCreature
[SerializationGenerator(0, false)]
public partial class BlackBear : BaseCreature
{
[Constructible]
public BlackBear() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 35.1;
}
public BlackBear(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bear corpse";
public override string DefaultName => "a black bear";
@ -49,19 +48,5 @@ namespace Server.Mobiles
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.Fish | FoodType.Meat | FoodType.FruitsAndVegies;
public override PackInstinct PackInstinct => PackInstinct.Bear;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class BrownBear : BaseCreature
[SerializationGenerator(0, false)]
public partial class BrownBear : BaseCreature
{
[Constructible]
public BrownBear() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -37,10 +40,6 @@ namespace Server.Mobiles
MinTameSkill = 41.1;
}
public BrownBear(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bear corpse";
public override string DefaultName => "a brown bear";
@ -48,19 +47,5 @@ namespace Server.Mobiles
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Bear;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Grizzlybear")]
public class GrizzlyBear : BaseCreature
[SerializationGenerator(0, false)]
public partial class GrizzlyBear : BaseCreature
{
[Constructible]
public GrizzlyBear() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = 59.1;
}
public GrizzlyBear(Serial serial) : base(serial)
{
}
public override string CorpseName => "a grizzly bear corpse";
public override string DefaultName => "a grizzly bear";
@ -50,19 +49,5 @@ namespace Server.Mobiles
public override int Hides => 16;
public override FoodType FavoriteFood => FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Bear;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Polarbear")]
public class PolarBear : BaseCreature
[SerializationGenerator(0, false)]
public partial class PolarBear : BaseCreature
{
[Constructible]
public PolarBear() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = 35.1;
}
public PolarBear(Serial serial) : base(serial)
{
}
public override string CorpseName => "a polar bear corpse";
public override string DefaultName => "a polar bear";
@ -50,19 +49,5 @@ namespace Server.Mobiles
public override int Hides => 16;
public override FoodType FavoriteFood => FoodType.Fish | FoodType.FruitsAndVegies | FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Bear;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Chicken : BaseCreature
[SerializationGenerator(0, false)]
public partial class Chicken : BaseCreature
{
[Constructible]
public Chicken() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -35,10 +38,6 @@ namespace Server.Mobiles
MinTameSkill = -0.9;
}
public Chicken(Serial serial) : base(serial)
{
}
public override string CorpseName => "a chicken corpse";
public override string DefaultName => "a chicken";
@ -48,19 +47,5 @@ namespace Server.Mobiles
public override bool CanFly => true;
public override int Feathers => 25;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Crane : BaseCreature
[SerializationGenerator(0, false)]
public partial class Crane : BaseCreature
{
[Constructible]
public Crane() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -31,10 +34,6 @@ namespace Server.Mobiles
VirtualArmor = 5;
}
public Crane(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bird corpse";
public override string DefaultName => "a crane";
@ -50,19 +49,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0x4DA;
public override int GetDeathSound() => 0x4D6;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Eagle : BaseCreature
[SerializationGenerator(0, false)]
public partial class Eagle : BaseCreature
{
[Constructible]
public Eagle() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = 17.1;
}
public Eagle(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bird corpse";
public override string DefaultName => "an eagle";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int Feathers => 36;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
public override bool CanFly => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Phoenix : BaseCreature
[SerializationGenerator(0, false)]
public partial class Phoenix : BaseCreature
{
[Constructible]
public Phoenix() : base(AIType.AI_Mage, FightMode.Aggressor)
@ -38,10 +41,6 @@ namespace Server.Mobiles
VirtualArmor = 60;
}
public Phoenix(Serial serial) : base(serial)
{
}
public override string CorpseName => "a phoenix corpse";
public override string DefaultName => "a phoenix";
@ -55,17 +54,5 @@ namespace Server.Mobiles
AddLoot(LootPack.FilthyRich);
AddLoot(LootPack.Rich);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Direwolf")]
public class DireWolf : BaseCreature
[SerializationGenerator(0, false)]
public partial class DireWolf : BaseCreature
{
[Constructible]
public DireWolf() : base(AIType.AI_Melee)
@ -40,10 +43,6 @@ namespace Server.Mobiles
MinTameSkill = 83.1;
}
public DireWolf(Serial serial) : base(serial)
{
}
public override string CorpseName => "a dire wolf corpse";
public override string DefaultName => "a dire wolf";
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override HideType HideType => HideType.Spined;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Canine;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Greywolf")]
public class GreyWolf : BaseCreature
[SerializationGenerator(0, false)]
public partial class GreyWolf : BaseCreature
{
[Constructible]
public GreyWolf() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -40,10 +43,6 @@ namespace Server.Mobiles
MinTameSkill = 53.1;
}
public GreyWolf(Serial serial) : base(serial)
{
}
public override string CorpseName => "a grey wolf corpse";
public override string DefaultName => "a grey wolf";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int Hides => 6;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Canine;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Timberwolf")]
public class TimberWolf : BaseCreature
[SerializationGenerator(0, false)]
public partial class TimberWolf : BaseCreature
{
[Constructible]
public TimberWolf() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -40,10 +43,6 @@ namespace Server.Mobiles
MinTameSkill = 23.1;
}
public TimberWolf(Serial serial) : base(serial)
{
}
public override string CorpseName => "a timber wolf corpse";
public override string DefaultName => "a timber wolf";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int Hides => 5;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Canine;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Whitewolf")]
public class WhiteWolf : BaseCreature
[SerializationGenerator(0, false)]
public partial class WhiteWolf : BaseCreature
{
[Constructible]
public WhiteWolf() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -40,10 +43,6 @@ namespace Server.Mobiles
MinTameSkill = 65.1;
}
public WhiteWolf(Serial serial) : base(serial)
{
}
public override string CorpseName => "a white wolf corpse";
public override string DefaultName => "a white wolf";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int Hides => 6;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Canine;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Bull : BaseCreature
[SerializationGenerator(0, false)]
public partial class Bull : BaseCreature
{
[Constructible]
public Bull() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -41,10 +44,6 @@ namespace Server.Mobiles
MinTameSkill = 71.1;
}
public Bull(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bull corpse";
public override string DefaultName => "a bull";
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override int Hides => 15;
public override FoodType FavoriteFood => FoodType.GrainsAndHay;
public override PackInstinct PackInstinct => PackInstinct.Bull;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,9 +1,20 @@
using ModernUO.Serialization;
using System;
namespace Server.Mobiles
{
public class Cow : BaseCreature
[SerializationGenerator(0, false)]
public partial class Cow : BaseCreature
{
[SerializedCommandProperty(AccessLevel.GameMaster)]
[SerializableField(0)]
public DateTime _milkedOn;
[SerializedCommandProperty(AccessLevel.GameMaster)]
[SerializableField(1)]
public int _milk;
[Constructible]
public Cow() : base(AIType.AI_Animal, FightMode.Aggressor)
{
@ -44,18 +55,7 @@ namespace Server.Mobiles
}
}
public Cow(Serial serial) : base(serial)
{
}
public override string CorpseName => "a cow corpse";
[CommandProperty(AccessLevel.GameMaster)]
public DateTime MilkedOn { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Milk { get; set; }
public override string DefaultName => "a cow";
public override int Meat => 8;
@ -119,28 +119,5 @@ namespace Server.Mobiles
return false;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
writer.Write(MilkedOn);
writer.Write(Milk);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version > 0)
{
MilkedOn = reader.ReadDateTime();
Milk = reader.ReadInt();
}
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Cougar : BaseCreature
[SerializationGenerator(0, false)]
public partial class Cougar : BaseCreature
{
[Constructible]
public Cougar() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 41.1;
}
public Cougar(Serial serial) : base(serial)
{
}
public override string CorpseName => "a cougar corpse";
public override string DefaultName => "a cougar";
@ -49,19 +48,5 @@ namespace Server.Mobiles
public override int Hides => 10;
public override FoodType FavoriteFood => FoodType.Fish | FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Feline;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Hellcat")]
public class HellCat : BaseCreature
[SerializationGenerator(0, false)]
public partial class HellCat : BaseCreature
{
[Constructible]
public HellCat() : base(AIType.AI_Melee)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = 71.1;
}
public HellCat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a hell cat corpse";
public override string DefaultName => "a hell cat";
@ -58,19 +57,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Meager);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Panther : BaseCreature
[SerializationGenerator(0, false)]
public partial class Panther : BaseCreature
{
[Constructible]
public Panther() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = 53.1;
}
public Panther(Serial serial) : base(serial)
{
}
public override string CorpseName => "a panther corpse";
public override string DefaultName => "a panther";
@ -50,19 +49,5 @@ namespace Server.Mobiles
public override int Hides => 10;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
public override PackInstinct PackInstinct => PackInstinct.Feline;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Preditorhellcat")]
public class PredatorHellCat : BaseCreature
[SerializationGenerator(0, false)]
public partial class PredatorHellCat : BaseCreature
{
[Constructible]
public PredatorHellCat() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 89.1;
}
public PredatorHellCat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a hell cat corpse";
public override string DefaultName => "a hell cat";
public override int Hides => 10;
@ -56,19 +55,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Average);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Snowleopard")]
public class SnowLeopard : BaseCreature
[SerializationGenerator(0, false)]
public partial class SnowLeopard : BaseCreature
{
[Constructible]
public SnowLeopard() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -40,10 +43,6 @@ namespace Server.Mobiles
MinTameSkill = 53.1;
}
public SnowLeopard(Serial serial) : base(serial)
{
}
public override string CorpseName => "a leopard corpse";
public override string DefaultName => "a snow leopard";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int Hides => 8;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
public override PackInstinct PackInstinct => PackInstinct.Feline;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Boar : BaseCreature
[SerializationGenerator(0, false)]
public partial class Boar : BaseCreature
{
[Constructible]
public Boar() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -37,28 +40,10 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public Boar(Serial serial) : base(serial)
{
}
public override string CorpseName => "a pig corpse";
public override string DefaultName => "a boar";
public override int Meat => 2;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Bullfrog")]
public class BullFrog : BaseCreature
[SerializationGenerator(0,false)]
public partial class BullFrog : BaseCreature
{
[Constructible]
public BullFrog() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -37,10 +40,6 @@ namespace Server.Mobiles
MinTameSkill = 23.1;
}
public BullFrog(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bull frog corpse";
public override string DefaultName => "a bull frog";
@ -52,19 +51,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Dolphin : BaseCreature
[SerializationGenerator(0, false)]
public partial class Dolphin : BaseCreature
{
[Constructible]
public Dolphin()
@ -37,11 +40,6 @@ namespace Server.Mobiles
CantWalk = true;
}
public Dolphin(Serial serial)
: base(serial)
{
}
public override string CorpseName => "a dolphin corpse";
public override string DefaultName => "a dolphin";
@ -76,19 +74,5 @@ namespace Server.Mobiles
base.OnThink();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,8 +1,10 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
public class Gaman : BaseCreature
[SerializationGenerator(0, false)]
public partial class Gaman : BaseCreature
{
[Constructible]
public Gaman() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -38,10 +40,6 @@ namespace Server.Mobiles
MinTameSkill = 68.7;
}
public Gaman(Serial serial) : base(serial)
{
}
public override string CorpseName => "a gaman corpse";
public override string DefaultName => "a gaman";
@ -64,17 +62,5 @@ namespace Server.Mobiles
base.OnDeath(c);
c.DropItem(new GamanHorns(Utility.RandomBool() ? 1 : 2));
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Gianttoad")]
public class GiantToad : BaseCreature
[SerializationGenerator(0, false)]
public partial class GiantToad : BaseCreature
{
[Constructible]
public GiantToad() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 77.1;
}
public GiantToad(Serial serial) : base(serial)
{
}
public override string CorpseName => "a giant toad corpse";
public override string DefaultName => "a giant toad";
@ -53,24 +52,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version < 1)
{
AI = AIType.AI_Melee;
FightMode = FightMode.Closest;
}
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Goat : BaseCreature
[SerializationGenerator(0, false)]
public partial class Goat : BaseCreature
{
[Constructible]
public Goat() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -35,29 +38,11 @@ namespace Server.Mobiles
MinTameSkill = 11.1;
}
public Goat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a goat corpse";
public override string DefaultName => "a goat";
public override int Meat => 2;
public override int Hides => 8;
public override FoodType FavoriteFood => FoodType.GrainsAndHay | FoodType.FruitsAndVegies;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Gorilla : BaseCreature
[SerializationGenerator(0, false)]
public partial class Gorilla : BaseCreature
{
[Constructible]
public Gorilla() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -37,29 +40,11 @@ namespace Server.Mobiles
MinTameSkill = -18.9;
}
public Gorilla(Serial serial) : base(serial)
{
}
public override string CorpseName => "a gorilla corpse";
public override string DefaultName => "a gorilla";
public override int Meat => 1;
public override int Hides => 6;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Greathart")]
public class GreatHart : BaseCreature
[SerializationGenerator(0, false)]
public partial class GreatHart : BaseCreature
{
[Constructible]
public GreatHart() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -36,10 +39,6 @@ namespace Server.Mobiles
MinTameSkill = 59.1;
}
public GreatHart(Serial serial) : base(serial)
{
}
public override string CorpseName => "a deer corpse";
public override string DefaultName => "a great hart";
@ -52,19 +51,6 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0x83;
public override int GetDeathSound() => 0x84;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Hind : BaseCreature
[SerializationGenerator(0, false)]
public partial class Hind : BaseCreature
{
[Constructible]
public Hind() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -35,10 +38,6 @@ namespace Server.Mobiles
MinTameSkill = 23.1;
}
public Hind(Serial serial) : base(serial)
{
}
public override string CorpseName => "a deer corpse";
public override string DefaultName => "a hind";
@ -51,19 +50,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0x83;
public override int GetDeathSound() => 0x84;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Llama : BaseCreature
[SerializationGenerator(0, false)]
public partial class Llama : BaseCreature
{
[Constructible]
public Llama() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -35,29 +38,11 @@ namespace Server.Mobiles
MinTameSkill = 35.1;
}
public Llama(Serial serial) : base(serial)
{
}
public override string CorpseName => "a llama corpse";
public override string DefaultName => "a llama";
public override int Meat => 1;
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class MountainGoat : BaseCreature
[SerializationGenerator(0, false)]
public partial class MountainGoat : BaseCreature
{
[Constructible]
public MountainGoat() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,29 +42,11 @@ namespace Server.Mobiles
MinTameSkill = -0.9;
}
public MountainGoat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a mountain goat corpse";
public override string DefaultName => "a mountain goat";
public override int Meat => 2;
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.GrainsAndHay | FoodType.FruitsAndVegies;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Items;
namespace Server.Mobiles
{
public class PackHorse : BaseCreature
[SerializationGenerator(0, false)]
public partial class PackHorse : BaseCreature
{
[Constructible]
public PackHorse() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -53,10 +55,6 @@ namespace Server.Mobiles
AddItem(pack);
}
public PackHorse(Serial serial) : base(serial)
{
}
public override string CorpseName => "a horse corpse";
public override string DefaultName => "a pack horse";
@ -64,20 +62,6 @@ namespace Server.Mobiles
public override int Hides => 10;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
public override bool OnBeforeDeath()
{
if (!base.OnBeforeDeath())

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Items;
namespace Server.Mobiles
{
public class PackLlama : BaseCreature
[SerializationGenerator(0, false)]
public partial class PackLlama : BaseCreature
{
[Constructible]
public PackLlama() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -53,30 +55,12 @@ namespace Server.Mobiles
AddItem(pack);
}
public PackLlama(Serial serial) : base(serial)
{
}
public override string CorpseName => "a llama corpse";
public override string DefaultName => "a pack llama";
public override int Meat => 1;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
public override bool OnBeforeDeath()
{
if (!base.OnBeforeDeath())

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Pig : BaseCreature
[SerializationGenerator(0, false)]
public partial class Pig : BaseCreature
{
[Constructible]
public Pig() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -35,28 +38,10 @@ namespace Server.Mobiles
MinTameSkill = 11.1;
}
public Pig(Serial serial) : base(serial)
{
}
public override string CorpseName => "a pig corpse";
public override string DefaultName => "a pig";
public override int Meat => 1;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,13 +1,14 @@
using ModernUO.Serialization;
using System;
using Server.Items;
using Server.Network;
using System.Runtime.CompilerServices;
namespace Server.Mobiles
{
public class Sheep : BaseCreature, ICarvable
[SerializationGenerator(0, false)]
public partial class Sheep : BaseCreature, ICarvable
{
private DateTime m_NextWoolTime;
[Constructible]
public Sheep() : base(AIType.AI_Animal, FightMode.Aggressor)
{
@ -41,23 +42,24 @@ namespace Server.Mobiles
MinTameSkill = 11.1;
}
public Sheep(Serial serial) : base(serial)
{
}
public override string CorpseName => "a sheep corpse";
[CommandProperty(AccessLevel.GameMaster)]
[SerializableProperty(0)]
public DateTime NextWoolTime
{
get => m_NextWoolTime;
get => _nextWoolTime;
set
{
m_NextWoolTime = value;
Body = Core.Now >= m_NextWoolTime ? 0xCF : 0xDF;
_nextWoolTime = value;
SheepBody();
this.MarkDirty();
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void SheepBody() => Body = Core.Now >= _nextWoolTime ? 0xCF : 0xDF;
public override string DefaultName => "a sheep";
public override int Meat => 3;
@ -68,7 +70,7 @@ namespace Server.Mobiles
public void Carve(Mobile from, Item item)
{
if (Core.Now < m_NextWoolTime)
if (Core.Now < _nextWoolTime)
{
// This sheep is not yet ready to be shorn.
PrivateOverheadMessage(MessageType.Regular, 0x3B2, 500449, from.NetState);
@ -84,32 +86,13 @@ namespace Server.Mobiles
public override void OnThink()
{
base.OnThink();
Body = Core.Now >= m_NextWoolTime ? 0xCF : 0xDF;
SheepBody();
}
public override void Serialize(IGenericWriter writer)
[AfterDeserialization]
private void AfterDeserialization()
{
base.Serialize(writer);
writer.Write(1);
writer.WriteDeltaTime(m_NextWoolTime);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 1:
{
NextWoolTime = reader.ReadDeltaTime();
break;
}
}
SheepBody();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Walrus : BaseCreature
[SerializationGenerator(0, false)]
public partial class Walrus : BaseCreature
{
[Constructible]
public Walrus() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,29 +42,11 @@ namespace Server.Mobiles
MinTameSkill = 35.1;
}
public Walrus(Serial serial) : base(serial)
{
}
public override string CorpseName => "a walrus corpse";
public override string DefaultName => "a walrus";
public override int Meat => 1;
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.Fish;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,3 +1,4 @@
using ModernUO.Serialization;
using System;
using Server.Items;
using Server.Multis;
@ -6,10 +7,9 @@ using Server.Targeting;
namespace Server.Mobiles
{
public abstract class BaseMount : BaseCreature, IMount
[SerializationGenerator(0, false)]
public abstract partial class BaseMount : BaseCreature, IMount
{
private Mobile m_Rider;
public BaseMount(
int bodyID, int itemID, AIType aiType, FightMode fightMode = FightMode.Closest,
int rangePerception = 10, int rangeFight = 1
@ -20,17 +20,15 @@ namespace Server.Mobiles
InternalItem = new MountItem(this, itemID);
}
public BaseMount(Serial serial)
: base(serial)
{
}
public virtual TimeSpan MountAbilityDelay => TimeSpan.Zero;
[CommandProperty(AccessLevel.GameMaster)]
public DateTime NextMountAbility { get; set; }
[SerializedCommandProperty(AccessLevel.GameMaster)]
[SerializableField(0)]
public DateTime _nextMountAbility;
protected Item InternalItem { get; private set; }
[SerializedCommandProperty(AccessLevel.GameMaster)]
[SerializableField(2)]
protected Item _internalItem;
public virtual bool AllowMaleRider => true;
public virtual bool AllowFemaleRider => true;
@ -65,25 +63,26 @@ namespace Server.Mobiles
}
[CommandProperty(AccessLevel.GameMaster)]
[SerializableProperty(1)]
public Mobile Rider
{
get => m_Rider;
get => _rider;
set
{
if (m_Rider != value)
if (_rider != value)
{
if (value == null)
{
var loc = m_Rider.Location;
var map = m_Rider.Map;
var loc = _rider.Location;
var map = _rider.Map;
if (map == null || map == Map.Internal)
{
loc = m_Rider.LogoutLocation;
map = m_Rider.LogoutMap;
loc = _rider.LogoutLocation;
map = _rider.LogoutMap;
}
Direction = m_Rider.Direction;
Direction = _rider.Direction;
Location = loc;
Map = map;
@ -91,9 +90,9 @@ namespace Server.Mobiles
}
else
{
if (m_Rider != null)
if (_rider != null)
{
Dismount(m_Rider);
Dismount(_rider);
}
Dismount(value);
@ -113,21 +112,22 @@ namespace Server.Mobiles
}
}
m_Rider = value;
_rider = value;
this.MarkDirty();
}
}
}
public virtual void OnRiderDamaged(int amount, Mobile from, bool willKill)
{
if (m_Rider == null)
if (_rider == null)
{
return;
}
var attacker = from ?? m_Rider.FindMostRecentDamager(true);
var attacker = from ?? _rider.FindMostRecentDamager(true);
if (!(attacker == this || attacker == m_Rider || willKill || Core.Now < NextMountAbility)
if (!(attacker == this || attacker == _rider || willKill || Core.Now < NextMountAbility)
&& DoMountAbility(amount, from))
{
NextMountAbility = Core.Now + MountAbilityDelay;
@ -155,43 +155,12 @@ namespace Server.Mobiles
base.OnDelete();
}
public override void Serialize(IGenericWriter writer)
[AfterDeserialization(false)]
private void AfterDeserialize()
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write(NextMountAbility);
writer.Write(m_Rider);
writer.Write(InternalItem);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
if (InternalItem == null)
{
case 1:
{
NextMountAbility = reader.ReadDateTime();
goto case 0;
}
case 0:
{
m_Rider = reader.ReadEntity<Mobile>();
InternalItem = reader.ReadEntity<Item>();
if (InternalItem == null)
{
Delete();
}
break;
}
Delete();
}
}
@ -327,72 +296,48 @@ namespace Server.Mobiles
public virtual bool DoMountAbility(int damage, Mobile attacker) => false;
}
public class MountItem : Item, IMountItem
[SerializationGenerator(0, false)]
public partial class MountItem : Item, IMountItem
{
private BaseMount m_Mount;
private BaseMount _mount;
public MountItem(BaseMount mount, int itemID) : base(itemID)
{
Layer = Layer.Mount;
Movable = false;
m_Mount = mount;
}
public MountItem(Serial serial) : base(serial)
{
_mount = mount;
}
public override double DefaultWeight => 0;
public IMount Mount => m_Mount;
[SerializableProperty(0, useField: nameof(_mount))]
public IMount Mount => _mount;
public override void OnAfterDelete()
{
m_Mount?.Delete();
m_Mount = null;
_mount?.Delete();
_mount = null;
base.OnAfterDelete();
}
public override DeathMoveResult OnParentDeath(Mobile parent)
{
if (m_Mount != null)
if (_mount != null)
{
m_Mount.Rider = null;
_mount.Rider = null;
}
return DeathMoveResult.RemainEquipped;
}
public override void Serialize(IGenericWriter writer)
[AfterDeserialization(false)]
private void AfterDeserialize()
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Mount);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
if (_mount == null)
{
case 0:
{
m_Mount = reader.ReadEntity<BaseMount>();
if (m_Mount == null)
{
Delete();
}
break;
}
Delete();
}
}
}

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Items;
namespace Server.Mobiles
{
public class Beetle : BaseMount
[SerializationGenerator(0, false)]
public partial class Beetle : BaseMount
{
public override string DefaultName => "a giant beetle";
@ -48,10 +50,6 @@ namespace Server.Mobiles
AddItem(pack);
}
public Beetle(Serial serial) : base(serial)
{
}
public override string CorpseName => "a giant beetle corpse";
public virtual double BoostedSpeed => 0.1;
@ -86,20 +84,6 @@ namespace Server.Mobiles
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
public override bool OnBeforeDeath()
{
if (!base.OnBeforeDeath())

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class DesertOstard : BaseMount
[SerializationGenerator(0, false)]
public partial class DesertOstard : BaseMount
{
public override string DefaultName => "a desert ostard";
@ -35,28 +38,10 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public DesertOstard(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ostard corpse";
public override int Meat => 3;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override PackInstinct PackInstinct => PackInstinct.Ostard;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,3 +1,4 @@
using ModernUO.Serialization;
using System;
using Server.Engines.VeteranRewards;
using Server.Multis;
@ -5,75 +6,67 @@ using Server.Spells;
namespace Server.Mobiles
{
public class EtherealMount : Item, IMount, IMountItem, IRewardItem
[SerializationGenerator(3, false)]
public partial class EtherealMount : Item, IMount, IMountItem, IRewardItem
{
private bool m_IsDonationItem;
private int m_MountedID;
private int m_RegularID;
private Mobile m_Rider;
[SerializableField(0)]
[SerializedCommandProperty(AccessLevel.GameMaster, AccessLevel.Administrator)]
public bool _isDonationItem;
[SerializableField(1)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
public bool _isRewardItem;
[Constructible]
public EtherealMount(int itemID, int mountID) : base(itemID)
{
m_MountedID = mountID;
m_RegularID = itemID;
m_Rider = null;
_mountedID = mountID;
_regularID = itemID;
_rider = null;
Layer = Layer.Invalid;
LootType = LootType.Blessed;
}
public EtherealMount(Serial serial)
: base(serial)
{
}
public override double DefaultWeight => 1.0;
[CommandProperty(AccessLevel.GameMaster, AccessLevel.Administrator)]
public bool IsDonationItem
{
get => m_IsDonationItem;
set
{
m_IsDonationItem = value;
InvalidateProperties();
}
}
[SerializableProperty(2)]
[CommandProperty(AccessLevel.GameMaster)]
public int MountedID
{
get => m_MountedID;
get => _mountedID;
set
{
if (m_MountedID != value)
if (_mountedID != value)
{
m_MountedID = value;
_mountedID = value;
if (m_Rider != null)
if (_rider != null)
{
ItemID = value;
}
this.MarkDirty();
}
}
}
[SerializableProperty(3)]
[CommandProperty(AccessLevel.GameMaster)]
public int RegularID
{
get => m_RegularID;
get => _regularID;
set
{
if (m_RegularID != value)
if (_regularID != value)
{
m_RegularID = value;
_regularID = value;
if (m_Rider == null)
if (_rider == null)
{
ItemID = value;
}
this.MarkDirty();
}
}
}
@ -84,13 +77,14 @@ namespace Server.Mobiles
public virtual int EtherealHue => 0x4001;
[SerializableProperty(4)]
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Rider
{
get => m_Rider;
get => _rider;
set
{
if (value != m_Rider)
if (value != _rider)
{
if (value == null)
{
@ -98,23 +92,25 @@ namespace Server.Mobiles
UnmountMe();
RemoveFollowers();
m_Rider = null;
_rider = null;
}
else
{
if (m_Rider != null)
if (_rider != null)
{
Dismount(m_Rider);
Dismount(_rider);
}
Dismount(value);
RemoveFollowers();
m_Rider = value;
_rider = value;
AddFollowers();
MountMe();
}
this.MarkDirty();
}
}
}
@ -125,14 +121,11 @@ namespace Server.Mobiles
public IMount Mount => this;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void GetProperties(IPropertyList list)
{
base.GetProperties(list);
if (m_IsDonationItem)
if (_isDonationItem)
{
list.Add("Donation Ethereal");
list.Add("7.5 sec slower cast time if not a 9mo. Veteran");
@ -146,17 +139,17 @@ namespace Server.Mobiles
public void RemoveFollowers()
{
if (m_Rider != null)
if (_rider != null)
{
m_Rider.Followers -= Math.Min(m_Rider.Followers, FollowerSlots);
_rider.Followers -= Math.Min(_rider.Followers, FollowerSlots);
}
}
public void AddFollowers()
{
if (m_Rider != null)
if (_rider != null)
{
m_Rider.Followers += FollowerSlots;
_rider.Followers += FollowerSlots;
}
}
@ -212,66 +205,26 @@ namespace Server.Mobiles
{
base.OnSingleClick(from);
LabelTo(from, m_IsDonationItem ? "Donation Ethereal" : "Veteran Reward");
LabelTo(from, _isDonationItem ? "Donation Ethereal" : "Veteran Reward");
}
public override void Serialize(IGenericWriter writer)
private void Deserialize(IGenericReader reader, int version)
{
base.Serialize(writer);
writer.Write(3); // version
writer.Write(m_IsDonationItem);
writer.Write(IsRewardItem);
writer.Write(m_MountedID);
writer.Write(m_RegularID);
writer.Write(m_Rider);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
LootType = LootType.Blessed;
var version = reader.ReadInt();
switch (version)
_isDonationItem = reader.ReadBool();
_isRewardItem = reader.ReadBool();
_mountedID = reader.ReadInt();
_regularID = reader.ReadInt();
_rider = reader.ReadEntity<Mobile>();
if (_mountedID == 0x3EA2)
{
case 3:
{
m_IsDonationItem = reader.ReadBool();
goto case 2;
}
case 2:
{
IsRewardItem = reader.ReadBool();
goto case 0;
}
case 1:
reader.ReadInt();
goto case 0;
case 0:
{
m_MountedID = reader.ReadInt();
m_RegularID = reader.ReadInt();
m_Rider = reader.ReadEntity<Mobile>();
if (m_MountedID == 0x3EA2)
{
m_MountedID = 0x3EAA;
}
break;
}
_mountedID = 0x3EAA;
}
}
[AfterDeserialization]
private void AfterDeserialize()
{
AddFollowers();
if (version < 3 && Weight == 0)
{
Weight = -1;
}
}
public override DeathMoveResult OnParentDeath(Mobile parent)
@ -293,9 +246,9 @@ namespace Server.Mobiles
public void UnmountMe()
{
var bp = m_Rider.Backpack;
var bp = _rider.Backpack;
ItemID = m_RegularID;
ItemID = _regularID;
Layer = Layer.Invalid;
Movable = true;
@ -310,13 +263,13 @@ namespace Server.Mobiles
}
else
{
var loc = m_Rider.Location;
var map = m_Rider.Map;
var loc = _rider.Location;
var map = _rider.Map;
if (map == null || map == Map.Internal)
{
loc = m_Rider.LogoutLocation;
map = m_Rider.LogoutMap;
loc = _rider.LogoutLocation;
map = _rider.LogoutMap;
}
MoveToWorld(loc, map);
@ -325,7 +278,7 @@ namespace Server.Mobiles
public void MountMe()
{
ItemID = m_MountedID;
ItemID = _mountedID;
Layer = Layer.Mount;
Movable = false;
@ -335,9 +288,9 @@ namespace Server.Mobiles
}
ProcessDelta();
m_Rider.ProcessDelta();
m_Rider.EquipItem(this);
m_Rider.ProcessDelta();
_rider.ProcessDelta();
_rider.EquipItem(this);
_rider.ProcessDelta();
ProcessDelta();
}
@ -429,47 +382,19 @@ namespace Server.Mobiles
}
}
public class EtherealHorse : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealHorse : EtherealMount
{
[Constructible]
public EtherealHorse()
: base(0x20DD, 0x3EAA)
{
}
public EtherealHorse(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1041298; // Ethereal Horse Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal horse")
{
Name = null;
}
if (ItemID == 0x2124)
{
ItemID = 0x20DD;
}
}
}
public class EtherealLlama : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealLlama : EtherealMount
{
[Constructible]
public EtherealLlama()
@ -477,34 +402,11 @@ namespace Server.Mobiles
{
}
public EtherealLlama(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1041300; // Ethereal Llama Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal llama")
{
Name = null;
}
}
}
public class EtherealOstard : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealOstard : EtherealMount
{
[Constructible]
public EtherealOstard()
@ -512,34 +414,11 @@ namespace Server.Mobiles
{
}
public EtherealOstard(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1041299; // Ethereal Ostard Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal ostard")
{
Name = null;
}
}
}
public class EtherealRidgeback : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealRidgeback : EtherealMount
{
[Constructible]
public EtherealRidgeback()
@ -547,34 +426,11 @@ namespace Server.Mobiles
{
}
public EtherealRidgeback(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1049747; // Ethereal Ridgeback Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal ridgeback")
{
Name = null;
}
}
}
public class EtherealUnicorn : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealUnicorn : EtherealMount
{
[Constructible]
public EtherealUnicorn()
@ -582,34 +438,11 @@ namespace Server.Mobiles
{
}
public EtherealUnicorn(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1049745; // Ethereal Unicorn Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal unicorn")
{
Name = null;
}
}
}
public class EtherealBeetle : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealBeetle : EtherealMount
{
[Constructible]
public EtherealBeetle()
@ -617,34 +450,11 @@ namespace Server.Mobiles
{
}
public EtherealBeetle(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1049748; // Ethereal Beetle Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal beetle")
{
Name = null;
}
}
}
public class EtherealKirin : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealKirin : EtherealMount
{
[Constructible]
public EtherealKirin()
@ -652,34 +462,11 @@ namespace Server.Mobiles
{
}
public EtherealKirin(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1049746; // Ethereal Ki-Rin Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal kirin")
{
Name = null;
}
}
}
public class EtherealSwampDragon : EtherealMount
[SerializationGenerator(0, false)]
public partial class EtherealSwampDragon : EtherealMount
{
[Constructible]
public EtherealSwampDragon()
@ -687,34 +474,11 @@ namespace Server.Mobiles
{
}
public EtherealSwampDragon(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1049749; // Ethereal Swamp Dragon Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Name == "an ethereal swamp dragon")
{
Name = null;
}
}
}
public class RideablePolarBear : EtherealMount
[SerializationGenerator(0)]
public partial class RideablePolarBear : EtherealMount
{
[Constructible]
public RideablePolarBear()
@ -722,30 +486,12 @@ namespace Server.Mobiles
{
}
public RideablePolarBear(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1076159; // Rideable Polar Bear
public override int EtherealHue => 0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
}
public class EtherealCuSidhe : EtherealMount
[SerializationGenerator(0)]
public partial class EtherealCuSidhe : EtherealMount
{
[Constructible]
public EtherealCuSidhe()
@ -753,29 +499,11 @@ namespace Server.Mobiles
{
}
public EtherealCuSidhe(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1080386; // Ethereal Cu Sidhe Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
}
public class EtherealHiryu : EtherealMount
[SerializationGenerator(0)]
public partial class EtherealHiryu : EtherealMount
{
[Constructible]
public EtherealHiryu()
@ -783,29 +511,11 @@ namespace Server.Mobiles
{
}
public EtherealHiryu(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1113813; // Ethereal Hiryu Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
}
public class EtherealReptalon : EtherealMount
[SerializationGenerator(0)]
public partial class EtherealReptalon : EtherealMount
{
[Constructible]
public EtherealReptalon()
@ -813,29 +523,11 @@ namespace Server.Mobiles
{
}
public EtherealReptalon(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1113812; // Ethereal Reptalon Statuette
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
}
public class ChargerOfTheFallen : EtherealMount
[SerializationGenerator(0, false)]
public partial class ChargerOfTheFallen : EtherealMount
{
[Constructible]
public ChargerOfTheFallen()
@ -843,32 +535,8 @@ namespace Server.Mobiles
{
}
public ChargerOfTheFallen(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1074816; // Charger of the Fallen Statuette
public override int EtherealHue => 0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version <= 1 && Hue != 0)
{
Hue = 0;
}
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using System;
using Server.Items;
namespace Server.Mobiles
{
public class FireSteed : BaseMount
[SerializationGenerator(0, false)]
public partial class FireSteed : BaseMount
{
public override string DefaultName => "a fire steed";
@ -44,10 +46,6 @@ namespace Server.Mobiles
PackItem(new Ruby(Utility.RandomMinMax(16, 30)));
}
public FireSteed(Serial serial) : base(serial)
{
}
public override string CorpseName => "a fire steed corpse";
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Daemon | PackInstinct.Equine;
@ -58,37 +56,5 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID <= 0)
{
BaseSoundID = 0xA8;
}
if (version < 1)
{
for (var i = 0; i < Skills.Length; ++i)
{
Skills[i].Cap = Math.Max(100.0, Skills[i].Cap * 0.9);
if (Skills[i].Base > Skills[i].Cap)
{
Skills[i].Base = Skills[i].Cap;
}
}
}
}
}
}

View file

@ -1,6 +1,8 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class ForestOstard : BaseMount
public partial class ForestOstard : BaseMount
{
public override string DefaultName => "a forest ostard";
@ -36,28 +38,10 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public ForestOstard(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ostard corpse";
public override int Meat => 3;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override PackInstinct PackInstinct => PackInstinct.Ostard;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class FrenziedOstard : BaseMount
[SerializationGenerator(0, false)]
public partial class FrenziedOstard : BaseMount
{
public override string DefaultName => "a frenzied ostard";
@ -39,28 +42,10 @@ namespace Server.Mobiles
MinTameSkill = 77.1;
}
public FrenziedOstard(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ostard corpse";
public override int Meat => 3;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish | FoodType.Eggs | FoodType.FruitsAndVegies;
public override PackInstinct PackInstinct => PackInstinct.Ostard;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class HellSteed : BaseMount
[SerializationGenerator(0, false)]
public partial class HellSteed : BaseMount
{
public override string DefaultName => "a frenzied ostard";
@ -10,10 +13,6 @@ namespace Server.Mobiles
SetStats(this);
}
public HellSteed(Serial serial) : base(serial)
{
}
public override string CorpseName => "a hellsteed corpse";
public override Poison PoisonImmune => Poison.Lethal;
@ -44,19 +43,5 @@ namespace Server.Mobiles
steed.Fame = 0;
steed.Karma = 0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,163 +1,111 @@
using ModernUO.Serialization;
using System;
using Server.Engines.Plants;
using Server.Items;
namespace Server.Mobiles;
public class Hiryu : BaseMount
namespace Server.Mobiles
{
public override string DefaultName => "a hiryu";
[Constructible]
public Hiryu() : base(243, 0x3E94, AIType.AI_Melee)
[SerializationGenerator(0, false)]
public partial class Hiryu : BaseMount
{
Hue = GetHue();
public override string DefaultName => "a hiryu";
SetStr(1201, 1410);
SetDex(171, 270);
SetInt(301, 325);
SetHits(901, 1100);
SetMana(60);
SetDamage(20, 30);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 55, 70);
SetResistance(ResistanceType.Fire, 70, 90);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 40, 50);
SetResistance(ResistanceType.Energy, 40, 50);
SetSkill(SkillName.Anatomy, 75.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 100.0);
SetSkill(SkillName.Tactics, 100.1, 110.0);
SetSkill(SkillName.Wrestling, 100.1, 120.0);
Fame = 18000;
Karma = -18000;
Tamable = true;
ControlSlots = 4;
MinTameSkill = 98.7;
if (Utility.RandomDouble() < .33)
[Constructible]
public Hiryu() : base(243, 0x3E94, AIType.AI_Melee)
{
PackItem(Seed.RandomBonsaiSeed());
}
Hue = GetHue();
if (Core.ML && Utility.RandomDouble() < .33)
{
PackItem(Seed.RandomPeculiarSeed(3));
}
}
SetStr(1201, 1410);
SetDex(171, 270);
SetInt(301, 325);
public Hiryu(Serial serial) : base(serial)
{
}
SetHits(901, 1100);
SetMana(60);
public override string CorpseName => "a hiryu corpse";
public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using per landed hit */
SetDamage(20, 30);
public override bool StatLossAfterTame => true;
SetDamageType(ResistanceType.Physical, 100);
public override int TreasureMapLevel => 5;
public override int Meat => 16;
public override int Hides => 60;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
SetResistance(ResistanceType.Physical, 55, 70);
SetResistance(ResistanceType.Fire, 70, 90);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 40, 50);
SetResistance(ResistanceType.Energy, 40, 50);
private static MonsterAbility[] _abilities = { MonsterAbilities.GraspingClaw };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
SetSkill(SkillName.Anatomy, 75.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 100.0);
SetSkill(SkillName.Tactics, 100.1, 110.0);
SetSkill(SkillName.Wrestling, 100.1, 120.0);
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
Fame = 18000;
Karma = -18000;
private static int GetHue()
{
return Utility.Random(1075) switch
{
1074 => 0x85C, // Strong Green 0.09%
1073 => 0x490, // Strong Purple 0.09%
>= 1071 => 0x030, // Green 0.19%
>= 1069 => 0x037, // Strong Yellow 0.19%
>= 1066 => 0x295, // Light Green 0.28%
>= 1063 => 0x123, // Cyan 0.28%
>= 1058 => 0x482, // Ice Blue 0.47%
>= 1050 => 0x487, // Blue/Yellow 0.74%
>= 1040 => CraftResources.GetHue(CraftResource.Gold), // Gold 0.93%
>= 1030 => CraftResources.GetHue(CraftResource.Agapite), // Agapite 0.93%
>= 1020 => 0x495, // Strong Cyan 0.93%
>= 1010 => 0x48D, // Light Blue 0.93%
>= 1000 => 0x47F, // Ice Green 0.93%
_ => 0 // No Hue 93.02%
} | 0x8000;
}
Tamable = true;
ControlSlots = 4;
MinTameSkill = 98.7;
public override int GetAngerSound() => 0x4FE;
public override int GetIdleSound() => 0x4FD;
public override int GetAttackSound() => 0x4FC;
public override int GetHurtSound() => 0x4FF;
public override int GetDeathSound() => 0x4FB;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 3);
AddLoot(LootPack.Gems, 4);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version <= 1)
{
Timer.StartTimer(() => Fix(version));
}
if (version < 2)
{
for (var i = 0; i < Skills.Length; ++i)
if (Utility.RandomDouble() < .33)
{
Skills[i].Cap = Math.Max(100.0, Skills[i].Cap * 0.9);
PackItem(Seed.RandomBonsaiSeed());
}
if (Skills[i].Base > Skills[i].Cap)
{
Skills[i].Base = Skills[i].Cap;
}
if (Core.ML && Utility.RandomDouble() < .33)
{
PackItem(Seed.RandomPeculiarSeed(3));
}
}
}
private void Fix(int version)
{
switch (version)
public override string CorpseName => "a hiryu corpse";
public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using per landed hit */
public override bool StatLossAfterTame => true;
public override int TreasureMapLevel => 5;
public override int Meat => 16;
public override int Hides => 60;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
private static MonsterAbility[] _abilities = { MonsterAbilities.GraspingClaw };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
private static int GetHue()
{
case 1:
{
if (InternalItem != null)
{
InternalItem.Hue = Hue;
}
return Utility.Random(1075) switch
{
1074 => 0x85C, // Strong Green 0.09%
1073 => 0x490, // Strong Purple 0.09%
>= 1071 => 0x030, // Green 0.19%
>= 1069 => 0x037, // Strong Yellow 0.19%
>= 1066 => 0x295, // Light Green 0.28%
>= 1063 => 0x123, // Cyan 0.28%
>= 1058 => 0x482, // Ice Blue 0.47%
>= 1050 => 0x487, // Blue/Yellow 0.74%
>= 1040 => CraftResources.GetHue(CraftResource.Gold), // Gold 0.93%
>= 1030 => CraftResources.GetHue(CraftResource.Agapite), // Agapite 0.93%
>= 1020 => 0x495, // Strong Cyan 0.93%
>= 1010 => 0x48D, // Light Blue 0.93%
>= 1000 => 0x47F, // Ice Green 0.93%
_ => 0 // No Hue 93.02%
} | 0x8000;
}
goto case 0;
}
case 0:
{
Hue = GetHue();
break;
}
public override int GetAngerSound() => 0x4FE;
public override int GetIdleSound() => 0x4FD;
public override int GetAttackSound() => 0x4FC;
public override int GetHurtSound() => 0x4FF;
public override int GetDeathSound() => 0x4FB;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 3);
AddLoot(LootPack.Gems, 4);
}
}
}

View file

@ -1,3 +1,5 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias(
@ -6,7 +8,8 @@ namespace Server.Mobiles
"Server.Mobiles.GrayHorse",
"Server.Mobiles.TanHorse"
)]
public class Horse : BaseMount
[SerializationGenerator(0, false)]
public partial class Horse : BaseMount
{
private static readonly int[] m_IDs =
{
@ -52,28 +55,10 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public Horse(Serial serial) : base(serial)
{
}
public override string CorpseName => "a horse corpse";
public override int Meat => 3;
public override int Hides => 10;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using System;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
public class Kirin : BaseMount
[SerializationGenerator(0, false)]
public partial class Kirin : BaseMount
{
public override string DefaultName => "a ki-rin";
@ -47,10 +49,6 @@ namespace Server.Mobiles
MinTameSkill = 95.1;
}
public Kirin(Serial serial) : base(serial)
{
}
public override string CorpseName => "a ki-rin corpse";
public override bool AllowFemaleRider => false;
public override bool AllowFemaleTamer => false;
@ -113,24 +111,5 @@ namespace Server.Mobiles
c.DropItem(new KirinBrains());
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version == 0)
{
AI = AIType.AI_Mage;
}
}
}
}

View file

@ -1,178 +1,126 @@
using ModernUO.Serialization;
using System;
using Server.Engines.Plants;
using Server.Items;
namespace Server.Mobiles;
public class LesserHiryu : BaseMount
namespace Server.Mobiles
{
public override string DefaultName => "a lesser hiryu";
[Constructible]
public LesserHiryu() : base(243, 0x3E94, AIType.AI_Melee)
[SerializationGenerator(0, false)]
public partial class LesserHiryu : BaseMount
{
Hue = GetHue();
public override string DefaultName => "a lesser hiryu";
SetStr(301, 410);
SetDex(171, 270);
SetInt(301, 325);
SetHits(401, 600);
SetMana(60);
SetDamage(18, 23);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 45, 70);
SetResistance(ResistanceType.Fire, 60, 80);
SetResistance(ResistanceType.Cold, 5, 15);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 30, 40);
SetSkill(SkillName.Anatomy, 75.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 100.0);
SetSkill(SkillName.Tactics, 100.1, 110.0);
SetSkill(SkillName.Wrestling, 100.1, 120.0);
Fame = 10000;
Karma = -10000;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 98.7;
if (Utility.RandomDouble() < .33)
[Constructible]
public LesserHiryu() : base(243, 0x3E94, AIType.AI_Melee)
{
PackItem(Seed.RandomBonsaiSeed());
}
}
Hue = GetHue();
public LesserHiryu(Serial serial) : base(serial)
{
}
SetStr(301, 410);
SetDex(171, 270);
SetInt(301, 325);
public override string CorpseName => "a hiryu corpse";
public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using; 1 in 5 chance of success */
SetHits(401, 600);
SetMana(60);
public override bool StatLossAfterTame => true;
SetDamage(18, 23);
public override int TreasureMapLevel => 3;
public override int Meat => 16;
public override int Hides => 60;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
SetDamageType(ResistanceType.Physical, 100);
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
SetResistance(ResistanceType.Physical, 45, 70);
SetResistance(ResistanceType.Fire, 60, 80);
SetResistance(ResistanceType.Cold, 5, 15);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 30, 40);
private static MonsterAbility[] _abilities = { MonsterAbilities.GraspingClaw };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
SetSkill(SkillName.Anatomy, 75.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 100.0);
SetSkill(SkillName.Tactics, 100.1, 110.0);
SetSkill(SkillName.Wrestling, 100.1, 120.0);
private static int GetHue()
{
return Utility.Random(525) switch
{
524 => 0x258, // Midnight Blue 0.19%
523 => CraftResources.GetHue(CraftResource.Valorite), // Valorite 0.19%
>= 520 => 0x7D4, // Dark Green 0.57%
>= 510 => 0x163, // Green 1.90%
>= 500 => 0x295, // Green 1.90%
_ => 0 // No Hue 95.24%
} | 0x8000;
}
Fame = 10000;
Karma = -10000;
public override bool OverrideBondingReqs() => ControlMaster.Skills.Bushido.Base >= 90.0;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 98.7;
public override int GetAngerSound() => 0x4FE;
public override int GetIdleSound() => 0x4FD;
public override int GetAttackSound() => 0x4FC;
public override int GetHurtSound() => 0x4FF;
public override int GetDeathSound() => 0x4FB;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 2);
AddLoot(LootPack.Gems, 4);
}
public override double GetControlChance(Mobile m, bool useBaseSkill = false)
{
var tamingChance = base.GetControlChance(m, useBaseSkill);
if (tamingChance < 0.05)
{
return tamingChance;
}
var skill = useBaseSkill ? m.Skills.Bushido.Base : m.Skills.Bushido.Value;
if (skill < 90.0)
{
return tamingChance;
}
var bushidoChance = (skill - 30.0) / 100;
if (m.Skills.Bushido.Base >= 120)
{
bushidoChance += 0.05;
}
return bushidoChance > tamingChance ? bushidoChance : tamingChance;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version <= 1)
{
Timer.StartTimer(() => Fix(version));
}
if (version < 2)
{
for (var i = 0; i < Skills.Length; ++i)
if (Utility.RandomDouble() < .33)
{
Skills[i].Cap = Math.Max(100.0, Skills[i].Cap * 0.9);
if (Skills[i].Base > Skills[i].Cap)
{
Skills[i].Base = Skills[i].Cap;
}
PackItem(Seed.RandomBonsaiSeed());
}
}
}
private void Fix(int version)
{
switch (version)
public override string CorpseName => "a hiryu corpse";
public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using; 1 in 5 chance of success */
public override bool StatLossAfterTame => true;
public override int TreasureMapLevel => 3;
public override int Meat => 16;
public override int Hides => 60;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount;
private static MonsterAbility[] _abilities = { MonsterAbilities.GraspingClaw };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
private static int GetHue()
{
case 1:
{
if (InternalItem != null)
{
InternalItem.Hue = Hue;
}
return Utility.Random(525) switch
{
524 => 0x258, // Midnight Blue 0.19%
523 => CraftResources.GetHue(CraftResource.Valorite), // Valorite 0.19%
>= 520 => 0x7D4, // Dark Green 0.57%
>= 510 => 0x163, // Green 1.90%
>= 500 => 0x295, // Green 1.90%
_ => 0 // No Hue 95.24%
} | 0x8000;
}
goto case 0;
}
case 0:
{
Hue = GetHue();
break;
}
public override bool OverrideBondingReqs() => ControlMaster.Skills.Bushido.Base >= 90.0;
public override int GetAngerSound() => 0x4FE;
public override int GetIdleSound() => 0x4FD;
public override int GetAttackSound() => 0x4FC;
public override int GetHurtSound() => 0x4FF;
public override int GetDeathSound() => 0x4FB;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 2);
AddLoot(LootPack.Gems, 4);
}
public override double GetControlChance(Mobile m, bool useBaseSkill = false)
{
var tamingChance = base.GetControlChance(m, useBaseSkill);
if (tamingChance < 0.05)
{
return tamingChance;
}
var skill = useBaseSkill ? m.Skills.Bushido.Base : m.Skills.Bushido.Value;
if (skill < 90.0)
{
return tamingChance;
}
var bushidoChance = (skill - 30.0) / 100;
if (m.Skills.Bushido.Base >= 120)
{
bushidoChance += 0.05;
}
return bushidoChance > tamingChance ? bushidoChance : tamingChance;
}
}
}

View file

@ -1,8 +1,10 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
public class Nightmare : BaseMount
[SerializationGenerator(0, false)]
public partial class Nightmare : BaseMount
{
public override string DefaultName => "a nightmare";
@ -87,10 +89,6 @@ namespace Server.Mobiles
PackItem(new SulfurousAsh(Utility.RandomMinMax(3, 5)));
}
public Nightmare(Serial serial) : base(serial)
{
}
public override string CorpseName => "a nightmare corpse";
public override int Meat => 5;
public override int Hides => 10;
@ -118,28 +116,5 @@ namespace Server.Mobiles
return base.GetAngerSound();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Core.AOS && BaseSoundID == 0x16A)
{
BaseSoundID = 0xA8;
}
else if (!Core.AOS && BaseSoundID == 0xA8)
{
BaseSoundID = 0x16A;
}
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class RidableLlama : BaseMount
[SerializationGenerator(0, false)]
public partial class RidableLlama : BaseMount
{
public override string DefaultName => "a ridable llama";
@ -39,28 +42,10 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public RidableLlama(Serial serial) : base(serial)
{
}
public override string CorpseName => "a llama corpse";
public override int Meat => 1;
public override int Hides => 12;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Ridgeback : BaseMount
[SerializationGenerator(0, false)]
public partial class Ridgeback : BaseMount
{
public override string DefaultName => "a ridgeback";
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 83.1;
}
public Ridgeback(Serial serial) : base(serial)
{
}
public override string CorpseName => "a ridgeback corpse";
public override int Meat => 1;
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override bool OverrideBondingReqs() => true;
public override double GetControlChance(Mobile m, bool useBaseSkill = false) => 1.0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class SavageRidgeback : BaseMount
[SerializationGenerator(0, false)]
public partial class SavageRidgeback : BaseMount
{
public override string DefaultName => "a savage ridgeback";
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 83.1;
}
public SavageRidgeback(Serial serial) : base(serial)
{
}
public override string CorpseName => "a savage ridgeback corpse";
public override int Meat => 1;
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override bool OverrideBondingReqs() => true;
public override double GetControlChance(Mobile m, bool useBaseSkill = false) => 1.0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class ScaledSwampDragon : BaseMount
[SerializationGenerator(0, false)]
public partial class ScaledSwampDragon : BaseMount
{
public override string DefaultName => "a swamp dragon";
@ -37,10 +40,6 @@ namespace Server.Mobiles
MinTameSkill = 93.9;
}
public ScaledSwampDragon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a swamp dragon corpse";
public override bool AutoDispel => !Controlled;
@ -49,19 +48,5 @@ namespace Server.Mobiles
public override bool OverrideBondingReqs() => true;
public override double GetControlChance(Mobile m, bool useBaseSkill = false) => 1.0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class SeaHorse : BaseMount
[SerializationGenerator(0, false)]
public partial class SeaHorse : BaseMount
{
public override string DefaultName => "a sea horse";
@ -13,24 +16,6 @@ namespace Server.Mobiles
Skills.Tactics.Base = 30.0 + Utility.RandomDouble() * 15.0;
}
public SeaHorse(Serial serial) : base(serial)
{
}
public override string CorpseName => "a sea horse corpse";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class SilverSteed : BaseMount
[SerializationGenerator(0, false)]
public partial class SilverSteed : BaseMount
{
public override string DefaultName => "a silver steed";
@ -17,24 +20,6 @@ namespace Server.Mobiles
MinTameSkill = 103.1;
}
public SilverSteed(Serial serial) : base(serial)
{
}
public override string CorpseName => "a silver steed corpse";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class SkeletalMount : BaseMount
[SerializationGenerator(0, false)]
public partial class SkeletalMount : BaseMount
{
[Constructible]
public SkeletalMount() : base(793, 0x3EBB, AIType.AI_Animal, FightMode.Aggressor)
@ -29,39 +32,10 @@ namespace Server.Mobiles
Karma = 0;
}
public SkeletalMount(Serial serial) : base(serial)
{
}
public override string CorpseName => "an undead horse corpse";
public override string DefaultName => "a skeletal steed";
public override Poison PoisonImmune => Poison.Lethal;
public override bool BleedImmune => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
Tamable = false;
MinTameSkill = 0.0;
ControlSlots = 0;
break;
}
}
}
}
}

View file

@ -1,17 +1,13 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
public class SwampDragon : BaseMount
[SerializationGenerator(2, false)]
public partial class SwampDragon : BaseMount
{
public override string DefaultName => "a swamp dragon";
private string _bardingCraftedBy;
private bool m_BardingExceptional;
private int m_BardingHP;
private CraftResource m_BardingResource;
private bool m_HasBarding;
[Constructible]
public SwampDragon() : base(0x31A, 0x3EBD, AIType.AI_Melee, FightMode.Aggressor)
{
@ -49,56 +45,35 @@ namespace Server.Mobiles
MinTameSkill = 93.9;
}
public SwampDragon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a swamp dragon corpse";
[CommandProperty(AccessLevel.GameMaster)]
public string BardingCraftedBy
{
get => _bardingCraftedBy;
set
{
_bardingCraftedBy = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public bool BardingExceptional
{
get => m_BardingExceptional;
set
{
m_BardingExceptional = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int BardingHP
{
get => m_BardingHP;
set
{
m_BardingHP = value;
InvalidateProperties();
}
}
[InvalidateProperties]
[SerializableField(0)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private bool _bardingExceptional;
[InvalidateProperties]
[SerializableField(1)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private string _bardingCraftedBy;
[SerializedCommandProperty(AccessLevel.GameMaster)]
[InvalidateProperties]
[SerializableField(3)]
private int _bardingHP;
[CommandProperty(AccessLevel.GameMaster)]
[SerializableProperty(2)]
public bool HasBarding
{
get => m_HasBarding;
get => _hasBarding;
set
{
m_HasBarding = value;
_hasBarding = value;
if (m_HasBarding)
if (_hasBarding)
{
Hue = CraftResources.GetHue(m_BardingResource);
Hue = CraftResources.GetHue(_bardingResource);
Body = 0x31F;
ItemID = 0x3EBE;
}
@ -108,30 +83,32 @@ namespace Server.Mobiles
Body = 0x31A;
ItemID = 0x3EBD;
}
InvalidateProperties();
this.MarkDirty();
}
}
[CommandProperty(AccessLevel.GameMaster)]
[SerializableProperty(4)]
public CraftResource BardingResource
{
get => m_BardingResource;
get => _bardingResource;
set
{
m_BardingResource = value;
_bardingResource = value;
if (m_HasBarding)
if (_hasBarding)
{
Hue = CraftResources.GetHue(value);
}
InvalidateProperties();
this.MarkDirty();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int BardingMaxHP => m_BardingExceptional ? 2500 : 1000;
public int BardingMaxHP => _bardingExceptional ? 2500 : 1000;
public override bool ReacquireOnMovement => true;
public override bool AutoDispel => !Controlled;
@ -158,64 +135,19 @@ namespace Server.Mobiles
{
base.GetProperties(list);
if (m_HasBarding && m_BardingExceptional && _bardingCraftedBy != null)
if (_hasBarding && _bardingExceptional && _bardingCraftedBy != null)
{
list.Add(1060853, _bardingCraftedBy); // armor exceptionally crafted by ~1_val~
}
}
public override void Serialize(IGenericWriter writer)
private void Deserialize(IGenericReader reader, int version)
{
base.Serialize(writer);
writer.Write(2); // version
writer.Write(m_BardingExceptional);
writer.Write(_bardingCraftedBy);
writer.Write(m_HasBarding);
writer.Write(m_BardingHP);
writer.Write((int)m_BardingResource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 2:
{
m_BardingExceptional = reader.ReadBool();
_bardingCraftedBy = reader.ReadString();
m_HasBarding = reader.ReadBool();
m_BardingHP = reader.ReadInt();
m_BardingResource = (CraftResource)reader.ReadInt();
break;
}
case 1:
{
m_BardingExceptional = reader.ReadBool();
var crafter = reader.ReadEntity<Mobile>();
// Name might not be set during this deserialization
Timer.StartTimer(() => _bardingCraftedBy = crafter?.RawName);
m_HasBarding = reader.ReadBool();
m_BardingHP = reader.ReadInt();
m_BardingResource = (CraftResource)reader.ReadInt();
break;
}
}
if (Hue == 0 && !m_HasBarding)
{
Hue = 0x851;
}
if (BaseSoundID == -1)
{
BaseSoundID = 0x16A;
}
_bardingExceptional = reader.ReadBool();
_bardingCraftedBy = reader.ReadString();
_hasBarding = reader.ReadBool();
_bardingHP = reader.ReadInt();
_bardingResource = (CraftResource)reader.ReadInt();
}
}
}

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using System;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
public class Unicorn : BaseMount
[SerializationGenerator(0, false)]
public partial class Unicorn : BaseMount
{
public override string DefaultName => "a unicorn";
@ -45,10 +47,6 @@ namespace Server.Mobiles
MinTameSkill = 95.1;
}
public Unicorn(Serial serial) : base(serial)
{
}
public override string CorpseName => "a unicorn corpse";
public override bool AllowMaleRider => false;
public override bool AllowMaleTamer => false;
@ -127,19 +125,5 @@ namespace Server.Mobiles
c.DropItem(new UnicornRibs());
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public abstract class BaseWarHorse : BaseMount
[SerializationGenerator(0,false)]
public abstract partial class BaseWarHorse : BaseMount
{
public override string DefaultName => "a war horse";
@ -49,26 +52,8 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public BaseWarHorse(Serial serial) : base(serial)
{
}
public override string CorpseName => "a war horse corpse";
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,28 +1,13 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class CoMWarHorse : BaseWarHorse
[SerializationGenerator(0, false)]
public partial class CoMWarHorse : BaseWarHorse
{
[Constructible]
public CoMWarHorse() : base(0x77, 0x3EB1)
{
}
public CoMWarHorse(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,28 +1,13 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class MinaxWarHorse : BaseWarHorse
[SerializationGenerator(0, false)]
public partial class MinaxWarHorse : BaseWarHorse
{
[Constructible]
public MinaxWarHorse() : base(0x78, 0x3EAF)
{
}
public MinaxWarHorse(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,28 +1,13 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class SLWarHorse : BaseWarHorse
[SerializationGenerator(0, false)]
public partial class SLWarHorse : BaseWarHorse
{
[Constructible]
public SLWarHorse() : base(0x79, 0x3EB0)
{
}
public SLWarHorse(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,28 +1,13 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class TBWarHorse : BaseWarHorse
[SerializationGenerator(0, false)]
public partial class TBWarHorse : BaseWarHorse
{
[Constructible]
public TBWarHorse() : base(0x76, 0x3EB2)
{
}
public TBWarHorse(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Alligator : BaseCreature
[SerializationGenerator(0, false)]
public partial class Alligator : BaseCreature
{
[Constructible]
public Alligator() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 47.1;
}
public Alligator(Serial serial) : base(serial)
{
}
public override string CorpseName => "an alligator corpse";
public override string DefaultName => "an alligator";
@ -49,24 +48,5 @@ namespace Server.Mobiles
public override int Hides => 12;
public override HideType HideType => HideType.Spined;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID == 0x5A)
{
BaseSoundID = 660;
}
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Serpant")]
public class GiantSerpent : BaseCreature
[SerializationGenerator(0, false)]
public partial class GiantSerpent : BaseCreature
{
[Constructible]
public GiantSerpent() : base(AIType.AI_Melee)
@ -44,10 +46,6 @@ namespace Server.Mobiles
// TODO: Body parts
}
public GiantSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "a giant serpent corpse";
public override string DefaultName => "a giant snake";
@ -64,24 +62,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Average);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID == -1)
{
BaseSoundID = 219;
}
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Iceserpant")]
public class IceSerpent : BaseCreature
[SerializationGenerator(0, false)]
public partial class IceSerpent : BaseCreature
{
[Constructible]
public IceSerpent() : base(AIType.AI_Melee)
@ -59,10 +61,6 @@ namespace Server.Mobiles
}
}
public IceSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ice serpent corpse";
public override string DefaultName => "a giant ice serpent";
@ -76,24 +74,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Meager);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID == -1)
{
BaseSoundID = 219;
}
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Icesnake")]
public class IceSnake : BaseCreature
[SerializationGenerator(0, false)]
public partial class IceSnake : BaseCreature
{
[Constructible]
public IceSnake() : base(AIType.AI_Melee)
@ -37,10 +40,6 @@ namespace Server.Mobiles
VirtualArmor = 30;
}
public IceSnake(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ice snake corpse";
public override string DefaultName => "an ice snake";
@ -52,19 +51,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Meager);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Lavalizard")]
public class LavaLizard : BaseCreature
[SerializationGenerator(0, false)]
public partial class LavaLizard : BaseCreature
{
[Constructible]
public LavaLizard() : base(AIType.AI_Melee)
@ -44,10 +46,6 @@ namespace Server.Mobiles
PackItem(new SulfurousAsh(Utility.Random(4, 10)));
}
public LavaLizard(Serial serial) : base(serial)
{
}
public override string CorpseName => "a lava lizard corpse";
public override string DefaultName => "a lava lizard";
public override int Hides => 12;
@ -60,19 +58,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Meager);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Lavaserpant")]
public class LavaSerpent : BaseCreature
[SerializationGenerator(0, false)]
public partial class LavaSerpent : BaseCreature
{
[Constructible]
public LavaSerpent() : base(AIType.AI_Melee)
@ -42,10 +44,6 @@ namespace Server.Mobiles
// TODO: body parts, armour
}
public LavaSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "a lava serpent corpse";
public override string DefaultName => "a lava serpent";
@ -61,24 +59,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Average);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID == -1)
{
BaseSoundID = 219;
}
}
}
}

View file

@ -1,9 +1,11 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Lavasnake")]
public class LavaSnake : BaseCreature
[SerializationGenerator(0, false)]
public partial class LavaSnake : BaseCreature
{
[Constructible]
public LavaSnake() : base(AIType.AI_Melee)
@ -40,10 +42,6 @@ namespace Server.Mobiles
PackItem(new SulfurousAsh());
}
public LavaSnake(Serial serial) : base(serial)
{
}
public override string CorpseName => "a lava snake corpse";
public override string DefaultName => "a lava snake";
@ -57,19 +55,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,10 +1,12 @@
using ModernUO.Serialization;
using Server.Ethics;
using Server.Factions;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Silverserpant")]
public class SilverSerpent : BaseCreature
[SerializationGenerator(0, false)]
public partial class SilverSerpent : BaseCreature
{
[Constructible]
public SilverSerpent() : base(AIType.AI_Melee)
@ -40,10 +42,6 @@ namespace Server.Mobiles
VirtualArmor = 40;
}
public SilverSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "a silver serpent corpse";
public override Faction FactionAllegiance => TrueBritannians.Instance;
public override Ethic EthicAllegiance => Ethic.Hero;
@ -61,24 +59,5 @@ namespace Server.Mobiles
AddLoot(LootPack.Average);
AddLoot(LootPack.Gems, 2);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (BaseSoundID == -1)
{
BaseSoundID = 219;
}
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Snake : BaseCreature
[SerializationGenerator(0, false)]
public partial class Snake : BaseCreature
{
[Constructible]
public Snake() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 59.1;
}
public Snake(Serial serial) : base(serial)
{
}
public override string CorpseName => "a snake corpse";
public override string DefaultName => "a snake";
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override int Meat => 1;
public override FoodType FavoriteFood => FoodType.Eggs;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Giantrat")]
public class GiantRat : BaseCreature
[SerializationGenerator(0, false)]
public partial class GiantRat : BaseCreature
{
[Constructible]
public GiantRat() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = 29.1;
}
public GiantRat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a giant rat corpse";
public override string DefaultName => "a giant rat";
@ -53,19 +52,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Jackrabbit")]
public class JackRabbit : BaseCreature
[SerializationGenerator(0, false)]
public partial class JackRabbit : BaseCreature
{
[Constructible]
public JackRabbit() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -36,10 +39,6 @@ namespace Server.Mobiles
MinTameSkill = -18.9;
}
public JackRabbit(Serial serial) : base(serial)
{
}
public override string CorpseName => "a jack rabbit corpse";
public override string DefaultName => "a jack rabbit";
@ -52,19 +51,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0xCA;
public override int GetDeathSound() => 0xCB;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Rabbit : BaseCreature
[SerializationGenerator(0, false)]
public partial class Rabbit : BaseCreature
{
[Constructible]
public Rabbit() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -39,10 +42,6 @@ namespace Server.Mobiles
MinTameSkill = -18.9;
}
public Rabbit(Serial serial) : base(serial)
{
}
public override string CorpseName => "a hare corpse";
public override string DefaultName => "a rabbit";
@ -55,19 +54,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0xCA;
public override int GetDeathSound() => 0xCB;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Sewerrat")]
public class SewerRat : BaseCreature
[SerializationGenerator(0, false)]
public partial class SewerRat : BaseCreature
{
[Constructible]
public SewerRat() : base(AIType.AI_Melee)
@ -38,10 +41,6 @@ namespace Server.Mobiles
MinTameSkill = -0.9;
}
public SewerRat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a rat corpse";
public override string DefaultName => "a sewer rat";
@ -52,19 +51,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Jwilson : BaseCreature
[SerializationGenerator(0, false)]
public partial class Jwilson : BaseCreature
{
[Constructible]
public Jwilson() : base(AIType.AI_Melee)
@ -20,10 +23,6 @@ namespace Server.Mobiles
Karma = Utility.Random(0, -624);
}
public Jwilson(Serial serial) : base(serial)
{
}
public override string CorpseName => "a jwilson corpse";
public override string DefaultName => "a jwilson";
@ -36,19 +35,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0x1CB;
public override int GetDeathSound() => 0x1CC;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Parrot : BaseCreature
[SerializationGenerator(0, false)]
public partial class Parrot : BaseCreature
{
[Constructible]
public Parrot() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -22,10 +25,6 @@ namespace Server.Mobiles
MinTameSkill = 0.0;
}
public Parrot(Serial serial) : base(serial)
{
}
public override string CorpseName => "a parrot corpse";
public override string DefaultName => "a parrot";
@ -38,19 +37,5 @@ namespace Server.Mobiles
public override int GetHurtSound() => 0x1E;
public override int GetDeathSound() => 0x1F;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Bird : BaseCreature
[SerializationGenerator(0, false)]
public partial class Bird : BaseCreature
{
[Constructible]
public Bird() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -48,38 +51,16 @@ namespace Server.Mobiles
MinTameSkill = -6.9;
}
public Bird(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bird corpse";
public override MeatType MeatType => MeatType.Bird;
public override int Meat => 1;
public override int Feathers => 25;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (Hue == 0)
{
Hue = Utility.RandomBirdHue();
}
}
}
public class TropicalBird : BaseCreature
[SerializationGenerator(0, false)]
public partial class TropicalBird : BaseCreature
{
[Constructible]
public TropicalBird() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -111,10 +92,6 @@ namespace Server.Mobiles
MinTameSkill = -6.9;
}
public TropicalBird(Serial serial) : base(serial)
{
}
public override string CorpseName => "a bird corpse";
public override string DefaultName => "a tropical bird";
@ -122,19 +99,5 @@ namespace Server.Mobiles
public override int Meat => 1;
public override int Feathers => 25;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,7 +1,10 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Housecat")]
public class Cat : BaseCreature
[SerializationGenerator(0, false)]
public partial class Cat : BaseCreature
{
[Constructible]
public Cat() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -37,29 +40,11 @@ namespace Server.Mobiles
MinTameSkill = -0.9;
}
public Cat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a cat corpse";
public override string DefaultName => "a cat";
public override int Meat => 1;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
public override PackInstinct PackInstinct => PackInstinct.Feline;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Dog : BaseCreature
[SerializationGenerator(0, false)]
public partial class Dog : BaseCreature
{
[Constructible]
public Dog() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -36,29 +39,11 @@ namespace Server.Mobiles
MinTameSkill = -15.3;
}
public Dog(Serial serial) : base(serial)
{
}
public override string CorpseName => "a dog corpse";
public override string DefaultName => "a dog";
public override int Meat => 1;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Canine;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,6 +1,9 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
public class Rat : BaseCreature
[SerializationGenerator(0, false)]
public partial class Rat : BaseCreature
{
[Constructible]
public Rat() : base(AIType.AI_Animal, FightMode.Aggressor)
@ -36,10 +39,6 @@ namespace Server.Mobiles
MinTameSkill = -0.9;
}
public Rat(Serial serial) : base(serial)
{
}
public override string CorpseName => "a rat corpse";
public override string DefaultName => "a rat";
@ -50,19 +49,5 @@ namespace Server.Mobiles
{
AddLoot(LootPack.Poor);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}