private void AddCampChests() { LockableContainer chest = null; switch (Utility.Random(3)) { case 0: chest = new MetalChest(); break; case 1: chest = new MetalGoldenChest(); break; default: chest = new WoodenChest(); break; } // Plume : Retrait des items magiques du coffre. chest.LiftOverride = true; chest.DropItem(new Gold(Utility.RandomMinMax(300, 600))); chest.RequiredSkill = 36; chest.LockLevel = 26; chest.MaxLockLevel = 76; chest.Locked = true; //TreasureMapChest.Fill(chest, 1); AddItem(chest, -2, -2, 0); LockableContainer crates = null; switch (Utility.Random(4)) { case 0: crates = new SmallCrate(); break; case 1: crates = new MediumCrate(); break; case 2: crates = new LargeCrate(); break; default: crates = new LockableBarrel(); break; } crates.TrapType = TrapType.ExplosionTrap; crates.TrapPower = Utility.RandomMinMax(30, 40); crates.TrapLevel = 2; crates.RequiredSkill = 76; crates.LockLevel = 66; crates.MaxLockLevel = 116; crates.Locked = true; crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); crates.DropItem(new Arrow(10)); crates.DropItem(new Bolt(10)); crates.LiftOverride = true; if (Utility.RandomDouble() < 0.8) { switch (Utility.Random(4)) { case 0: crates.DropItem(new LesserCurePotion()); break; case 1: crates.DropItem(new LesserExplosionPotion()); break; case 2: crates.DropItem(new LesserHealPotion()); break; default: crates.DropItem(new LesserPoisonPotion()); break; } } AddItem(crates, 2, 2, 0); }
public override void AddComponents() { IronGate gate = new IronGate( DoorFacing.EastCCW ); m_Gate = gate; gate.KeyValue = Key.RandomValue(); gate.Locked = true; AddItem( gate, -2, 1, 0 ); MetalChest chest = new MetalChest(); chest.ItemID = 0xE7C; chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) ); chest.LiftOverride = true; TreasureMapChest.FillOld( chest, 2 ); AddItem( chest, 4, 4, 0 ); AddMobile( new Ratman(), 15, 0, -2, 0 ); AddMobile( new Ratman(), 15, 0, 1, 0 ); AddMobile( new RatmanMage(), 15, 0, -1, 0 ); AddMobile( new RatmanArcher(), 15, 0, 0, 0 ); m_Prisoner = new BaseEscort(); m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 ); AddMobile( m_Prisoner, 2, -2, 0, 0 ); }
public override void AddComponents() { IronGate gate = new IronGate( DoorFacing.EastCCW ); m_Gate = gate; gate.KeyValue = Key.RandomValue(); gate.Locked = true; AddItem( gate, -2, 1, 0 ); MetalChest chest = new MetalChest(); chest.ItemID = 0xE7C; chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) ); TreasureMapChest.Fill( chest, 2 ); AddItem( chest, 4, 4, 0 ); AddMobile( new Gnoll(), 15, 0, -2, 0 ); AddMobile( new Gnoll(), 15, 0, 1, 0 ); AddMobile( new Gnoll(), 15, 0, -1, 0 ); AddMobile( new Gnoll(), 15, 0, 0, 0 ); switch ( Utility.Random( 2 ) ) { case 0: m_Prisoner = new Noble(); break; case 1: m_Prisoner = new SeekerOfAdventure(); break; } m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 ); AddMobile( m_Prisoner, 2, -2, 0, 0 ); }
private void AddCampChests(IronGate gate) { LockableContainer chest = null; chest = new MetalChest(); chest.ItemID = 3708; chest.LiftOverride = true; TreasureMapChest.Fill(chest, 3); chest.DropItem(new Key(KeyType.Iron, gate.KeyValue)); AddItem(chest, 4, 4, 1); LockableContainer crates = null; switch (Utility.Random(4)) { case 0: crates = new SmallCrate(); break; case 1: crates = new MediumCrate(); break; case 2: crates = new LargeCrate(); break; default: crates = new LockableBarrel(); break; } crates.TrapType = TrapType.ExplosionTrap; crates.TrapPower = Utility.RandomMinMax(50, 70); crates.TrapLevel = 3; crates.RequiredSkill = 86; crates.LockLevel = 86; crates.MaxLockLevel = 126; crates.Locked = true; crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); crates.DropItem(new Arrow(10)); crates.DropItem(new Bolt(10)); crates.LiftOverride = true; if (Utility.RandomDouble() < 0.8) { switch (Utility.Random(4)) { case 0: crates.DropItem(new LesserCurePotion()); break; case 1: crates.DropItem(new LesserExplosionPotion()); break; case 2: crates.DropItem(new LesserHealPotion()); break; default: crates.DropItem(new LesserPoisonPotion()); break; } } AddItem(crates, 2, 2, 0); }
public override void AddComponents() { m_Gate = new IronGate(DoorFacing.EastCCW) { KeyValue = Key.RandomValue(), Locked = true }; AddItem(m_Gate, -2, 1, 0); m_Chest = new MetalChest { ItemID = 0xE7C, LiftOverride = true }; m_Chest.DropItem(new Key(KeyType.Iron, m_Gate.KeyValue)); AddItem(m_Chest, 4, 4, 0); AddMobile(new Lizardman(), 15, 0, -2, 0); AddMobile(new Lizardman(), 15, 0, -2, 0); AddMobile(new Lizardman(), 15, 0, -2, 0); AddMobile(new LizardWarrior(), 15, 0, 1, 0); AddMobile(new LizardMage(), 15, 0, -1, 0); AddMobile(new LizardMage(), 15, 0, -1, 0); AddMobile(new LizardArcher(), 15, 0, 0, 0); AddMobile(new LizardArcher(), 15, 0, 0, 0); switch (Utility.Random(2)) { case 0: m_Prisoner = new Noble(); break; case 1: m_Prisoner = new SeekerOfAdventure(); break; } m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); AddMobile(m_Prisoner, 2, -2, 0, 0); }
public override void AddComponents() { IronGate gate = new IronGate( DoorFacing.EastCCW ); m_Gate = gate; gate.KeyValue = Key.RandomValue(); gate.Locked = true; AddItem( gate, -2, 1, 0 ); MetalChest chest = new MetalChest(); chest.Movable = false; chest.ItemID = 0xE7C; // metal chest facing East chest.DropItem( new Key( KeyType.Rusty, gate.KeyValue ) ); LootPack.Average.Generate( chest ); AddItem( chest, 4, 4, 0 ); AddMobile( new Orc(), 15, 0, -2, 0 ); AddMobile( new Orc(), 15, 0, 1, 0 ); AddMobile( new Orc(), 15, 0, 1, 0 ); AddMobile( new Orc(), 15, 0, 1, 0 ); AddMobile( new Orc(), 15, 0, 1, 0 ); AddMobile( new OrcishMage(), 15, 0, -1, 0 ); AddMobile( new OrcCaptain(), 15, 0, -1, 0 ); if ( Utility.RandomBool() ) AddMobile( new OrcishLord(), 15, 0, 0, 0 ); switch ( Utility.Random( 8 ) ) { default:m_Prisoner = new Noble(); break; case 0: m_Prisoner = new SeekerOfAdventure(); break; case 1: m_Prisoner = new Messenger(); break; case 2: m_Prisoner = new Peasant(); break; case 3: m_Prisoner = new BrideGroom(); break; } m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 ); AddMobile( m_Prisoner, 2, -2, 0, 0 ); }
public override void AddComponents() { BaseCreature bc; IronGate gate = new IronGate( DoorFacing.EastCCW ); m_Gate = gate; gate.KeyValue = Key.RandomValue(); gate.Locked = true; AddItem( gate, -2, 1, 0 ); MetalChest chest = new MetalChest(); chest.ItemID = 0xE7C; chest.LiftOverride = true; chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) ); /*TreasureMapChest.Fill( chest, 2 );*/ AddItem( chest, 4, 4, 1 ); AddMobile( new Orc(), 15, 0, -2, 0 ); AddMobile( new Orc(), 15, 0, 1, 0 ); AddMobile( new OrcishMage(), 15, 0, -1, 0 ); AddMobile( new OrcCaptain(), 15, 0, 0, 0 ); switch ( Utility.Random( 2 ) ) { case 0: m_Prisoner = new Noble(); break; case 1: m_Prisoner = new SeekerOfAdventure(); break; } bc = (BaseCreature)m_Prisoner; bc.IsPrisoner = true; m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 ); AddMobile( m_Prisoner, 2, -2, 0, 0 ); }
public override void AddComponents() { this.AddItem(new Item(0xFAC), 0, 0, 0); // fire pit this.AddItem(new Item(0xDE3), 0, 0, 0); // camp fire this.AddItem(new Item(0x974), 0, 0, 1); // cauldron for (int i = 0; i < 2; i ++) { LockableContainer cont = null; switch ( Utility.Random(3) ) { case 0: cont = new MetalChest(); break; case 1: cont = new WoodenChest(); break; case 2: cont = new SmallCrate(); break; } cont.Movable = false; cont.Locked = true; cont.TrapType = TrapType.ExplosionTrap; cont.TrapPower = Utility.RandomMinMax(30, 40); cont.TrapLevel = 2; cont.RequiredSkill = 76; cont.LockLevel = 66; cont.MaxLockLevel = 116; cont.DropItem(new Gold(Utility.RandomMinMax(100, 400))); cont.DropItem(new Arrow(10)); cont.DropItem(new Bolt(10)); if (Utility.RandomDouble() < 0.8) { switch ( Utility.Random(4) ) { case 0: cont.DropItem(new LesserCurePotion()); break; case 1: cont.DropItem(new LesserExplosionPotion()); break; case 2: cont.DropItem(new LesserHealPotion()); break; case 3: cont.DropItem(new LesserPoisonPotion()); break; } } if (Utility.RandomDouble() < 0.5) { Item item = Loot.RandomArmorOrShieldOrWeapon(); if (item is BaseWeapon) BaseRunicTool.ApplyAttributesTo((BaseWeapon)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100); else if (item is BaseArmor) BaseRunicTool.ApplyAttributesTo((BaseArmor)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100); cont.DropItem(item); } Point3D loc = this.GetRandomSpawnPoint(3); this.AddItem(cont, loc.X, loc.Y, loc.Z); } switch ( Utility.Random(2) ) { case 0: this.m_Prisoner = new Noble(); break; case 1: this.m_Prisoner = new SeekerOfAdventure(); break; } for (int i = 0; i < 4; i ++) { Point3D loc = this.GetRandomSpawnPoint(5); this.AddMobile(this.Camper, 6, loc.X, loc.Y, loc.Z); } Point3D p = this.GetRandomSpawnPoint(3); this.AddMobile(this.m_Prisoner, 0, p.X, p.Y, p.Z); Console.WriteLine(this.Location.ToString()); }
protected virtual void FinishEffect(Point3D p, Map map, Mobile from) { from.RevealingAction(); int spawncount = GetSpawnCount(); int z = p.Z; //Ghost ship Z, should be 10 lower than the spawn Z int gsZ = z - 30; //Set to -30 so it spawns under the sea and then emerges up //Spawn Z, needs to be 10 higher than ghost ship Z so they get on top of the boat int spawnZ = z - 20; //Create the ghost ship here GhostShip gs = new GhostShip(); //Add treasure MetalChest tc = new MetalChest { ItemID = 0xE7C, LiftOverride = true }; TreasureMapChest.Fill(tc, 5); //Now declare an area the same size as the ship, to look for items that might block Point2D start = new Point2D(p.X - 10, p.Y - 7); //Starting location of the area Point2D end = new Point2D(p.X + 10, p.Y + 7); //Ending location of the area Rectangle2D rect = new Rectangle2D(start, end); //Declaring the entire area as a rectangle //Create a new list that will contain all items in the rectangle List <Item> list = new List <Item>(); IPooledEnumerable eable = map.GetItemsInBounds(rect); //Get all items in the rectangle foreach (Item item in eable) //Add all items in the rectangle to the list { list.Add(item); } eable.Free(); //While an item exists in the rectangle, move the spawnlocation of the boat/monsters while (list.Count > 0) { if (Utility.RandomDouble() < 0.5) { p.X += 1; } else { p.X -= 1; } if (Utility.RandomDouble() < 0.5) { p.Y += 1; } else { p.Y -= 1; } start = new Point2D(p.X - 10, p.Y - 7); end = new Point2D(p.X + 10, p.Y + 7); rect = new Rectangle2D(start, end); eable = map.GetItemsInBounds(rect); //Clear the list as we need to create a new one with the new location of the ship list.Clear(); foreach (Item item in eable) { list.Add(item); //Add the items (if any) in the new spawnlocation to the list } eable.Free(); } //No items blocking, move the ship to the world p.Z = gsZ; gs.MoveToWorld(p, map); //Move the treasure chest to the world p.Z = spawnZ + 2; p.X -= 9; tc.MoveToWorld(p, map); //Add the boat and all items inside the boat here gs.Itemlist.Add(gs); gs.Itemlist.Add(tc); //Add as many spawns as spawncount allows for (int i = 0; i < spawncount; ++i) { BaseCreature spawn; switch (Utility.Random(4)) { default: spawn = new LichLord(); break; case 1: spawn = new AncientLich(); break; case 2: spawn = new Lich(); break; case 3: spawn = new SkeletalCaptain(); break; } p.Z = spawnZ; Spawn(p, map, spawn); spawn.Combatant = from; //Add the spawn to the list "spawns", needed for the boat decay timer and emerge timer gs.Spawnlist.Add(spawn); } //Start the emerge timer, so the boat doesn't just appear instantly on top of the water new EmergeTimer(gs.Itemlist, gs.Spawnlist).Start(); Delete(); }
public void BuildChest() { m_MetalChest = new MetalChest(); m_MetalChest.Name = "Dead Man's Chest"; m_MetalChest.Hue = Utility.RandomMetalHue(); m_MetalChest.Movable = false; // level 5 chest logic m_MetalChest.RequiredSkill = 100; m_MetalChest.LockLevel = m_MetalChest.RequiredSkill - 10; m_MetalChest.MaxLockLevel = m_MetalChest.RequiredSkill + 40; // reset the trap m_MetalChest.TrapEnabled = true; m_MetalChest.TrapPower = 5 * 25; // level 5 m_MetalChest.Locked = true; m_MetalChest.TrapType = Utility.RandomBool() ? TrapType.PoisonTrap : TrapType.ExplosionTrap; // setup timmed release logic string[] lines = new string[4]; lines[0] = "Movable true"; lines[1] = "TrapEnabled false"; lines[2] = "TrapPower 0"; lines[3] = "Locked true"; // the chest will become movable in 10-25 minutes DateTime SetTime = DateTime.Now + TimeSpan.FromMinutes(Utility.RandomMinMax(10, 25)); new TimedSet(m_MetalChest, SetTime, lines).MoveItemToIntStorage(); // add loot FillChest(); // move the chest to world; m_MetalChest.MoveToWorld(Location, Map); }
public override Item Construct(Type type, Mobile from) { if (type == typeof(TreasureMap)) { int level; //if ( from is PlayerMobile && ((PlayerMobile)from).Young && from.Map == Map.Trammel && TreasureMap.IsInHavenIsland( from ) ) // level = 0; //else level = 1; return new TreasureMap(level, Map.Felucca); } else if (type == typeof(MessageInABottle)) { return new MessageInABottle( /*from.Map == Map.Felucca ?*/ Map.Felucca /* : Map.Trammel*/); } Container pack = from.Backpack; if (pack != null) { List<SOS> messages = pack.FindItemsByType<SOS>(); for (int i = 0; i < messages.Count; ++i) { SOS sos = messages[i]; if (from.Map == sos.TargetMap && from.InRange(sos.TargetLocation, (int)(from.Skills[SkillName.Fishing].Value - 75.0))) { Item preLoot = null; switch (Utility.Random(8)) { case 0: // Body parts { var list = new[] { 0x1CDD, 0x1CE5, // arm 0x1CE0, 0x1CE8, // torso 0x1CE1, 0x1CE9, // head 0x1CE2, 0x1CEC // leg }; preLoot = new ShipwreckedItem(Utility.RandomList(list)); break; } case 1: // Bone parts { var list = new[] { 0x1AE0, 0x1AE1, 0x1AE2, 0x1AE3, 0x1AE4, // skulls 0x1B09, 0x1B0A, 0x1B0B, 0x1B0C, 0x1B0D, 0x1B0E, 0x1B0F, 0x1B10, // bone piles 0x1B15, 0x1B16 // pelvis bones }; preLoot = new ShipwreckedItem(Utility.RandomList(list)); break; } case 2: // Paintings and portraits { preLoot = new ShipwreckedItem(Utility.Random(0xE9F, 10)); break; } case 3: // Pillows { preLoot = new ShipwreckedItem(Utility.Random(0x13A4, 11)); break; } case 4: // Shells { preLoot = new ShipwreckedItem(Utility.Random(0xFC4, 9)); break; } case 5: //Hats { if (Utility.RandomBool()) { preLoot = new SkullCap(); } else { preLoot = new TricorneHat(); } break; } case 6: // Misc { var list = new[] { 0x1EB5, // unfinished barrel 0xA2A, // stool 0xC1F, // broken clock 0x1047, 0x1048, // globe 0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves }; if (Utility.Random(list.Length + 1) == 0) { preLoot = new Candelabra(); } else { preLoot = new ShipwreckedItem(Utility.RandomList(list)); } break; } } if (preLoot != null) { if (preLoot is IShipwreckedItem) { ((IShipwreckedItem)preLoot).IsShipwreckedItem = true; } return preLoot; } LockableContainer chest = null; switch (Utility.Random(3)) { case 0: chest = new MetalGoldenChest(); break; case 1: chest = new MetalChest(); break; default: case 2: chest = new WoodenChest(); break; } chest.Breakable = false; chest.Locked = false; if (sos.IsAncient) { int hue = 1150; if (0.20 > Utility.RandomDouble()) { switch (Utility.Random((chest is WoodenChest) ? 6 : 14)) { case 0: hue = 1193; break; case 1: hue = 1281; break; case 2: hue = 1190; break; case 3: hue = 1165; break; case 4: hue = 1160; break; case 5: hue = 1126; break; case 6: hue = CraftResources.GetInfo(CraftResource.Valorite).Hue; break; case 7: hue = CraftResources.GetInfo(CraftResource.Verite).Hue; break; case 8: hue = CraftResources.GetInfo(CraftResource.Agapite).Hue; break; case 9: hue = CraftResources.GetInfo(CraftResource.Gold).Hue; break; case 10: hue = CraftResources.GetInfo(CraftResource.Bronze).Hue; break; case 11: hue = CraftResources.GetInfo(CraftResource.Copper).Hue; break; case 12: hue = CraftResources.GetInfo(CraftResource.ShadowIron).Hue; break; case 13: hue = CraftResources.GetInfo(CraftResource.DullCopper).Hue; break; } } chest.Hue = hue; } else if ((chest is MetalChest || chest is MetalGoldenChest) && (0.5 * sos.Level) >= Utility.RandomDouble()) { int randhue = Utility.Random(120); var resource = CraftResource.None; if (randhue >= 118) { resource = CraftResource.Valorite; } else if (randhue >= 115) { resource = CraftResource.Verite; } else if (randhue >= 110) { resource = CraftResource.Agapite; } else if (randhue >= 100) { resource = CraftResource.Gold; } else if (randhue >= 90) { resource = CraftResource.Bronze; } else if (randhue >= 70) { resource = CraftResource.Copper; } else if (randhue >= 40) { resource = CraftResource.ShadowIron; } else { resource = CraftResource.DullCopper; } chest.Hue = CraftResources.GetInfo(resource).Hue; } int soslevel = sos.Level; TreasureMapChest.Fill(chest, soslevel, from.Expansion); if (!sos.IsAncient) { chest.Locked = false; } double chance = Utility.RandomDouble(); BaseCreature mibmonster1; BaseCreature mibmonster2; mibmonster1 = new DeepWaterElemental(); if (chance <= 0.02 && from.Skills[SkillName.Fishing].Base >= 115) { mibmonster2 = new Osiredon(); int choice = Utility.Random(5); switch (choice) { case 4: mibmonster2.PackItem(new SmallFishingNetDeed()); break; case 3: mibmonster2.PackItem(new LargeFishingNetDeed()); break; case 2: mibmonster2.PackItem(new Shell()); break; case 1: mibmonster2.PackItem(new Anchor()); break; case 0: mibmonster2.PackItem(new Hook()); break; } } else if (soslevel < 5) { mibmonster2 = new WaterElemental(); } else { mibmonster2 = new DeepWaterElemental(); } int x = from.X, y = from.Y; Map map = from.Map; mibmonster1.MoveToWorld(new Point3D(x, y, -5), map); mibmonster2.MoveToWorld(new Point3D(x, y, -5), map); mibmonster1.Home = mibmonster1.Location; mibmonster1.HomeMap = mibmonster1.Map; mibmonster1.RangeHome = 10; mibmonster2.Home = mibmonster2.Location; mibmonster2.HomeMap = mibmonster2.Map; mibmonster2.RangeHome = 10; if (sos.IsAncient) { chest.DropItem(new FabledFishingNet()); } else { chest.DropItem(new SpecialFishingNet()); } chest.Movable = true; chest.Name = "treasure chest"; chest.IsShipwreckedItem = true; if (sos.Level > 0) { chest.TrapType = TrapType.ExplosionTrap; chest.TrapPower = soslevel * Utility.RandomMinMax(9, 19); chest.TrapLevel = 0; } else { chest.TrapType = TrapType.None; chest.TrapPower = 1; chest.TrapLevel = 1; } sos.Delete(); return chest; } } } return base.Construct(type, from); }
private Item CreateItem(int ItemID) // Create the appropriate item class - Defaults to a Static Item { Item item = null; switch(ItemID) { #region MobileSaver case 0x0001: // Now used for Mobile Importing. { item = new Static( 0x1 ); break; } #endregion case 0x1F19: // Add any unwanted items here. case 0x0FB7: // TODO: Boat parts: planks, tillerman, etc. break; case 0x0FB1: //forge item = new SmallForgeAddon(); break; case 0x0FAF: //anvil east item = new AnvilEastAddon(); break; case 0x0FB0: //anvil south item = new AnvilSouthAddon(); break; case 0x2DD8: //Elven Forge item = new ElvenForgeAddon(); break; case 0x1922: //FlourMill East item = new FlourMillEastAddon(); break; case 0x1920: case 0x1924: break; //Don't add those items since the addon has them. case 0x192E: //FlourMill South item = new FlourMillSouthAddon(); break; case 0x192C: case 0x1930: break; //Don't add those items since the addon has them. case 0x1060: //Loom East item = new LoomEastAddon(); break; case 0x105F: break; //Don't add those items since the addon has them. case 0x1061: //Loom South item = new LoomSouthAddon(); break; case 0x1062: break; //Don't add those items since the addon has them. case 0x1019: //Spinningwheel East item = new SpinningwheelEastAddon(); break; case 0x1015: //Spinningwheel South item = new SpinningwheelSouthAddon(); break; // Housing Metal Doors case 0x679: item = new NorthWestDoor(); break; case 0x67B: item = new NorthEastDoor(); break; case 0x675: item = new SouthWestDoor(); break; case 0x677: item = new SouthEastDoor(); break; case 0x683: item = new WestNorthDoor(); break; case 0x681: item = new WestSouthDoor(); break; case 0x67F: item = new EastNorthDoor(); break; case 0x67D: item = new EastSouthDoor(); break; /* case 0x0675: // Metal Doors 2 NOTE: Some doors seem to open the wrong way, but there's no way to determine correct CCW/CW from the POL file. item = new MetalDoor2( DoorFacing.WestCW ); break; case 0x0677: item = new MetalDoor2( DoorFacing.EastCCW ); break; case 0x067D: item = new MetalDoor2( DoorFacing.SouthCW ); break; case 0x067F: item = new MetalDoor2( DoorFacing.NorthCCW ); break; */ case 0x0685: // Barred Metal Doors item = new BarredMetalDoor( DoorFacing.WestCW ); break; case 0x0687: item = new BarredMetalDoor( DoorFacing.EastCCW ); break; case 0x068D: item = new BarredMetalDoor( DoorFacing.SouthCW ); break; case 0x068F: item = new BarredMetalDoor( DoorFacing.NorthCCW ); break; case 0x0695: // Rattan Doors item = new RattanDoor( DoorFacing.WestCW ); break; case 0x0697: item = new RattanDoor( DoorFacing.EastCCW ); break; case 0x069D: item = new RattanDoor( DoorFacing.SouthCW ); break; case 0x069F: item = new RattanDoor( DoorFacing.NorthCCW ); break; case 0x06A5: // Dark Wood Doors item = new DarkWoodDoor( DoorFacing.WestCW ); break; case 0x06A7: item = new DarkWoodDoor( DoorFacing.EastCCW ); break; case 0x06AD: item = new DarkWoodDoor( DoorFacing.SouthCW ); break; case 0x06AF: item = new DarkWoodDoor( DoorFacing.NorthCCW ); break; case 0x06B5: // Medium Wood Doors item = new MediumWoodDoor( DoorFacing.WestCW ); break; case 0x06B7: item = new MediumWoodDoor( DoorFacing.EastCCW ); break; case 0x06BD: item = new MediumWoodDoor( DoorFacing.SouthCW ); break; case 0x06BF: item = new MediumWoodDoor( DoorFacing.NorthCCW ); break; /* case 0x06C5: // Metal Doors item = new MetalDoor( DoorFacing.WestCW ); break; case 0x06C7: item = new MetalDoor( DoorFacing.EastCCW ); break; case 0x06CD: item = new MetalDoor( DoorFacing.SouthCW ); break; case 0x06CF: item = new MetalDoor( DoorFacing.NorthCCW ); break; */ case 0x06D5: // Light Wood Doors item = new LightWoodDoor( DoorFacing.WestCW ); break; case 0x06D7: item = new LightWoodDoor( DoorFacing.EastCCW ); break; case 0x06DD: item = new LightWoodDoor( DoorFacing.SouthCW ); break; case 0x06DF: item = new LightWoodDoor( DoorFacing.NorthCCW ); break; case 0x06E5: // Strong Wood Doors item = new StrongWoodDoor( DoorFacing.WestCW ); break; case 0x06E7: item = new StrongWoodDoor( DoorFacing.EastCCW ); break; case 0x06ED: item = new StrongWoodDoor( DoorFacing.SouthCW ); break; case 0x06EF: item = new StrongWoodDoor( DoorFacing.NorthCCW ); break; case 0x2A05: //South facing West half Paper door (SE) item = new SWPaperSEDoor(); break; case 0x2A07: //South facing East half Paper door (SE) item = new SEPaperSEDoor(); break; case 0x2A09: //East facing South half Paper door (SE) item = new ESPaperSEDoor(); break; case 0x2A0B: //East facing North half Paper door (SE) item = new ENPaperSEDoor(); break; case 0x2A0D: //South facing West half Cloth door (SE) item = new SWClothSEDoor(); break; case 0x2A0F: //South facing East half Cloth door (SE) item = new SEClothSEDoor(); break; case 0x2A11: //East facing South half Cloth door (SE) item = new ESClothSEDoor(); break; case 0x2A13: //East facing North half Cloth door (SE) item = new ENClothSEDoor(); break; case 0x2A16: //South facing West half Wooden door (SE) item = new SWWoodenSEDoor(); break; case 0x2A17: //South facing East half Wooden door (SE) item = new SEWoodenSEDoor(); break; case 0x2A19: //East facing South half Wooden door (SE) item = new ESWoodenSEDoor(); break; case 0x2A1B: //East facing North half Wooden door (SE) item = new ENWoodenSEDoor(); break; case 0xE77: //Barrel item = new Barrel(); item.Movable = false; break; case 0xE7F: //Keg item = new Keg(); item.Movable = false; break; case 0xE7A: //PicnicBasket item = new PicnicBasket(); item.Movable = false; break; case 0x990: //Basket item = new Basket(); item.Movable = false; break; case 0x9AA: //WoodenBox (0xE7D) item = new WoodenBox(); item.Movable = false; break; case 0xE7D: //WoodenBox (0xE7D) item = new WoodenBox(); item.Movable = false; item.ItemID = 0xE7D; break; case 0x9A9: //SmallCrate (0xE7E) item = new SmallCrate(); item.Movable = false; break; case 0xE7E: //SmallCrate (0xE7E) item = new SmallCrate(); item.Movable = false; item.ItemID = 0xE7E; break; case 0xE3F: //MediumCrate (0xE3E) item = new MediumCrate(); item.Movable = false; break; case 0xE3E: //MediumCrate (0xE3E) item = new MediumCrate(); item.Movable = false; item.ItemID = 0xE3E; break; case 0xE3D: //LargeCrate (0xE3C) item = new LargeCrate(); item.Movable = false; break; case 0xE3C: //LargeCrate (0xE3C) item = new LargeCrate(); item.Movable = false; item.ItemID = 0xE3C; break; case 0x9A8: //MetalBox (0xE80) item = new MetalBox(); item.Movable = false; break; case 0xE80: //MetalBox (0xE80) item = new MetalBox(); item.Movable = false; item.ItemID = 0xE80; break; case 0x9AB: //MetalChest (0xE7C) item = new MetalChest(); item.Movable = false; break; case 0xE7C: //MetalChest (0xE7C) item = new MetalChest(); item.Movable = false; item.ItemID = 0xE7C; break; case 0xE41: //MetalGoldenChest (0xE40) item = new MetalGoldenChest(); item.Movable = false; break; case 0xE40: //MetalGoldenChest (0xE40) item = new MetalGoldenChest(); item.Movable = false; item.ItemID = 0xE40; break; case 0xe43: //WoodenChest (0xe42) item = new WoodenChest(); item.Movable = false; break; case 0xe42: //WoodenChest (0xe42) item = new WoodenChest(); item.Movable = false; item.ItemID = 0xe42; break; case 0x280B: //PlainWoodenChest (0x280C) item = new PlainWoodenChest(); item.Movable = false; break; case 0x280C: //PlainWoodenChest (0x280C) item = new PlainWoodenChest(); item.Movable = false; item.ItemID = 0x280C; break; case 0x280D: //OrnateWoodenChest (0x280E) item = new OrnateWoodenChest(); item.Movable = false; break; case 0x280E: //OrnateWoodenChest (0x280E) item = new OrnateWoodenChest(); item.Movable = false; item.ItemID = 0x280E; break; case 0x280F: //GildedWoodenChest (0x2810) item = new GildedWoodenChest(); item.Movable = false; break; case 0x2810: //GildedWoodenChest (0x2810) item = new GildedWoodenChest(); item.Movable = false; item.ItemID = 0x2810; break; case 0x2811: //WoodenFootLocker (0x2812) item = new WoodenFootLocker(); item.Movable = false; break; case 0x2812: //WoodenFootLocker (0x2812) item = new WoodenFootLocker(); item.Movable = false; item.ItemID = 0x2812; break; case 0x2813: //FinishedWoodenChest (0x2814) item = new FinishedWoodenChest(); item.Movable = false; break; case 0x2814: //FinishedWoodenChest (0x2814) item = new FinishedWoodenChest(); item.Movable = false; item.ItemID = 0x2814; break; case 0x2815: //TallCabinet (0x2816) item = new TallCabinet(); item.Movable = false; break; case 0x2816: //TallCabinet (0x2816) item = new TallCabinet(); item.Movable = false; item.ItemID = 0x2816; break; case 0x2817: //ShortCabinet (0x2818) item = new ShortCabinet(); item.Movable = false; break; case 0x2818: //ShortCabinet (0x2818) item = new ShortCabinet(); item.Movable = false; item.ItemID = 0x2818; break; case 0x2857: //RedArmoire (0x2858) item = new RedArmoire(); item.Movable = false; break; case 0x2858: //RedArmoire (0x2858) item = new RedArmoire(); item.Movable = false; item.ItemID = 0x2858; break; case 0x285D: //CherryArmoire (0x285E) item = new CherryArmoire(); item.Movable = false; break; case 0x285E: //CherryArmoire (0x285E) item = new CherryArmoire(); item.Movable = false; item.ItemID = 0x285E; break; case 0x285B: //MapleArmoire (0x285C) item = new MapleArmoire(); item.Movable = false; break; case 0x285C: //MapleArmoire (0x285C) item = new MapleArmoire(); item.Movable = false; item.ItemID = 0x285C; break; case 0x2859: //ElegantArmoire (0x285A) item = new ElegantArmoire(); item.Movable = false; break; case 0x285A: //ElegantArmoire (0x285A) item = new ElegantArmoire(); item.Movable = false; item.ItemID = 0x285A; break; case 0xA97: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; break; case 0xA99: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; item.ItemID = 0xa99; break; case 0xA98: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; item.ItemID = 0xa98; break; case 0xA9a: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; item.ItemID = 0xa9a; break; case 0xA9b: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; item.ItemID = 0xa9b; break; case 0xA9c: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c) item = new FullBookcase(); item.Movable = false; item.ItemID = 0xa9c; break; case 0xA9D: //EmptyBookcase (0xa9e) item = new EmptyBookcase(); item.Movable = false; break; case 0xa9e: //EmptyBookcase (0xa9e) item = new EmptyBookcase (); item.Movable = false; item.ItemID = 0xa9e; break; case 0xA2C: //Drawer (0xa34) item = new Drawer(); item.Movable = false; break; case 0xa34: //Drawer (0xa34) item = new Drawer(); item.Movable = false; item.ItemID = 0xa34; break; case 0xA30: //FancyDrawer (0xa38) item = new FancyDrawer(); item.Movable = false; break; case 0xa38: //FancyDrawer (0xa38) item = new FancyDrawer(); item.Movable = false; item.ItemID = 0xa38; break; case 0xA4F: //Armoire (0xa53) item = new Armoire(); item.Movable = false; break; case 0xa53: //Armoire (0xa53) item = new Armoire(); item.Movable = false; item.ItemID = 0xa53; break; case 0xA4D: //FancyArmoire (0xa51) item = new FancyArmoire(); item.Movable = false; break; case 0xa51: //FancyArmoire (0xa51) item = new FancyArmoire(); item.Movable = false; item.ItemID = 0xa51; break; default: item = new Static(ItemID); item.Movable = false; break; } return item; }
public override void AddComponents() { BaseCreature bc; AddItem(new Static(0xFAC), 0, 0, 0); // fire pit AddItem(new Static(0xDE3), 0, 0, 0); // camp fire AddItem(new Static(0x974), 0, 0, 1); // cauldron // Chest MetalChest chest = new MetalChest(); switch (Utility.Random(3)) { case 0: chest.ItemID = 0x9AB; break; // MetalChest case 1: chest.ItemID = 0xe43; break; // WoodenChest case 2: chest.ItemID = 0x9A9; break; // SmallCrate } chest.Movable = false; chest.Locked = true; chest.TrapType = TrapType.ExplosionTrap; chest.TrapPower = Utility.RandomMinMax(30, 40); chest.TrapLevel = 2; chest.RequiredSkill = 76; chest.LockLevel = 66; chest.MaxLockLevel = 116; chest.DropItem(new Gold(Utility.RandomMinMax(100, 400))); chest.DropItem(new Arrow(10)); chest.DropItem(new Bolt(10)); if (Utility.RandomDouble() < 0.8) { switch (Utility.Random(4)) { case 0: chest.DropItem(new LesserCurePotion()); break; case 1: chest.DropItem(new LesserExplosionPotion()); break; case 2: chest.DropItem(new LesserHealPotion()); break; case 3: chest.DropItem(new LesserPoisonPotion()); break; } } if (Utility.RandomDouble() < 0.5) { Item item = Loot.RandomArmorOrShieldOrWeapon(); if (item is BaseWeapon) BaseRunicTool.ApplyAttributesTo((BaseWeapon)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100); else if (item is BaseArmor) BaseRunicTool.ApplyAttributesTo((BaseArmor)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100); chest.DropItem(item); } AddItem(chest, 1, 1, 1); // Brigands AddMobile(new Brigand(), 15, 0, -2, 0); AddMobile(new Brigand(), 15, 0, 1, 0); AddMobile(new Brigand(), 15, 0, -1, 0); AddMobile(new Brigand(), 15, 0, 0, 0); AddMobile(new Brigand(), 15, 0, -1, 0); AddMobile(new Brigand(), 15, 0, 0, 0); // prisioner switch (Utility.Random(2)) { case 0: m_Prisoner = new Noble(); break; case 1: m_Prisoner = new SeekerOfAdventure(); break; } bc = (BaseCreature)m_Prisoner; bc.IsPrisoner = true; m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); AddMobile(m_Prisoner, 2, -2, 0, 0); }
public override bool OnBeforeDeath() { Item item = null; switch (Utility.Random(8)) { case 0: item = new SpecialLeggings(); item.Name = "Azothu's Leggings"; break; // Leggings case 1: item = new SpecialArms(); item.Name = "Azothu's Arms"; break; // arms case 2: item = new SpecialTunic(); item.Name = "Azothu's Tunic"; break; // Chest case 3: item = new SpecialArmor(); item.Name = "Azothu's Armor"; break; // Female Chest case 4: item = new SpecialGorget(); item.Name = "Azothu's Gorget"; break; // gorget case 5: item = new SpecialGloves(); item.Name = "Azothu's Gloves"; break; // gloves case 6: item = new SpecialHelm(); item.Name = "Azothu's Helm"; break; // helm case 7: item = new MetalChest(); item.Name = "Azothu's Locker"; break; // helm } if (item != null) { item.Hue = 0x84A; PackItem(item); } return base.OnBeforeDeath(); }
public override void AddComponents() { IronGate gate = new IronGate( DoorFacing.EastCCW ); m_Gate = gate; gate.KeyValue = Key.RandomValue(); gate.Locked = false; AddItem( gate, -2, 1, 0 ); MetalChest chest = new MetalChest(); chest.ItemID = 0xE7C; chest.LiftOverride = true; chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) ); TreasureMapChest.Fill(chest, 3); //<---------Loot AddItem( chest, 4, 4, 1 ); //<------z +1 to hover over static switch (Utility.Random(4)) { case 0: { AddMobile(new Orc(), 15, 0, -2, 0); AddMobile(new OrcishMage(), 15, 0, 1, 0); AddMobile(new OrcishLord(), 15, 0, -2, 0); AddMobile(new OrcCaptain(), 15, 0, 1, 0); AddMobile(new Orc(), 15, 0, -1, 0); AddMobile(new OrcChopper(), 15, 0, -2, 0); }break; case 1: { AddMobile(new Ratman(), 15, 0, -2, 0); AddMobile(new Ratman(), 15, 0, 1, 0); AddMobile(new RatmanMage(), 15, 0, -2, 0); AddMobile(new Ratman(), 15, 0, 1, 0); AddMobile(new RatmanArcher(), 15, 0, -1, 0); AddMobile(new Ratman(), 15, 0, -2, 0); } break; case 2: { AddMobile(new Lizardman(), 15, 0, -2, 0); AddMobile(new Lizardman(), 15, 0, 1, 0); AddMobile(new Lizardman(), 15, 0, -2, 0); AddMobile(new Lizardman(), 15, 0, 1, 0); AddMobile(new Lizardman(), 15, 0, -1, 0); AddMobile(new Lizardman(), 15, 0, -2, 0); } break; case 3: { AddMobile(new Brigand(), 15, 0, -2, 0); AddMobile(new Brigand(), 15, 0, 1, 0); AddMobile(new Brigand(), 15, 0, -2, 0); AddMobile(new Brigand(), 15, 0, 1, 0); AddMobile(new Brigand(), 15, 0, -1, 0); AddMobile(new Brigand(), 15, 0, -2, 0); } break; } switch ( Utility.Random( 2 ) ) { case 0: m_Prisoner = new Noble(); break; case 1: m_Prisoner = new SeekerOfAdventure(); break; } m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 ); AddMobile( m_Prisoner, 2, -2, 0, 0 ); }
protected virtual void FinishEffect( Point3D p, Map map, Mobile from ) { from.RevealingAction(); int spawncount = GetSpawnCount(); int z = p.Z; //Ghost ship Z, should be 10 lower than the spawn Z int gsZ = z - 30; //Set to -30 so it spawns under the sea and then emerges up //Spawn Z, needs to be 10 higher than ghost ship Z so they get on top of the boat int spawnZ = z - 20; //Create the ghost ship here GhostShip gs = new GhostShip(); //Add treasure MetalChest tc = new MetalChest {ItemID = 0xE7C, LiftOverride = true}; TreasureMapChest.Fill(tc, 5); //Now declare an area the same size as the ship, to look for items that might block Point2D start = new Point2D( p.X - 10, p.Y - 7 ); //Starting location of the area Point2D end = new Point2D(p.X + 10, p.Y + 7); //Ending location of the area Rectangle2D rect = new Rectangle2D( start, end ); //Declaring the entire area as a rectangle //Create a new list that will contain all items in the rectangle List<Item> list = new List<Item>(); IPooledEnumerable eable = map.GetItemsInBounds(rect); //Get all items in the rectangle foreach (Item item in eable) //Add all items in the rectangle to the list list.Add(item); eable.Free(); //While an item exists in the rectangle, move the spawnlocation of the boat/monsters while (list.Count > 0 ) { if (Utility.RandomDouble() < 0.5 ) p.X += 1; else p.X -= 1; if (Utility.RandomDouble() < 0.5) p.Y += 1; else p.Y -= 1; start = new Point2D(p.X - 10, p.Y - 7); end = new Point2D(p.X + 10, p.Y + 7); rect = new Rectangle2D(start, end); eable = map.GetItemsInBounds(rect); //Clear the list as we need to create a new one with the new location of the ship list.Clear(); foreach (Item item in eable) list.Add(item); //Add the items (if any) in the new spawnlocation to the list eable.Free(); } //No items blocking, move the ship to the world p.Z = gsZ; gs.MoveToWorld(p, map); //Move the treasure chest to the world p.Z = spawnZ + 2; p.X -= 9; tc.MoveToWorld(p, map); //Add the boat and all items inside the boat here gs.Itemlist.Add(gs); gs.Itemlist.Add(tc); //Add as many spawns as spawncount allows for (int i = 0; i < spawncount; ++i) { BaseCreature spawn; switch (Utility.Random(4)) { default: spawn = new LichLord(); break; case 1: spawn = new AncientLich(); break; case 2: spawn = new Lich(); break; case 3: spawn = new SkeletalCaptain(); break; } p.Z = spawnZ; Spawn(p, map, spawn); spawn.Combatant = from; //Add the spawn to the list "spawns", needed for the boat decay timer and emerge timer gs.Spawnlist.Add(spawn); } //Start the emerge timer, so the boat doesn't just appear instantly on top of the water new EmergeTimer(gs.Itemlist, gs.Spawnlist).Start(); Delete(); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadEncodedInt(); switch (version) { case 1: m_Chest = reader.ReadItem<MetalChest>(); m_Filled = reader.ReadBool(); goto case 0; case 0: { m_Prisoner = reader.ReadMobile(); m_Gate = reader.ReadItem<BaseDoor>(); } break; } }
public override void AddComponents() { Item item = new Item( 0xFAC ); item.Movable = false; AddItem( item, 0, 0, 0 ); // fire pit item = new Item( 0xDE3 ); item.Movable = false; AddItem( item, 0, 0, 0 ); // camp fire item = new Item( 0x974 ); item.Movable = false; AddItem( item, 0, 0, 1 ); // cauldron for ( int i = 0; i < 2; i++ ) { LockableContainer cont = null; switch ( Utility.Random( 3 ) ) { case 0: cont = new MetalChest(); break; case 1: cont = new WoodenChest(); break; case 2: cont = new SmallCrate(); break; } cont.Movable = false; cont.Locked = true; cont.TrapType = TrapType.ExplosionTrap; cont.TrapPower = Utility.RandomMinMax( 30, 40 ); cont.TrapLevel = 2; cont.TrapEnabled = true; cont.RequiredSkill = 76; cont.LockLevel = 66; cont.MaxLockLevel = 116; cont.DropItem( new Gold( Utility.RandomMinMax( 100, 400 ) ) ); cont.DropItem( new Arrow( 10 ) ); cont.DropItem( new Bolt( 10 ) ); if ( Utility.RandomDouble() < 0.8 ) { switch ( Utility.Random( 4 ) ) { case 0: cont.DropItem( new LesserCurePotion() ); break; case 1: cont.DropItem( new LesserExplosionPotion() ); break; case 2: cont.DropItem( new LesserHealPotion() ); break; case 3: cont.DropItem( new LesserPoisonPotion() ); break; } } if ( Utility.RandomDouble() < 0.5 ) { item = Loot.RandomArmorOrShieldOrWeapon(); if ( item is BaseWeapon ) BaseRunicTool.ApplyAttributesTo( (BaseWeapon) item, false, 0, Utility.RandomMinMax( 1, 5 ), 10, 100 ); else if ( item is BaseArmor ) BaseRunicTool.ApplyAttributesTo( (BaseArmor) item, false, 0, Utility.RandomMinMax( 1, 5 ), 10, 100 ); cont.DropItem( item ); } AddItem( cont, Utility.RandomMinMax( -5, 5 ), Utility.RandomMinMax( -5, 5 ), 0 ); } m_Prisoner = new BaseEscort(); for ( int i = 0; i < 4; i++ ) { Point3D loc = GetRandomSpawnPoint( 5 ); AddMobile( new Brigand(), 6, 0, 0, 0 ); } AddMobile( m_Prisoner, 2, 2, 3, 0 ); }