fix: Fixes all summon spells so they use summoned variation of monster (#2106)

This commit is contained in:
Bohica 2025-02-03 23:44:51 -08:00 committed by GitHub
parent de12f8cb02
commit 1c5fa824d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 263 additions and 153 deletions

View file

@ -40,13 +40,9 @@ namespace Server.Mobiles
Karma = -4500;
VirtualArmor = 40;
ControlSlots = 2;
}
public override string CorpseName => "an air elemental corpse";
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "an air elemental";
public override bool BleedImmune => true;

View file

@ -39,7 +39,6 @@ namespace Server.Mobiles
Karma = -4500;
VirtualArmor = 40;
ControlSlots = 4;
PackItem(new SulfurousAsh(3));
@ -47,12 +46,10 @@ namespace Server.Mobiles
}
public override string CorpseName => "a fire elemental corpse";
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "a fire elemental";
public override bool BleedImmune => true;
public override int TreasureMapLevel => 2;
public override void GenerateLoot()

View file

@ -38,16 +38,13 @@ namespace Server.Mobiles
Karma = -4500;
VirtualArmor = 40;
ControlSlots = 3;
CanSwim = true;
PackItem(new BlackPearl(3));
}
public override string CorpseName => "a water elemental corpse";
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "a water elemental";
public override bool BleedImmune => true;

View file

@ -36,7 +36,6 @@ namespace Server.Mobiles
Karma = -3500;
VirtualArmor = 34;
ControlSlots = 2;
PackItem(new FertileDirt(Utility.RandomMinMax(1, 4)));
PackItem(new MandrakeRoot());
@ -47,9 +46,6 @@ namespace Server.Mobiles
}
public override string CorpseName => "an earth elemental corpse";
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "an earth elemental";
public override bool BleedImmune => true;

View file

@ -40,20 +40,21 @@ namespace Server.Mobiles
Karma = -15000;
VirtualArmor = 58;
ControlSlots = Core.SE ? 4 : 5;
}
public override string CorpseName => "a daemon corpse";
public override double DispelDifficulty => 125.0;
public override double DispelFocus => 45.0;
public override Faction FactionAllegiance => Shadowlords.Instance;
public override Ethic EthicAllegiance => Ethic.Evil;
public override bool CanRummageCorpses => true;
public override Poison PoisonImmune => Poison.Regular;
public override int TreasureMapLevel => 4;
public override int Meat => 1;
public override bool CanFly => true;
public override void GenerateLoot()

View file

@ -44,14 +44,14 @@ namespace Server.Mobiles
}
public override string CorpseName => "a blade spirit corpse";
public override string DefaultName => "a blade spirit";
public override bool DeleteCorpseOnDeath => Core.AOS;
public override bool IsHouseSummonable => true;
public override double DispelDifficulty => 0.0;
public override double DispelFocus => 20.0;
public override string DefaultName => "a blade spirit";
public override bool BleedImmune => true;
public override Poison PoisonImmune => Poison.Lethal;

View file

@ -1,3 +1,4 @@
using System;
using ModernUO.Serialization;
namespace Server.Mobiles
@ -12,39 +13,73 @@ namespace Server.Mobiles
Hue = 0x4001;
BaseSoundID = 655;
SetStr(200);
SetDex(200);
SetInt(100);
if (Core.AOS)
{
SetStr(200);
SetDex(200);
SetInt(100);
SetHits(150);
SetStam(50);
SetHits(150);
SetStam(50);
SetDamage(6, 9);
SetDamage(6, 9);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Energy, 50);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Energy, 50);
SetResistance(ResistanceType.Physical, 40, 50);
SetResistance(ResistanceType.Fire, 30, 40);
SetResistance(ResistanceType.Cold, 35, 45);
SetResistance(ResistanceType.Poison, 50, 60);
SetResistance(ResistanceType.Energy, 70, 80);
SetResistance(ResistanceType.Physical, 40, 50);
SetResistance(ResistanceType.Fire, 30, 40);
SetResistance(ResistanceType.Cold, 35, 45);
SetResistance(ResistanceType.Poison, 50, 60);
SetResistance(ResistanceType.Energy, 70, 80);
SetSkill(SkillName.Meditation, 90.0);
SetSkill(SkillName.EvalInt, 70.0);
SetSkill(SkillName.Magery, 70.0);
SetSkill(SkillName.MagicResist, 60.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 80.0);
SetSkill(SkillName.Meditation, 90.0);
SetSkill(SkillName.EvalInt, 70.0);
SetSkill(SkillName.Magery, 70.0);
SetSkill(SkillName.MagicResist, 60.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 80.0);
}
else
{
SetStr(126, 155);
SetDex(166, 185);
SetInt(101, 125);
SetHits(76, 93);
SetDamage(8, 10);
SetDamageType(ResistanceType.Physical, 20);
SetDamageType(ResistanceType.Cold, 40);
SetDamageType(ResistanceType.Energy, 40);
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 15, 25);
SetResistance(ResistanceType.Cold, 10, 20);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 25, 35);
SetSkill(SkillName.EvalInt, 60.1, 75.0);
SetSkill(SkillName.Magery, 60.1, 75.0);
SetSkill(SkillName.MagicResist, 60.1, 75.0);
SetSkill(SkillName.Tactics, 60.1, 80.0);
SetSkill(SkillName.Wrestling, 60.1, 80.0);
}
VirtualArmor = 40;
ControlSlots = 2;
}
public override bool DeleteCorpseOnDeath => Summoned;
public override string CorpseName => "an air elemental corpse";
public override string DefaultName => "an air elemental";
public override bool BleedImmune => true;
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "an air elemental";
[AfterDeserialization]
private void AfterDeserialization()

