What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

[Plugin] Artemis - The Profile Helper

Phelon

Well-Known Member
Joined
Jan 15, 2010
Messages
2,591
Reaction score
134
Artemis

"The Profile Helper"

View attachment 43972
Standard: Version 1.05a

Description:
I have developed a override plugin that tries to handle everything the Sarkoth profile does not. This will help speed up Sarkoth runs immensely with the ability to use Speed Improving skills and disabling killing. The idea is to develop this plugin to assist with other popular profiles as they are released till Demonbuddy can utilizes those spells to increase movement speeds.


Features:
Improved Sarkoth Run:
- Smart Kill Toggle depending on location.
- Area Detection for Targeting Toggle.
- Adjusts Kill Radius as needed.

Ability to Use Movement Enhancing Spells:
- Ability to Use Teleport + Wormhole
- Ability to Use Vault
- Ability to use Charge, Leap, Sprint

Installation: (Remove old Folder if downloading new Revision.)
1. Create a folder (If not already made) inside your DB folder, named "plugins"
2. Inside that folder you create yet another folder named "Artemis"
3. Put Artemis.cs (From the 1st post) into that folder.

4. When you start DB, load the profile "Artemis - Sarkoth Farm v1.xxx.xml"
5. Go into the Plugin Tab on DB and enable "Artemis - The Profile Helper 1.xxx"
6. Press start, and BAM! You should be botting.


On SVN (Coming Soon):
Code:
WD Movement buffs.

Latest Revision:
Code:
[COLOR=#000000][FONT=book antiqua][SIZE=2]Version 1.00 Released:[/SIZE][/FONT][/COLOR]
[SIZE=2][COLOR=#000000][FONT=book antiqua]- Initial Release[/FONT]

[FONT=book antiqua]Version 1.02[/FONT]
[FONT=book antiqua]- Will now fight back properly so you shouldn't die to Demonbuddy trying to TP With out defending itself.[/FONT]
[FONT=book antiqua]- Added Profile for Plugin.[/FONT]

[FONT=book antiqua]Version 1.03[/FONT]
[FONT=book antiqua]- Added Barb Movement[/FONT]
[FONT=book antiqua]- Added Monk Movement[/FONT]
[FONT=book antiqua]- Improved Demon Hunter[/FONT]
[FONT=book antiqua]- Will use Speed buffs all the way to Sarkoth.[/FONT]
[FONT=book antiqua]- Modified Profile to use with Plugin[/FONT]
[FONT=book antiqua]- Force Leave Game if Dead.[/FONT]
[FONT=book antiqua]- Fix for stuck in Sarkoths hallway.
[/FONT]
[FONT=book antiqua]Version 1.03a
- Fixed Pathing Issues
- Fixed Profile
- Fixed Leave Game Issue

Version 1.04
- Added Check for movement before hearth
- Added Interact with Cellar door to ensure entrance
- Added Wizard force movement to safe spot before leaving game
- More profile tweaks.
[/FONT]
[FONT=book antiqua]Version 1.05
- Combat is actually working 100%
- Fixed Profile to work 100%
- Fixed the walk back stutter in Sarkoths room.

Version 1.05a
[/FONT][FONT=book antiqua]- Fixed a bug where it would always Teleport.[/FONT]
[/COLOR][/SIZE]



Reported Bugs - Being Worked On:


To Come:


Thanks:
w3eZle - For the Original Idea


Copyright:
Code:
[CENTER][FONT=book antiqua][SIZE=2] Copyright 2012 - Phelon Aka. Jon H.
   This file is part of [/SIZE]Artemis - TheProfile Helper[SIZE=2].[/SIZE][/FONT][/CENTER]
[FONT=book antiqua][SIZE=2]

    Artemis - TheProfile Helper is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

     [/SIZE]Artemis - TheProfile Helper[SIZE=2] is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with [/SIZE]Artemis - TheProfile Helper[SIZE=2].  If not, see <http://www.gnu.org/licenses/>
[/SIZE][/FONT]


If this is making you money or makes Demon Buddy run better for you, why not share the wealth by buying me a beer with the donate button below!​

 
Last edited:
Nice plugin! Was going to put together something like this for running Sakroth but got lazy and just rigged the Generic profile to smoke screen until I'm in the cellar.

One issue I'm noticing is it will only complete 2 vaults... when it hits the second pathing point in the Sakroth profile it will just run the rest of the way.
 
Nice plugin! Was going to put together something like this for running Sakroth but got lazy and just rigged the Generic profile to smoke screen until I'm in the cellar.

One issue I'm noticing is it will only complete 2 vaults... when it hits the second pathing point in the Sakroth profile it will just run the rest of the way.

I don't actually have a DH... Does smoke screen work like teleport where it will port to the place to click?
 
I don't actually have a DH... Does smoke screen work like teleport where it will port to the place to click?

Yes it does. The first two vaults work perfectly.. but for some reason it stops when receiving the final hops to the cellar from the pathing server and just runs the rest of the way (Sometimes causing deaths.)
 
Nice, but why is my wizz teleporting in cellar after mob is dead? Happend right after cd is gone. The start is really great :)
 
Wow! Just ran a few seems extreamly promising. Thanks a bunch for this. Will report back in a bit. Running Wiz with wormhole.

EDIT: Holey moley, 40 runs and no hitch and much fast (obviously the tele). I got thwarted early on for my GPH because out of my first 15 run, 3 had a cellar. But again I will report back in an hour or so.

EDIT 2: After 1 hour or so it still ran great. I didn't see any issues. Thanks so much.
 
Last edited:
Nice, but why is my wizz teleporting in cellar after mob is dead? Happend right after cd is gone. The start is really great :)

