Reorganizes Project (#41)

This commit is contained in:
Kamron Batman 2019-08-02 18:13:40 -07:00 • committed by GitHub
parent 08bf44af9a
commit 3614a66aee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3499 changed files with 79 additions and 55 deletions

View file

@ -0,0 +1,213 @@
using Server.Items;
namespace Server.Mobiles
{
public class ChaosDragoon : BaseCreature
{
[Constructible]
public ChaosDragoon() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.15, 0.4)
{
Body = 0x190;
Hue = Race.Human.RandomSkinHue();
SetStr(176, 225);
SetDex(81, 95);
SetInt(61, 85);
SetHits(176, 225);
SetDamage(24, 26);
SetDamageType(ResistanceType.Physical, 25);
SetDamageType(ResistanceType.Fire, 25);
SetDamageType(ResistanceType.Cold, 25);
SetDamageType(ResistanceType.Energy, 25);
//SetResistance( ResistanceType.Physical, 25, 38 );
//SetResistance( ResistanceType.Fire, 25, 38 );
//SetResistance( ResistanceType.Cold, 25, 38 );
//SetResistance( ResistanceType.Poison, 25, 38 );
//SetResistance( ResistanceType.Energy, 25, 38 );
SetSkill(SkillName.Fencing, 77.6, 92.5);
SetSkill(SkillName.Healing, 60.3, 90.0);
SetSkill(SkillName.Macing, 77.6, 92.5);
SetSkill(SkillName.Anatomy, 77.6, 87.5);
SetSkill(SkillName.MagicResist, 77.6, 97.5);
SetSkill(SkillName.Swords, 77.6, 92.5);
SetSkill(SkillName.Tactics, 77.6, 87.5);
Fame = 5000;
Karma = -5000;
CraftResource res = CraftResource.None;
switch (Utility.Random(6))
{
case 0:
res = CraftResource.BlackScales;
break;
case 1:
res = CraftResource.RedScales;
break;
case 2:
res = CraftResource.BlueScales;
break;
case 3:
res = CraftResource.YellowScales;
break;
case 4:
res = CraftResource.GreenScales;
break;
case 5:
res = CraftResource.WhiteScales;
break;
}
BaseWeapon melee = null;
switch (Utility.Random(3))
{
case 0:
melee = new Kryss();
break;
case 1:
melee = new Broadsword();
break;
case 2:
melee = new Katana();
break;
}
melee.Movable = false;
AddItem(melee);
DragonHelm helm = new DragonHelm();
helm.Resource = res;
helm.Movable = false;
AddItem(helm);
DragonChest chest = new DragonChest();
chest.Resource = res;
chest.Movable = false;
AddItem(chest);
DragonArms arms = new DragonArms();
arms.Resource = res;
arms.Movable = false;
AddItem(arms);
DragonGloves gloves = new DragonGloves();
gloves.Resource = res;
gloves.Movable = false;
AddItem(gloves);
DragonLegs legs = new DragonLegs();
legs.Resource = res;
legs.Movable = false;
AddItem(legs);
ChaosShield shield = new ChaosShield();
shield.Movable = false;
AddItem(shield);
AddItem(new Shirt());
AddItem(new Boots());
int amount = Utility.RandomMinMax(1, 3);
switch (res)
{
case CraftResource.BlackScales:
AddItem(new BlackScales(amount));
break;
case CraftResource.RedScales:
AddItem(new RedScales(amount));
break;
case CraftResource.BlueScales:
AddItem(new BlueScales(amount));
break;
case CraftResource.YellowScales:
AddItem(new YellowScales(amount));
break;
case CraftResource.GreenScales:
AddItem(new GreenScales(amount));
break;
case CraftResource.WhiteScales:
AddItem(new WhiteScales(amount));
break;
}
new SwampDragon().Rider = this;
}
public ChaosDragoon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a chaos dragoon corpse";
public override string DefaultName => "a chaos dragoon";
public override bool HasBreath => true;
public override bool AutoDispel => true;
public override bool BardImmune => !Core.AOS;
public override bool CanRummageCorpses => true;
public override bool AlwaysMurderer => true;
public override bool ShowFameTitle => false;
public override int GetIdleSound()
{
return 0x2CE;
}
public override int GetDeathSound()
{
return 0x2CC;
}
public override int GetHurtSound()
{
return 0x2D1;
}
public override int GetAttackSound()
{
return 0x2C8;
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
//AddLoot( LootPack.Gems );
}
public override bool OnBeforeDeath()
{
IMount mount = Mount;
if (mount != null)
mount.Rider = null;
return base.OnBeforeDeath();
}
public override void AlterMeleeDamageTo(Mobile to, ref int damage)
{
if (to is Dragon || to is WhiteWyrm || to is SwampDragon || to is Drake || to is Nightmare || to is Hiryu ||
to is LesserHiryu || to is Daemon)
damage *= 3;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,255 @@
using Server.Items;
namespace Server.Mobiles
{
public class ChaosDragoonElite : BaseCreature
{
[Constructible]
public ChaosDragoonElite()
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.15, 0.4)
{
Body = 0x190;
Hue = Race.Human.RandomSkinHue();
SetStr(276, 350);
SetDex(66, 90);
SetInt(126, 150);
SetHits(276, 350);
SetDamage(29, 34);
SetDamageType(ResistanceType.Physical, 100);
/*SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 15, 25);
SetResistance(ResistanceType.Cold, 50);
SetResistance(ResistanceType.Poison, 25, 35);
SetResistance(ResistanceType.Energy, 25, 35);*/
SetSkill(SkillName.Tactics, 80.1, 100.0);
SetSkill(SkillName.MagicResist, 100.1, 110.0);
SetSkill(SkillName.Anatomy, 80.1, 100.0);
SetSkill(SkillName.Magery, 85.1, 100.0);
SetSkill(SkillName.EvalInt, 85.1, 100.0);
SetSkill(SkillName.Swords, 72.5, 95.0);
SetSkill(SkillName.Fencing, 85.1, 100);
SetSkill(SkillName.Macing, 85.1, 100);
Fame = 8000;
Karma = -8000;
CraftResource res = CraftResource.None;
;
switch (Utility.Random(6))
{
case 0:
res = CraftResource.BlackScales;
break;
case 1:
res = CraftResource.RedScales;
break;
case 2:
res = CraftResource.BlueScales;
break;
case 3:
res = CraftResource.YellowScales;
break;
case 4:
res = CraftResource.GreenScales;
break;
case 5:
res = CraftResource.WhiteScales;
break;
}
BaseWeapon melee = null;
switch (Utility.Random(3))
{
case 0:
melee = new Kryss();
break;
case 1:
melee = new Broadsword();
break;
case 2:
melee = new Katana();
break;
}
melee.Movable = false;
AddItem(melee);
DragonChest Tunic = new DragonChest();
Tunic.Resource = res;
Tunic.Movable = false;
AddItem(Tunic);
DragonLegs Legs = new DragonLegs();
Legs.Resource = res;
Legs.Movable = false;
AddItem(Legs);
DragonArms Arms = new DragonArms();
Arms.Resource = res;
Arms.Movable = false;
AddItem(Arms);
DragonGloves Gloves = new DragonGloves();
Gloves.Resource = res;
Gloves.Movable = false;
AddItem(Gloves);
DragonHelm Helm = new DragonHelm();
Helm.Resource = res;
Helm.Movable = false;
AddItem(Helm);
ChaosShield shield = new ChaosShield();
shield.Movable = false;
AddItem(shield);
AddItem(new Boots(0x455));
AddItem(new Shirt(Utility.RandomMetalHue()));
int amount = Utility.RandomMinMax(1, 3);
switch (res)
{
case CraftResource.BlackScales:
AddItem(new BlackScales(amount));
break;
case CraftResource.RedScales:
AddItem(new RedScales(amount));
break;
case CraftResource.BlueScales:
AddItem(new BlueScales(amount));
break;
case CraftResource.YellowScales:
AddItem(new YellowScales(amount));
break;
case CraftResource.GreenScales:
AddItem(new GreenScales(amount));
break;
case CraftResource.WhiteScales:
AddItem(new WhiteScales(amount));
break;
}
switch (Utility.Random(9))
{
case 0:
res = CraftResource.DullCopper;
break;
case 1:
res = CraftResource.ShadowIron;
break;
case 2:
res = CraftResource.Copper;
break;
case 3:
res = CraftResource.Bronze;
break;
case 4:
res = CraftResource.Gold;
break;
case 5:
res = CraftResource.Agapite;
break;
case 6:
res = CraftResource.Verite;
break;
case 7:
res = CraftResource.Valorite;
break;
case 8:
res = CraftResource.Iron;
break;
}
SwampDragon mt = new SwampDragon();
mt.HasBarding = true;
mt.BardingResource = res;
mt.BardingHP = mt.BardingMaxHP;
mt.Rider = this;
}
public ChaosDragoonElite(Serial serial)
: base(serial)
{
}
public override string CorpseName => "a chaos dragoon elite corpse";
public override string DefaultName => "a chaos dragoon elite";
public override bool HasBreath => true;
public override bool AutoDispel => true;
public override bool BardImmune => !Core.AOS;
public override bool CanRummageCorpses => true;
public override bool AlwaysMurderer => true;
public override bool ShowFameTitle => false;
public override int GetIdleSound()
{
return 0x2CE;
}
public override int GetDeathSound()
{
return 0x2CC;
}
public override int GetHurtSound()
{
return 0x2D1;
}
public override int GetAttackSound()
{
return 0x2C8;
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Gems);
}
public override bool OnBeforeDeath()
{
IMount mount = Mount;
if (mount != null)
{
if (mount is SwampDragon dragon)
dragon.HasBarding = false;
mount.Rider = null;
}
return base.OnBeforeDeath();
}
public override void AlterMeleeDamageTo(Mobile to, ref int damage)
{
if (to is Dragon || to is WhiteWyrm || to is SwampDragon || to is Drake || to is Nightmare || to is Hiryu ||
to is LesserHiryu || to is Daemon)
damage *= 3;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,125 @@
using Server.Items;
namespace Server.Mobiles
{
public class JukaLord : BaseCreature
{
[Constructible]
public JukaLord() : base(AIType.AI_Archer, FightMode.Closest, 10, 3, 0.2, 0.4)
{
Body = 766;
SetStr(401, 500);
SetDex(81, 100);
SetInt(151, 200);
SetHits(241, 300);
SetDamage(10, 12);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 40, 50);
SetResistance(ResistanceType.Fire, 45, 50);
SetResistance(ResistanceType.Cold, 40, 50);
SetResistance(ResistanceType.Poison, 20, 25);
SetResistance(ResistanceType.Energy, 40, 50);
SetSkill(SkillName.Anatomy, 90.1, 100.0);
SetSkill(SkillName.Archery, 95.1, 100.0);
SetSkill(SkillName.Healing, 80.1, 100.0);
SetSkill(SkillName.MagicResist, 120.1, 130.0);
SetSkill(SkillName.Swords, 90.1, 100.0);
SetSkill(SkillName.Tactics, 95.1, 100.0);
SetSkill(SkillName.Wrestling, 90.1, 100.0);
Fame = 15000;
Karma = -15000;
VirtualArmor = 28;
Container pack = new Backpack();
pack.DropItem(new Arrow(Utility.RandomMinMax(25, 35)));
pack.DropItem(new Arrow(Utility.RandomMinMax(25, 35)));
pack.DropItem(new Bandage(Utility.RandomMinMax(5, 15)));
pack.DropItem(new Bandage(Utility.RandomMinMax(5, 15)));
pack.DropItem(Loot.RandomGem());
pack.DropItem(new ArcaneGem());
PackItem(pack);
AddItem(new JukaBow());
// TODO: Bandage self
}
public JukaLord(Serial serial) : base(serial)
{
}
public override string CorpseName => "a jukan corpse";
public override string DefaultName => "a juka lord";
public override bool AlwaysMurderer => true;
public override bool BardImmune => !Core.AOS;
public override bool CanRummageCorpses => true;
public override int Meat => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Average);
}
public override void OnDamage(int amount, Mobile from, bool willKill)
{
if (!willKill && amount > 5 && from?.Player == true && 5 > Utility.Random(100))
{
string[] toSay =
{
"{0}!! You will have to do better than that!",
"{0}!! Prepare to meet your doom!",
"{0}!! My armies will crush you!",
"{0}!! You will pay for that!"
};
Say(true, string.Format(toSay[Utility.Random(toSay.Length)], from.Name));
}
base.OnDamage(amount, from, willKill);
}
public override int GetIdleSound()
{
return 0x262;
}
public override int GetAngerSound()
{
return 0x263;
}
public override int GetHurtSound()
{
return 0x1D0;
}
public override int GetDeathSound()
{
return 0x28D;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,201 @@
using System;
using Server.Engines.Plants;
using Server.Items;
using Server.Spells;
namespace Server.Mobiles
{
public class JukaMage : BaseCreature
{
private DateTime m_NextAbilityTime;
[Constructible]
public JukaMage() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 765;
SetStr(201, 300);
SetDex(71, 90);
SetInt(451, 500);
SetHits(121, 180);
SetDamage(4, 10);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 20, 30);
SetResistance(ResistanceType.Fire, 35, 45);
SetResistance(ResistanceType.Cold, 30, 40);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 35, 45);
SetSkill(SkillName.Anatomy, 80.1, 90.0);
SetSkill(SkillName.EvalInt, 80.2, 100.0);
SetSkill(SkillName.Magery, 99.1, 100.0);
SetSkill(SkillName.Meditation, 80.2, 100.0);
SetSkill(SkillName.MagicResist, 140.1, 150.0);
SetSkill(SkillName.Tactics, 80.1, 90.0);
SetSkill(SkillName.Wrestling, 80.1, 90.0);
Fame = 15000;
Karma = -15000;
VirtualArmor = 16;
Container bag = new Bag();
int count = Utility.RandomMinMax(10, 20);
for (int i = 0; i < count; ++i)
{
Item item = Loot.RandomReagent();
if (item == null)
continue;
if (!bag.TryDropItem(this, item, false))
item.Delete();
}
PackItem(bag);
PackItem(new ArcaneGem());
if (Core.ML && Utility.RandomDouble() < .33)
PackItem(Seed.RandomPeculiarSeed(4));
m_NextAbilityTime = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(2, 5));
}
public JukaMage(Serial serial) : base(serial)
{
}
public override string CorpseName => "a jukan corpse";
public override string DefaultName => "a juka mage";
public override bool AlwaysMurderer => true;
public override bool CanRummageCorpses => true;
public override int Meat => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.Average, 2);
AddLoot(LootPack.MedScrolls, 2);
}
public override int GetIdleSound()
{
return 0x1AC;
}
public override int GetAngerSound()
{
return 0x1CD;
}
public override int GetHurtSound()
{
return 0x1D0;
}
public override int GetDeathSound()
{
return 0x28D;
}
public override void OnThink()
{
if (DateTime.UtcNow >= m_NextAbilityTime)
{
JukaLord toBuff = null;
foreach (Mobile m in GetMobilesInRange(8))
if (m is JukaLord lord && IsFriend(lord) && lord.Combatant != null && CanBeBeneficial(lord) &&
lord.CanBeginAction<JukaMage>() && InLOS(lord))
{
toBuff = lord;
break;
}
if (toBuff != null)
{
if (CanBeBeneficial(toBuff) && toBuff.BeginAction<JukaMage>())
{
m_NextAbilityTime = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(30, 60));
toBuff.Say(true, "Give me the power to destroy my enemies!");
Say(true, "Fight well my lord!");
DoBeneficial(toBuff);
SpellHelper.Turn(this, toBuff);
int toScale = toBuff.HitsMaxSeed;
if (toScale > 0)
{
toBuff.HitsMaxSeed += AOS.Scale(toScale, 75);
toBuff.Hits += AOS.Scale(toScale, 75);
}
toScale = toBuff.RawStr;
if (toScale > 0)
toBuff.RawStr += AOS.Scale(toScale, 50);
toScale = toBuff.RawDex;
if (toScale > 0)
{
toBuff.RawDex += AOS.Scale(toScale, 50);
toBuff.Stam += AOS.Scale(toScale, 50);
}
toBuff.Hits = toBuff.Hits;
toBuff.Stam = toBuff.Stam;
toBuff.FixedParticles(0x375A, 10, 15, 5017, EffectLayer.Waist);
toBuff.PlaySound(0x1EE);
Timer.DelayCall(TimeSpan.FromSeconds(20.0), () => Unbuff(toBuff, toBuff.HitsMaxSeed, toBuff.RawStr, toBuff.RawDex));
}
}
else
{
m_NextAbilityTime = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(2, 5));
}
}
base.OnThink();
}
private void Unbuff(JukaLord toDebuff, int hitsMaxSeed, int rawStr, int rawDex)
{
toDebuff.EndAction<JukaMage>();
if (toDebuff.Deleted)
return;
toDebuff.HitsMaxSeed = hitsMaxSeed;
toDebuff.RawStr = rawStr;
toDebuff.RawDex = rawDex;
toDebuff.Hits = toDebuff.Hits;
toDebuff.Stam = toDebuff.Stam;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,126 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
public class JukaWarrior : BaseCreature
{
[Constructible]
public JukaWarrior() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = 764;
SetStr(251, 350);
SetDex(61, 80);
SetInt(101, 150);
SetHits(151, 210);
SetDamage(7, 9);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 40, 50);
SetResistance(ResistanceType.Fire, 30, 40);
SetResistance(ResistanceType.Cold, 25, 35);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 10, 20);
SetSkill(SkillName.Anatomy, 80.1, 90.0);
SetSkill(SkillName.Fencing, 80.1, 90.0);
SetSkill(SkillName.Macing, 80.1, 90.0);
SetSkill(SkillName.MagicResist, 120.1, 130.0);
SetSkill(SkillName.Swords, 80.1, 90.0);
SetSkill(SkillName.Tactics, 80.1, 90.0);
SetSkill(SkillName.Wrestling, 80.1, 90.0);
Fame = 10000;
Karma = -10000;
VirtualArmor = 22;
if (Utility.RandomDouble() < 0.1)
PackItem(new ArcaneGem());
}
public JukaWarrior(Serial serial) : base(serial)
{
}
public override string CorpseName => "a jukan corpse";
public override string DefaultName => "a juka warrior";
public override bool AlwaysMurderer => true;
public override bool CanRummageCorpses => true;
public override int Meat => 1;
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
AddLoot(LootPack.Meager);
AddLoot(LootPack.Gems, 1);
}
public override int GetIdleSound()
{
return 0x1AC;
}
public override int GetAngerSound()
{
return 0x1CD;
}
public override int GetHurtSound()
{
return 0x1D0;
}
public override int GetDeathSound()
{
return 0x28D;
}
public override void OnGaveMeleeAttack(Mobile defender)
{
base.OnGaveMeleeAttack(defender);
if (0.2 < Utility.RandomDouble())
return;
switch (Utility.Random(3))
{
case 0:
{
defender.SendLocalizedMessage(1004014); // You have been stunned!
defender.Freeze(TimeSpan.FromSeconds(4.0));
break;
}
case 1:
{
defender.SendAsciiMessage("You have been hit by a paralyzing blow!");
defender.Freeze(TimeSpan.FromSeconds(3.0));
break;
}
case 2:
{
AOS.Damage(defender, this, Utility.Random(10, 5), 100, 0, 0, 0, 0);
defender.SendAsciiMessage("You have been hit by a critical strike!");
break;
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}