Пример #1
0
        public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, ITool tool, CraftItem craftItem, int resHue)
        {
            int charges = 5 + quality + (int)(from.Skills[SkillName.Inscribe].Value / 30);

            if (charges > 10)
            {
                charges = 10;
            }

            MaxCharges = charges * 2;

            if (makersMark)
            {
                Crafter = from;
            }

            m_Quality = (BookQuality)(quality - 1);

            return(quality);
        }
Пример #2
0
        public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue)
        {
            int charges = 5 + quality + (int)(from.Skills[SkillName.Inscribe].Value / 30);

            if (charges > 10)
            {
                charges = 10;
            }

            this.MaxCharges = (Core.SE ? charges * 2 : charges);

            if (makersMark)
            {
                this.Crafter = from;
            }

            this.m_Quality = (BookQuality)(quality - 1);

            return(quality);
        }
Пример #3
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 3:
            {
                m_Quality = (BookQuality)reader.ReadByte();
                goto case 2;
            }

            case 2:
            {
                m_Crafter = reader.ReadMobile();
                goto case 1;
            }

            case 1:
            case 0:
            {
                int count = reader.ReadInt();

                m_Entries = new List <RunebookEntry>(count);

                for (int i = 0; i < count; ++i)
                {
                    m_Entries.Add(new RunebookEntry(reader));
                }

                m_Description  = reader.ReadString();
                m_CurCharges   = reader.ReadInt();
                m_MaxCharges   = reader.ReadInt();
                m_DefaultIndex = reader.ReadInt();

                break;
            }
            }
        }
Пример #4
0
        public virtual int OnCraft(
            int quality,
            bool makersMark,
            Mobile from,
            CraftSystem craftSystem,
            Type typeRes,
            IBaseTool tool,
            CraftItem craftItem,
            int resHue)
        {
            int magery = from.Skills.Magery.BaseFixedPoint;

            if (makersMark)
            {
                Crafter = from;
            }

            m_Quality = (BookQuality)(quality - 1);

            if (craftItem.Recipe != null && craftItem.Recipe.ID == 1001)             //Full spellbook
            {
                Content = ulong.MaxValue;

                bool   allRequiredSkills = true;
                double chance            = craftItem.GetSuccessChance(from, typeRes, craftSystem, false, ref allRequiredSkills);
                double excepChance       = craftItem.GetExceptionalChance(craftSystem, chance, from);

                double blessChance = excepChance / 3.0;
                if (blessChance < 0.025 && from.Skills[SkillName.Inscribe].Value >= 100.0)
                {
                    blessChance = 0.025;
                }

                if (Crafter != null && m_Quality == BookQuality.Exceptional && blessChance > Utility.RandomDouble())
                {
                    LootType = LootType.Blessed;
                }
            }

            return(quality);
        }
Пример #5
0
		public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
		{		
			int magery = from.Skills.Magery.BaseFixedPoint;

			if ( magery >= 800 )
			{
				int[] propertyCounts;
				int minIntensity;
				int maxIntensity;

				if ( magery >= 1000 )
				{
					if( magery >= 1200 )
						propertyCounts = m_LegendPropertyCounts;
					else if( magery >= 1100 )
						propertyCounts = m_ElderPropertyCounts;
					else
						propertyCounts = m_GrandPropertyCounts;

					minIntensity = 55;
					maxIntensity = 75;
				}
				else if ( magery >= 900 )
				{
					propertyCounts = m_MasterPropertyCounts;
					minIntensity = 25;
					maxIntensity = 45;
				}
				else
				{
					propertyCounts = m_AdeptPropertyCounts;
					minIntensity = 0;
					maxIntensity = 15;
				}

				int propertyCount = propertyCounts[Utility.Random( propertyCounts.Length )];

				BaseRunicTool.ApplyAttributesTo( this, true, 0, propertyCount, minIntensity, maxIntensity );
			}

			if ( makersMark )
				Crafter = from;
			
			#region Mondain's Legacy
			m_Quality = (BookQuality) ( quality - 1 );
			#endregion

			return quality;
		}