It shouldn't teleport unless near a certain location. I will look into this.

Yes it does. The first two vaults work perfectly.. but for some reason it stops when receiving the final hops to the cellar from the pathing server and just runs the rest of the way (Sometimes causing deaths.)

Unfortunately I can not account for the server. I will post my profile I use and hope that helps.

Wow! Just ran a few seems extreamly promising. Thanks a bunch for this. Will report back in a bit. Running Wiz with wormhole

Thanks for testing!
 
It shouldn't teleport unless near a certain location. I will look into this.



Unfortunately I can not account for the server. I will post my profile I use and hope that helps.



Thanks for testing!


I do not believe it has anything to do with the server.. just your code getting interrupted and not having a handler for that. Could you post your profile please?
 
This made db finally better than my own ahk, using this slightly edited profile. (for wizard with wormhole). getting around avg 380gph after a few runs
1st post to thank you!
Code:
<Profile>
  <!-- 
  Steps before loading and running the profie with the bot.
    * Change quest to "Act1 Legacy of Cain, Explore Cellar", Inferno difficulty.
    * Start Game
    * From town take the waypoint to -> "The Old Ruins"
    * Run west until you reach the checkpoint, ( opposite way of where the cathedral is. )
    * Once you are saved load the profile and hit Start!
    * Enjoy!
  -->
  
  <Name>Sarkoth farm profile by Nesox minus some wps</Name>
  <GameParams quest="72095" step="51" act="A1" difficulty="Inferno" resumeFromSave="True" isPrivate="True" numGames="-1"  />
  <Order>
    <WriteReport />	
   	<!-- Debug move, so he can loot the corpse, was skipping vault otherwise -->
	<!-- Move towards cellar -->
	<MoveTo questId="1" x="2042.056" y="2544.75" z="27.1" pathPrecision="5"/>
	<If condition="ActorExistsAt(176007, 2059.629, 2478.667, 27.02374, 15)">
		<!-- The cellar exists, prep vault and ss -->
		<!-- Will make the player start moving then pop cds and move the last bit, O
				finding the path to the teleport seems a bit slow -->
		<MoveTo questId="1" x="2058.599" y="2525.391" z="27.1" pathPrecision="3" />
		<MoveTo questId="1" x="2080.789" y="2489.501" z="27.1" pathPrecision="3" />
		<MoveTo questId="1" x="2065.276" y="2478.389" z="27.35864" pathPrecision="1" />
		<!-- Another identical IF tag for those times the profile does not reset its order -->
		<If condition="ActorExistsAt(176007, 2059.629, 2478.667, 27.02374, 15)">
			<UseObject questId="1" x="2058.653" y="2476.354" z="26.32902" actorId="176007" isPortal="True" destinationWorldId="106746" />
			

			<MoveTo questId="1" x="120.093" y="151.7398" z="0.1000006" pathPrecision="5"/>
			<MoveTo questId="1" x="119.286" y="111.9228" z="0.1000009" pathPrecision="5" />
		</If>
	</If>


    <UseTownPortal questId="1" />
    <LeaveGame reason="Run is done" />
  </Order>
  <KillMonsters>True</KillMonsters>
  <PickupLoot>True</PickupLoot>
</Profile>


[19:03:35.995 N] ####################################################
[19:03:42.923 N] Leaving game, reason: Run is done
[19:03:42.923 N] Profile completed
[19:03:43.170 N] Loaded profile Sarkoth farm profile by Nesox minus some wps
[19:03:43.170 N] Number of games completed:25
[19:03:43.181 N] Last run acquired 0 gold.
[19:03:43.182 N] Current Gold per Hour: 382303


