Finaltwist

Squire
ServUO Version
Publish Unknown
Ultima Expansion
None
Hi all, im trying to create an automation system for adventures, and i am having problems searching for trees near the player. ive tried

GetLandTile
GetStaticTiles
and a simple
GetObjectsInRange

but none of the above can find a ID/ItemID that matches with that of a tree.
Does anyone know a good method to achieve this, other than having to manually target the tree?

im trying to find trees without having to manually target
 

siran

Citizen
I have used tileID. Here is an example:
public static bool IsBamboo (int tileID)
{
for (int i = 0; i < BambooTiles.Length; i += 2)
{
if (tileID >= BambooTiles && tileID <= BambooTiles[i + 1])
return true;
}
return false;
}

Then I compare the tileID to a list:
private static int[] BambooTreeStatics = new int[]
{
0x24bc, 0x2470, // Bamboo
};
It may be that your id numbers, such as the 0x24bc through 0x2470 in my example are not correct.
 

Rex

Citizen
If you are searching for actual items you can use this

C#:
List<Item> items = new List<Item>();
IPooledEnumerable pe = from.GetItemsInRange(p, 3);
foreach (Item item in pe)
{
    if (!items.Contains(item))
        items.Add(item);
}
pe.Free();

foreach (Item item in items)
{
    if (item is Tree)
    {
        Tree tr = item as Tree;
        tr.Name = "MyTree";
    }
}

For static tiles it's a bit more complicated so i just made a command out of it.


C#:
  public class FindTree
    {
        public static void Initialize()
        {
            CommandSystem.Register("FindTree", AccessLevel.Player, new CommandEventHandler(FindTree_OnCommand));
        }
        [Usage("FindTree")]
        [Description("Finds a nerby Tree")]
        public static void FindTree_OnCommand(CommandEventArgs e)
        {
            Mobile from = e.Mobile as Mobile;
            if (from.Alive && !from.Deleted && from != null)
            {
                Map m_Map = from.Map;
                int range = 3;
                var region = new Rectangle2D(from.X - range, from.Y - range, range * 2 + 1, range * 2 + 1);
                for (int y = region.Y; y < region.Y + region.Height; ++y)
                {
                    for (int x = region.X; x < region.X + region.Width; ++x)
                    {

                        StaticTile[] tiles = m_Map.Tiles.GetStaticTiles(x, y);

                        for (int i = 0; i < tiles.Length; ++i)
                        {
                            StaticTile tile = tiles[i];
                            ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue];

                            bool isTree = ((tile.ID == 3277) ||
                                            (tile.ID == 3280) ||
                                            (tile.ID == 3283) ||
                                            (tile.ID == 3290));

                            if (isTree)
                            {
                                from.SendMessage("Found tree: " + id.Name);
                            }
                        }

                    }
                }
            }
        }
    }

Enjoy!
 

Finaltwist

Squire
thanks all! Just figured it out... the tree IDs in lumberjacking all had + 0x4000 added to the itemID for some really strange reason, so my item ids never matched!
Oddly enough, the static tiles i find have X and Y coords as 0, even though then i props the tree ingame it has proper coords....
 
Last edited:

Finaltwist

Squire
okay... well got the system working fine now, adventures automations does a ton of new carpal-tunnel-causing tasks completely automatically.

lumberjacking, mining, skinning, milling, fishing...

speak and your char does the action until out of resources. Love it!