Menu

Targets Log in to Edit

Jan Siems

Tile Target

Entity Target Sample

using System.Collections.Generic;
using ScriptSDK;
using ScriptSDK.Engines;
using ScriptSDK.Items;
using ScriptSDK.Mobiles;

namespace ScriptNet.Sample
{

    public class BaseOre : Item
    {
        public BaseOre(uint ObjectID) : base(ObjectID)
        {
        }

        public BaseOre(Serial serial) : base(serial)
        {
        }

        public virtual bool Smelt()
        {
            // If the double click succeed we assign it a Target Handler
            if (DoubleClick())
                return new SmeltTarget(this, 1000).Action();
            return false;
        }

        private class SmeltTarget : EntityTarget
        {
            public SmeltTarget(UOEntity source) : base(source)
            {
            }

            public SmeltTarget(UOEntity source, int Delay) : base(source, Delay)
            {
            }

            public override bool Action(params object[] args)
            {
                //In our case we want to find the Target ourself. But we also could had passed it.
                //So we delete all old arguments to keep sure
                args = new object[]{};

                // Now we search for the forge by calling FindForge
                Item i = FindForge();

                // We double check if we found a forge and if this is true, we assign it to args
                if(i != null)
                    args = new object[]{i};

                //Now this calls the core, if the targetcursor appeared within time it will try to handle the Target Cursor and return the state.
                return base.Action(args);
            }

            private Item FindForge()
            {
                var list = new List<ushort>();

                // All Graphic ID´s of Forges based on RunUO
                for(ushort e = 6522;e <= 6569;e++)
                    list.Add(e);
                list.Add(4017);

                //We assign the Scanner 
                Scanner.Initialize();

                //And only want to scan Forges in range of 2 Tiles
                Scanner.Range = 2;

                //Scans for Forges and pass results back
                var resultlist = Scanner.Find<Item>(list, 0xFFFF, 0x0000, false);

                //If we found any result we pass the first back
                if(resultlist.Count > 0)
                    return resultlist[0];

                //Else we pass null back (So no Result found).
                return null;
            }
        }
    }
 } 

This sample shows how to make Ore available and let the handler smelt the ore to Ingot on Fly


Related

Wiki: Reference

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.