View file

@ -12,37 +12,67 @@ namespace Server.Mobiles
Body = Core.AOS ? 10 : 9;
BaseSoundID = 357;
SetStr(200);
SetDex(110);
SetInt(150);
if (Core.AOS)
{
SetStr(200);
SetDex(110);
SetInt(150);
SetDamage(14, 21);
SetDamage(14, 21);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Poison, 100);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 20, 30);
SetResistance(ResistanceType.Poison, 70, 80);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 20, 30);
SetResistance(ResistanceType.Poison, 70, 80);
SetResistance(ResistanceType.Energy, 40, 50);
SetSkill(SkillName.EvalInt, 90.1, 100.0);
SetSkill(SkillName.Meditation, 90.1, 100.0);
SetSkill(SkillName.Magery, 90.1, 100.0);
SetSkill(SkillName.MagicResist, 90.1, 100.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 98.1, 99.0);
SetSkill(SkillName.EvalInt, 90.1, 100.0);
SetSkill(SkillName.Meditation, 90.1, 100.0);
SetSkill(SkillName.Magery, 90.1, 100.0);
SetSkill(SkillName.MagicResist, 90.1, 100.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 98.1, 99.0);
}
else
{
SetStr(476, 505);
SetDex(76, 95);
SetInt(301, 325);
SetHits(286, 303);
SetDamage(7, 14);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 45, 60);
SetResistance(ResistanceType.Fire, 50, 60);
SetResistance(ResistanceType.Cold, 30, 40);
SetResistance(ResistanceType.Poison, 20, 30);
SetResistance(ResistanceType.Energy, 30, 40);
SetSkill(SkillName.EvalInt, 70.1, 80.0);
SetSkill(SkillName.Magery, 70.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 95.0);
SetSkill(SkillName.Tactics, 70.1, 80.0);
SetSkill(SkillName.Wrestling, 60.1, 80.0);
}
VirtualArmor = 58;
ControlSlots = Core.SE ? 4 : 5;
}
public override bool DeleteCorpseOnDeath => Summoned;
public override string CorpseName => "a daemon corpse";
public override double DispelDifficulty => 125.0;
public override double DispelFocus => 45.0;
public override Poison PoisonImmune => Poison.Regular; // TODO: Immune to poison?
public override Poison PoisonImmune => Poison.Regular;
public override bool CanFly => true;
}
}

View file

