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

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

OK Yea he's using Utility, it's a namespace issue.

Open up MinionSupportPlugin.cs

Line 21
Code:
using Utility = Loki.Bot.Logic.Bots.OldGrindBot.Utility;
Change to
Code:
using MSPUtility = Loki.Bot.Logic.Bots.OldGrindBot.Utility;

Then you have to do a replace
Most editors you can press CTRL+H
find
Code:
Coroutine.Sleep(Utility.LatencySafeValue

replace with
Code:
Coroutine.Sleep(MSPUtility .LatencySafeValue

And that should resolve it.
LMK when you try it on new bot update.
 
any possibility to provide golem support in the next beta-builds?

every update destroys golem combat routine
 
Hey, trying out your plugin now. Will let you know if I have any feedback.

Any chance of expanding this to include Vaal Summon Skeletons? With an option to use when encountering rare or save for boss?
Actually i want to look into that as well, Vaal Skills. But, since the BotRoutine uses them itself, might need to figure out how to block the default routine to cast it. Maybe the others have some idea about that.

Edit:

Ok getting this error spammed:

Code:
Exception during plugin Tick.System.InvalidOperationException: This function can only be used from within a coroutine
   at Buddy.Coroutines.Coroutine.‏‪‏‬‬​‎‪​‫*‬*‏‎*‪‫‎**‎‬‬‫‪‪​*()
   at Buddy.Coroutines.Coroutine.Sleep(TimeSpan timeout)
   at Buddy.Coroutines.Coroutine.Sleep(Int32 milliseconds)
   at MinionSupportPlugin.MinionSupportPlugin.UseSupportSkillAtPosition(Int32 skillSlot, String skillName, Vector2i pos) in ...Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 194
   at MinionSupportPlugin.MinionSupportPlugin.UseSupportSkill(Int32 skillSlot, String skillName) in ...Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 182
   at MinionSupportPlugin.MinionSupportPlugin.Tick() in ...Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 361
   at Loki.Bot.PluginManager.​*​‪**‎‎‏*‬**‎‪‬*‬**​‫​​‪*‪(lPlugin )

Only minions I have are zombies and a flame golem (matched up its skill slot correctly, as it summons it), with flesh offering ticked as well.

After I got this error I edited the .cs file on line 194 to go from "Coroutine.Sleep(Utility.LatencySafeValue(150));" to "Coroutine.Sleep(Loki.Bot.Logic.Bots.OldGrindBot.Utility.LatencySafeValue(150));" as per DBF comments earlier, but it is still the same error.

It seems to only get this error after it casts flesh offering.

Have you downloaded the latest Upload?
 
After change Utility to MSPUtility...I try Immortal Call... They are config with 5000 ms but when I run the bot they use Immortal Call infinitely, and walking stuck on everything, soo they spamming this:
Exception during plugin Tick.System.InvalidOperationException: This function can only be used from within a coroutine
at Buddy.Coroutines.Coroutine.‫**‪‏**‬‏*‪*‪​‬‏‫​*‏‪**()
at Buddy.Coroutines.Coroutine.Sleep(TimeSpan timeout)
at Buddy.Coroutines.Coroutine.Sleep(Int32 milliseconds)
at MinionSupportPlugin.MinionSupportPlugin.UseSupportSkillAtPosition(Int32 skillSlot, String skillName, Vector2i pos) in c:\Users\User\Desktop\Skype\Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 194
at MinionSupportPlugin.MinionSupportPlugin.UseSupportSkill(Int32 skillSlot, String skillName) in c:\Users\User\Desktop\Skype\Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 182
at MinionSupportPlugin.MinionSupportPlugin.Tick() in c:\Users\User\Desktop\Skype\Plugins\MinionSupportPlugin\MinionSupportPlugin.cs:line 426
at Loki.Bot.PluginManager.*‬‪*‏‪*‬*‪*‪*‏‬‪‬​‫‏***‎*‬**​*(IPlugin )

Thanks guys!
 
After change Utility to MSPUtility...I try Immortal Call... They are config with 5000 ms but when I run the bot they use Immortal Call infinitely, and walking stuck on everything, soo they spamming this:


Thanks guys!

Did you download the latest version? Seems like you have an older version, that has an error in it with namespaces. I am running the latest version without this error.

EDIT: I see there is indeed still an error, let me fix that quickly. Will give you another version... damn debugging.. fix a bug, have 10 more - lol
 
Last edited:
Did you download the latest version? Seems like you have an older version, that has an error in it with namespaces. I am running the latest version without this error.

EDIT: I see there is indeed still an error, let me fix that quickly. Will give you another version... damn debugging.. fix a bug, have 10 more - lol

hahaha... no problem man...other thing...In the options, for me, they show two times Summon Ice Golem...Anyway...Thanks
 
hahaha... no problem man...other thing...In the options, for me, they show two times Summon Ice Golem...Anyway...Thanks

Updated the plugin, moved all logic to coroutine, renamed Chaos Golem. Please Download again.
Immortal Call does not throw an error anymore. Doing some more testing this evening.
 
Just more one question...They use Immortal Call when have monster on screen right...Where I can change to use just when dont have monster on screen? I want test something... Thanks.
 
Just more one question...They use Immortal Call when have monster on screen right...Where I can change to use just when dont have monster on screen? I want test something... Thanks.

Remove or comment line 209. Don't forget to remove "&&" on line 208..
 
Can this be updated? Bot doesn't fill these functions, very useful plugin

It seems to be a namespace error from the log, something needs to be replaced?

error CS0234: The type or namespace name 'Bot' does not exist in the namespace 'Loki.Bot.Logic' (are you missing an assembly reference?)
 
Last edited:
Not too hard to add some of the stuff yourself to OldRoutine.cs.

Offering Spells

Ctr+f -> // Auto-set, you do not have to change these.

Add in this line:

Code:
private int _boneOfferingSlot = -1;

Ctrl+f -> if (_needsUpdate)

Add in this line:

Code:
_boneOfferingSlot = -1;

Scroll down a little bit until you see the lines with "if (IsCastableHelper(xx))"

Add in this line:

Code:
var bo = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Bone Offering");
				if (IsCastableHelper(bo))
				{
					_boneOfferingSlot = bo.Slot;
				}

Scroll down to line 1800-1900ish where the Logic is.

Add in this line:

Code:
// Bone Offering Support
				if (_boneOfferingSlot != -1)
				{
					var skill = LokiPoe.InGameState.SkillBarHud.Slot(_boneOfferingSlot);
					if (skill.CanUse() && !LokiPoe.Me.HasAura("Bone Offering"))
					{
						var target = BestDeadTarget;
						if (target != null)
						{
							await DisableAlwaysHiglight();
							await Coroutines.FinishCurrentAction();
							Log.InfoFormat("[Logic] using {0} on {1}.", skill.Name, target.Name);
							
							var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_boneOfferingSlot, false, target.Position);
						
							if (err1 == LokiPoe.InGameState.UseResult.None)
							{
								await Coroutines.LatencyWait();
								await Coroutines.FinishCurrentAction(false);
								await Coroutines.LatencyWait();
							
								return true;
							}
							
							Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
						}
						
						
					}
				}

Now you have Bone Offering support. You can customize the check on the 5th line, right there it just checks if you can use the skill (there's a corpse around) and that you don't have the Bone Offering buff already. If you're not a Necromancer you can change it to check to see if you're minions have it instead.

For Flesh Offering you'd just have to retype all of that but instead of like.. "private int _boneOfferingSlot = -1;" you could do "private int _fleshOfferingSlot = -1;" etc etc etc.
 
Not too hard to add some of the stuff yourself to OldRoutine.cs.

Offering Spells

Ctr+f -> // Auto-set, you do not have to change these.

Add in this line:

Code:
private int _boneOfferingSlot = -1;

Ctrl+f -> if (_needsUpdate)

Add in this line:

Code:
_boneOfferingSlot = -1;

Scroll down a little bit until you see the lines with "if (IsCastableHelper(xx))"

Add in this line:

Code:
var bo = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Bone Offering");
				if (IsCastableHelper(bo))
				{
					_boneOfferingSlot = bo.Slot;
				}

Scroll down to line 1800-1900ish where the Logic is.

Add in this line:

Code:
// Bone Offering Support
				if (_boneOfferingSlot != -1)
				{
					var skill = LokiPoe.InGameState.SkillBarHud.Slot(_boneOfferingSlot);
					if (skill.CanUse() && !LokiPoe.Me.HasAura("Bone Offering"))
					{
						var target = BestDeadTarget;
						if (target != null)
						{
							await DisableAlwaysHiglight();
							await Coroutines.FinishCurrentAction();
							Log.InfoFormat("[Logic] using {0} on {1}.", skill.Name, target.Name);
							
							var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_boneOfferingSlot, false, target.Position);
						
							if (err1 == LokiPoe.InGameState.UseResult.None)
							{
								await Coroutines.LatencyWait();
								await Coroutines.FinishCurrentAction(false);
								await Coroutines.LatencyWait();
							
								return true;
							}
							
							Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
						}
						
						
					}
				}

Now you have Bone Offering support. You can customize the check on the 5th line, right there it just checks if you can use the skill (there's a corpse around) and that you don't have the Bone Offering buff already. If you're not a Necromancer you can change it to check to see if you're minions have it instead.

For Flesh Offering you'd just have to retype all of that but instead of like.. "private int _boneOfferingSlot = -1;" you could do "private int _fleshOfferingSlot = -1;" etc etc etc.


Thanks, it seems to be working but I think it doesnt check if minions have flesh offering, it just seems to spam it until all corpses are gone :D

What needs to be changed to have it cast only if the minions don't have the buff?
 
Code:
Please read the following guide before using this program:
https://www.thebuddyforum.com/exilebuddy-forum/247880-exilebuddy-beta-release-thread-2-3-0-a.html
[Application_DispatcherUnhandledException] Unhandled exceptionSystem.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\leyzr\Desktop\extrastuff\exbud\3rdParty\Summoner\SettingsGui.xaml'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at Summoner.Summoner.get_Control() in C:\Users\leyzr\Desktop\extrastuff\exbud\3rdParty\_CONFIGS_\Default\Summoner\Content-336932640\Summoner.cs:line 88
   at Exilebuddy.PluginTemplateGui.‎***‎​‪‎‪‪‏‪‎‏*​*‪‬*‏‪*(IPlugin )
   at Exilebuddy.NewSettingsWindow.‎‎*​​​‎‫**‪**​*‬**‏‏‫‬‫‎**​‏*‎​‪*(Object , RoutedPropertyChangedEventArgs`1 )
   at System.Windows.RoutedPropertyChangedEventArgs`1.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
   at System.Windows.Controls.TreeView.OnSelectedItemChanged(RoutedPropertyChangedEventArgs`1 e)
   at System.Windows.Controls.TreeView.ChangeSelection(Object data, TreeViewItem container, Boolean selected)
   at System.Windows.Controls.TreeViewItem.Select(Boolean selected)
   at System.Windows.Controls.TreeViewItem.OnGotFocus(RoutedEventArgs e)
   at System.Windows.UIElement.IsFocused_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value)
   at System.Windows.Input.FocusManager.OnFocusedElementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.Input.FocusManager.SetFocusedElement(DependencyObject element, IInputElement value)
   at System.Windows.Input.KeyboardNavigation.UpdateFocusedElement(DependencyObject focusTarget)
   at System.Windows.FrameworkElement.OnGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
   at System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp)
   at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
   at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
   at System.Windows.Input.KeyboardDevice.Focus(IInputElement element)
   at System.Windows.UIElement.Focus()
   at System.Windows.Controls.TreeViewItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

I'm getting this error. just letting you know :)

Ah The way it's coded i have to extract it. alright then.

EDIT: I am getting some issues with flesh offering flat out not working though. unable to provide log though. very easily repeatable
 
Last edited:
Not too hard to add some of the stuff yourself to OldRoutine.cs.

Offering Spells

Ctr+f -> // Auto-set, you do not have to change these.

Add in this line:

Code:
private int _boneOfferingSlot = -1;

Ctrl+f -> if (_needsUpdate)

Add in this line:

Code:
_boneOfferingSlot = -1;

Scroll down a little bit until you see the lines with "if (IsCastableHelper(xx))"

Add in this line:

Code:
var bo = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Bone Offering");
				if (IsCastableHelper(bo))
				{
					_boneOfferingSlot = bo.Slot;
				}

Scroll down to line 1800-1900ish where the Logic is.

Add in this line:

Code:
// Bone Offering Support
				if (_boneOfferingSlot != -1)
				{
					var skill = LokiPoe.InGameState.SkillBarHud.Slot(_boneOfferingSlot);
					if (skill.CanUse() && !LokiPoe.Me.HasAura("Bone Offering"))
					{
						var target = BestDeadTarget;
						if (target != null)
						{
							await DisableAlwaysHiglight();
							await Coroutines.FinishCurrentAction();
							Log.InfoFormat("[Logic] using {0} on {1}.", skill.Name, target.Name);
							
							var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_boneOfferingSlot, false, target.Position);
						
							if (err1 == LokiPoe.InGameState.UseResult.None)
							{
								await Coroutines.LatencyWait();
								await Coroutines.FinishCurrentAction(false);
								await Coroutines.LatencyWait();
							
								return true;
							}
							
							Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
						}
						
						
					}
				}

Now you have Bone Offering support. You can customize the check on the 5th line, right there it just checks if you can use the skill (there's a corpse around) and that you don't have the Bone Offering buff already. If you're not a Necromancer you can change it to check to see if you're minions have it instead.

For Flesh Offering you'd just have to retype all of that but instead of like.. "private int _boneOfferingSlot = -1;" you could do "private int _fleshOfferingSlot = -1;" etc etc etc.

Just an update for anyone who is interested, I added the above to Old Routine and it is working flawlessly. Bear in mind, this only works because my character has Mistress of Sacrifice. Without it, you'd need to check a minion somehow, which the writer did not go into detail on how.

Had to do this because this plugin was no longer working for me after 2.5 update.
 
I've tried putting this in 3.0 but it doesn't work, do you have any updated version of the code?

Not too hard to add some of the stuff yourself to OldRoutine.cs.

Offering Spells

Ctr+f -> // Auto-set, you do not have to change these.

Add in this line:

Code:
private int _boneOfferingSlot = -1;

Ctrl+f -> if (_needsUpdate)

Add in this line:

Code:
_boneOfferingSlot = -1;

Scroll down a little bit until you see the lines with "if (IsCastableHelper(xx))"

Add in this line:

Code:
var bo = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Bone Offering");
                if (IsCastableHelper(bo))
                {
                    _boneOfferingSlot = bo.Slot;
                }

Scroll down to line 1800-1900ish where the Logic is.

Add in this line:

Code:
// Bone Offering Support
                if (_boneOfferingSlot != -1)
                {
                    var skill = LokiPoe.InGameState.SkillBarHud.Slot(_boneOfferingSlot);
                    if (skill.CanUse() && !LokiPoe.Me.HasAura("Bone Offering"))
                    {
                        var target = BestDeadTarget;
                        if (target != null)
                        {
                            await DisableAlwaysHiglight();
                            await Coroutines.FinishCurrentAction();
                            Log.InfoFormat("[Logic] using {0} on {1}.", skill.Name, target.Name);
                           
                            var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_boneOfferingSlot, false, target.Position);
                       
                            if (err1 == LokiPoe.InGameState.UseResult.None)
                            {
                                await Coroutines.LatencyWait();
                                await Coroutines.FinishCurrentAction(false);
                                await Coroutines.LatencyWait();
                           
                                return true;
                            }
                           
                            Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
                        }
                       
                       
                    }
                }

Now you have Bone Offering support. You can customize the check on the 5th line, right there it just checks if you can use the skill (there's a corpse around) and that you don't have the Bone Offering buff already. If you're not a Necromancer you can change it to check to see if you're minions have it instead.

For Flesh Offering you'd just have to retype all of that but instead of like.. "private int _boneOfferingSlot = -1;" you could do "private int _fleshOfferingSlot = -1;" etc etc etc.
 
Back
Top