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,245 @@
using System;
using Server.Mobiles;
namespace Server.Items
{
public class SlayerGroup
{
static SlayerGroup()
{
SlayerGroup humanoid = new SlayerGroup();
SlayerGroup undead = new SlayerGroup();
SlayerGroup elemental = new SlayerGroup();
SlayerGroup abyss = new SlayerGroup();
SlayerGroup arachnid = new SlayerGroup();
SlayerGroup reptilian = new SlayerGroup();
SlayerGroup fey = new SlayerGroup();
humanoid.Opposition = new[] { undead };
humanoid.FoundOn = new[] { typeof(BoneKnight), typeof(Lich), typeof(LichLord) };
humanoid.Super = new SlayerEntry(SlayerName.Repond, typeof(ArcticOgreLord), typeof(Cyclops), typeof(Ettin),
typeof(EvilMage), typeof(EvilMageLord), typeof(FrostTroll), typeof(MeerCaptain), typeof(MeerEternal),
typeof(MeerMage), typeof(MeerWarrior), typeof(Ogre), typeof(OgreLord), typeof(Orc), typeof(OrcBomber),
typeof(OrcBrute), typeof(OrcCaptain), /*typeof( OrcChopper ), typeof( OrcScout ),*/ typeof(OrcishLord),
typeof(OrcishMage), typeof(Ratman), typeof(RatmanArcher), typeof(RatmanMage), typeof(SavageRider),
typeof(SavageShaman), typeof(Savage), typeof(Titan), typeof(Troglodyte), typeof(Troll));
humanoid.Entries = new[]
{
new SlayerEntry(SlayerName.OgreTrashing, typeof(Ogre), typeof(OgreLord), typeof(ArcticOgreLord)),
new SlayerEntry(SlayerName.OrcSlaying, typeof(Orc), typeof(OrcBomber), typeof(OrcBrute),
typeof(OrcCaptain), /* typeof( OrcChopper ), typeof( OrcScout ),*/ typeof(OrcishLord),
typeof(OrcishMage)),
new SlayerEntry(SlayerName.TrollSlaughter, typeof(Troll), typeof(FrostTroll))
};
undead.Opposition = new[] { humanoid };
undead.Super = new SlayerEntry(SlayerName.Silver, typeof(AncientLich), typeof(Bogle), typeof(BoneKnight),
typeof(BoneMagi), /* typeof( DarkGuardian ), */typeof(DarknightCreeper), typeof(FleshGolem), typeof(Ghoul),
typeof(GoreFiend), typeof(HellSteed), typeof(LadyOfTheSnow), typeof(Lich), typeof(LichLord), typeof(Mummy),
typeof(PestilentBandage), typeof(Revenant), typeof(RevenantLion), typeof(RottingCorpse), typeof(Shade),
typeof(ShadowKnight), typeof(SkeletalKnight), typeof(SkeletalMage), typeof(SkeletalMount), typeof(Skeleton),
typeof(Spectre), typeof(Wraith), typeof(Zombie));
undead.Entries = new SlayerEntry[0];
fey.Opposition = new[] { abyss };
fey.Super = new SlayerEntry(SlayerName.Fey, typeof(Centaur), typeof(CuSidhe), typeof(EtherealWarrior),
typeof(Kirin), typeof(LordOaks), typeof(Pixie), typeof(Silvani), typeof(Treefellow), typeof(Unicorn),
typeof(Wisp), typeof(MLDryad), typeof(Satyr));
fey.Entries = new SlayerEntry[0];
elemental.Opposition = new[] { abyss };
elemental.FoundOn = new[] { typeof(Balron), typeof(Daemon) };
elemental.Super = new SlayerEntry(SlayerName.ElementalBan, typeof(AcidElemental), typeof(AgapiteElemental),
typeof(AirElemental), typeof(SummonedAirElemental), typeof(BloodElemental), typeof(BronzeElemental),
typeof(CopperElemental), typeof(CrystalElemental), typeof(DullCopperElemental), typeof(EarthElemental),
typeof(SummonedEarthElemental), typeof(Efreet), typeof(FireElemental), typeof(SummonedFireElemental),
typeof(GoldenElemental), typeof(IceElemental), typeof(KazeKemono), typeof(PoisonElemental), typeof(RaiJu),
typeof(SandVortex), typeof(ShadowIronElemental), typeof(SnowElemental), typeof(ValoriteElemental),
typeof(VeriteElemental), typeof(WaterElemental), typeof(SummonedWaterElemental));
elemental.Entries = new[]
{
new SlayerEntry(SlayerName.BloodDrinking, typeof(BloodElemental)),
new SlayerEntry(SlayerName.EarthShatter, typeof(AgapiteElemental), typeof(BronzeElemental),
typeof(CopperElemental), typeof(DullCopperElemental), typeof(EarthElemental),
typeof(SummonedEarthElemental), typeof(GoldenElemental), typeof(ShadowIronElemental),
typeof(ValoriteElemental), typeof(VeriteElemental)),
new SlayerEntry(SlayerName.ElementalHealth, typeof(PoisonElemental)),
new SlayerEntry(SlayerName.FlameDousing, typeof(FireElemental), typeof(SummonedFireElemental)),
new SlayerEntry(SlayerName.SummerWind, typeof(SnowElemental), typeof(IceElemental)),
new SlayerEntry(SlayerName.Vacuum, typeof(AirElemental), typeof(SummonedAirElemental)),
new SlayerEntry(SlayerName.WaterDissipation, typeof(WaterElemental), typeof(SummonedWaterElemental))
};
abyss.Opposition = new[] { elemental, fey };
abyss.FoundOn = new[] { typeof(BloodElemental) };
if (Core.AOS)
{
abyss.Super = new SlayerEntry(SlayerName.Exorcism, typeof(AbysmalHorror), typeof(ArcaneDaemon),
typeof(Balron), typeof(BoneDemon), typeof(ChaosDaemon), typeof(Daemon), typeof(SummonedDaemon),
typeof(DemonKnight), typeof(Devourer), typeof(EnslavedGargoyle), typeof(FanDancer), typeof(FireGargoyle),
typeof(Gargoyle), typeof(GargoyleDestroyer), typeof(GargoyleEnforcer), typeof(Gibberling),
typeof(HordeMinion), typeof(IceFiend), typeof(Imp), typeof(Impaler), typeof(Moloch), typeof(Oni),
typeof(Ravager), typeof(Semidar), typeof(StoneGargoyle), typeof(Succubus), typeof(TsukiWolf));
abyss.Entries = new[]
{
// Daemon Dismissal & Balron Damnation have been removed and moved up to super slayer on OSI.
new SlayerEntry(SlayerName.GargoylesFoe, typeof(EnslavedGargoyle), typeof(FireGargoyle),
typeof(Gargoyle), typeof(GargoyleDestroyer), typeof(GargoyleEnforcer), typeof(StoneGargoyle))
};
}
else
{
abyss.Super = new SlayerEntry(SlayerName.Exorcism, typeof(AbysmalHorror), typeof(Balron), typeof(BoneDemon),
typeof(ChaosDaemon), typeof(Daemon), typeof(SummonedDaemon), typeof(DemonKnight), typeof(Devourer),
typeof(Gargoyle), typeof(FireGargoyle), typeof(Gibberling), typeof(HordeMinion), typeof(IceFiend),
typeof(Imp), typeof(Impaler), typeof(Ravager), typeof(StoneGargoyle), typeof(ArcaneDaemon),
typeof(EnslavedGargoyle), typeof(GargoyleDestroyer), typeof(GargoyleEnforcer), typeof(Moloch));
abyss.Entries = new[]
{
new SlayerEntry(SlayerName.DaemonDismissal, typeof(AbysmalHorror), typeof(Balron), typeof(BoneDemon),
typeof(ChaosDaemon), typeof(Daemon), typeof(SummonedDaemon), typeof(DemonKnight), typeof(Devourer),
typeof(Gibberling), typeof(HordeMinion), typeof(IceFiend), typeof(Imp), typeof(Impaler),
typeof(Ravager), typeof(ArcaneDaemon), typeof(Moloch)),
new SlayerEntry(SlayerName.GargoylesFoe, typeof(FireGargoyle), typeof(Gargoyle), typeof(StoneGargoyle),
typeof(EnslavedGargoyle), typeof(GargoyleDestroyer), typeof(GargoyleEnforcer)),
new SlayerEntry(SlayerName.BalronDamnation, typeof(Balron))
};
}
arachnid.Opposition = new[] { reptilian };
arachnid.FoundOn = new[]
{
typeof(AncientWyrm), typeof(GreaterDragon), typeof(Dragon), typeof(OphidianMatriarch), typeof(ShadowWyrm)
};
arachnid.Super = new SlayerEntry(SlayerName.ArachnidDoom, typeof(DreadSpider), typeof(FrostSpider),
typeof(GiantBlackWidow), typeof(GiantSpider), typeof(Mephitis), typeof(Scorpion), typeof(TerathanAvenger),
typeof(TerathanDrone), typeof(TerathanMatriarch), typeof(TerathanWarrior));
arachnid.Entries = new[]
{
new SlayerEntry(SlayerName.ScorpionsBane, typeof(Scorpion)),
new SlayerEntry(SlayerName.SpidersDeath, typeof(DreadSpider), typeof(FrostSpider), typeof(GiantBlackWidow),
typeof(GiantSpider), typeof(Mephitis)),
new SlayerEntry(SlayerName.Terathan, typeof(TerathanAvenger), typeof(TerathanDrone),
typeof(TerathanMatriarch), typeof(TerathanWarrior))
};
reptilian.Opposition = new[] { arachnid };
reptilian.FoundOn = new[] { typeof(TerathanAvenger), typeof(TerathanMatriarch) };
reptilian.Super = new SlayerEntry(SlayerName.ReptilianDeath, typeof(AncientWyrm), typeof(DeepSeaSerpent),
typeof(GreaterDragon), typeof(Dragon), typeof(Drake), typeof(GiantIceWorm), typeof(IceSerpent),
typeof(GiantSerpent), typeof(Hiryu), typeof(IceSnake), typeof(JukaLord), typeof(JukaMage),
typeof(JukaWarrior), typeof(LavaSerpent), typeof(LavaSnake), typeof(LesserHiryu), typeof(Lizardman),
typeof(OphidianArchmage), typeof(OphidianKnight), typeof(OphidianMage), typeof(OphidianMatriarch),
typeof(OphidianWarrior), typeof(Reptalon), typeof(SeaSerpent), typeof(Serado), typeof(SerpentineDragon),
typeof(ShadowWyrm), typeof(SilverSerpent), typeof(SkeletalDragon), typeof(Snake), typeof(SwampDragon),
typeof(WhiteWyrm), typeof(Wyvern), typeof(Yamandon));
reptilian.Entries = new[]
{
new SlayerEntry(SlayerName.DragonSlaying, typeof(AncientWyrm), typeof(GreaterDragon), typeof(Dragon),
typeof(Drake), typeof(Hiryu), typeof(LesserHiryu), typeof(Reptalon), typeof(SerpentineDragon),
typeof(ShadowWyrm), typeof(SkeletalDragon), typeof(SwampDragon), typeof(WhiteWyrm), typeof(Wyvern)),
new SlayerEntry(SlayerName.LizardmanSlaughter, typeof(Lizardman)),
new SlayerEntry(SlayerName.Ophidian, typeof(OphidianArchmage), typeof(OphidianKnight), typeof(OphidianMage),
typeof(OphidianMatriarch), typeof(OphidianWarrior)),
new SlayerEntry(SlayerName.SnakesBane, typeof(DeepSeaSerpent), typeof(GiantIceWorm), typeof(GiantSerpent),
typeof(IceSerpent), typeof(IceSnake), typeof(LavaSerpent), typeof(LavaSnake), typeof(SeaSerpent),
typeof(Serado), typeof(SilverSerpent), typeof(Snake), typeof(Yamandon))
};
Groups = new[]
{
humanoid,
undead,
elemental,
abyss,
arachnid,
reptilian,
fey
};
TotalEntries = CompileEntries(Groups);
}
public static SlayerEntry[] TotalEntries{ get; }
public static SlayerGroup[] Groups{ get; }
public SlayerGroup[] Opposition{ get; set; }
public SlayerEntry Super{ get; set; }
public SlayerEntry[] Entries{ get; set; }
public Type[] FoundOn{ get; set; }
public static SlayerEntry GetEntryByName(SlayerName name)
{
int v = (int)name;
if (v >= 0 && v < TotalEntries.Length)
return TotalEntries[v];
return null;
}
public static SlayerName GetLootSlayerType(Type type)
{
for (int i = 0; i < Groups.Length; ++i)
{
SlayerGroup group = Groups[i];
Type[] foundOn = group.FoundOn;
bool inGroup = false;
for (int j = 0; foundOn != null && !inGroup && j < foundOn.Length; ++j)
inGroup = foundOn[j] == type;
if (inGroup)
{
int index = Utility.Random(1 + group.Entries.Length);
if (index == 0)
return group.Super.Name;
return group.Entries[index - 1].Name;
}
}
return SlayerName.Silver;
}
private static SlayerEntry[] CompileEntries(SlayerGroup[] groups)
{
SlayerEntry[] entries = new SlayerEntry[28];
for (int i = 0; i < groups.Length; ++i)
{
SlayerGroup g = groups[i];
g.Super.Group = g;
entries[(int)g.Super.Name] = g.Super;
for (int j = 0; j < g.Entries.Length; ++j)
{
g.Entries[j].Group = g;
entries[(int)g.Entries[j].Name] = g.Entries[j];
}
}
return entries;
}
public bool OppositionSuperSlays(Mobile m)
{
for (int i = 0; i < Opposition.Length; i++)
if (Opposition[i].Super.Slays(m))
return true;
return false;
}
}
}