I am looting, still didnt have to sell.
 
Last edited:
Nice plugins, problems for me as my wizard teleports and when comes the time to quit or go in the cellar, if there's no cellar, he just teleports without clearing the zombies that my wizard just teleported through.
So my wizard gets raped :P

Don't know if there's anything that we could tweak...
 
looking forward to test it with Barbarian Leap + Sprint :)
 
Nice plugins, problems for me as my wizard teleports and when comes the time to quit or go in the cellar, if there's no cellar, he just teleports without clearing the zombies that my wizard just teleported through.
So my wizard gets raped :P

Don't know if there's anything that we could tweak...
post ur build and gear so we can help you
 
With DH Sarkoth farm improved by Nesox (updated by botron) and Generc/Mammon routine the bot just stays there and "ticks" a bit. With my Barb it works - testing.


Loot Radius and Kill Radius has to be above 15. For Sakoth at least 30. Monk isn't looting all.

Cheers


ps.

"One does not simply log into Diablo"

Neat slogan you got there Lesnar.
 
Last edited:
Not sure if this is caused by this plugin, but after stashing/selling the bot does not take TP
 
Hi this looks cool

Will you develop for Witch doctor?

Horrify - 4 second 20% speed
Spirit walk - 2 second very fast speed boost i dont know specific number - rune increases by 3 seconed more

thx
 
Nice plugins, problems for me as my wizard teleports and when comes the time to quit or go in the cellar, if there's no cellar, he just teleports without clearing the zombies that my wizard just teleported through.
So my wizard gets raped :P

Don't know if there's anything that we could tweak...

I fixed this for my wiz mashing up two scripts.. hope it helps some1 else

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using Zeta;
using Zeta.Common;
using Zeta.CommonBot;
using Zeta.Common.Plugins;
using Zeta.Internals;
using Zeta.Internals.Actors;
using Zeta.Internals.Service;

//Created by: w3eZle
//mashed artemis with sarkoth kill wait (should defend himself properly outside cellar)
//Credit to: eax (http://www.thebuddyforum.com/members/144149-eax.html) No1KnowsY (http://www.thebuddyforum.com/members/11607-no1knowsy.html)
//Based script on these guys work
//Created Date: 12June2012

namespace Sarkoth
{
    public class Sarkoth : IPlugin
    {
        private bool IsRestarting { get; set; }
        public Version Version { get { return new Version(0, 1); } }
        public string Author { get { return "Phelon"; } }
        public string Description { get { return "Good for Short Profiles."; } }
        public string Name { get { return "Artemis - The Profile Helper" + Version; } }

        //hard coding for now...
        private float originalKillRadius = 40; //store original kill radius
        private float reducedKillRadius = 15; //reduced radius

        private float originalLootRadius = 40; //store original kill radius
        private float reducedLootRadius = 15; //reduced radius
        public bool hasDied { get; set; }
        public int diedTickCount { get; set; }

        public int lastSSTick { get; set; }
        public Window DisplayWindow
        {
            get
            {
                return null;
            }
        }

        public void OnShutdown()
        {
        }

        public void OnEnabled()
        {
            Log("Enabled.");
        }

        public void OnDisabled()
        {
            Log("Disabled.");
        }

        public bool Equals(IPlugin other)
        {
            return (other.Name == Name) && (other.Version == Version);
        }

        private void Log(string message)
        {
            Logging.Write(string.Format("[{0}] {1}", Name, message));
        }


        public void OnInitialize()
        {
 IsRestarting = false;
            lastSSTick = 0;
        }

