CODE |
#region Mondain's Legacy public override bool Give( Mobile m, Item item, bool placeAtFeet ) { // this is prolly different from OSI if ( m.Skills.Lumberjacking.Value >= 100 ) { if ( 0.01 > Utility.RandomDouble() ) { double chance; chance = 200 - m.Skills.Lumberjacking.Value; chance /= 100; int amount = Utility.Random( 1, chance > Utility.RandomDouble() ? 2 : 1 ); Item sitem = new Switch( amount ); if ( !m.PlaceInBackpack( sitem ) && placeAtFeet ) { ArrayList atFeet = new ArrayList(); foreach ( Item obj in m.GetItemsInRange( 0 ) ) atFeet.Add( obj ); for ( int i = 0; i < atFeet.Count; ++i ) { Item check = (Item)atFeet[i]; if ( check.StackWith( m, sitem, false ) ) return true; } sitem.MoveToWorld( m.Location, m.Map ); } m.SendLocalizedMessage( 1072547 ); // You found a switch! } } return base.Give( m, item, placeAtFeet ); } #endregion |
CODE |
using System; using Server; using Server.Items; using Server.Mobiles; namespace Server.Engines.Harvest { public class Lumberjacking : HarvestSystem { public bool SpawnTreeElementals = true; // Switch on or off, Tree Elementals Spawning (True or False setting) private static Lumberjacking m_System; public static Lumberjacking System { get { if ( m_System == null ) m_System = new Lumberjacking(); return m_System; } } private HarvestDefinition m_Definition; public HarvestDefinition Definition { get{ return m_Definition; } } private Lumberjacking() { HarvestResource[] res; HarvestVein[] veins; #region Lumberjacking HarvestDefinition lumber = new HarvestDefinition(); // Resource banks are every 4x3 tiles lumber.BankWidth = 4; lumber.BankHeight = 3; // Every bank holds from 20 to 45 logs lumber.MinTotal = 10; lumber.MaxTotal = 50; // A resource bank will respawn its content every 20 to 30 minutes lumber.MinRespawn = TimeSpan.FromMinutes( 20.0 ); lumber.MaxRespawn = TimeSpan.FromMinutes( 30.0 ); // Skill checking is done on the Lumberjacking skill lumber.Skill = SkillName.Lumberjacking; // Set the list of harvestable tiles lumber.Tiles = m_TreeTiles; // Players must be within 2 tiles to harvest lumber.MaxRange = 2; // Ten logs per harvest action lumber.ConsumedPerHarvest = 10; lumber.ConsumedPerIlshenarHarvest = 20; // The chopping effect lumber.EffectActions = new int[]{ 13 }; lumber.EffectSounds = new int[]{ 0x13E }; lumber.EffectCounts = new int[]{ 1, 2, 2, 2, 3 }; lumber.EffectDelay = TimeSpan.FromSeconds( 1.6 ); lumber.EffectSoundDelay = TimeSpan.FromSeconds( 0.9 ); lumber.NoResourcesMessage = 500493; // There's not enough wood here to harvest. lumber.FailMessage = 500495; // You hack at the tree for a while, but fail to produce any useable wood. lumber.OutOfRangeMessage = 500446; // That is too far away. lumber.PackFullMessage = 500497; // You can't place any wood into your backpack! lumber.ToolBrokeMessage = 500499; // You broke your axe. res = new HarvestResource[] { // NUMBERS BELOW ARE... // 1st Required Skill Needed // 2nd Min Skill Needed // 3rd Max Skill Needed // 4th Success Message CLI No new HarvestResource( 00.0, 00.0, 100.0, 1072540, typeof( Log ), typeof ( TreefellowElemental) ), new HarvestResource( 50.0, 25.0, 100.0, 1075241, typeof( OakLog ), typeof ( OakTreefellowElemental) ), new HarvestResource( 60.0, 30.0, 110.0, 1075242, typeof( AshLog ), typeof ( AshTreefellowElemental) ), new HarvestResource( 70.0, 35.0, 120.0, 1075243, typeof( YewLog ), typeof ( YewTreefellowElemental) ), new HarvestResource( 80.0, 40.0, 120.0, 1075244, typeof( HeartWoodLog ), typeof ( HeartWoodTreefellowElemental) ), new HarvestResource( 90.0, 45.0, 120.0, 1075245, typeof( BloodWoodLog ), typeof ( BloodWoodTreefellowElemental) ), new HarvestResource( 99.9, 50.0, 120.0, 1075245, typeof( FrostWoodLog ), typeof ( FrostWoodTreefellowElemental) ) }; veins = new HarvestVein[] { // NUMBERS BELOW ARE... // 1ST Vein Chance // 2ND Chance To Fallback // 3RD Primary Resource // 4TH Fallback Resource new HarvestVein( 47.0, 0.0, res[0], null ), new HarvestVein( 21.0, 0.5, res[1], res[0] ), new HarvestVein( 13.0, 0.5, res[2], res[0] ), new HarvestVein( 08.0, 0.5, res[3], res[0] ), new HarvestVein( 05.0, 0.5, res[4], res[0] ), new HarvestVein( 03.7, 0.5, res[5], res[0] ), new HarvestVein( 02.3, 0.5, res[6], res[0] ), }; lumber.Resources = res; lumber.Veins = veins; lumber.RaceBonus = Core.ML; m_Definition = lumber; Definitions.Add( lumber ); #endregion } public override bool CheckHarvest( Mobile from, Item tool ) { if ( !base.CheckHarvest( from, tool ) ) return false; if ( tool.Parent != from ) { from.SendLocalizedMessage( 500487 ); // The axe must be equipped for any serious wood chopping. return false; } return true; } public override bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) { if ( !base.CheckHarvest( from, tool, def, toHarvest ) ) return false; if ( tool.Parent != from ) { from.SendLocalizedMessage( 500487 ); // The axe must be equipped for any serious wood chopping. return false; } return true; } public override void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest ) { from.SendLocalizedMessage( 500489 ); // You can't use an axe on that. } private static int[] m_Offsets = new int[] { -1, -1, -1, 0, -1, 1, 0, -1, 0, 1, 1, -1, 1, 0, 1, 1 }; public override void OnHarvestFinished(Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested) { if (tool is Axe && def == m_Definition && 0.1 > Utility.RandomDouble()) { HarvestResource res = vein.PrimaryResource; if (res == resource && res.Types.Length >= 1 && SpawnTreeElementals) { try { Map map = from.Map; if (map == null) return; BaseCreature spawned = Activator.CreateInstance(res.Types[1], new object[] { 20 }) as BaseCreature; if (spawned != null) { int offset = Utility.Random(8) * 2; // THIS WAS SET TO 8 NOT 14 for (int i = 0; i < m_Offsets.Length; i += 2) { int x = from.X + m_Offsets[(offset + i) % m_Offsets.Length]; int y = from.Y + m_Offsets[(offset + i + 1) % m_Offsets.Length]; if (map.CanSpawnMobile(x, y, from.Z)) { spawned.MoveToWorld(new Point3D(x, y, from.Z), map); spawned.Combatant = from; return; } else { int z = map.GetAverageZ(x, y); if (map.CanSpawnMobile(x, y, z)) { spawned.MoveToWorld(new Point3D(x, y, z), map); spawned.Combatant = from; return; } } } spawned.MoveToWorld(from.Location, from.Map); spawned.Combatant = from; } } catch { } } } } public override void SendSuccessTo(Mobile from, Item item, HarvestResource resource) { if (item is Log) from.SendLocalizedMessage(1072540); // You put some logs into your backpack. else if (item is OakLog) from.SendLocalizedMessage(1072541); // You put some logs into your backpack. else if (item is AshLog) from.SendLocalizedMessage(1072542); // You put some logs into your backpack. else if (item is YewLog) from.SendLocalizedMessage(1072543); // You put some logs into your backpack. else if (item is HeartWoodLog) from.SendLocalizedMessage(1072544); // You put some logs into your backpack. else if (item is BloodWoodLog) from.SendLocalizedMessage(1072545); // You put some logs into your backpack. else if (item is FrostWoodLog) from.SendLocalizedMessage(1072546); // You put some logs into your backpack. else base.SendSuccessTo(from, item, resource); int LumberingItemDropChange = Utility.Random(1200);//was 800 if (LumberingItemDropChange <= 40) { from.SendLocalizedMessage(1072548); // You found a bark fragment! from.AddToBackpack(new BarkFragment()); } else if (LumberingItemDropChange <= 50) { from.SendLocalizedMessage(1072550); // You found a luminescent fungi! from.AddToBackpack(new LuminescentFungi()); } else if (LumberingItemDropChange <= 60) { from.SendLocalizedMessage(1072549); // You found a parasitic plant! from.AddToBackpack(new ParasiticPlant()); } else if (LumberingItemDropChange <= 70) { from.SendLocalizedMessage(1072551); // You found a brilliant amber! from.AddToBackpack(new BrilliantAmber()); } } public static void Initialize() { Array.Sort( m_TreeTiles ); } #region Tile lists private static int[] m_TreeTiles = new int[] { 0x4CCA, 0x4CCB, 0x4CCC, 0x4CCD, 0x4CD0, 0x4CD3, 0x4CD6, 0x4CD8, 0x4CDA, 0x4CDD, 0x4CE0, 0x4CE3, 0x4CE6, 0x4CF8, 0x4CFB, 0x4CFE, 0x4D01, 0x4D41, 0x4D42, 0x4D43, 0x4D44, 0x4D57, 0x4D58, 0x4D59, 0x4D5A, 0x4D5B, 0x4D6E, 0x4D6F, 0x4D70, 0x4D71, 0x4D72, 0x4D84, 0x4D85, 0x4D86, 0x52B5, 0x52B6, 0x52B7, 0x52B8, 0x52B9, 0x52BA, 0x52BB, 0x52BC, 0x52BD, 0x4CCE, 0x4CCF, 0x4CD1, 0x4CD2, 0x4CD4, 0x4CD5, 0x4CD7, 0x4CD9, 0x4CDB, 0x4CDC, 0x4CDE, 0x4CDF, 0x4CE1, 0x4CE2, 0x4CE4, 0x4CE5, 0x4CE7, 0x4CE8, 0x4CF9, 0x4CFA, 0x4CFC, 0x4CFD, 0x4CFF, 0x4D00, 0x4D02, 0x4D03, 0x4D45, 0x4D46, 0x4D47, 0x4D48, 0x4D49, 0x4D4A, 0x4D4B, 0x4D4C, 0x4D4D, 0x4D4E, 0x4D4F, 0x4D50, 0x4D51, 0x4D52, 0x4D53, 0x4D5C, 0x4D5D, 0x4D5E, 0x4D5F, 0x4D60, 0x4D61, 0x4D62, 0x4D63, 0x4D64, 0x4D65, 0x4D66, 0x4D67, 0x4D68, 0x4D69, 0x4D73, 0x4D74, 0x4D75, 0x4D76, 0x4D77, 0x4D78, 0x4D79, 0x4D7A, 0x4D7B, 0x4D7C, 0x4D7D, 0x4D7E, 0x4D7F, 0x4D87, 0x4D88, 0x4D89, 0x4D8A, 0x4D8B, 0x4D8C, 0x4D8D, 0x4D8E, 0x4D8F, 0x4D90, 0x4D95, 0x4D96, 0x4D97, 0x4D99, 0x4D9A, 0x4D9B, 0x4D9D, 0x4D9E, 0x4D9F, 0x4DA1, 0x4DA2, 0x4DA3, 0x4DA5, 0x4DA6, 0x4DA7, 0x4DA9, 0x4DAA, 0x4DAB, 0x52BE, 0x52BF, 0x52C0, 0x52C1, 0x52C2, 0x52C3, 0x52C4, 0x52C5, 0x52C6, 0x52C7 }; #endregion } } |