jack love 0 Posted May 30, 2024 Share Posted May 30, 2024 Hello everyone, I am developing an automation script related to "World of Warcraft" in C# and have encountered some difficulties. When a character dies and enters spirit form, I need to write code to automatically control the character to click the "Release Spirit" button and talk to a specific NPC after releasing the spirit. At present, I am not clear on how to implement this function with C# code. Specifically, I need to achieve the following steps: Detect whether the character is dead and in spirit form. Automatically click the "Release Spirit" button. Move close to the NPC. Engage in dialogue with the NPC. I have tried some basic API calls and event listening, but I have not been successful. I don't know if anyone has experience in this area or can provide some guidance and code examples? If someone can help me, I would be very grateful. Any suggestions, guidance, or code examples would be greatly helpful to me. Thank you! This is my code:(ToPositionAndIncractWithNpc unsuccessful) robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state is wManager.Wow.Bot.States.Resurrect && ObjectManager.Me.IsDead) { if (ObjectManager.Me.Position.DistanceTo2D(new Vector3(-14284.96f, 288.4472f, 32.33204f)) < 2) { var path = new Vector3(-14283.13f, 293.2209f, 31.98451f); MovementManager.Go(PathFinder.FindPath(path),false); MovementManager.StopMove(); var position = new Vector3(-14283.13f, 293.2209f, 31.98451f); int npcEntryId = 1000128; wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId); System.Threading.Thread.Sleep(500); Usefuls.SelectGossipOption(3); System.Threading.Thread.Sleep(3000); } cancelable.Cancel = true; } }; Link to comment https://wrobot.eu/forums/topic/15471-how-to-interact-with-npcs-in-spirit-form%EF%BC%9F/ Share on other sites More sharing options...
Droidz 2748 Posted June 2, 2024 Share Posted June 2, 2024 Hello, By default, GoToTask methods don't work when the character is dead. No tested but code should look like: robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state is wManager.Wow.Bot.States.Resurrect && ObjectManager.Me.IsDead) { if (ObjectManager.Me.Position.DistanceTo2D(new Vector3(-14284.96f, 288.4472f, 32.33204f)) < 2) { var destination = new Vector3(-14283.13f, 293.2209f, 31.98451f); int npcEntryId = 1000128; var goToSuccess = wManager.Wow.Bot.Tasks.GoToTask.ToPosition( destination, 3.5f, false, c => Conditions.InGameAndConnectedAndProductStartedNotInPause); if (goToSuccess) { var npcs = ObjectManager.GetWoWUnitByEntry(npcEntryId); var npcUnit = npcs.Where(n => n.IsValid).OrderBy(n => n.GetDistance).FirstOrDefault(); if (npcUnit != null) { Interact.InteractGameObject(npcUnit.GetBaseAddress); System.Threading.Thread.Sleep(500); Usefuls.SelectGossipOption(3); System.Threading.Thread.Sleep(3000); cancelable.Cancel = true; } } } } }; Link to comment https://wrobot.eu/forums/topic/15471-how-to-interact-with-npcs-in-spirit-form%EF%BC%9F/#findComment-69373 Share on other sites More sharing options...
jack love 0 Posted June 2, 2024 Author Share Posted June 2, 2024 1 hour ago, Droidz said: Hello, By default, GoToTask methods don't work when the character is dead. No tested but code should look like: robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state is wManager.Wow.Bot.States.Resurrect && ObjectManager.Me.IsDead) { if (ObjectManager.Me.Position.DistanceTo2D(new Vector3(-14284.96f, 288.4472f, 32.33204f)) < 2) { var destination = new Vector3(-14283.13f, 293.2209f, 31.98451f); int npcEntryId = 1000128; var goToSuccess = wManager.Wow.Bot.Tasks.GoToTask.ToPosition( destination, 3.5f, false, c => Conditions.InGameAndConnectedAndProductStartedNotInPause); if (goToSuccess) { var npcs = ObjectManager.GetWoWUnitByEntry(npcEntryId); var npcUnit = npcs.Where(n => n.IsValid).OrderBy(n => n.GetDistance).FirstOrDefault(); if (npcUnit != null) { Interact.InteractGameObject(npcUnit.GetBaseAddress); System.Threading.Thread.Sleep(500); Usefuls.SelectGossipOption(3); System.Threading.Thread.Sleep(3000); cancelable.Cancel = true; } } } } }; I really appreciate your help, and I will give the code snippet you provided a try. Link to comment https://wrobot.eu/forums/topic/15471-how-to-interact-with-npcs-in-spirit-form%EF%BC%9F/#findComment-69374 Share on other sites More sharing options...
jack love 0 Posted June 2, 2024 Author Share Posted June 2, 2024 1 hour ago, Droidz said: Hello, By default, GoToTask methods don't work when the character is dead. No tested but code should look like: robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state is wManager.Wow.Bot.States.Resurrect && ObjectManager.Me.IsDead) { if (ObjectManager.Me.Position.DistanceTo2D(new Vector3(-14284.96f, 288.4472f, 32.33204f)) < 2) { var destination = new Vector3(-14283.13f, 293.2209f, 31.98451f); int npcEntryId = 1000128; var goToSuccess = wManager.Wow.Bot.Tasks.GoToTask.ToPosition( destination, 3.5f, false, c => Conditions.InGameAndConnectedAndProductStartedNotInPause); if (goToSuccess) { var npcs = ObjectManager.GetWoWUnitByEntry(npcEntryId); var npcUnit = npcs.Where(n => n.IsValid).OrderBy(n => n.GetDistance).FirstOrDefault(); if (npcUnit != null) { Interact.InteractGameObject(npcUnit.GetBaseAddress); System.Threading.Thread.Sleep(500); Usefuls.SelectGossipOption(3); System.Threading.Thread.Sleep(3000); cancelable.Cancel = true; } } } } }; It's working now, thank you again. Link to comment https://wrobot.eu/forums/topic/15471-how-to-interact-with-npcs-in-spirit-form%EF%BC%9F/#findComment-69375 Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now