Pudge 24 Posted December 15, 2019 Share Posted December 15, 2019 Hi guys, I'm editing Roboalert, or rather I'm trying to add a method thanks to which the bot will fly to a certain point if it meets a certain player (bot catcher) public void LeavePlace() { robotManager.Events.FiniteStateMachineEvents.OnRunState += (FiniteStateMachineEvents.FSMEngineStateCancelableHandler)((engine, state, cancelable) => { Vector3 newpos = new Vector3() { X = 5296.862f, Y = 974.8112f, Z = 447.8605f, Type = "Flying" }; Logging.Write("Leave"); wManager.Wow.Helpers.LongMove.LongMoveByNewThread(newpos); if (wManager.Wow.Helpers.LongMove.IsLongMove) { Thread.Sleep(20000); Logging.Write("летим"); } }); } I tried to put everything in one method, but it turned out - some shit Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/ Share on other sites More sharing options...
Pudge 24 Posted December 15, 2019 Author Share Posted December 15, 2019 tried to use this code but it doesn't work at all maybe instead robotManager.Events.FiniteStateMachineEvents.OnRunState += (FiniteStateMachineEvents.FSMEngineStateCancelableHandler)((engine, state, cancelable) => Will some other code work? Any ideas pls... Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56414 Share on other sites More sharing options...
Pudge 24 Posted December 15, 2019 Author Share Posted December 15, 2019 private void initializeEnemiesList() { if (_settings.enemyAlertEnabled) { string[] enemySplit = _settings.enemyNamesList.Split(','); myEnemyList = new List<string>(enemySplit); } } public void enemyAlert() { var enemiesNearMe = GetEnemiesNearMe(_settings.enemyScanRange, myEnemyList); if (!(ObjectManager.Me.InCombatFlagOnly) && enemiesNearMe.Count > 0 && (DateTime.Now > nextEnemyAlertTime)) { nextEnemyAlertTime = DateTime.Now.AddSeconds(_settings.enemyAlertWaitTime); var enemyNames = ""; foreach (var enemy in enemiesNearMe) { enemyNames += (enemy.Name + " "); } moveto(); Logging.Write("[RoboAlert] Enemies Near Me "); wManager.Wow.Helpers.Lua.LuaDoString("BasicScriptErrors:SetScale(6) if BasicScriptErrors:IsShown() then BasicScriptErrors:Hide() end message('HATER " + enemyNames + "')"); } private void moveto() { wManager.Events.FightEvents.OnFightLoop += delegate (WoWUnit unit, CancelEventArgs cancelable) { var enemiesNearMe = GetEnemiesNearMe(_settings.enemyScanRange, myEnemyList); if (enemiesNearMe.Count > 0) { var toPosition = new Vector3(4286.155, -884.4277, 251.7935, "Flying"); wManager.Wow.Helpers.MovementManager.MoveTo(toPosition); while (wManager.Wow.Helpers.MovementManager.InMoveTo && toPosition.DistanceTo(wManager.Wow.ObjectManager.ObjectManager.Me.Position) > 17) { System.Threading.Thread.Sleep(10000); } } }; } What code could be placed in the body of the method moveto() so that the bot flew to a specific point if the enemy suddenly appeared nearby, And after that the bot returned happiness7 1 Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56416 Share on other sites More sharing options...
Droidz 2742 Posted December 17, 2019 Share Posted December 17, 2019 Hi, No tested but try code like: public void Initialize() { if (_settings.enemyAlertEnabled) { string[] enemySplit = _settings.enemyNamesList.Split(','); myEnemyList = new List<string>(enemySplit); robotManager.Events.FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState += delegate (Engine engine, State state, CancelEventArgs cancelable) { if (!(state is wManager.Wow.Bot.States.IsAttacked)) return; moveto(); }; wManager.Events.FightEvents.OnFightLoop += delegate (WoWUnit unit, CancelEventArgs cancelable) { moveto(); }; } } private void moveto() { wManager.Events.FightEvents.OnFightLoop += delegate (WoWUnit unit, CancelEventArgs cancelable) { var enemiesNearMe = GetEnemiesNearMe(_settings.enemyScanRange, myEnemyList); if (enemiesNearMe.Count > 0) { var toPosition = new Vector3(4286.155, -884.4277, 251.7935, "Flying"); LongMove.LongMoveGo(toPosition); } }; } Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56431 Share on other sites More sharing options...
Pudge 24 Posted December 17, 2019 Author Share Posted December 17, 2019 It’s very strange, sometimes the code works (flies as expected), but in 80% of cases it just farm on, although there is a player next to whom the proc works, sometimes (after loot) it just becomes afk and does nothing. Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56433 Share on other sites More sharing options...
Droidz 2742 Posted December 17, 2019 Share Posted December 17, 2019 in general settings you have option to disable farm during longmove Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56435 Share on other sites More sharing options...
Droidz 2742 Posted December 17, 2019 Share Posted December 17, 2019 you can also try to add while loop in moveto() to exist method only when no enemies near Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56436 Share on other sites More sharing options...
Pudge 24 Posted December 18, 2019 Author Share Posted December 18, 2019 public void Initialize() { if (_settings.enemyAlertEnabled) { string[] enemySplit = _settings.enemyNamesList.Split(','); myEnemyList = new List<string>(enemySplit); robotManager.Events.FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState += delegate (Engine engine, State state, CancelEventArgs cancelable) { if (!(state is wManager.Wow.Bot.States.IsAttacked) || ObjectManager.Me.InCombat || ObjectManager.Me.IsCast || ObjectManager.Me.IsLooting()) return; while (!wManager.Wow.Helpers.Conditions.IsAttackedAndCannotIgnore) { var enemiesNearMe = GetEnemiesNearMe(_settings.enemyScanRange, myEnemyList); if (enemiesNearMe.Count > 0 && GetUnitsNearMe(50).Count == 0) { moveto(); Thread.Sleep(200); } } }; } } private void moveto() { wManager.Events.FightEvents.OnFightLoop += delegate (WoWUnit unit, CancelEventArgs cancelable) { var toPosition = new Vector3(4286.155, -884.4277, 251.7935, "Flying"); LongMove.LongMoveGo(toPosition); }; } public List<WoWUnit> GetUnitsNearMe(int range) { List<WoWUnit> GetUnitsNearMe = wManager.Wow.ObjectManager.ObjectManager.GetWoWUnitHostile().FindAll(u => (double)u.GetDistance <= range); return GetUnitsNearMe; } If the bot is farming and a specific player flies up to it, it simply finishes the mobs and becomes afk (it doesn’t even take loot). Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56442 Share on other sites More sharing options...
Pudge 24 Posted December 18, 2019 Author Share Posted December 18, 2019 I have already spent several days trying to come up with something to implement through the plugin and it seems to me that this venture failed, all that I found and that could work to get the bot to go somewhere during grind (immediately after the battle) or (farm ore or grass), the bot can’t just leave and go where I need to. Maybe this can be implemented somehow differently, for example, to call a special state with a high priority, if a specific player is nearby, but I found even less information regarding the forum states Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56443 Share on other sites More sharing options...
Pudge 24 Posted December 18, 2019 Author Share Posted December 18, 2019 In the project below, I tried to create my own state but failed ... https://mega.nz/#!UNcVBSRC!sroet3sV6t9UWoR7st514C7_KA0WRdY8Vmjre4SpyII Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56444 Share on other sites More sharing options...
Pudge 24 Posted December 18, 2019 Author Share Posted December 18, 2019 just in case I’ll publish the code if you suddenly do not want to download the project Main.cs using robotManager.Helpful; using System.Threading; using robotManager.Products; using wManager.Wow.Enums; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; using System; using System.Collections.Generic; using System.IO; using System.Net.Mail; using System.Net; using System.Configuration; using System.ComponentModel; using System.Text; using robotManager; using System.Threading.Tasks; using robotManager.Events; using robotManager.FiniteStateMachine; using System.Linq; using wManager.Wow.Bot.States; using System.Drawing; public class Main : wManager.Plugin.IPlugin { private bool _isLaunched; public static bool Enemynear; private enum GameState { None, Logged_Out = 0, Logged_In = 1 }; // enemyAlert private DateTime nextEnemyAlertTime; DateTime todaysDates; public List<string> myEnemyList; private bool hasAddedState; public void Initialize() { Logging.Write("[EnemyAlert] Started."); _isLaunched = true; todaysDates = DateTime.Now; //Fixed issue for BN_WHISPER not defined. initializeEnemiesList(); nextEnemyAlertTime = DateTime.Now; doStuffLoop(); FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState += new FiniteStateMachineEvents.FSMEngineStateCancelableHandler(this.FiniteStateMachineEvents_OnBeforeCheckIfNeedToRunState); } private void initializeEnemiesList() { if (_settings.enemyAlertEnabled) { string[] enemySplit = _settings.enemyNamesList.Split(','); myEnemyList = new List<string>(enemySplit); } } public void Dispose() { nextEnemyAlertTime = DateTime.Now; myEnemyList = null; FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState -= new FiniteStateMachineEvents.FSMEngineStateCancelableHandler(this.FiniteStateMachineEvents_OnBeforeCheckIfNeedToRunState); _isLaunched = false; Logging.Write("[RoboAlert] Disposed."); } public void Settings() { _settings.ToForm(); _settings.Save(); } public void doStuffLoop() { while (Products.IsStarted && _isLaunched) { // Products.InPause = true; if (!Products.InPause) { if (_settings.enemyAlertEnabled) GetEnemiesNearMe(); Thread.Sleep(20000); } } } private void FiniteStateMachineEvents_OnBeforeCheckIfNeedToRunState( Engine engine, robotManager.FiniteStateMachine.State state, CancelEventArgs cancelable) { if (this.hasAddedState) return; int priority = engine.States.Find((Predicate<robotManager.FiniteStateMachine.State>)(s => s.GetType() == typeof(Grinding))).Priority; Engine engine1 = engine; LeaveHaters leaveHaters = new LeaveHaters(); leaveHaters.Priority = priority + 5; engine1.AddState((robotManager.FiniteStateMachine.State) leaveHaters); Logging.Write("[TSO]: Profession Training state added.", Logging.LogType.Normal, Color.SteelBlue); engine.States.Sort(); this.hasAddedState = true; } public bool GetEnemiesNearMe() { var enemiesNearMe = GetEnemiesNearMe(_settings.enemyScanRange, myEnemyList); if(!(ObjectManager.Me.InCombatFlagOnly) && enemiesNearMe.Count > 0 && (DateTime.Now > nextEnemyAlertTime)) { nextEnemyAlertTime = DateTime.Now.AddSeconds(_settings.enemyAlertWaitTime); Enemynear = true; var enemyNames = ""; foreach (var enemy in enemiesNearMe) { enemyNames += (enemy.Name + " "); } Logging.Write("[EnemyAllert] Enemies Near Me "); wManager.Wow.Helpers.Lua.LuaDoString("BasicScriptErrors:SetScale(6) if BasicScriptErrors:IsShown() then BasicScriptErrors:Hide() end message('ХЕЙТЕР " + enemyNames + "')"); return Enemynear; } return false; } private List<WoWPlayer> GetEnemiesNearMe(int range, List<string> enemyName) { foreach (var enemy in enemyName) { Logging.Write(enemy); } List<WoWPlayer> enemiesNearMe = ObjectManager.GetObjectWoWPlayer().FindAll(p => p.GetDistance <= range && enemyName.Contains(p.Name) && p.IsAlive); return enemiesNearMe; } private roboAlertSettings _settings { get { try { if (roboAlertSettings.CurrentSetting == null) roboAlertSettings.Load(); return roboAlertSettings.CurrentSetting; } catch { } return new roboAlertSettings(); } set { try { roboAlertSettings.CurrentSetting = value; } catch { } } } [Serializable] public class roboAlertSettings : Settings { public roboAlertSettings() { enemyAlertEnabled = true; enemyNamesList = "Sosuza,player2,player3"; enemyAlertWaitTime = 20; enemyScanRange = 500; } [Setting] [Category("Enemy Alert Settings")] [DisplayName(" Enemy Alert Enabled")] public bool enemyAlertEnabled { get; set; } [Setting] [Category("Enemy Alert Settings")] [DisplayName("Enemy Names")] [Description("Check for specific Enemy by name. For multiple enemies, use a comma seperated list (Do not include spaces). This can be used in either the Elite Name or Normal Enemy Name.")] public string enemyNamesList { get; set; } [Setting] [Category("Enemy Alert Settings")] [DisplayName("Enemy Alert Pulse")] [Description("Time to wait until creating another subsequent alert after receiving an Enemy Alert (seconds). This prevents spamming of the alert")] public int enemyAlertWaitTime { get; set; } [Setting] [Category("Enemy Alert Settings")] [DisplayName("Enemy Scan Range")] [Description("The max range that RoboAlert will scan for enemies near you. (default is 500 units)")] public int enemyScanRange { get; set; } public static roboAlertSettings CurrentSetting { get; set; } public bool Save() { try { return Save(AdviserFilePathAndName("EnemyAlert", ObjectManager.Me.Name + "." + Usefuls.RealmName)); } catch (Exception e) { Logging.WriteError("EnemyAlert > Save(): " + e); return false; } } public static bool Load() { try { if (File.Exists(AdviserFilePathAndName("EnemyAlert", ObjectManager.Me.Name + "." + Usefuls.RealmName))) { CurrentSetting = Load<roboAlertSettings>(AdviserFilePathAndName("EnemyAlert", ObjectManager.Me.Name + "." + Usefuls.RealmName)); return true; } CurrentSetting = new roboAlertSettings(); } catch (Exception e) { Logging.WriteError("EnemyAlert > Load(): " + e); } return false; } } } LeaveHaters.cs using robotManager.Helpful; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Threading; using wManager.Wow.Bot.Tasks; using wManager.Wow.Class; using wManager.Wow.Enums; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; internal class LeaveHaters : robotManager.FiniteStateMachine.State { private int _priority; public override string DisplayName { get { return "Test State"; } } public override int Priority { get { return this._priority; } set { this._priority = 99; } } public override bool NeedToRun { get { return Main.Enemynear && (!ObjectManager.Me.InCombat && !ObjectManager.Me.IsCast && !ObjectManager.Me.IsLooting()); } } public override List<robotManager.FiniteStateMachine.State> NextStates { get { return new List<robotManager.FiniteStateMachine.State>(); } } public override List<robotManager.FiniteStateMachine.State> BeforeStates { get { return new List<robotManager.FiniteStateMachine.State>(); } } public override void Run() { wManager.Events.FightEvents.OnFightLoop += delegate (WoWUnit unit, CancelEventArgs cancelable) { var toPosition = new Vector3(4286.155, -884.4277, 251.7935, "Flying"); LongMove.LongMoveGo(toPosition); }; } } I would be grateful for any help Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56445 Share on other sites More sharing options...
Droidz 2742 Posted December 18, 2019 Share Posted December 18, 2019 You need to call "OnFightLoop +=" (and all code like this) only one time (at start if you can) Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56447 Share on other sites More sharing options...
Pudge 24 Posted December 21, 2019 Author Share Posted December 21, 2019 Wonderful, it finally worked, but he still doesn’t want to mount, he had to add the command manually. You can use it to avoid unwanted players, if this occurs, the bot will stop all actions and fly away to the Crystal Song Forest, the position can be changed, it works only in Northrend plagin.cs scsfl 1 Link to comment https://wrobot.eu/forums/topic/11751-fly-away-if-you-meet-a-specific-player/#findComment-56464 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