@ -11,33 +11,63 @@ namespace Server.Mobiles
Body = 14;
BaseSoundID = 268;
SetStr(200);
SetDex(70);
SetInt(70);
if (Core.AOS)
{
SetStr(200);
SetDex(70);
SetInt(70);
SetHits(180);
SetHits(180);
SetDamage(14, 21);
SetDamage(14, 21);
SetDamageType(ResistanceType.Physical, 100);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 65, 75);
SetResistance(ResistanceType.Fire, 40, 50);
SetResistance(ResistanceType.Cold, 40, 50);
SetResistance(ResistanceType.Poison, 40, 50);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance(ResistanceType.Physical, 65, 75);
SetResistance(ResistanceType.Fire, 40, 50);
SetResistance(ResistanceType.Cold, 40, 50);
SetResistance(ResistanceType.Poison, 40, 50);
SetResistance(ResistanceType.Energy, 40, 50);
SetSkill(SkillName.MagicResist, 65.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 90.0);
SetSkill(SkillName.MagicResist, 65.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 90.0);
}
else
{
SetStr(126, 155);
SetDex(66, 85);
SetInt(71, 92);
SetHits(76, 93);
SetDamage(9, 16);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 30, 35);
SetResistance(ResistanceType.Fire, 10, 20);
SetResistance(ResistanceType.Cold, 10, 20);
SetResistance(ResistanceType.Poison, 15, 25);
SetResistance(ResistanceType.Energy, 15, 25);
SetSkill(SkillName.MagicResist, 50.1, 95.0);
SetSkill(SkillName.Tactics, 60.1, 100.0);
SetSkill(SkillName.Wrestling, 60.1, 100.0);
}
VirtualArmor = 34;
ControlSlots = 2;
}
public override bool DeleteCorpseOnDeath => Summoned;
public override string CorpseName => "an earth elemental corpse";
public override string DefaultName => "an earth elemental";
public override bool BleedImmune => true;
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "an earth elemental";
}
}

View file

@ -12,26 +12,54 @@ namespace Server.Mobiles
Body = 15;
BaseSoundID = 838;
SetStr(200);
SetDex(200);
SetInt(100);
if (Core.AOS)
{
SetStr(200);
SetDex(200);
SetInt(100);
SetDamage(9, 14);
SetDamage(9, 14);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Fire, 100);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Fire, 100);
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 70, 80);
SetResistance(ResistanceType.Cold, 0, 10);
SetResistance(ResistanceType.Poison, 50, 60);
SetResistance(ResistanceType.Energy, 50, 60);
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 70, 80);
SetResistance(ResistanceType.Cold, 0, 10);
SetResistance(ResistanceType.Poison, 50, 60);
SetResistance(ResistanceType.Energy, 50, 60);
SetSkill(SkillName.EvalInt, 90.0);
SetSkill(SkillName.Magery, 90.0);
SetSkill(SkillName.MagicResist, 85.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 92.0);
SetSkill(SkillName.EvalInt, 90.0);
SetSkill(SkillName.Magery, 90.0);
SetSkill(SkillName.MagicResist, 85.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 92.0);
}
else
{
SetStr(126, 155);
SetDex(166, 185);
SetInt(101, 125);
SetHits(76, 93);
SetDamage(7, 9);
SetDamageType(ResistanceType.Physical, 25);
SetDamageType(ResistanceType.Fire, 75);
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 60, 80);
SetResistance(ResistanceType.Cold, 5, 10);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 30, 40);
SetSkill(SkillName.EvalInt, 60.1, 75.0);
SetSkill(SkillName.Magery, 60.1, 75.0);
SetSkill(SkillName.MagicResist, 75.2, 105.0);
SetSkill(SkillName.Tactics, 80.1, 100.0);
SetSkill(SkillName.Wrestling, 70.1, 100.0);
}
VirtualArmor = 40;
ControlSlots = 4;
@ -39,9 +67,14 @@ namespace Server.Mobiles
AddItem(new LightSource());
}
public override bool DeleteCorpseOnDeath => Summoned;
public override string CorpseName => "a fire elemental corpse";
public override string DefaultName => "a fire elemental";
public override bool BleedImmune => true;
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "a fire elemental";
}
}

View file

