Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - unisharp

Pages: 1 ... 8 9 [10] 11 12 ... 14
136
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0.0.15 (stable)
« on: June 07, 2015, 06:35:35 AM »
I downloaded Egg Farmer and ran the setup. I selected my area, clicked start and received (Not Responding). This was with stealth open and the client started. I use windows 7 64-bit OS. Any help would be appreciated.

Sorry been busy lately just caught this...  I will get back to you ASAP!

137
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0.0.15 (stable)
« on: May 27, 2015, 03:01:31 PM »
for setting up stealth

138
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0.0.15 (stable)
« on: May 23, 2015, 05:50:23 AM »
my god I wish I could even attempt to write a script, let alone write one like this!

That's nice of you to say thank you :)

139
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0.0.10 (stable)
« on: May 12, 2015, 03:16:08 PM »
Release 1.0.0.15

*Added delay after moving to an egg and before picking it up.  Caught an instance where we would get revealed walking to an egg, smoke bomb and try to pick up the egg at the same time, resulting in the program forever-waiting to move the egg.

140
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0.0.10 (stable)
« on: May 12, 2015, 10:12:31 AM »
i love it, how you are total into it !

 ;D  having so much fun!

141
Stealth scripts / Re: [V6, C#] Egg Farmer - v1.0 (stable)
« on: May 12, 2015, 08:30:37 AM »
Release: EggFarmer 1.0.0.10

Changes:
*Added support for Smoke Bombs, carry them in your main backpack

142
Tx to Crome969 this problem is resolved.  The issue was incompatible versions between ScriptDotNet2 and Stealth.  I sent them the version of Stealth I was using and voila, success.

I posted a link to the version of Stealth I built EggFarmer with.

Again, good to go people! :)

Enjoy.

143
EC SUPPORT!?  I want! :)



That's funny I was taking a crack at LUA last night....  It seems that the default user interface that comes with Enhanced Client, has a ton of errors in it.  So I began working on that, and by working on it I mean I just started commenting stuff out lol ;)


manwinc: ahHA!  I knew one of those bastards were revealing me.  Good call on Shadow Strike, didn't think of that.  Only thing I'm thinking now is how to deal with being poisoned.  Considering picking up Necro to stay in Vampiric Embrace... not sure though.  Trying to come up with something better than chugging a Greater Cure Pot.

144
Ah yes didn't think of that :)



That's the error they are getting, still lost =/

Tomorrow morning, probably just gonna switch to another PC install Stealth and EggFarmer and go from there


EDIT: Also, I noticed why I'm dying so much :)  the snakes can reveal you too, extremely rare, but they do...  So I'm going to be adding in a smoke bomb method and it'll pop one once revealed.

145
Thanks guys :)

OK feedback from 2 users using the same version I am using.  Using EggFarmer via setup/installation deployment.  Both users got an error after pressing Start.  Something about an incompatibility with Stealth, which confuses the hell out of me.  I wish I was at their PCs lol.

Someone with Stealth experience could help me in diagnosing this problem, as it works flawlessly for me and I am unsure what to do.

Possible that the deployment didn't include ScriptAPI or ScriptDotNet2?  Not sure...

EDIT: Also, these 2 users are completely new to Stealth