        public void OnPulse()
        {
            if (hasDied)
            {
                if (System.Environment.TickCount - diedTickCount > 20000)
                {
                    Log("20seconds has passed since you died, turning of the attack");
                    hasDied = false;
                }
            }
            
            // if we're not in game and not in the process of restarting, do nothing
            if (!ZetaDia.IsInGame || !ZetaDia.Me.IsValid || IsRestarting)
            {
                return;
            }

            //Turns on the attack for 20s after you get killed to prevent graveyard ganking
            if (ZetaDia.Actors.Me.HitpointsCurrentPct == 0.00)
            {
                Log("Wooooa, seems like i just died, lets turn on the attack for 20s");
                hasDied = true;
                ProfileManager.CurrentProfile.KillMonsters = true;
                diedTickCount = System.Environment.TickCount;
            }

            //Turning on the attack if you get attacked outside the cellar w3eZle's method
       	    if (ZetaDia.Actors.Me.HitpointsCurrentPct < 0.80 && ProfileManager.CurrentProfile.KillMonsters == false)
            {
                Log("Turning on KillMonsters -Health to low");
                ProfileManager.CurrentProfile.KillMonsters = true;
                return;
            }
            

            //Inside of Dank Cellar, Enable Kill Monsters
            if (ProfileManager.CurrentProfile.KillMonsters == false && ZetaDia.CurrentWorldDynamicId == 1999568897)
            {
                Zeta.CommonBot.Settings.CharacterSettings.Instance.KillRadius = originalKillRadius;
                Zeta.CommonBot.Settings.CharacterSettings.Instance.LootRadius = originalLootRadius;
                ProfileManager.CurrentProfile.KillMonsters = true;
                ProfileManager.CurrentProfile.PickupLoot = true;
                Log("Enabling KillMonsters");
            }

            if (ZetaDia.CurrentWorldDynamicId == 1999503360)
            {
                //Cellar Entrance x="2065.197" y="2481.297" z="27.36784"
                //Location where stop x="2016.163" y="2573.744" z="27.1"
                //Zone in x="1991.747" y="2653.501" z="39.43713"
                var units = ZetaDia.Actors.GetActorsOfType<DiaUnit>(true, false).Where(x => GetDistanceFromMe(x.Position.X, x.Position.Y) <= 20).FirstOrDefault();
                var cellar = ZetaDia.Actors.GetActorsOfType<DiaObject>(true, false).Where(unit => unit.Name.Contains("CellarDoor_Open")).FirstOrDefault();

                if (units != null && units.Distance < 18 && cellar != null
                    && GetDistance(2056.504f, 2540.974f, ZetaDia.Me.Position.X, ZetaDia.Me.Position.Y) < 15f && ProfileManager.CurrentProfile.KillMonsters == false)
                {
                    Zeta.CommonBot.Settings.CharacterSettings.Instance.KillRadius = originalKillRadius;
                    Zeta.CommonBot.Settings.CharacterSettings.Instance.LootRadius = originalLootRadius;
                    ProfileManager.CurrentProfile.KillMonsters = true;
                    ProfileManager.CurrentProfile.PickupLoot = true;

                }
                else
                {
                    Zeta.CommonBot.Settings.CharacterSettings.Instance.KillRadius = reducedKillRadius;
                    Zeta.CommonBot.Settings.CharacterSettings.Instance.LootRadius = reducedLootRadius;
                    ProfileManager.CurrentProfile.KillMonsters = false;
                    ProfileManager.CurrentProfile.PickupLoot = false;
                }
            }
            if (GetDistance(1991.747f, 2653.501f, ZetaDia.Me.Position.X, ZetaDia.Me.Position.Y) < 10)
            {
                PortToEntrance();
            }
        }
        public static void PortToEntrance()
        {
            TeleportTo(1995f, 2603f, ZetaDia.Me.Position.Z);
            Thread.Sleep(450);
            TeleportTo(2025f, 2563f, ZetaDia.Me.Position.Z);
            Thread.Sleep(450);
            TeleportTo(2057f, 2528f, ZetaDia.Me.Position.Z);
            Thread.Sleep(450);
            TeleportTo(2056.504f, 2540.974f, ZetaDia.Me.Position.Z);
            //TeleportTo(2081f, 2487f, ZetaDia.Me.Position.Z);
        }

        private static void TeleportTo(float x, float y, float z)
        {
            var v = new Vector3(x, y, z);
            if (ZetaDia.Me.ActorClass == ActorClass.Wizard)
            {
                ZetaDia.Me.UsePower(SNOPower.Wizard_Teleport, v, ZetaDia.Me.WorldDynamicId, 2, -1);
            }
            if (ZetaDia.Me.ActorClass == ActorClass.DemonHunter)
            {
                ZetaDia.Me.UsePower(SNOPower.DemonHunter_Vault, v, ZetaDia.Me.WorldDynamicId, 2, -1);
            }
        }

        public static float GetDistanceFromMe(float x, float y)
        {
            return (float)Math.Sqrt((ZetaDia.Me.Position.X - x) * (ZetaDia.Me.Position.X - x) + (ZetaDia.Me.Position.Y - y) * (ZetaDia.Me.Position.Y - y));
        }

        public static float GetDistance(float x, float y, float x2, float y2)
        {
            return (float)Math.Sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
        }
    }
}
 
I am currently re writing this plugin to be thread safe and remove the Thread.Sleep(). It was just a quick and dirty fix till I could get other shit working.
 
Back
Top