Пример #6
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 5:
				{
					#region Mondain's Legacy
					m_Quality = (BookQuality) reader.ReadByte();		
					#endregion					
					
					goto case 4;
				}
				case 4:
				{
					#region Mondain's Legacy
					m_EngravedText = reader.ReadString();		
					#endregion
					
					goto case 3;
				}
				case 3:
				{
					m_Crafter = reader.ReadMobile();
					goto case 2;
				}
				case 2:
				{
					m_Slayer = (SlayerName)reader.ReadInt();
					m_Slayer2 = (SlayerName)reader.ReadInt();
					goto case 1;
				}
				case 1:
				{
					m_AosAttributes = new AosAttributes( this, reader );
					m_AosSkillBonuses = new AosSkillBonuses( this, reader );

					goto case 0;
				}
				case 0:
				{
					m_Content = reader.ReadULong();
					m_Count = reader.ReadInt();

					break;
				}
			}

			if ( m_AosAttributes == null )
				m_AosAttributes = new AosAttributes( this );

			if ( m_AosSkillBonuses == null )
				m_AosSkillBonuses = new AosSkillBonuses( this );

			if ( Core.AOS && Parent is Mobile )
				m_AosSkillBonuses.AddTo( (Mobile) Parent );

			int strBonus = m_AosAttributes.BonusStr;
			int dexBonus = m_AosAttributes.BonusDex;
			int intBonus = m_AosAttributes.BonusInt;

			if ( Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0) )
			{
				Mobile m = (Mobile)Parent;

				string modName = Serial.ToString();

				if ( strBonus != 0 )
					m.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) );

				if ( dexBonus != 0 )
					m.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) );

				if ( intBonus != 0 )
					m.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) );
			}

			if ( Parent is Mobile )
				((Mobile)Parent).CheckStatTimers();
		}
Пример #7
0
        public virtual int OnCraft(
            int quality,
            bool makersMark,
            Mobile from,
            CraftSystem craftSystem,
            Type typeRes,
            BaseTool tool,
            CraftItem craftItem,
            int resHue)
        {
            int magery = from.Skills.Magery.BaseFixedPoint;

            if (magery >= 800)
            {
                int[] propertyCounts;
                int   minIntensity;
                int   maxIntensity;

                if (magery >= 1000)
                {
                    if (magery >= 1200)
                    {
                        propertyCounts = m_LegendPropertyCounts;
                    }
                    else if (magery >= 1100)
                    {
                        propertyCounts = m_ElderPropertyCounts;
                    }
                    else
                    {
                        propertyCounts = m_GrandPropertyCounts;
                    }

                    minIntensity = 55;
                    maxIntensity = 75;
                }
                else if (magery >= 900)
                {
                    propertyCounts = m_MasterPropertyCounts;
                    minIntensity   = 25;
                    maxIntensity   = 45;
                }
                else
                {
                    propertyCounts = m_AdeptPropertyCounts;
                    minIntensity   = 0;
                    maxIntensity   = 15;
                }

                int propertyCount = propertyCounts[Utility.Random(propertyCounts.Length)];

                BaseRunicTool.ApplyAttributesTo(this, true, 0, propertyCount, minIntensity, maxIntensity);
            }

            if (makersMark)
            {
                Crafter = from;
            }

            m_Quality = (BookQuality)(quality - 1);

            return(quality);
        }
Пример #8
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 5:
            {
                m_Quality = (BookQuality)reader.ReadByte();

                goto case 4;
            }

            case 4:
            {
                m_EngravedText = reader.ReadString();

                goto case 3;
            }

            case 3:
            {
                m_Crafter = reader.ReadMobile();
                goto case 2;
            }

            case 2:
            {
                m_Slayer  = (SlayerName)reader.ReadInt();
                m_Slayer2 = (SlayerName)reader.ReadInt();
                goto case 1;
            }

            case 1:
            {
                m_AosAttributes   = new AosAttributes(this, reader);
                m_AosSkillBonuses = new AosSkillBonuses(this, reader);

                goto case 0;
            }

            case 0:
            {
                m_Content = reader.ReadULong();
                m_Count   = reader.ReadInt();

                break;
            }
            }

            if (m_AosAttributes == null)
            {
                m_AosAttributes = new AosAttributes(this);
            }

            if (m_AosSkillBonuses == null)
            {
                m_AosSkillBonuses = new AosSkillBonuses(this);
            }

            if (Core.AOS && Parent is Mobile)
            {
                m_AosSkillBonuses.AddTo((Mobile)Parent);
            }

            int strBonus = m_AosAttributes.BonusStr;
            int dexBonus = m_AosAttributes.BonusDex;
            int intBonus = m_AosAttributes.BonusInt;

            if (Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0))
            {
                Mobile m = (Mobile)Parent;

                string modName = Serial.ToString();

                if (strBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Str, modName + "Str", strBonus, TimeSpan.Zero));
                }

                if (dexBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero));
                }

                if (intBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Int, modName + "Int", intBonus, TimeSpan.Zero));
                }
            }

            if (Parent is Mobile)
            {
                ((Mobile)Parent).CheckStatTimers();
            }
        }