@ -11,38 +11,70 @@ namespace Server.Mobiles
Body = 16;
BaseSoundID = 278;
SetStr(200);
SetDex(70);
SetInt(100);
if (Core.AOS)
{
SetStr(200);
SetDex(70);
SetInt(100);
SetHits(165);
SetHits(165);
SetDamage(12, 16);
SetDamage(12, 16);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Cold, 100);
SetDamageType(ResistanceType.Physical, 0);
SetDamageType(ResistanceType.Cold, 100);
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 20, 30);
SetResistance(ResistanceType.Cold, 70, 80);
SetResistance(ResistanceType.Poison, 45, 55);
SetResistance(ResistanceType.Energy, 40, 50);
SetResistance(ResistanceType.Physical, 50, 60);
SetResistance(ResistanceType.Fire, 20, 30);
SetResistance(ResistanceType.Cold, 70, 80);
SetResistance(ResistanceType.Poison, 45, 55);
SetResistance(ResistanceType.Energy, 40, 50);
SetSkill(SkillName.Meditation, 90.0);
SetSkill(SkillName.EvalInt, 80.0);
SetSkill(SkillName.Magery, 80.0);
SetSkill(SkillName.MagicResist, 75.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 85.0);
SetSkill(SkillName.Meditation, 90.0);
SetSkill(SkillName.EvalInt, 80.0);
SetSkill(SkillName.Magery, 80.0);
SetSkill(SkillName.MagicResist, 75.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 85.0);
}
else
{
SetStr(126, 155);
SetDex(66, 85);
SetInt(101, 125);
SetHits(76, 93);
SetDamage(7, 9);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 10, 25);
SetResistance(ResistanceType.Cold, 10, 25);
SetResistance(ResistanceType.Poison, 60, 70);
SetResistance(ResistanceType.Energy, 5, 10);
SetSkill(SkillName.EvalInt, 60.1, 75.0);
SetSkill(SkillName.Magery, 60.1, 75.0);
SetSkill(SkillName.MagicResist, 100.1, 115.0);
SetSkill(SkillName.Tactics, 50.1, 70.0);
SetSkill(SkillName.Wrestling, 50.1, 70.0);
}
VirtualArmor = 40;
ControlSlots = 3;
CanSwim = true;
}
public override bool DeleteCorpseOnDeath => Summoned;
public override string CorpseName => "a water elemental corpse";
public override string DefaultName => "a water elemental";
public override bool BleedImmune => true;
public override double DispelDifficulty => 117.5;
public override double DispelFocus => 45.0;
public override string DefaultName => "a water elemental";
}
}

View file

@ -49,14 +49,7 @@ namespace Server.Spells.Eighth
_ => TimeSpan.FromSeconds(4 * Math.Max(5, Caster.Skills.Magery.Value)),
};
if (Core.AOS)
{
SpellHelper.Summon(new SummonedAirElemental(), Caster, 0x217, duration, false, false);
}
else
{
SpellHelper.Summon(new AirElemental(), Caster, 0x217, duration, false, false);
}
SpellHelper.Summon(new SummonedAirElemental(), Caster, 0x217, duration, false, false);
}
FinishSequence();

View file

@ -49,14 +49,7 @@ namespace Server.Spells.Eighth
_ => TimeSpan.FromSeconds(4 * Math.Max(5, Caster.Skills.Magery.Value)),
};
if (Core.AOS)
{
SpellHelper.Summon(new SummonedEarthElemental(), Caster, 0x217, duration, false, false);
}
else
{
SpellHelper.Summon(new EarthElemental(), Caster, 0x217, duration, false, false);
}
SpellHelper.Summon(new SummonedEarthElemental(), Caster, 0x217, duration, false, false);
}
FinishSequence();

View file

@ -50,14 +50,7 @@ namespace Server.Spells.Eighth
_ => TimeSpan.FromSeconds(4 * Math.Max(5, Caster.Skills.Magery.Value)),
};
if (Core.AOS)
{
SpellHelper.Summon(new SummonedFireElemental(), Caster, 0x217, duration, false, false);
}
else
{
SpellHelper.Summon(new FireElemental(), Caster, 0x217, duration, false, false);
}
SpellHelper.Summon(new SummonedFireElemental(), Caster, 0x217, duration, false, false);
}
FinishSequence();

View file

@ -50,16 +50,7 @@ namespace Server.Spells.Eighth
_ => TimeSpan.FromSeconds(4 * Math.Max(5, Caster.Skills.Magery.Value)),
};
if (Core.AOS) /* Why two diff daemons? TODO: solve this */
{
BaseCreature m_Daemon = new SummonedDaemon();
SpellHelper.Summon(m_Daemon, Caster, 0x216, duration, false, false);
m_Daemon.FixedParticles(0x3728, 8, 20, 5042, EffectLayer.Head);
}
else
{
SpellHelper.Summon(new Daemon(), Caster, 0x216, duration, false, false);
}
SpellHelper.Summon(new SummonedDaemon(), Caster, 0x216, duration, false, false);
}
FinishSequence();

View file

@ -49,14 +49,7 @@ namespace Server.Spells.Eighth
_ => TimeSpan.FromSeconds(4 * Math.Max(5, Caster.Skills.Magery.Value)),
};
if (Core.AOS)
{
SpellHelper.Summon(new SummonedWaterElemental(), Caster, 0x217, duration, false, false);
}
else
{
SpellHelper.Summon(new WaterElemental(), Caster, 0x217, duration, false, false);
}
SpellHelper.Summon(new SummonedWaterElemental(), Caster, 0x217, duration, false, false);
}
FinishSequence();