public PuzzleChestSolution(PuzzleChestSolution solution) { for (var i = 0; i < Cylinders.Length; i++) { Cylinders[i] = solution.Cylinders[i]; } }
public PuzzleChestSolution(PuzzleChestSolution solution) { for (int i = 0; i < m_Cylinders.Length; i++) { m_Cylinders[i] = solution.m_Cylinders[i]; } }
public PuzzleChestSolution( PuzzleChestSolution solution ) { for ( int i = 0; i < m_Cylinders.Length; i++ ) { m_Cylinders[i] = solution.m_Cylinders[i]; } }
public override bool CheckLocked(Mobile from) { if (Locked) { PuzzleChestSolution solution = GetLastGuess(from); if (solution != null) { solution = new PuzzleChestSolution(solution); } else { solution = new PuzzleChestSolution(PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None); } from.CloseGump(typeof(PuzzleGump)); from.CloseGump(typeof(StatusGump)); from.SendGump(new PuzzleGump(from, this, solution, 0)); return(true); } else { return(false); } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadEncodedInt(); m_Solution = new PuzzleChestSolution(reader); int length = reader.ReadEncodedInt(); for (int i = 0; i < length; i++) { PuzzleChestCylinder cylinder = (PuzzleChestCylinder)reader.ReadInt(); if (length == m_Hints.Length) { m_Hints[i] = cylinder; } } if (length != m_Hints.Length) { InitHints(); } int guesses = reader.ReadEncodedInt(); for (int i = 0; i < guesses; i++) { Mobile m = reader.ReadMobile(); PuzzleChestSolutionAndTime sol = new PuzzleChestSolutionAndTime(reader); m_Guesses[m] = sol; } }
public override void LockPick(Mobile from) { from.SendLocalizedMessage(1159009); // You successfully disarm the trap! from.CheckTargetSkill(SkillName.RemoveTrap, this, 0, 100); Solution = new PuzzleChestSolution(); }
public void OnRemoveTrap(Mobile from) { PuzzleChestSolution solution = GetLastGuess(from); if (solution != null) { solution = new PuzzleChestSolution(solution); } else { solution = new PuzzleChestSolution(PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None); } from.CloseGump(typeof(PuzzleGump)); from.CloseGump(typeof(StatusGump)); from.SendGump(new PuzzleGump(from, this, solution, 0)); }
public void SubmitSolution(Mobile m, PuzzleChestSolution solution) { int correctCylinders, correctColors; if (solution.Matches(Solution, out correctCylinders, out correctColors)) { LockPick(m); DisplayTo(m); } else { m_Guesses[m] = new PuzzleChestSolutionAndTime(DateTime.UtcNow, solution); m.SendGump(new StatusGump(correctCylinders, correctColors)); DoDamage(m); } }
public bool Matches(PuzzleChestSolution solution, out int cylinders, out int colors) { cylinders = 0; colors = 0; bool[] matchesSrc = new bool[solution.m_Cylinders.Length]; bool[] matchesDst = new bool[solution.m_Cylinders.Length]; for (int i = 0; i < m_Cylinders.Length; i++) { if (m_Cylinders[i] == solution.m_Cylinders[i]) { cylinders++; matchesSrc[i] = true; matchesDst[i] = true; } } for (int i = 0; i < m_Cylinders.Length; i++) { if (!matchesSrc[i]) { for (int j = 0; j < solution.m_Cylinders.Length; j++) { if (m_Cylinders[i] == solution.m_Cylinders[j] && !matchesDst[j]) { colors++; matchesDst[j] = true; } } } } return(cylinders == m_Cylinders.Length); }
public bool Matches( PuzzleChestSolution solution, out int cylinders, out int colors ) { cylinders = 0; colors = 0; bool[] matchesSrc = new bool[solution.m_Cylinders.Length]; bool[] matchesDst = new bool[solution.m_Cylinders.Length]; for ( int i = 0; i < m_Cylinders.Length; i++ ) { if ( m_Cylinders[i] == solution.m_Cylinders[i] ) { cylinders++; matchesSrc[i] = true; matchesDst[i] = true; } } for ( int i = 0; i < m_Cylinders.Length; i++ ) { if ( !matchesSrc[i] ) { for ( int j = 0; j < solution.m_Cylinders.Length; j++ ) { if ( m_Cylinders[i] == solution.m_Cylinders[j] && !matchesDst[j] ) { colors++; matchesDst[j] = true; } } } } return cylinders == m_Cylinders.Length; }
protected override void GenerateTreasure() { DropItem( new Gold( 600, 900 ) ); ArrayList gems = new ArrayList(); for ( int i = 0; i < 9; i++ ) { Item gem = Loot.RandomGem(); Type gemType = gem.GetType(); foreach ( Item listGem in gems ) { if ( listGem.GetType() == gemType ) { listGem.Amount++; gem.Delete(); break; } } if ( !gem.Deleted ) gems.Add( gem ); } foreach ( Item gem in gems ) { DropItem( gem ); } if ( 0.2 > Utility.RandomDouble() ) DropItem( new BagOfReagents( 50 ) ); for ( int i = 0; i < 2; i++ ) { Item item; if ( Core.AOS ) item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(); else item = Loot.RandomArmorOrShieldOrWeapon(); if ( item is BaseWeapon ) { BaseWeapon weapon = (BaseWeapon)item; if ( Core.AOS ) { int attributeCount; int min, max; GetRandomAOSStats( out attributeCount, out min, out max ); BaseRunicTool.ApplyAttributesTo( weapon, attributeCount, min, max ); } else { weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 6 ); weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 6 ); weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 6 ); } DropItem( item ); } else if ( item is BaseArmor ) { BaseArmor armor = (BaseArmor)item; if ( Core.AOS ) { int attributeCount; int min, max; GetRandomAOSStats( out attributeCount, out min, out max ); BaseRunicTool.ApplyAttributesTo( armor, attributeCount, min, max ); } else { armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 6 ); armor.Durability = (ArmorDurabilityLevel)Utility.Random( 6 ); } DropItem( item ); } else if ( item is BaseJewel ) { int attributeCount; int min, max; GetRandomAOSStats( out attributeCount, out min, out max ); BaseRunicTool.ApplyAttributesTo( (BaseJewel)item, attributeCount, min, max ); DropItem( item ); } } Solution = new PuzzleChestSolution(); }
/* public override string DefaultName { get { return null; } } */ public PuzzleChest( int itemID ) : base( itemID ) { Solution = new PuzzleChestSolution(); }
public void SubmitSolution( Mobile m, PuzzleChestSolution solution ) { int correctCylinders, correctColors; if ( solution.Matches( this.Solution, out correctCylinders, out correctColors ) ) { LockPick( m ); DisplayTo( m ); } else { m_Guesses[m] = new PuzzleChestSolutionAndTime( DateTime.Now, solution ); m.SendGump( new StatusGump( correctCylinders, correctColors ) ); DoDamage( m ); } }
public PuzzleGump( Mobile from, PuzzleChest chest, PuzzleChestSolution solution, int check ) : base( 50, 50 ) { m_From = from; m_Chest = chest; m_Solution = solution; Dragable = false; AddBackground( 25, 0, 500, 410, 0x53 ); AddImage( 62, 20, 0x67 ); AddHtmlLocalized( 80, 36, 110, 70, 1018309, true, false ); // A Puzzle Lock /* Correctly choose the sequence of cylinders needed to open the latch. Each cylinder * may potentially be used more than once. Beware! A false attempt could be deadly! */ AddHtmlLocalized( 214, 26, 270, 90, 1018310, true, true ); AddLeftCylinderButton( 62, 130, PuzzleChestCylinder.LightBlue, 10 ); AddLeftCylinderButton( 62, 180, PuzzleChestCylinder.Blue, 11 ); AddLeftCylinderButton( 62, 230, PuzzleChestCylinder.Green, 12 ); AddLeftCylinderButton( 62, 280, PuzzleChestCylinder.Orange, 13 ); AddRightCylinderButton( 451, 130, PuzzleChestCylinder.Purple, 14 ); AddRightCylinderButton( 451, 180, PuzzleChestCylinder.Red, 15 ); AddRightCylinderButton( 451, 230, PuzzleChestCylinder.DarkBlue, 16 ); AddRightCylinderButton( 451, 280, PuzzleChestCylinder.Yellow, 17 ); double lockpicking = from.Skills.Lockpicking.Base; if ( lockpicking >= 60.0 ) { AddHtmlLocalized( 160, 125, 230, 24, 1018308, false, false ); // Lockpicking hint: AddBackground( 159, 150, 230, 95, 0x13EC ); if ( lockpicking >= 80.0 ) { AddHtmlLocalized( 165, 157, 200, 40, 1018312, false, false ); // In the first slot: AddCylinder( 350, 165, chest.Solution.First ); AddHtmlLocalized( 165, 197, 200, 40, 1018313, false, false ); // Used in unknown slot: AddCylinder( 350, 200, chest.FirstHint ); if ( lockpicking >= 90.0 ) AddCylinder( 350, 212, chest.SecondHint ); if ( lockpicking >= 100.0 ) AddCylinder( 350, 224, chest.ThirdHint ); } else { AddHtmlLocalized( 165, 157, 200, 40, 1018313, false, false ); // Used in unknown slot: AddCylinder( 350, 160, chest.FirstHint ); if ( lockpicking >= 70.0 ) AddCylinder( 350, 172, chest.SecondHint ); } } PuzzleChestSolution lastGuess = chest.GetLastGuess( from ); if ( lastGuess != null ) { AddHtmlLocalized( 127, 249, 170, 20, 1018311, false, false ); // Thy previous guess: AddBackground( 290, 247, 115, 25, 0x13EC ); AddCylinder( 281, 254, lastGuess.First ); AddCylinder( 303, 254, lastGuess.Second ); AddCylinder( 325, 254, lastGuess.Third ); AddCylinder( 347, 254, lastGuess.Fourth ); AddCylinder( 369, 254, lastGuess.Fifth ); } AddPedestal( 140, 270, solution.First, 0, check == 0 ); AddPedestal( 195, 270, solution.Second, 1, check == 1 ); AddPedestal( 250, 270, solution.Third, 2, check == 2 ); AddPedestal( 305, 270, solution.Fourth, 3, check == 3 ); AddPedestal( 360, 270, solution.Fifth, 4, check == 4 ); AddButton( 258, 370, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); }
public PuzzleChestSolutionAndTime( DateTime when, PuzzleChestSolution solution ) : base( solution ) { m_When = when; }
public override bool CheckLocked( Mobile from ) { if ( Locked ) { PuzzleChestSolution solution = GetLastGuess( from ); if ( solution != null ) solution = new PuzzleChestSolution( solution ); else solution = new PuzzleChestSolution( PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None, PuzzleChestCylinder.None ); from.CloseGump( typeof( PuzzleGump ) ); from.CloseGump( typeof( StatusGump ) ); from.SendGump( new PuzzleGump( from, this, solution, 0 ) ); return true; } else { return false; } }
protected override void GenerateTreasure() { DropItem(new Gold(600, 900)); ArrayList gems = new ArrayList(); for (int i = 0; i < 9; i++) { Item gem = Loot.RandomGem(); Type gemType = gem.GetType(); foreach (Item listGem in gems) { if (listGem.GetType() == gemType) { listGem.Amount++; gem.Delete(); break; } } if (!gem.Deleted) { gems.Add(gem); } } foreach (Item gem in gems) { DropItem(gem); } if (0.2 > Utility.RandomDouble()) { DropItem(new BagOfReagents(50)); } for (int i = 0; i < 2; i++) { Item item; if (Core.AOS) { item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(); } else { item = Loot.RandomArmorOrShieldOrWeapon(); } if (item is BaseWeapon) { BaseWeapon weapon = (BaseWeapon)item; if (Core.AOS) { int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo(weapon, attributeCount, min, max); } else { weapon.DamageLevel = (WeaponDamageLevel)Utility.Random(6); weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random(6); weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random(6); } DropItem(item); } else if (item is BaseArmor) { BaseArmor armor = (BaseArmor)item; if (Core.AOS) { int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo(armor, attributeCount, min, max); } else { armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random(6); armor.Durability = (ArmorDurabilityLevel)Utility.Random(6); } DropItem(item); } else if (item is BaseJewel) { int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo((BaseJewel)item, attributeCount, min, max); DropItem(item); } } Solution = new PuzzleChestSolution(); }
protected override void GenerateTreasure() { DropItem( new Gold( 1, 10 ) ); ArrayList gems = new ArrayList(); for ( int i = 0; i < 9; i++ ) { Item gem = Loot.RandomGem(); Type gemType = gem.GetType(); foreach ( Item listGem in gems ) { if ( listGem.GetType() == gemType ) { listGem.Amount++; gem.Delete(); break; } } if ( !gem.Deleted ) gems.Add( gem ); } foreach ( Item gem in gems ) { DropItem( gem ); } if ( 0.2 > Utility.RandomDouble() ) DropItem( new Gold( 1, 10 ) ); for ( int i = 0; i < 2; i++ ) { Item item; if ( Core.AOS ) item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(); else item = Loot.RandomArmorOrShieldOrWeapon(); if ( item is BaseWeapon ) { BaseWeapon weapon = (BaseWeapon)item; if ( Core.AOS ) { weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 6 ); weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 6 ); weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 6 ); } else { weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 6 ); weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 6 ); weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 6 ); } DropItem( item ); } else if ( item is BaseArmor ) { BaseArmor armor = (BaseArmor)item; if ( Core.AOS ) { armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 6 ); armor.Durability = (ArmorDurabilityLevel)Utility.Random( 6 ); } else { armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 6 ); armor.Durability = (ArmorDurabilityLevel)Utility.Random( 6 ); } DropItem( item ); } else if ( item is BaseJewel ) { DropItem( item ); } } Solution = new PuzzleChestSolution(); }
public PuzzleGump(Mobile from, PuzzleChest chest, PuzzleChestSolution solution, int check) : base(50, 50) { m_From = from; m_Chest = chest; m_Solution = solution; Dragable = false; AddBackground(25, 0, 500, 410, 0x53); AddImage(62, 20, 0x67); AddHtmlLocalized(80, 36, 110, 70, 1018309, true, false); // A Puzzle Lock /* Correctly choose the sequence of cylinders needed to open the latch. Each cylinder * may potentially be used more than once. Beware! A false attempt could be deadly! */ AddHtmlLocalized(214, 26, 270, 90, 1018310, true, true); AddLeftCylinderButton(62, 130, PuzzleChestCylinder.LightBlue, 10); AddLeftCylinderButton(62, 180, PuzzleChestCylinder.Blue, 11); AddLeftCylinderButton(62, 230, PuzzleChestCylinder.Green, 12); AddLeftCylinderButton(62, 280, PuzzleChestCylinder.Orange, 13); AddRightCylinderButton(451, 130, PuzzleChestCylinder.Purple, 14); AddRightCylinderButton(451, 180, PuzzleChestCylinder.Red, 15); AddRightCylinderButton(451, 230, PuzzleChestCylinder.DarkBlue, 16); AddRightCylinderButton(451, 280, PuzzleChestCylinder.Yellow, 17); double lockpicking = from.Skills.Lockpicking.Base; if (lockpicking >= 60.0) { AddHtmlLocalized(160, 125, 230, 24, 1018308, false, false); // Lockpicking hint: AddBackground(159, 150, 230, 95, 0x13EC); if (lockpicking >= 80.0) { AddHtmlLocalized(165, 157, 200, 40, 1018312, false, false); // In the first slot: AddCylinder(350, 165, chest.Solution.First); AddHtmlLocalized(165, 197, 200, 40, 1018313, false, false); // Used in unknown slot: AddCylinder(350, 200, chest.FirstHint); if (lockpicking >= 90.0) { AddCylinder(350, 212, chest.SecondHint); } if (lockpicking >= 100.0) { AddCylinder(350, 224, chest.ThirdHint); } } else { AddHtmlLocalized(165, 157, 200, 40, 1018313, false, false); // Used in unknown slot: AddCylinder(350, 160, chest.FirstHint); if (lockpicking >= 70.0) { AddCylinder(350, 172, chest.SecondHint); } } } PuzzleChestSolution lastGuess = chest.GetLastGuess(from); if (lastGuess != null) { AddHtmlLocalized(127, 249, 170, 20, 1018311, false, false); // Thy previous guess: AddBackground(290, 247, 115, 25, 0x13EC); AddCylinder(281, 254, lastGuess.First); AddCylinder(303, 254, lastGuess.Second); AddCylinder(325, 254, lastGuess.Third); AddCylinder(347, 254, lastGuess.Fourth); AddCylinder(369, 254, lastGuess.Fifth); } AddPedestal(140, 270, solution.First, 0, check == 0); AddPedestal(195, 270, solution.Second, 1, check == 1); AddPedestal(250, 270, solution.Third, 2, check == 2); AddPedestal(305, 270, solution.Fourth, 3, check == 3); AddPedestal(360, 270, solution.Fifth, 4, check == 4); AddButton(258, 370, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0); }
public CylinderTrapTrainingKit() : base(41875) { Solution = new PuzzleChestSolution(); Movable = true; }
protected override void GenerateTreasure() { DropItem(new Gold(600, 900)); List <Item> gems = new List <Item>(); for (int i = 0; i < 9; i++) { Item gem = Loot.RandomGem(); Type gemType = gem.GetType(); foreach (Item listGem in gems) { if (listGem.GetType() == gemType) { listGem.Amount++; gem.Delete(); break; } } if (!gem.Deleted) { gems.Add(gem); } } foreach (Item gem in gems) { DropItem(gem); } if (0.2 > Utility.RandomDouble()) { DropItem(new BagOfReagents(50)); } for (int i = 0; i < 2; i++) { Item item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(); if (item is BaseWeapon) { BaseWeapon weapon = (BaseWeapon)item; int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo(weapon, attributeCount, min, max); DropItem(item); } else if (item is BaseArmor) { BaseArmor armor = (BaseArmor)item; int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo(armor, attributeCount, min, max); DropItem(item); } else if (item is BaseHat) { BaseHat hat = (BaseHat)item; int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo(hat, attributeCount, min, max); DropItem(item); } else if (item is BaseJewel) { int attributeCount; int min, max; GetRandomAOSStats(out attributeCount, out min, out max); BaseRunicTool.ApplyAttributesTo((BaseJewel)item, attributeCount, min, max); DropItem(item); } } Solution = new PuzzleChestSolution(); }
protected override void GenerateTreasure() { Solution = new PuzzleChestSolution(); }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadEncodedInt(); m_Solution = new PuzzleChestSolution( reader ); int length = reader.ReadEncodedInt(); for ( int i = 0; i < length; i++ ) { PuzzleChestCylinder cylinder = (PuzzleChestCylinder) reader.ReadInt(); if ( length == m_Hints.Length ) m_Hints[i] = cylinder; } if ( length != m_Hints.Length ) InitHints(); int guesses = reader.ReadEncodedInt(); for ( int i = 0; i < guesses; i++ ) { Mobile m = reader.ReadMobile(); PuzzleChestSolutionAndTime sol = new PuzzleChestSolutionAndTime( reader ); m_Guesses[m] = sol; } }
/* * public override string DefaultName * { * get { return null; } * } */ public PuzzleChest(int itemID) : base(itemID) { Solution = new PuzzleChestSolution(); }
protected override void GenerateTreasure() { DropItem(new Gold(600, 900)); List <Item> gems = new List <Item>(); for (int i = 0; i < 9; i++) { Item gem = Loot.RandomGem(); Type gemType = gem.GetType(); foreach (Item listGem in gems) { if (listGem.GetType() == gemType) { listGem.Amount++; gem.Delete(); break; } } if (!gem.Deleted) { gems.Add(gem); } } foreach (Item gem in gems) { DropItem(gem); } if (0.2 > Utility.RandomDouble()) { DropItem(new BagOfReagents(50)); } for (int i = 0; i < 2; i++) { Item item; if (Core.AOS) { item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(); } else { item = Loot.RandomArmorOrShieldOrWeapon(); } if (item is BaseWeapon) { BaseWeapon weapon = (BaseWeapon)item; weapon.DamageLevel = (WeaponDamageLevel)Utility.Random(6); weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random(6); weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random(6); DropItem(item); } else if (item is BaseArmor) { BaseArmor armor = (BaseArmor)item; armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random(6); armor.Durability = (ArmorDurabilityLevel)Utility.Random(6); DropItem(item); } else if (item is BaseHat) { BaseHat hat = (BaseHat)item; DropItem(item); } else if (item is BaseJewel) { DropItem(item); } } Solution = new PuzzleChestSolution(); }
public PuzzleChestSolutionAndTime(DateTime when, PuzzleChestSolution solution) : base(solution) { m_When = when; }