Пример #9
0
        public virtual int OnCraft(
            int quality,
            bool makersMark,
            Mobile from,
            CraftSystem craftSystem,
            Type typeRes,
            ITool tool,
            CraftItem craftItem,
            int resHue)
        {
            int magery = from.Skills.Magery.BaseFixedPoint;

            if (magery >= 800)
            {
                int[] propertyCounts;
                int   minIntensity;
                int   maxIntensity;

                if (magery >= 1000)
                {
                    if (magery >= 1200)
                    {
                        propertyCounts = m_LegendPropertyCounts;
                    }
                    else if (magery >= 1100)
                    {
                        propertyCounts = m_ElderPropertyCounts;
                    }
                    else
                    {
                        propertyCounts = m_GrandPropertyCounts;
                    }

                    minIntensity = 55;
                    maxIntensity = 75;
                }
                else if (magery >= 900)
                {
                    propertyCounts = m_MasterPropertyCounts;
                    minIntensity   = 25;
                    maxIntensity   = 45;
                }
                else
                {
                    propertyCounts = m_AdeptPropertyCounts;
                    minIntensity   = 0;
                    maxIntensity   = 15;
                }

                int propertyCount = propertyCounts[Utility.Random(propertyCounts.Length)];

                GuaranteedSpellbookImprovementTalisman talisman = from.FindItemOnLayer(Layer.Talisman) as GuaranteedSpellbookImprovementTalisman;

                if (talisman != null && talisman.Charges > 0)
                {
                    propertyCount++;
                    talisman.Charges--;

                    from.SendLocalizedMessage(1157210); // Your talisman magically improves your spellbook.

                    if (talisman.Charges <= 0)
                    {
                        from.SendLocalizedMessage(1157211); // Your talisman has been destroyed.
                        talisman.Delete();
                    }
                }

                BaseRunicTool.ApplyAttributesTo(this, true, 0, propertyCount, minIntensity, maxIntensity);
            }

            if (makersMark)
            {
                Crafter = from;
            }

            m_Quality = (BookQuality)(quality - 1);

            return(quality);
        }
Пример #10
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 5:
				{
					m_Quality = (BookQuality) reader.ReadByte();		

					goto case 4;
				}
				case 4:
				{
					m_EngravedText = reader.ReadString();		

					goto case 3;
				}
				case 3:
				{
					m_Crafter = reader.ReadMobile();
					goto case 2;
				}
				case 2:
				{
					m_Slayer = (SlayerName)reader.ReadInt();
					m_Slayer2 = (SlayerName)reader.ReadInt();
					goto case 1;
				}
				case 1:
				{
					goto case 0;
				}
				case 0:
				{
					m_Content = reader.ReadULong();
					m_Count = reader.ReadInt();

					break;
				}
			}

			if ( Parent is Mobile )
				((Mobile)Parent).CheckStatTimers();
		}
Пример #11
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 3:
				{
					m_Quality = (BookQuality) reader.ReadByte();		
					goto case 2;
				}
				case 2:
				{
					m_Crafter = reader.ReadMobile();
					goto case 1;
				}
				case 1:
				case 0:
				{
					int count = reader.ReadInt();

					m_Entries = new List<RunebookEntry>( count );

					for ( int i = 0; i < count; ++i )
						m_Entries.Add( new RunebookEntry( reader ) );

					m_Description = reader.ReadString();
					m_CurCharges = reader.ReadInt();
					m_MaxCharges = reader.ReadInt();
					m_DefaultIndex = reader.ReadInt();

					break;
				}
			}
		}
Пример #12
0
        public virtual int OnCraft(
            int quality,
            bool makersMark,
            Mobile from,
            CraftSystem craftSystem,
            Type typeRes,
            BaseTool tool,
            CraftItem craftItem,
            int resHue)
        {
            int magery = from.Skills.Magery.BaseFixedPoint;

            if (magery >= 800)
            {
                /*
                 *              int[] propertyCounts;
                 *
                 *              int minIntensity;
                 *              int maxIntensity;
                 *
                 *              if (magery >= 1000)
                 *              {
                 *                      if (magery >= 1200)
                 *                      {
                 *                              propertyCounts = m_LegendPropertyCounts;
                 *                      }
                 *                      else if (magery >= 1100)
                 *                      {
                 *                              propertyCounts = m_ElderPropertyCounts;
                 *                      }
                 *                      else
                 *                      {
                 *                              propertyCounts = m_GrandPropertyCounts;
                 *                      }
                 *
                 *                      minIntensity = 55;
                 *                      maxIntensity = 75;
                 *              }
                 *              else if (magery >= 900)
                 *              {
                 *                      propertyCounts = m_MasterPropertyCounts;
                 *                      minIntensity = 25;
                 *                      maxIntensity = 45;
                 *              }
                 *              else
                 *              {
                 *                      propertyCounts = m_AdeptPropertyCounts;
                 *                      minIntensity = 0;
                 *                      maxIntensity = 15;
                 *              }
                 *
                 *              int propertyCount = propertyCounts[Utility.Random(propertyCounts.Length)];
                 */
            }

            if (makersMark)
            {
                Crafter = from;
            }

            m_Quality = (BookQuality)(quality - 1);

            return(quality);
        }
