| QUOTE |
| Scripts: Compiling C# scripts...failed (3 errors, 0 warnings) - Error: Scripts\Engines\Craft\Core\CraftItem.cs: CS1520: (line 34, column 10) Class, struct, or interface method must have a return type - Error: Scripts\Engines\Craft\Core\CraftItem.cs: CS1520: (line 46, column 10) Class, struct, or interface method must have a return type - Error: Scripts\Engines\Craft\Core\CraftItem.cs: CS1520: (line 58, column 10) Class, struct, or interface method must have a return type Scripts: One or more scripts failed to compile or no script files were found. - Press return to exit, or R to try again. |
| CODE |
| using System; using Server.Items; namespace Server.Engines.Craft { public enum ConsumeType { All, Half, None } public class CraftItem7 { private CraftResCol m_arCraftRes; private CraftSkillCol m_arCraftSkill; private Type m_Type; private string m_GroupNameString; private int m_GroupNameNumber; private string m_NameString; private int m_NameNumber; private int m_Mana; private int m_Hits; private int m_Stam; private bool m_UseAllRes; private bool m_NeedHeat; private bool m_NeedOven; private bool m_UseSubRes2; public CraftItem( Type type, string groupName, string name ) { m_arCraftRes = new CraftResCol(); m_arCraftSkill = new CraftSkillCol(); m_Type = type; m_GroupNameString = groupName; m_NameString = name; } public CraftItem( Type type, int groupName, int name ) { m_arCraftRes = new CraftResCol(); m_arCraftSkill = new CraftSkillCol(); m_Type = type; m_GroupNameNumber = groupName; m_NameNumber = name; } public CraftItem( Type type, int groupName, string name ) { m_arCraftRes = new CraftResCol(); m_arCraftSkill = new CraftSkillCol(); m_Type = type; m_GroupNameNumber = groupName; m_NameString = name; } public void AddRes( Type type, int name, int amount ) { AddRes( type, name, amount, "" ); } public void AddRes( Type type, int name, int amount, int localizedMessage ) { CraftRes craftRes = new CraftRes( type, name, amount, localizedMessage ); m_arCraftRes.Add( craftRes ); } public void AddRes( Type type, int name, int amount, string strMessage ) { CraftRes craftRes = new CraftRes( type, name, amount, strMessage ); m_arCraftRes.Add( craftRes ); } public void AddRes( Type type, string name, int amount ) { AddRes( type, name, amount, "" ); } public void AddRes( Type type, string name, int amount, int localizedMessage ) { CraftRes craftRes = new CraftRes( type, name, amount, localizedMessage ); m_arCraftRes.Add( craftRes ); } public void AddRes( Type type, string name, int amount, string strMessage ) { CraftRes craftRes = new CraftRes( type, name, amount, strMessage ); m_arCraftRes.Add( craftRes ); } public void AddSkill( SkillName skillToMake, double minSkill, double maxSkill ) { CraftSkill craftSkill = new CraftSkill( skillToMake, minSkill, maxSkill ); m_arCraftSkill.Add( craftSkill ); } public int Mana { get { return m_Mana; } set { m_Mana = value; } } public int Hits { get { return m_Hits; } set { m_Hits = value; } } public int Stam { get { return m_Stam; } set { m_Stam = value; } } public bool UseSubRes2 { get { return m_UseSubRes2; } set { m_UseSubRes2 = value; } } public bool UseAllRes { get { return m_UseAllRes; } set { m_UseAllRes = value; } } public bool NeedHeat { get { return m_NeedHeat; } set { m_NeedHeat = value; } } public bool NeedOven { get { return m_NeedOven; } set { m_NeedOven = value; } } public Type ItemType { get { return m_Type; } } public string GroupNameString { get { return m_GroupNameString; } } public int GroupNameNumber { get { return m_GroupNameNumber; } } public string NameString { get { return m_NameString; } } public int NameNumber { get { return m_NameNumber; } } public CraftResCol Ressources { get { return m_arCraftRes; } } public CraftSkillCol Skills { get { return m_arCraftSkill; } } public bool ConsumeAttributes( Mobile from, ref object message, bool consume ) { bool consumMana = false; bool consumHits = false; bool consumStam = false; if ( Hits > 0 && from.Hits < Hits ) { message = "You lack the required hit points to make that."; return false; } else { consumHits = consume; } if ( Mana > 0 && from.Mana < Mana ) { message = "You lack the required mana to make that."; return false; } else { consumMana = consume; } if ( Stam > 0 && from.Stam < Stam ) { message = "You lack the required stamina to make that."; return false; } else { consumStam = consume; } if ( consumMana ) from.Mana -= Mana; if ( consumHits ) from.Hits -= Hits; if ( consumStam ) from.Stam -= Stam; return true; } private static Type[][] m_TypesTable = new Type[][] { new Type[]{ typeof( Log ), typeof( Board ) }, new Type[]{ typeof( Leather ), typeof( Hides ) }, new Type[]{ typeof( SpinedLeather ), typeof( SpinedHides ) }, new Type[]{ typeof( HornedLeather ), typeof( HornedHides ) }, new Type[]{ typeof( BarbedLeather ), typeof( BarbedHides ) }, new Type[]{ typeof( BlankMap ), typeof( BlankScroll ) }, new Type[]{ typeof( Cloth ), typeof( UncutCloth ) }, new Type[]{ typeof( CheeseWheel ), typeof( CheeseWedge ) } }; private static Type[] m_ColoredItemTable = new Type[] { typeof( BaseWeapon ), typeof( BaseArmor ), typeof( BaseClothing ), typeof( BaseJewel ), typeof( DragonBardingDeed ) }; private static Type[] m_ColoredResourceTable = new Type[] { typeof( BaseIngot ), typeof( BaseOre ), typeof( BaseLeather ), typeof( BaseHides ), typeof( UncutCloth ), typeof( Cloth ), typeof( BaseGranite ), typeof( BaseScales ) }; public bool RetainsColorFrom( CraftSystem system, Type type ) { if ( system.RetainsColorFrom( this, type ) ) return true; bool inItemTable = false, inResourceTable = false; for ( int i = 0; !inItemTable && i < m_ColoredItemTable.Length; ++i ) inItemTable = ( m_Type == m_ColoredItemTable[i] || m_Type.IsSubclassOf( m_ColoredItemTable[i] ) ); for ( int i = 0; inItemTable && !inResourceTable && i < m_ColoredResourceTable.Length; ++i ) inResourceTable = ( type == m_ColoredResourceTable[i] || type.IsSubclassOf( m_ColoredResourceTable[i] ) ); return ( inItemTable && inResourceTable ); } private static int[] m_HeatSources = new int[] { 0x461, 0x48E, // Sandstone oven/fireplace 0x92B, 0x96C, // Stone oven/fireplace 0xDE3, 0xDE9, // Campfire 0xFAC, 0xFAC, // Firepit 0x184A, 0x184C, // Heating stand (left) 0x184E, 0x1850, // Heating stand (right) 0x398C, 0x399F // Fire field }; private static int[] m_Ovens = new int[] { 0x461, 0x46F, // Sandstone oven 0x92B, 0x93F // Stone oven }; public bool Find( Mobile from, int[] itemIDs ) { Map map = from.Map; if ( map == null ) return false; IPooledEnumerable eable = map.GetItemsInRange( from.Location, 2 ); foreach ( Item item in eable ) { if ( (item.Z + 16) > from.Z && (from.Z + 16) > item.Z && Find( item.ItemID, itemIDs ) ) { eable.Free(); return true; } } eable.Free(); for ( int x = -2; x <= 2; ++x ) { for ( int y = -2; y <= 2; ++y ) { int vx = from.X + x; int vy = from.Y + y; Tile[] tiles = map.Tiles.GetStaticTiles( vx, vy, true ); for ( int i = 0; i < tiles.Length; ++i ) { int z = tiles[i].Z; int id = tiles[i].ID & 0x3FFF; if ( (z + 16) > from.Z && (from.Z + 16) > z && Find( id, itemIDs ) ) return true; } } } return false; } public bool Find( int itemID, int[] itemIDs ) { bool contains = false; for ( int i = 0; !contains && i < itemIDs.Length; i += 2 ) contains = ( itemID >= itemIDs[i] && itemID <= itemIDs[i + 1] ); return contains; } public bool IsQuantityType( Type[][] types ) { for ( int i = 0; i < types.Length; ++i ) { Type[] check = types[i]; for ( int j = 0; j < check.Length; ++j ) { if ( typeof( IHasQuantity ).IsAssignableFrom( check[j] ) ) return true; } } return false; } public int ConsumeQuantity( Container cont, Type[][] types, int[] amounts ) { if ( types.Length != amounts.Length ) throw new ArgumentException(); Item[][] items = new Item[types.Length][]; int[] totals = new int[types.Length]; for ( int i = 0; i < types.Length; ++i ) { items[i] = cont.FindItemsByType( types[i], true ); for ( int j = 0; j < items[i].Length; ++j ) { IHasQuantity hq = items[i][j] as IHasQuantity; if ( hq == null ) { totals[i] += items[i][j].Amount; } else { if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) continue; totals[i] += hq.Quantity; } } if ( totals[i] < amounts[i] ) return i; } for ( int i = 0; i < types.Length; ++i ) { int need = amounts[i]; for ( int j = 0; j < items[i].Length; ++j ) { Item item = items[i][j]; IHasQuantity hq = item as IHasQuantity; if ( hq == null ) { int theirAmount = item.Amount; if ( theirAmount < need ) { item.Delete(); need -= theirAmount; } else { item.Consume( need ); break; } } else { if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) continue; int theirAmount = hq.Quantity; if ( theirAmount < need ) { hq.Quantity -= theirAmount; need -= theirAmount; } else { hq.Quantity -= need; break; } } } } return -1; } public int GetQuantity( Container cont, Type[] types ) { Item[] items = cont.FindItemsByType( types, true ); int amount = 0; for ( int i = 0; i < items.Length; ++i ) { IHasQuantity hq = items[i] as IHasQuantity; if ( hq == null ) { amount += items[i].Amount; } else { if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) continue; amount += hq.Quantity; } } return amount; } public bool ConsumeRes( Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount, ConsumeType consumeType, ref object message ) { Container ourPack = from.Backpack; if ( ourPack == null ) return false; if ( m_NeedHeat && !Find( from, m_HeatSources ) ) { message = 1044487; // You must be near a fire source to cook. return false; } if ( m_NeedOven && !Find( from, m_Ovens ) ) { message = 1044493; // You must be near an oven to bake that. return false; } Type[][] types = new Type[m_arCraftRes.Count][]; int[] amounts = new int[m_arCraftRes.Count]; maxAmount = int.MaxValue; CraftSubResCol resCol = ( m_UseSubRes2 ? craftSystem.CraftSubRes2 : craftSystem.CraftSubRes ); for ( int i = 0; i < types.Length; ++i ) { CraftRes craftRes = m_arCraftRes.GetAt( i ); Type baseType = craftRes.ItemType; // Resource Mutation if ( (baseType == resCol.ResType) && ( typeRes != null ) ) { baseType = typeRes; CraftSubRes subResource = resCol.SearchFor( baseType ); if ( subResource != null && from.Skills[craftSystem.MainSkill].Base < subResource.RequiredSkill ) { message = subResource.Message; return false; } } // ****************** for ( int j = 0; types[i] == null && j < m_TypesTable.Length; ++j ) { if ( m_TypesTable[j][0] == baseType ) types[i] = m_TypesTable[j]; } if ( types[i] == null ) types[i] = new Type[]{ baseType }; /*if ( !retainedColor && RetainsColorFrom( craftSystem, baseType ) ) { retainedColor = true; Item resItem = ourPack.FindItemByType( types[i] ); if ( resItem != null ) resHue = resItem.Hue; }*/ amounts[i] = craftRes.Amount; // For stackable items that can ben crafted more than one at a time if ( UseAllRes ) { int tempAmount = ourPack.GetAmount( types[i] ); tempAmount /= amounts[i]; if ( tempAmount < maxAmount ) { maxAmount = tempAmount; if ( maxAmount == 0 ) { CraftRes res = m_arCraftRes.GetAt( i ); if ( res.MessageNumber > 0 ) message = res.MessageNumber; else if ( res.MessageString != null && res.MessageString != String.Empty ) message = res.NameString; else message = 502925; // You don't have the resources required to make that item. return false; } } } // **************************** } // We adjust the amount of each resource to consume the max posible if ( UseAllRes ) { for ( int i = 0; i < amounts.Length; ++i ) amounts[i] *= maxAmount; } else maxAmount = -1; Item consumeExtra = null; if ( m_NameNumber == 1041267 ) { // Runebooks are a special case, they need a blank recall rune Item[] runes = ourPack.FindItemsByType( typeof( RecallRune ) ); for ( int i = 0; i < runes.Length; ++i ) { RecallRune rune = runes[i] as RecallRune; if ( rune != null && !rune.Marked ) { consumeExtra = rune; break; } } if ( consumeExtra == null ) { message = 1044253; // You don't have the components needed to make that. return false; } } int index = 0; // Consume ALL if ( consumeType == ConsumeType.All ) { m_ResHue = 0; m_ResAmount = 0; m_System = craftSystem; if ( IsQuantityType( types ) ) index = ConsumeQuantity( ourPack, types, amounts ); else index = ourPack.ConsumeTotalGrouped( types, amounts, true, new OnItemConsumed( OnResourceConsumed ), new CheckItemGroup( CheckHueGrouping ) ); resHue = m_ResHue; } // Consume Half ( for use all resource craft type ) else if ( consumeType == ConsumeType.Half ) { for ( int i = 0; i < amounts.Length; i++ ) { amounts[i] /= 2; if ( amounts[i] < 1 ) amounts[i] = 1; } m_ResHue = 0; m_ResAmount = 0; m_System = craftSystem; if ( IsQuantityType( types ) ) index = ConsumeQuantity( ourPack, types, amounts ); else index = ourPack.ConsumeTotalGrouped( types, amounts, true, new OnItemConsumed( OnResourceConsumed ), new CheckItemGroup( CheckHueGrouping ) ); resHue = m_ResHue; } else // ConstumeType.None ( it's basicaly used to know if the crafter has enough resource before starting the process ) { index = -1; if ( IsQuantityType( types ) ) { for ( int i = 0; i < types.Length; i++ ) { if ( GetQuantity( ourPack, types[i] ) < amounts[i] ) { index = i; break; } } } else { for ( int i = 0; i < types.Length; i++ ) { if ( ourPack.GetBestGroupAmount( types[i], true, new CheckItemGroup( CheckHueGrouping ) ) < amounts[i] ) { index = i; break; } } } } if ( index == -1 ) { if ( consumeType != ConsumeType.None ) if ( consumeExtra != null ) consumeExtra.Delete(); return true; } else { CraftRes res = m_arCraftRes.GetAt( index ); if ( res.MessageNumber > 0 ) message = res.MessageNumber; else if ( res.MessageString != null && res.MessageString != String.Empty ) message = res.NameString; else message = 502925; // You don't have the resources required to make that item. return false; } } private int m_ResHue; private int m_ResAmount; private CraftSystem m_System; private void OnResourceConsumed( Item item, int amount ) { if ( !RetainsColorFrom( m_System, item.GetType() ) ) return; if ( amount >= m_ResAmount ) { m_ResHue = item.Hue; m_ResAmount = amount; } } private int CheckHueGrouping( Item a, Item b ) { return b.Hue.CompareTo( a.Hue ); } public double GetSuccessChance( Mobile from, Type typeRes, CraftSystem craftSystem, bool gainSkills, ref bool allRequiredSkills ) { double minMainSkill = 0.0; double maxMainSkill = 0.0; double valMainSkill = 0.0; allRequiredSkills = true; for ( int i = 0; i < m_arCraftSkill.Count; i++) { CraftSkill craftSkill = m_arCraftSkill.GetAt(i); double minSkill = craftSkill.MinSkill; double maxSkill = craftSkill.MaxSkill; double valSkill = from.Skills[craftSkill.SkillToMake].Value; if ( valSkill < minSkill ) allRequiredSkills = false; if ( craftSkill.SkillToMake == craftSystem.MainSkill ) { minMainSkill = minSkill; maxMainSkill = maxSkill; valMainSkill = valSkill; } if ( gainSkills ) // This is a passive check. Success chance is entirely dependant on the main skill from.CheckSkill( craftSkill.SkillToMake, minSkill, maxSkill ); } } public void Craft( Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool ) { if ( from.BeginAction( typeof( CraftSystem ) ) ) { bool allRequiredSkills = true; if ( allRequiredSkills && chance >= 0.0 ) { int badCraft = craftSystem.CanCraft( from, tool, m_Type ); if ( badCraft <= 0 ) { int resHue = 0; int maxAmount = 0; object message = null; if ( ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref message ) ) { message = null; if ( ConsumeAttributes( from, ref message, false ) ) { CraftContext context = craftSystem.GetContext( from ); if ( context != null ) context.OnMade( this ); int iMin = craftSystem.MinCraftEffect; int iMax = ( craftSystem.MaxCraftEffect - iMin ) + 1; int iRandom = Utility.Random( iMax ); iRandom += iMin + 1; new InternalTimer( from, craftSystem, this, typeRes, tool, iRandom ).Start(); } else { from.EndAction( typeof( CraftSystem ) ); from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); } } else { from.EndAction( typeof( CraftSystem ) ); from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); } } else { from.EndAction( typeof( CraftSystem ) ); from.SendGump( new CraftGump( from, craftSystem, tool, badCraft ) ); } } else { from.EndAction( typeof( CraftSystem ) ); from.SendGump( new CraftGump( from, craftSystem, tool, 1044153 ) ); // You don't have the required skills to attempt this item. } } else { from.SendLocalizedMessage( 500119 ); // You must wait to perform another action } } public bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills ) { return CheckSkills( from, typeRes, craftSystem, ref quality, ref allRequiredSkills, true ); } public bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills, bool gainSkills ) { public bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills, bool gainSkills ) { double chance = GetSuccessChance( from, typeRes, craftSystem, gainSkills, ref allRequiredSkills ); quality = 1; return ( chance >= Utility.RandomDouble() ); } public void CompleteCraft( bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool ) { int badCraft = craftSystem.CanCraft( from, tool, m_Type ); if ( badCraft > 0 ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, badCraft ) ); else from.SendLocalizedMessage( badCraft ); return; } int checkResHue = 0, checkMaxAmount = 0; object checkMessage = null; // Not enough resource to craft it if ( !ConsumeRes( from, typeRes, craftSystem, ref checkResHue, ref checkMaxAmount, ConsumeType.None, ref checkMessage ) ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) ); else if ( checkMessage is int && (int)checkMessage > 0 ) from.SendLocalizedMessage( (int)checkMessage ); else if ( checkMessage is string ) from.SendMessage( (string)checkMessage ); return; } else if ( !ConsumeAttributes( from, ref checkMessage, false ) ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) ); else if ( checkMessage is int && (int)checkMessage > 0 ) from.SendLocalizedMessage( (int)checkMessage ); else if ( checkMessage is string ) from.SendMessage( (string)checkMessage ); return; } bool toolBroken = false; int ignored = 1; bool allRequiredSkills = true; if ( CheckSkills( from, typeRes, craftSystem, ref ignored, ref allRequiredSkills ) ) { // Resource int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message ) ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); else if ( message is int && (int)message > 0 ) from.SendLocalizedMessage( (int)message ); else if ( message is string ) from.SendMessage( (string)message ); return; } else if ( !ConsumeAttributes( from, ref message, true ) ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); else if ( message is int && (int)message > 0 ) from.SendLocalizedMessage( (int)message ); else if ( message is string ) from.SendMessage( (string)message ); return; } tool.UsesRemaining--; if ( tool.UsesRemaining < 1 ) toolBroken = true; if ( toolBroken ) tool.Delete(); Item item = Activator.CreateInstance( ItemType ) as Item; if ( item != null ) { if ( item is BaseWeapon ) { BaseWeapon weapon = ( BaseWeapon )item; if ( makersMark ) weapon.Crafter = from; weapon.PlayerConstructed = true; if ( Core.AOS ) { Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; weapon.Resource = CraftResources.GetFromType( resourceType ); CraftContext context = craftSystem.GetContext( from ); if ( context != null && context.DoNotColor ) weapon.Hue = 0; if ( tool is BaseRunicTool ) ((BaseRunicTool)tool).ApplyAttributesTo( weapon ); } else if ( tool is BaseRunicTool ) { Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; CraftResource thisResource = CraftResources.GetFromType( resourceType ); if ( thisResource == ((BaseRunicTool)tool).Resource ) { weapon.Resource = thisResource; CraftContext context = craftSystem.GetContext( from ); if ( context != null && context.DoNotColor ) weapon.Hue = 0; switch ( thisResource ) { case CraftResource.DullCopper: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Durable; weapon.AccuracyLevel = WeaponAccuracyLevel.Accurate; break; } case CraftResource.ShadowIron: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Durable; weapon.DamageLevel = WeaponDamageLevel.Ruin; break; } case CraftResource.Copper: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Fortified; weapon.DamageLevel = WeaponDamageLevel.Ruin; weapon.AccuracyLevel = WeaponAccuracyLevel.Surpassingly; break; } case CraftResource.Bronze: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Fortified; weapon.DamageLevel = WeaponDamageLevel.Might; weapon.AccuracyLevel = WeaponAccuracyLevel.Surpassingly; break; } case CraftResource.Gold: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Indestructible; weapon.DamageLevel = WeaponDamageLevel.Force; weapon.AccuracyLevel = WeaponAccuracyLevel.Eminently; break; } case CraftResource.Agapite: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Indestructible; weapon.DamageLevel = WeaponDamageLevel.Power; weapon.AccuracyLevel = WeaponAccuracyLevel.Eminently; break; } case CraftResource.Verite: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Indestructible; weapon.DamageLevel = WeaponDamageLevel.Power; weapon.AccuracyLevel = WeaponAccuracyLevel.Exceedingly; break; } case CraftResource.Valorite: { weapon.Identified = true; weapon.DurabilityLevel = WeaponDurabilityLevel.Indestructible; weapon.DamageLevel = WeaponDamageLevel.Vanq; weapon.AccuracyLevel = WeaponAccuracyLevel.Supremely; break; } } } } } else if ( item is BaseArmor ) { BaseArmor armor = ( BaseArmor )item; if ( makersMark ) armor.Crafter = from; Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; armor.Resource = CraftResources.GetFromType( resourceType ); armor.PlayerConstructed = true; CraftContext context = craftSystem.GetContext( from ); if ( context != null && context.DoNotColor ) armor.Hue = 0; if ( Core.AOS && tool is BaseRunicTool ) ((BaseRunicTool)tool).ApplyAttributesTo( armor ); } else if ( item is DragonBardingDeed ) { DragonBardingDeed deed = (DragonBardingDeed)item; if ( makersMark ) deed.Crafter = from; Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; deed.Resource = CraftResources.GetFromType( resourceType ); CraftContext context = craftSystem.GetContext( from ); if ( context != null && context.DoNotColor ) deed.Hue = 0; } else if ( item is BaseInstrument ) { BaseInstrument instrument = (BaseInstrument)item; if ( makersMark ) instrument.Crafter = from; } else if ( item is BaseJewel ) { BaseJewel jewel = (BaseJewel)item; Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; jewel.Resource = CraftResources.GetFromType( resourceType ); if ( 1 < Ressources.Count ) { resourceType = Ressources.GetAt( 1 ).ItemType; if ( resourceType == typeof( StarSapphire ) ) jewel.GemType = GemType.StarSapphire; else if ( resourceType == typeof( Emerald ) ) jewel.GemType = GemType.Emerald; else if ( resourceType == typeof( Sapphire ) ) jewel.GemType = GemType.Sapphire; else if ( resourceType == typeof( Ruby ) ) jewel.GemType = GemType.Ruby; else if ( resourceType == typeof( Citrine ) ) jewel.GemType = GemType.Citrine; else if ( resourceType == typeof( Amethyst ) ) jewel.GemType = GemType.Amethyst; else if ( resourceType == typeof( Tourmaline ) ) jewel.GemType = GemType.Tourmaline; else if ( resourceType == typeof( Amber ) ) jewel.GemType = GemType.Amber; else if ( resourceType == typeof( Diamond ) ) jewel.GemType = GemType.Diamond; } } else if ( item is BaseClothing ) { BaseClothing clothing = (BaseClothing)item; if ( makersMark ) clothing.Crafter = from; clothing.PlayerConstructed = true; if ( item is BaseShoes ) { BaseShoes shoes = (BaseShoes)item; if ( shoes.Resource != CraftResource.None ) { Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; shoes.Resource = CraftResources.GetFromType( resourceType ); CraftContext context = craftSystem.GetContext( from ); if ( context != null && context.DoNotColor ) shoes.Hue = 0; } else { shoes.Hue = resHue; } } else { clothing.Hue = resHue; } } else if ( item is MapItem ) { ((MapItem)item).CraftInit( from ); } else if ( item is LockableContainer ) { if ( from.CheckSkill( SkillName.Tinkering, -5.0, 15.0 ) ) { LockableContainer cont = (LockableContainer)item; from.SendLocalizedMessage( 500636 ); // Your tinker skill was sufficient to make the item lockable. Key key = new Key( KeyType.Copper, Key.RandomValue() ); cont.KeyValue = key.KeyValue; cont.DropItem( key ); double tinkering = from.Skills[SkillName.Tinkering].Value; int level = (int)(tinkering * 0.8); cont.RequiredSkill = level - 4; cont.LockLevel = level - 14; cont.MaxLockLevel = level + 35; if ( cont.LockLevel == 0 ) cont.LockLevel = -1; else if ( cont.LockLevel > 95 ) cont.LockLevel = 95; if ( cont.RequiredSkill > 95 ) cont.RequiredSkill = 95; if ( cont.MaxLockLevel > 95 ) cont.MaxLockLevel = 95; } else { from.SendLocalizedMessage( 500637 ); // Your tinker skill was insufficient to make the item lockable. } } else if ( item is Runebook ) { int charges = 5 + (int)(from.Skills[SkillName.Inscribe].Value / 30); if ( charges > 10 ) charges = 10; ((Runebook)item).MaxCharges = charges; } else if ( item.Hue == 0 ) { item.Hue = resHue; } if ( maxAmount > 0 ) item.Amount = maxAmount; // ********************************************** if ( craftSystem is DefAlchemy && item is BasePotion ) { BasePotion pot = (BasePotion)item; Container pack = from.Backpack; if ( pack != null ) { Item[] kegs = pack.FindItemsByType( typeof( PotionKeg ), true ); for ( int i = 0; i < kegs.Length; ++i ) { PotionKeg keg = kegs[i] as PotionKeg; if ( keg == null ) continue; if ( keg.Held <= 0 || keg.Held >= 100 ) continue; if ( keg.Type != pot.PotionEffect ) continue; ++keg.Held; item.Delete(); item = new Bottle(); break; } } } from.AddToBackpack( item ); //from.PlaySound( 0x57 ); } int num = craftSystem.PlayEndingEffect( from, false, true, toolBroken, makersMark, this ); if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); else if ( num > 0 ) from.SendLocalizedMessage( num ); } else if ( !allRequiredSkills ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, 1044153 ) ); else from.SendLocalizedMessage( 1044153 ); // You don't have the required skills to attempt this item. } else { ConsumeType consumeType = ( UseAllRes ? ConsumeType.Half : ConsumeType.All ); int resHue = 0; int maxAmount = 0; object message = null; // Not enough resource to craft it if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message ) ) { if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); else if ( message is int && (int)message > 0 ) from.SendLocalizedMessage( (int)message ); else if ( message is string ) from.SendMessage( (string)message ); return; } tool.UsesRemaining--; if ( tool.UsesRemaining < 1 ) toolBroken = true; if ( toolBroken ) tool.Delete(); // SkillCheck failed. int num = craftSystem.PlayEndingEffect( from, true, true, toolBroken, false, this ); if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); else if ( num > 0 ) from.SendLocalizedMessage( num ); } } private class InternalTimer : Timer { private Mobile m_From; private int m_iCount; private int m_iCountMax; private CraftItem m_CraftItem; private CraftSystem m_CraftSystem; private Type m_TypeRes; private BaseTool m_Tool; public InternalTimer( Mobile from, CraftSystem craftSystem, CraftItem craftItem, Type typeRes, BaseTool tool, int iCountMax ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( craftSystem.Delay ), iCountMax ) { m_From = from; m_CraftItem = craftItem; m_iCount = 0; m_iCountMax = iCountMax; m_CraftSystem = craftSystem; m_TypeRes = typeRes; m_Tool = tool; } private static Type[] m_MarkableTypes = new Type[] { typeof( BaseArmor ), typeof( BaseWeapon ), typeof( BaseClothing ), typeof( DragonBardingDeed ) }; protected override void OnTick() { m_iCount++; m_From.DisruptiveAction(); if ( m_iCount < m_iCountMax ) { m_CraftSystem.PlayCraftEffect( m_From ); } else { m_From.EndAction( typeof( CraftSystem ) ); int badCraft = m_CraftSystem.CanCraft( m_From, m_Tool, m_CraftItem.m_Type ); if ( badCraft > 0 ) { if ( m_Tool != null && !m_Tool.Deleted && m_Tool.UsesRemaining > 0 ) m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, badCraft ) ); else m_From.SendLocalizedMessage( badCraft ); return; } bool allRequiredSkills = true; m_CraftItem.CheckSkills( m_From, m_TypeRes, m_CraftSystem, ref allRequiredSkills, false ); CraftContext context = m_CraftSystem.GetContext( m_From ); if ( context == null ) return; bool makersMark = false; if ( makersMark && context.MarkOption == CraftMarkOption.PromptForMark ) { m_From.SendGump( new QueryMakersMarkGump( m_From, m_CraftItem, m_CraftSystem, m_TypeRes, m_Tool ) ); } else { if ( context.MarkOption == CraftMarkOption.DoNotMark ) makersMark = false; m_CraftItem.CompleteCraft( makersMark, m_From, m_CraftSystem, m_TypeRes, m_Tool ); } } } } } } |
| QUOTE (Lokscander @ Sep 15 2004, 06:08 PM) |
| Choutte j'viens de trouver comment faire ! Tout fonctionne à merveille présentement ! :D (J'avais juste à changer la formule de getExceptionnal chance pour qu'elle égale toujours 0... lol) |