146
Stealth scripts / [C#, ScriptSDK] EggFarmer
« on: May 09, 2015, 12:16:21 PM »
SOURCE: https://github.com/unisharpUO/EggFarmer

What:
EggFarmer is a 100% AFKable script.  I split the nest areas into 5 different regions, each has their own rail.  Your character will walk around, and stop when it finds BOTH a snake and a nest, and then will proceed to use your charmer flute on it.  You must have Stealth (the skill.... and the program, of course.)  If you get revealed, there are no methods of defense setup - you will die.  Area 5 is notorious for this because of the Horrors around (they reveal you) but I've also died in other areas as well. - added method for smoke bombs.  Make sure you have plenty of snake charmer flutes in your inventory and also make sure they are insured. 

UPDATE 3-5-2020:
I removed the ClickOnce signing.  I'll figure out something eventually for people who don't want to compile from source.  For now, you must compile from source.  That means downloading Visual Studio 2019, cloning the source repo posted above, adding ScriptSDK as a reference and compiling it yourself.

Requirements:
https://github.com/Crome696/ScriptSDK

Instructions:
Step 1: Fire up Stealth (the application, not the skill)
Step 2: Connect a profile
Step 3: Run EggFarmer
Step 4: Click "Show Areas" to see where you need to start it at, and select it from the Drop Down Box
Step 5: Run to the "Start Here" location for the area you chose
Step 6: Click Start
Step 7: Go make a pizza


Statistics:
I watched it collect as much as 20 eggs in 30 minutes, and as little as 5 eggs in 1 hour.  It's complete RNG.  In about 3 hours I had 20 runs.
EDIT: 100 eggs in 8hrs

EDIT: 3/8/20, 5 runs collected in 2hrs (20 eggs) - area 3
44 eggs in roughly 3-4hrs

UPDATE 3/8/20: Optimizations made, dramatically increased rate of persuading snakes which will lead to increased eggs over time.

147
Stealth scripts / Re: [V6, C#] oEggs - Orich's Medusa Egg Farmer
« on: May 06, 2015, 04:37:02 AM »
One more update
Rev0.2a

Changed from using Drag/Drop item to MoveItem.

Code: [Select]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

using ScriptAPI;
using ScriptDotNet2;


/*
This script is extremely sloppy, without a plethora of sanity checks, and was written between 3:00am and 3:41am
 
*/

namespace oEggs
{
    class Program
    {
        public static ushort[] SnakeTypes = new ushort[] { 52, 93, 21 };

        public static List<Item> Snakes = new List<Item>();
        public static List<Item> Nests = new List<Item>();
        public static List<Item> Flutes = new List<Item>();

        private static readonly Object locker = new Object();

        #region Methods
        static void ErrorExit(string ErrorText)
        {
            Console.WriteLine(ErrorText);
            Console.Write("Press any key to suicide.");
            Console.ReadKey(false);
            Environment.Exit(0);
        }

        /// <summary>
        /// Method for posting messages to the console
        /// with a timestamp
        /// </summary>
        /// <param name="message">string: message to send to the console</param>
        /// <param name="args">(optional)object[]: additional arguments</param>
        public static void ConsoleMessage(string message, params object[] args)
        {
            Console.Write("[{0}] ", DateTime.Now.ToString("mm:ss"));
            Console.WriteLine(message, args);
        }

        /// <summary>
        /// Method for posting messages to the console
        /// with a timestamp and optional color
        /// </summary>
        /// <param name="message">string: message to send to the console</param>
        /// <param name="color">(optional)enum ConsoleColor: the color you want the message to be</param>
        /// <param name="args">(optional)object[]: additional arguments</param>
        public static void ConsoleMessage(string message, ConsoleColor color = ConsoleColor.White, params object[] args)
        {
            Console.Write("[{0}] ", DateTime.Now.ToString("mm:ss"));
            Console.ForegroundColor = color;
            Console.WriteLine(message, args);
            Console.ResetColor();
        }
        #endregion

        static void Main(string[] args)
        {

            /*while (true)
            {
                Item Result = Target.RequestTarget();

                Console.WriteLine(Result.Type);
            }*/

            #region Events
            //Stealth.Default.Buff_DebuffSystem += onBuff;
            //Stealth.Default.UnicodeSpeech += onSpeech;
            #endregion

            Thread EggFinderThread = new Thread(FindEggs);
            EggFinderThread.Start();

            ConsoleMessage("Waiting for connection...");
            while (!Profile.IsConnected) ;
            ConsoleMessage("Connection detected.  Welcome {0}!", Self.Name);

            FindFlutes();
            if (Flutes.Count < 0)
                ErrorExit("Not enough snake charmer flutes.  Bye.");

            ConsoleMessage("Starting egg farm...");

            while (Profile.IsConnected)
            {
                MainRoutine();
            }


        }

        private static void MainRoutine()
        {
            DateTime thisTime = DateTime.Now;
            Stealth.Default.ClearJournal();

            #region Search
        Search:
            FindSnakes();
            ConsoleMessage("Found {0} snakes",
                ConsoleColor.DarkYellow, Snakes.Count);
            if (Snakes.Count == 0)
            {
                Thread.Sleep(5000);
                goto Search;
            }

            FindNests();
            ConsoleMessage("Found {0} nests",
                ConsoleColor.DarkYellow, Nests.Count);
            if (Nests.Count == 0)
            {
                Thread.Sleep(5000);
                goto Search;
            }

            FindFlutes();
            ConsoleMessage("Found {0} flutes",
                ConsoleColor.DarkYellow, Flutes.Count);
            if (Flutes.Count < 1)
                ErrorExit("Ran out of flutes.");
            #endregion

            Item Flute = Flutes[0];

            for (int i = 0; i < Snakes.Count; i++)
            {
                if (i == 3)
                    break;

                ConsoleMessage("Attempting flute process...",
                    ConsoleColor.DarkYellow);
                Stealth.Default.CancelWaitTarget();

                while (true)
                {
                    thisTime = DateTime.Now;
                    Flute.Use();
                    if (!Stealth.Default.WaitJournalLine(thisTime, "You must wait a moment for it to recharge.", 750))
                        break;

                    ConsoleMessage("Flute waiting to recharge.  Trying again in 1.5s.",
                        ConsoleColor.DarkRed);
                    Script.Wait(1500);
                }

                Stealth.Default.WaitTargetObject(Snakes[i].ID);
                Script.Wait(1000);
                Stealth.Default.WaitTargetObject(Nests[0].ID);

                Script.Wait(10000);
            }
        }

        static void FindSnakes()
        {
            Find.FindDistance = 10;
            Snakes = Find.FindItems(52);
            Snakes.AddRange(Find.FindItems(21));
            Snakes.AddRange(Find.FindItems(93));
            Snakes.OrderBy(x => x.Distance).ToList();
        }

        static void FindFlutes()
        {
            Flutes = Find.FindItems(0x2807, Self.Backpack.ID);
        }

        static void FindNests()
        {
            Find.FindDistance = 10;
            Nests = Find.FindItems(8755);
            Nests.OrderBy(n => n.Distance).ToList();
        }

        static void FindEggs()
        {
            while (true)
            {

                Find.FindDistance = 10;
                List<Item> Eggs = Find.FindItems(16831);
                if (Eggs.Count > 0)
                {
                    for (int i = 0; i < Eggs.Count; i++)
                    {
                        while (Self.X != Eggs[i].X && Self.Y != Eggs[i].Y)
                        {
                            Script.Wait(1000);
                            Stealth.Default.MoveXY((ushort)Eggs[i].X, (ushort)Eggs[0].Y, false, 0, false);
                            if (Self.X != Eggs[i].X && Self.Y != Eggs[i].Y)
                                break;
                        }
                        ConsoleMessage("Trying to take egg...",
                            ConsoleColor.DarkYellow);
                        Stealth.Default.MoveItem(Eggs[i].ID, 1, Self.Backpack.ID, 0, 0, 0);
                    }
                }
                Script.Wait(10000);
            }
        }
    }
}


148
Stealth scripts / Re: [V6, C#] oEggs - Orich's Medusa Egg Farmer
« on: May 06, 2015, 03:32:48 AM »
One more thing, for some reason when it checks for snakes it always comes up with 0 the first time.  It checks for new snakes and new nests every 5 seconds if it couldn't find any.  Just let it run, it'll find em!

I watched it successfully pick eggs up, then last night I watched it walk to an Egg and not pick it up.  More testing is needed.

EDIT: A couple other notes lol...

After searching for snakes... say it finds 20 snakes on screen.  It'll loop through the first 3 it finds and then re-search and start over.  I did it this way because if it did find 20 snakes, when it gets to say 15, the snake that it's now targeting will most likely be inaccessible (off screen.)  This way after it gets to the 3rd snake, the 1st one should be finished searching and able to search again.

149
Stealth scripts / Re: [V6, C#] oEggs - Orich's Medusa Egg Farmer
« on: May 06, 2015, 03:22:15 AM »
oEggs - Revisited v0.1 Alpha

Updated and working.  Changed it around a bit, there's two parts to this:  The routine of using a flute targeting a snake and then a nest, and then a separate thread running a function that searches for eggs and picks them up.

Pretty quick and dirty I took out most of the Journal checking since we no longer need to verify whether or not a snake was successful.

Code: [Select]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

using ScriptAPI;
using ScriptDotNet2;


/*
This script is extremely sloppy, without a plethora of sanity checks, and was written between 3:00am and 3:41am
 
*/

namespace oEggs
{
    class Program
    {
        public static ushort[] SnakeTypes = new ushort[] { 52, 93, 21 };

        public static List<Item> Snakes = new List<Item>();
        public static List<Item> Nests = new List<Item>();
        public static List<Item> Flutes = new List<Item>();

        private static readonly Object locker = new Object();

        #region Methods
        static void ErrorExit(string ErrorText)
        {
            Console.WriteLine(ErrorText);
            Console.Write("Press any key to suicide.");
            Console.ReadKey(false);
            Environment.Exit(0);
        }

        /// <summary>
        /// Method for posting messages to the console
        /// with a timestamp
        /// </summary>
        /// <param name="message">string: message to send to the console</param>
        /// <param name="args">(optional)object[]: additional arguments</param>
        public static void ConsoleMessage(string message, params object[] args)
        {
            Console.Write("[{0}] ", DateTime.Now.ToString("mm:ss"));
            Console.WriteLine(message, args);
        }

        /// <summary>
        /// Method for posting messages to the console
        /// with a timestamp and optional color
        /// </summary>
        /// <param name="message">string: message to send to the console</param>
        /// <param name="color">(optional)enum ConsoleColor: the color you want the message to be</param>
        /// <param name="args">(optional)object[]: additional arguments</param>
        public static void ConsoleMessage(string message, ConsoleColor color = ConsoleColor.White, params object[] args)
        {
            Console.Write("[{0}] ", DateTime.Now.ToString("mm:ss"));
            Console.ForegroundColor = color;
            Console.WriteLine(message, args);
            Console.ResetColor();
        }
        #endregion

        static void Main(string[] args)
        {

            /*while (true)
            {
                Item Result = Target.RequestTarget();

                Console.WriteLine(Result.Type);
            }*/

            #region Events
            //Stealth.Default.Buff_DebuffSystem += onBuff;
            //Stealth.Default.UnicodeSpeech += onSpeech;
            #endregion

            Thread EggFinderThread = new Thread(FindEggs);
            EggFinderThread.Start();

            ConsoleMessage("Waiting for connection...");
            while (!Profile.IsConnected) ;
            ConsoleMessage("Connection detected.  Welcome {0}!", Self.Name);

            FindFlutes();
            if (Flutes.Count < 0)
                ErrorExit("Not enough snake charmer flutes.  Bye.");

            ConsoleMessage("Starting egg farm...");

            while (Profile.IsConnected)
            {
                MainRoutine();
            }


        }

        private static void MainRoutine()
        {
            DateTime thisTime = DateTime.Now;

            Stealth.Default.ClearJournal();

            lock (locker)
            {
                #region Search
            Search:
                FindSnakes();
                ConsoleMessage("Found {0} snakes",
                    ConsoleColor.DarkYellow, Snakes.Count);
                if (Snakes.Count == 0)
                {
                    Thread.Sleep(5000);
                    goto Search;
                }

                FindNests();
                ConsoleMessage("Found {0} nests",
                    ConsoleColor.DarkYellow, Nests.Count);
                if (Nests.Count == 0)
                {
                    Thread.Sleep(5000);
                    goto Search;
                }

                FindFlutes();
                ConsoleMessage("Found {0} flutes",
                    ConsoleColor.DarkYellow, Flutes.Count);
                if (Flutes.Count < 1)
                    ErrorExit("Ran out of flutes.");
                #endregion

                Item Flute = Flutes[0];

                for (int i = 0; i < Snakes.Count; i++)
                {
                    if (i == 3)
                        break;

                    ConsoleMessage("Attempting flute process...",
                        ConsoleColor.DarkYellow);
                    Stealth.Default.CancelWaitTarget();

                    while (true)
                    {
                        thisTime = DateTime.Now;
                        Flute.Use();
                        if (!Stealth.Default.WaitJournalLine(thisTime, "You must wait a moment for it to recharge.", 750))
                            break;

                        ConsoleMessage("Flute waiting to recharge.  Trying again in 1.5s.",
                            ConsoleColor.DarkRed);
                        Script.Wait(1500);
                    }

                    Stealth.Default.WaitTargetObject(Snakes[i].ID);
                    Script.Wait(1000);
                    Stealth.Default.WaitTargetObject(Nests[0].ID);

                    Script.Wait(10000);
                }
            }
        }

        static void FindSnakes()
        {
            Find.FindDistance = 10;
            Snakes = Find.FindItems(52);
            Snakes.AddRange(Find.FindItems(21));
            Snakes.AddRange(Find.FindItems(93));
            Snakes.OrderBy(x => x.Distance).ToList();
        }

        static void FindFlutes()
        {
            Flutes = Find.FindItems(0x2807, Self.Backpack.ID);
        }

        static void FindNests()
        {
            Find.FindDistance = 10;
            Nests = Find.FindItems(8755);
            Nests.OrderBy(n => n.Distance).ToList();
        }

        static void FindEggs()
        {
            while (true)
            {
                lock (locker)
                {
                    List<Item> Eggs = Find.FindItems(16831);
                    if (Eggs.Count > 0)
                    {
                        for (int i = 0; i < Eggs.Count; i++)
                        {
                            while (Self.X != Eggs[i].X && Self.Y != Eggs[i].Y)
                            {
                                Script.Wait(1000);
                                Stealth.Default.MoveXY((ushort)Eggs[i].X, (ushort)Eggs[0].Y, false, 0, false);
                                if (Self.X != Eggs[i].X && Self.Y != Eggs[i].Y)
                                    break;
                            }
                            Console.WriteLine("Taking the egg.");
                            Stealth.Default.DragItem(Eggs[i].ID, 1);
                            Script.Wait(1500);
                            Stealth.Default.DropHere(Self.Backpack.ID);
                        }
                    }
                }
                Script.Wait(10000);
            }
        }
    }
}

I had a hard time deciding on distance checks, because of the terrain.  The vertical changing ground tiles are a pain in the arse, you'll be 5 tiles from something but you still can't either see it or reach it.  For this reason I suggest trying out different spots if you're having difficulty.

150
OK I'm too a point where I think I can call this a release candidate, but not 100% stable yet.
 
Added job rejection:
Jobs now have a new property - a list of clients who rejected the job.  When the server receives a job rejection packet, the client is added to the Rejectors property of the Job object.  **The server then calls a notify.  The Queue notify function has been updated, it now checks if a job has any rejectors and if so, doesn't notify them again.  If all clients connected to the server reject the job, the list of rejectors is reset and the job goes back into the queue.

Clients can add jobs now too:
I have a poison check in my server routine, but I couldn't pass on having the clients add themselves when they get a buff/debuff event.  So not only does the server check for poisoned characters, but clients will be adding themselves if they are poisoned.

Thread locking and Added Exception Catching for the Job Queue:
There are circumstances when the server will be notifying clients about jobs, and a job will be completed in that process.  This will cause an Exception and usually cause the program to crash.  We now catch the exceptions so the program can continue doing it's job.  I added thread locking to all the functions that deal with modifying the jobqueue in hopes that this wouldn't happen again, but it still did.  So I ended up removing the locks for now, may end up putting them back once I find a solution.  The locker object still exists under the queue class, it's just not used.

Jobs moved to Server.Data:
I had to move the Job class into the data section because I wanted to serialize a job and send it through a packet and just moving the class was less work.

Exception Catching:
Added try/catches almost everywhere.

WTF!?!  COLORS IN MY CONSOLE!
I added a function to handle writing to the console in colors.  Combot.consoleMessage()


I'm close to making that video to go over all this... stuff :)

EDIT: I casted Explo/FS/Poison on 1 character with 3 clients connected.  One client cast cleanse, one client cast close wounds, the other used a bandage - and they figured it out allll by themselves  Pretty sweet ;)

**EDIT2: Took out the call to notify from the rejection procedure.  In one second the server cycled a rejected job through 3 clients 12 times!  What I mean is, Clients: A, B and C each rejected the same job consecutively, 4 times each, in one second lol...  I had to put a stop to this because it was ending in a semi-endless loop to which the job would just keep getting cycled until someone picked it up.  So I changed it to when all the clients have rejected the job, the job is removed from the Queue...  if it needs to be done again the server will issue it from the server routine.

Pages: 1 ... 8 9 [10] 11 12 ... 14