Пример #13
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);

			LootType = LootType.Blessed;

			if (EraSE && Weight == 3.0)
			{
				Weight = 1.0;
			}

			int version = reader.ReadInt();

			switch (version)
			{
				case 3:
					m_Quality = (BookQuality)reader.ReadByte();
					goto case 2;
				case 2:
					m_Crafter = reader.ReadMobile();
					goto case 1;
				case 1:
					Level = (SecureLevel)reader.ReadInt();
					goto case 0;
				case 0:
					{
						int count = reader.ReadInt();

						Entries = new List<RunebookEntry>(count);

						for (int i = 0; i < count; ++i)
						{
							Entries.Add(new RunebookEntry(reader));
						}

						m_Description = reader.ReadString();
						CurCharges = reader.ReadInt();
						MaxCharges = reader.ReadInt();
						m_DefaultIndex = reader.ReadInt();
					}
					break;
			}
		}
Пример #14
0
		public int OnCraft(
			int quality,
			bool makersMark,
			Mobile from,
			CraftSystem craftSystem,
			Type typeRes,
			IBaseTool tool,
			CraftItem craftItem,
			int resHue)
		{
			int charges = 5 + quality + (int)(from.Skills[SkillName.Inscribe].Value / 30);

			if (charges > 10)
			{
				charges = 10;
			}

			MaxCharges = charges;

			if (makersMark)
			{
				Crafter = from;
			}

			m_Quality = (BookQuality)(quality - 1);

			return quality;
		}
Пример #15
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            this.LootType = LootType.Blessed;

            if (Core.SE && this.Weight == 3.0)
                this.Weight = 1.0;

            int version = reader.ReadInt();

            switch ( version )
            {
                case 3:
                    {
                        this.m_Quality = (BookQuality)reader.ReadByte();		
                        goto case 2;
                    }
                case 2:
                    {
                        this.m_Crafter = reader.ReadMobile();
                        goto case 1;
                    }
                case 1:
                    {
                        this.m_Level = (SecureLevel)reader.ReadInt();
                        goto case 0;
                    }
                case 0:
                    {
                        int count = reader.ReadInt();

                        this.m_Entries = new List<RunebookEntry>(count);

                        for (int i = 0; i < count; ++i)
                            this.m_Entries.Add(new RunebookEntry(reader));

                        this.m_Description = reader.ReadString();
                        this.m_CurCharges = reader.ReadInt();
                        this.m_MaxCharges = reader.ReadInt();
                        this.m_DefaultIndex = reader.ReadInt();

                        break;
                    }
            }
        }
Пример #16
0
        public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue)
        {
            int charges = 5 + quality + (int)(from.Skills[SkillName.Inscribe].Value / 30);

            if (charges > 10)
                charges = 10;

            this.MaxCharges = (Core.SE ? charges * 2 : charges);

            if (makersMark)
                this.Crafter = from;

            this.m_Quality = (BookQuality)(quality - 1);

            return quality;
        }
Пример #17
0
		public virtual int OnCraft(
			int quality,
			bool makersMark,
			Mobile from,
			CraftSystem craftSystem,
			Type typeRes,
			IBaseTool tool,
			CraftItem craftItem,
			int resHue)
		{
			int magery = from.Skills.Magery.BaseFixedPoint;

			if (makersMark)
			{
				Crafter = from;
			}

			m_Quality = (BookQuality)(quality - 1);

			if (craftItem.Recipe != null && craftItem.Recipe.ID == 1001) //Full spellbook
			{
				Content = ulong.MaxValue;

				bool allRequiredSkills = true;
				double chance = craftItem.GetSuccessChance(from, typeRes, craftSystem, false, ref allRequiredSkills);
				double excepChance = craftItem.GetExceptionalChance(craftSystem, chance, from);

				double blessChance = excepChance / 3.0;
				if (blessChance < 0.025 && from.Skills[SkillName.Inscribe].Value >= 100.0)
				{
					blessChance = 0.025;
				}

				if (Crafter != null && m_Quality == BookQuality.Exceptional && blessChance > Utility.RandomDouble())
				{
					LootType = LootType.Blessed;
				}
			}

			return quality;
		}