Full Version : Lumberjacking.cs problem
xmlspawner >>Scripting Support >>Lumberjacking.cs problem


<< Prev | Next >>

Grimhawk- 12-01-2006
I'm getting a fatal error with some code I added to my lumberjacking.cs and I can't figure out exactly how to fix it.
Most times I can go through scripts and find examples of what I need to change to fix a problem ,but I'm on meds from getting hurt at work and things just aren't sinking in like they should any help on this will be appreciated.


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


ArteGordon- 12-02-2006
what is the exact error that you are getting?

Grimhawk- 12-02-2006
it doesn't give an error it does that fatal exception in the console I think thats what is throwing me off on figuring out whats wrong.

I can put that code in a stock lumberjacking.c that doesn't have my custom wood and it'll compile fine though.

koluch- 12-03-2006
If this helps in anyway, here is our section on getting the new ML resources(maybe compare and go from there?? )
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
}
}


We have the new wood types also and chance to spawn the tree elementals(that is pretty funny and players really like it )

% chance to get the ML is written different, though seems to be running fine as far as the amount you get not being too over abundant. Hope this can help you some :]

Koluch

Grimhawk- 12-03-2006
Thanks Koluch

I've already fixed it.

Your ML resources are setup almost same as mine was just trying a different way with the switch but ended up added it in same way as my bark fragment, fungi and so on.