From 29238793065b7ee95cd24d49c8a8a0960c21428c Mon Sep 17 00:00:00 2001 From: Date: Sun, 3 Dec 2017 22:55:23 -0800 Subject: [PATCH] Updated debris logic for twigs/stones/weeds to use better path finding. --- StarAI/StarAI/Commands.cs | 6 +- StarAI/StarAI/ExecutionCore/TaskList.cs | 73 +++- StarAI/StarAI/TaskCore/ChestLogic.cs | 2 +- .../TaskCore/DebrisLogic/DebrisLogic.cs | 337 +++++++++++++----- 4 files changed, 331 insertions(+), 87 deletions(-) diff --git a/StarAI/StarAI/Commands.cs b/StarAI/StarAI/Commands.cs index ed9674d0..20f725aa 100644 --- a/StarAI/StarAI/Commands.cs +++ b/StarAI/StarAI/Commands.cs @@ -233,7 +233,7 @@ namespace StarAI return; } } - DebrisLogic.getAllSticksToChopRadius(Game1.player.currentLocation); + DebrisLogic.getAllSticksToChop(Game1.player.currentLocation); } @@ -257,7 +257,7 @@ namespace StarAI return; } } - DebrisLogic.getAllStonestoBreakRadius(Game1.player.currentLocation); + DebrisLogic.getAllStonesToBreak(Game1.player.currentLocation); } public static void cutAllWeeds(string s, string[] args) @@ -270,7 +270,7 @@ namespace StarAI return; } } - DebrisLogic.getAllWeedsToCutRadius(Game1.player.currentLocation); + DebrisLogic.getAllWeedsToCut(Game1.player.currentLocation); } public static void runTasks(string s, string[] args) diff --git a/StarAI/StarAI/ExecutionCore/TaskList.cs b/StarAI/StarAI/ExecutionCore/TaskList.cs index 8df02320..1913bb4c 100644 --- a/StarAI/StarAI/ExecutionCore/TaskList.cs +++ b/StarAI/StarAI/ExecutionCore/TaskList.cs @@ -1,4 +1,5 @@ -using StarAI.PathFindingCore; +using Microsoft.Xna.Framework; +using StarAI.PathFindingCore; using StarAI.PathFindingCore.WaterLogic; using StarAI.TaskCore.MapTransitionLogic; using StardewModdingAPI; @@ -6,6 +7,7 @@ using StardewValley; using StardewValley.Tools; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -280,8 +282,75 @@ namespace StarAI.ExecutionCore ModCore.CoreMonitor.Log("SOMETHING WENT WRONG WHEN TRYING TO GO TO" + v.taskMetaData.locationPrerequisite.location.name, LogLevel.Error); return false; } + task.runTask(); - return true; + object[] arr = (object[])v.objectParameterDataArray; + List path; + try + { + foreach (var thing in arr) + { + if (thing == null) continue; + ModCore.CoreMonitor.Log("Thing:" + thing.ToString()); + } + List> okList = (arr[0] as List>); + List smallList = okList.ElementAt(okList.Count - 1); + TileNode tile = smallList.ElementAt(smallList.Count - 1); + //arr[0] = WarpGoal.pathToWorldTileReturnTask(Game1.player.currentLocation, v.taskMetaData.locationPrerequisite.location.name,(int) tile.tileLocation.X,(int) tile.tileLocation.Y); + TileNode s = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); + s.fakePlacementAction(Game1.player.currentLocation, Game1.player.getTileX(), Game1.player.getTileY()); + + path = Utilities.getIdealPath(tile, s); + } + catch(Exception err) + { + foreach(var thing in arr) + { + if (thing == null) continue; + ModCore.CoreMonitor.Log("Thing2:"+thing.ToString()); + } + Utilities.tileExceptionList.Clear(); + List smallList = (arr[1] as List); + TileNode tile = smallList.ElementAt(smallList.Count-1); + ModCore.CoreMonitor.Log("LOC:" + tile.thisLocation + tile.thisLocation); + + + Warp lastWarp = new Warp(-1, -1, "Grahm", -1, -1, false); + GameLocation fakeLocation = Game1.getLocationFromName(Game1.player.currentLocation.name); + foreach(var ok in fakeLocation.warps) + { + if (ok.X == Game1.player.getTileX() && ok.Y == Game1.player.getTileY() + 1) lastWarp = ok; + } + + ModCore.CoreMonitor.Log("MYLOC:" + lastWarp.TargetName + lastWarp.TargetX +" "+lastWarp.TargetY); + + + + + + //arr[0] = WarpGoal.pathToWorldTileReturnTask(Game1.player.currentLocation, v.taskMetaData.locationPrerequisite.location.name,(int) tile.tileLocation.X,(int) tile.tileLocation.Y); + TileNode s = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); + s.fakePlacementAction(Game1.getLocationFromName(lastWarp.TargetName), lastWarp.TargetX, lastWarp.TargetY); + + path = Utilities.getIdealPath(tile, s); + + + + //arr[0] = s; + } + + ModCore.CoreMonitor.Log("PATHCOUNT:"+path.Count); + + foreach (var piece in path) + { + + ModCore.CoreMonitor.Log("Location: "+piece.thisLocation +" TilePoisition: "+ piece.tileLocation); + } + + //arr[1] = path; + //v.objectParameterDataArray = arr; + PathFindingLogic.calculateMovement(path); + return false; } diff --git a/StarAI/StarAI/TaskCore/ChestLogic.cs b/StarAI/StarAI/TaskCore/ChestLogic.cs index afd6f37e..dfbd680a 100644 --- a/StarAI/StarAI/TaskCore/ChestLogic.cs +++ b/StarAI/StarAI/TaskCore/ChestLogic.cs @@ -62,7 +62,7 @@ namespace StarAI.TaskCore object[] objList = new object[2]; objList[0] = v; // ExecutionCore.TaskList.taskList.Add(new Task(new Action(waterSingleCrop), obj)); - ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(pathToSingleChest, objList, new ExecutionCore.TaskMetaData("Path to chest for seeds",new ExecutionCore.TaskPrerequisites.LocationPrerequisite(v.thisLocation), null, null, new ExecutionCore.TaskPrerequisites.InventoryFullPrerequisite(true))); + ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(pathToSingleChest, objList, new ExecutionCore.TaskMetaData("GetSeasonalSeedsFromChest",new ExecutionCore.TaskPrerequisites.LocationPrerequisite(v.thisLocation), null, null, new ExecutionCore.TaskPrerequisites.InventoryFullPrerequisite(true))); if (task.taskMetaData.cost == Int32.MaxValue) { Utilities.clearExceptionListWithNames(true); diff --git a/StarAI/StarAI/TaskCore/DebrisLogic/DebrisLogic.cs b/StarAI/StarAI/TaskCore/DebrisLogic/DebrisLogic.cs index f55900e4..9cac7571 100644 --- a/StarAI/StarAI/TaskCore/DebrisLogic/DebrisLogic.cs +++ b/StarAI/StarAI/TaskCore/DebrisLogic/DebrisLogic.cs @@ -19,6 +19,8 @@ namespace StarAI.TaskCore.DebrisLogic public static List weedsToCut = new List(); public static List treesToChop = new List(); + //Stick Logic + #region public static void getAllSticksToChop(GameLocation location) { object[] arr = new object[1]; @@ -37,11 +39,11 @@ namespace StarAI.TaskCore.DebrisLogic GameLocation location = (GameLocation)objArr[0]; foreach (var v in location.objects) { - ModCore.CoreMonitor.Log(v.Value.name); + // ModCore.CoreMonitor.Log(v.Value.name); if (v.Value.name == "Twig") { - ModCore.CoreMonitor.Log(v.Value.name,LogLevel.Warn); + // ModCore.CoreMonitor.Log(v.Value.name,LogLevel.Warn); TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); //t.placementAction(Game1.currentLocation, (int)v.Key.X * Game1.tileSize, (int)v.Key.Y * Game1.tileSize); t.fakePlacementAction(Game1.currentLocation, (int)v.Key.X, (int)v.Key.Y); @@ -53,35 +55,41 @@ namespace StarAI.TaskCore.DebrisLogic int ok = 0; + + List tempList = new List(); foreach (var v in sticksToChop) { + tempList.Add(v); + } + + object[] objList = new object[10]; + objList[0] = tempList; - object[] objList = new object[2]; - objList[0] = v; // ExecutionCore.TaskList.taskList.Add(new Task(new Action(waterSingleCrop), obj)); StardewValley.Tools.Axe w = new StardewValley.Tools.Axe(); ModCore.CoreMonitor.Log("Processing twig:" + ok.ToString() + " / " + twingCount.ToString()); ok++; - ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(chopSingleStick, objList, new ExecutionCore.TaskMetaData("Chop Single Stick",new LocationPrerequisite(v.thisLocation), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); - if (task.taskMetaData.cost == Int32.MaxValue) + ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(chopSingleStick, objList, new ExecutionCore.TaskMetaData("Chop Single Stick",new LocationPrerequisite(location), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); + + objList[1] = task.taskMetaData.pathsToTake[0]; + objList[2] = task.taskMetaData.pathsToTake[0].ElementAt(0); + task.objectParameterDataArray = objList; + + if (task.taskMetaData.cost == Int32.MaxValue) { - System.Threading.Thread.Sleep(1000); + Utilities.tileExceptionList.Clear(); Utilities.clearExceptionListWithNames(true); - continue; + return; } ModCore.CoreMonitor.Log("TASK COST:" + task.taskMetaData.cost.ToString()); - if (task.taskMetaData.cost.ToString()=="2.147484E+09") - { - ModCore.CoreMonitor.Log("OHH THAT's BAD"); - System.Threading.Thread.Sleep(2000); - } + ExecutionCore.TaskList.taskList.Add(task); ModCore.CoreMonitor.Log("TASK LIST COUNT:"+ExecutionCore.TaskList.taskList.Count.ToString()); Utilities.clearExceptionListWithName(true, "Child"); Utilities.clearExceptionListWithName("Child"); // waterSingleCrop(v); - } + sticksToChop.Clear(); } @@ -175,7 +183,7 @@ namespace StarAI.TaskCore.DebrisLogic object[] objArray=(object[])obj; - TileNode v = (TileNode)objArray[0]; + TileNode v = (TileNode)objArray[2]; //List correctPath = Utilities.pathStuff(v);//(List)objArray[1]; List correctPath =(List)objArray[1]; foreach (var goodTile in correctPath) @@ -189,21 +197,68 @@ namespace StarAI.TaskCore.DebrisLogic - if (v.tileLocation.X < Game1.player.getTileX()) + Vector2 tileLocation = v.tileLocation; + ModCore.CoreMonitor.Log(tileLocation.ToString()); + StardewValley.Object sObject = new StardewValley.Object(); + try { - Game1.player.faceDirection(3); + ModCore.CoreMonitor.Log("once"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].name == "Twig") + { + ModCore.CoreMonitor.Log("onceGod"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)]; + Game1.player.faceDirection(3); + } } - else if (v.tileLocation.X > Game1.player.getTileX()) + catch (Exception err) { - Game1.player.faceDirection(1); + } - else if (v.tileLocation.Y < Game1.player.getTileY()) + try { - Game1.player.faceDirection(0); + ModCore.CoreMonitor.Log("twice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].name == "Twig") + { + ModCore.CoreMonitor.Log("twiceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)]; + Game1.player.faceDirection(1); + } } - else if (v.tileLocation.Y > Game1.player.getTileY()) + catch (Exception err) { - Game1.player.faceDirection(2); + + } + try + { + ModCore.CoreMonitor.Log("thrice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)].name == "Twig") + { + ModCore.CoreMonitor.Log("thriceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)]; + Game1.player.faceDirection(0); + } + } + catch (Exception err) + { + + } + try + { + ModCore.CoreMonitor.Log("fourth"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].name == "Twig") + { + ModCore.CoreMonitor.Log("fourthGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)]; + Game1.player.faceDirection(2); + } + } + catch (Exception err) + { + } foreach (var item in Game1.player.items) { @@ -213,10 +268,10 @@ namespace StarAI.TaskCore.DebrisLogic } } bool move = false; - StardewValley.Object twig = v.thisLocation.objects[v.tileLocation]; - while ((twig.name=="Twig")) + // StardewValley.Object twig = v.thisLocation.objects[v.tileLocation]; + while ((sObject.name=="Twig")) { - if (!v.thisLocation.isObjectAt((int)v.tileLocation.X*Game1.tileSize, (int)v.tileLocation.Y*Game1.tileSize)) break; + if (!v.thisLocation.isObjectAt((int)sObject.tileLocation.X * Game1.tileSize, (int)sObject.tileLocation.Y * Game1.tileSize)) break; //CHANNGE THIS LINE if (WindowsInput.InputSimulator.IsKeyDown(WindowsInput.VirtualKeyCode.VK_C) == false) WindowsInput.InputSimulator.SimulateKeyDown(WindowsInput.VirtualKeyCode.VK_C); Vector2 center = new Vector2(); @@ -263,7 +318,10 @@ namespace StarAI.TaskCore.DebrisLogic } WindowsInput.InputSimulator.SimulateKeyUp(WindowsInput.VirtualKeyCode.VK_C); } + #endregion + //Stone logic + #region public static void getAllStonesToBreak(GameLocation location) @@ -285,11 +343,11 @@ namespace StarAI.TaskCore.DebrisLogic string targetName = "Stone"; foreach (var v in location.objects) { - ModCore.CoreMonitor.Log(v.Value.name); + // ModCore.CoreMonitor.Log(v.Value.name); if (v.Value.name == targetName) { - ModCore.CoreMonitor.Log(v.Value.name, LogLevel.Warn); + //ModCore.CoreMonitor.Log(v.Value.name, LogLevel.Warn); TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); //t.placementAction(Game1.currentLocation, (int)v.Key.X * Game1.tileSize, (int)v.Key.Y * Game1.tileSize); t.fakePlacementAction(Game1.currentLocation, (int)v.Key.X, (int)v.Key.Y); @@ -301,27 +359,33 @@ namespace StarAI.TaskCore.DebrisLogic int ok = 0; + List tempList = new List(); foreach (var v in stonesToBreak) { + tempList.Add(v); + } - object[] objList = new object[2]; - objList[0] = v; + object[] objList = new object[10]; + objList[0] = tempList; // ExecutionCore.TaskList.taskList.Add(new Task(new Action(waterSingleCrop), obj)); StardewValley.Tools.Pickaxe w = new StardewValley.Tools.Pickaxe(); ModCore.CoreMonitor.Log("Processing :"+ targetName+" : "+ ok.ToString() + " / " + twingCount.ToString()); ok++; - ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(chopSingleStick, objList, new ExecutionCore.TaskMetaData("Break Single Rock", new LocationPrerequisite(v.thisLocation), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); - if (task.taskMetaData.cost == Int32.MaxValue) + ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(breakSingleStone, objList, new ExecutionCore.TaskMetaData("Break Single Rock", new LocationPrerequisite(location), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); + objList[1] = task.taskMetaData.pathsToTake[0]; + objList[2] = task.taskMetaData.pathsToTake[0].ElementAt(0); + task.objectParameterDataArray = objList; + if (task.taskMetaData.cost == Int32.MaxValue) { - System.Threading.Thread.Sleep(1000); + Utilities.tileExceptionList.Clear(); Utilities.clearExceptionListWithNames(true); - continue; + return; } ExecutionCore.TaskList.taskList.Add(task); // Utilities.clearExceptionListWithName(true, "Child"); Utilities.clearExceptionListWithName("Child"); // waterSingleCrop(v); - } + stonesToBreak.Clear(); } @@ -407,7 +471,7 @@ namespace StarAI.TaskCore.DebrisLogic public static void breakSingleStone(TileNode v, List path) { object[] obj = new object[2]; - obj[0] = v; + obj[2] = v; obj[1] = path; breakSingleStone(obj); } @@ -419,7 +483,7 @@ namespace StarAI.TaskCore.DebrisLogic object[] objArray = (object[])obj; - TileNode v = (TileNode)objArray[0]; + TileNode v = (TileNode)objArray[2]; //List correctPath = Utilities.pathStuff(v);//(List)objArray[1]; List correctPath = (List)objArray[1]; foreach (var goodTile in correctPath) @@ -432,22 +496,68 @@ namespace StarAI.TaskCore.DebrisLogic PathFindingLogic.calculateMovement(correctPath); + Vector2 tileLocation = v.tileLocation; + ModCore.CoreMonitor.Log(tileLocation.ToString()); + StardewValley.Object sObject = new StardewValley.Object(); + try + { + ModCore.CoreMonitor.Log("once"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].Name); + if (v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].Name == "Stone") + { + ModCore.CoreMonitor.Log("onceGod"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)]; + Game1.player.faceDirection(3); + } + } + catch (Exception err) + { - if (v.tileLocation.X < Game1.player.getTileX()) - { - Game1.player.faceDirection(3); } - else if (v.tileLocation.X > Game1.player.getTileX()) + try { - Game1.player.faceDirection(1); + ModCore.CoreMonitor.Log("twice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].Name); + if (v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].Name == "Stone") + { + ModCore.CoreMonitor.Log("twiceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)]; + Game1.player.faceDirection(1); + } } - else if (v.tileLocation.Y < Game1.player.getTileY()) + catch (Exception err) { - Game1.player.faceDirection(0); + } - else if (v.tileLocation.Y > Game1.player.getTileY()) + try { - Game1.player.faceDirection(2); + ModCore.CoreMonitor.Log("thrice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)].Name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)].Name == "Stone") + { + ModCore.CoreMonitor.Log("thriceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y - 1)]; + Game1.player.faceDirection(0); + } + } + catch (Exception err) + { + + } + try + { + ModCore.CoreMonitor.Log("fourth"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].Name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].Name == "Stone") + { + ModCore.CoreMonitor.Log("fourthGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)]; + Game1.player.faceDirection(2); + } + } + catch (Exception err) + { + } foreach (var item in Game1.player.items) { @@ -457,10 +567,11 @@ namespace StarAI.TaskCore.DebrisLogic } } bool move = false; - StardewValley.Object twig = v.thisLocation.objects[v.tileLocation]; - while ((twig.name == "Stone")) + //StardewValley.Object twig = v.thisLocation.objects[v.tileLocation]; + ModCore.CoreMonitor.Log("NAME"+sObject.name); + while ((sObject.name == "Stone")) { - if (!v.thisLocation.isObjectAt((int)v.tileLocation.X * Game1.tileSize, (int)v.tileLocation.Y * Game1.tileSize)) break; + if (!v.thisLocation.isObjectAt((int)sObject.tileLocation.X * Game1.tileSize, (int)sObject.tileLocation.Y * Game1.tileSize)) break; //CHANNGE THIS LINE if (WindowsInput.InputSimulator.IsKeyDown(WindowsInput.VirtualKeyCode.VK_C) == false) WindowsInput.InputSimulator.SimulateKeyDown(WindowsInput.VirtualKeyCode.VK_C); Vector2 center = new Vector2(); @@ -504,8 +615,10 @@ namespace StarAI.TaskCore.DebrisLogic WindowsInput.InputSimulator.SimulateKeyUp(WindowsInput.VirtualKeyCode.VK_C); } + #endregion - + //Weed Logic + #region public static void getAllWeedsToCut(GameLocation location) { @@ -525,11 +638,11 @@ namespace StarAI.TaskCore.DebrisLogic GameLocation location = (GameLocation)objArr[0]; foreach (var v in location.objects) { - ModCore.CoreMonitor.Log(v.Value.name); + // ModCore.CoreMonitor.Log(v.Value.name); if (v.Value.name == "Weeds") { - ModCore.CoreMonitor.Log(v.Value.name, LogLevel.Warn); + // ModCore.CoreMonitor.Log(v.Value.name, LogLevel.Warn); TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); //t.placementAction(Game1.currentLocation, (int)v.Key.X * Game1.tileSize, (int)v.Key.Y * Game1.tileSize); t.fakePlacementAction(Game1.currentLocation, (int)v.Key.X, (int)v.Key.Y); @@ -541,26 +654,34 @@ namespace StarAI.TaskCore.DebrisLogic int ok = 0; + + + List tempList = new List(); foreach (var v in weedsToCut) { + tempList.Add(v); + } - object[] objList = new object[2]; - objList[0] = v; + object[] objList = new object[10]; + objList[0] = tempList; // ExecutionCore.TaskList.taskList.Add(new Task(new Action(waterSingleCrop), obj)); StardewValley.Tools.MeleeWeapon w = new StardewValley.Tools.MeleeWeapon(); ModCore.CoreMonitor.Log("Processing weed:" + ok.ToString() + " / " + twingCount.ToString()); ok++; - ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(cutSingleWeed, objList, new ExecutionCore.TaskMetaData("Cut Single Weed", new LocationPrerequisite(v.thisLocation), null, new ToolPrerequisite(true, w.GetType(), 1))); - if (task.taskMetaData.cost == Int32.MaxValue) + ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(cutSingleWeed, objList, new ExecutionCore.TaskMetaData("Cut Single Weed", new LocationPrerequisite(location), null, new ToolPrerequisite(true, w.GetType(), 1))); + objList[1] = task.taskMetaData.pathsToTake[0]; + objList[2] = task.taskMetaData.pathsToTake[0].ElementAt(0); + task.objectParameterDataArray = objList; + if (task.taskMetaData.cost == Int32.MaxValue) { - + Utilities.tileExceptionList.Clear(); Utilities.clearExceptionListWithNames(true); - continue; + return; } ExecutionCore.TaskList.taskList.Add(task); Utilities.clearExceptionListWithName("Child"); // waterSingleCrop(v); - } + weedsToCut.Clear(); } @@ -606,26 +727,30 @@ namespace StarAI.TaskCore.DebrisLogic } int ok = 0; - foreach (var v in weedsToCut) + List tempList = new List(); + foreach (var v in treesToChop) { - object[] objList = new object[2]; - objList[0] = v; + tempList.Add(v); + } + + object[] objList = new object[10]; + objList[0] = tempList; // ExecutionCore.TaskList.taskList.Add(new Task(new Action(waterSingleCrop), obj)); StardewValley.Tools.MeleeWeapon w = new StardewValley.Tools.MeleeWeapon(); ModCore.CoreMonitor.Log("Processing weeds:" + ok.ToString() + " / " + twingCount.ToString()); ok++; - ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(cutSingleWeed, objList, new ExecutionCore.TaskMetaData("Cut Single Weed", new LocationPrerequisite(v.thisLocation), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); + ExecutionCore.CustomTask task = new ExecutionCore.CustomTask(cutSingleWeed, objList, new ExecutionCore.TaskMetaData("Cut Single Weed", new LocationPrerequisite(location), new StaminaPrerequisite(true, 3), new ToolPrerequisite(true, w.GetType(), 1))); objList[1] = task.taskMetaData.pathsToTake[0]; task.objectParameterDataArray = objList; if (task.taskMetaData.cost == Int32.MaxValue) { Utilities.clearExceptionListWithNames(true); - continue; + return; } ExecutionCore.TaskList.taskList.Add(task); Utilities.clearExceptionListWithName("Child"); - } + weedsToCut.Clear(); } @@ -644,7 +769,7 @@ namespace StarAI.TaskCore.DebrisLogic { object[] objArray = (object[])obj; - TileNode v = (TileNode)objArray[0]; + TileNode v = (TileNode)objArray[2]; List correctPath = (List)objArray[1]; foreach (var goodTile in correctPath) { @@ -653,21 +778,68 @@ namespace StarAI.TaskCore.DebrisLogic } PathFindingLogic.calculateMovement(correctPath); - if (v.tileLocation.X < Game1.player.getTileX()) + Vector2 tileLocation = v.tileLocation; + ModCore.CoreMonitor.Log(tileLocation.ToString()); + StardewValley.Object sObject = new StardewValley.Object(); + try { - Game1.player.faceDirection(3); + ModCore.CoreMonitor.Log("once"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)].name=="Weeds") + { + ModCore.CoreMonitor.Log("onceGod"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X - 1, tileLocation.Y)]; + Game1.player.faceDirection(3); + } } - else if (v.tileLocation.X > Game1.player.getTileX()) + catch (Exception err) { - Game1.player.faceDirection(1); + } - else if (v.tileLocation.Y < Game1.player.getTileY()) + try { - Game1.player.faceDirection(0); + ModCore.CoreMonitor.Log("twice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)].name=="Weeds") + { + ModCore.CoreMonitor.Log("twiceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X + 1, tileLocation.Y)]; + Game1.player.faceDirection(1); + } } - else if (v.tileLocation.Y > Game1.player.getTileY()) + catch (Exception err) { - Game1.player.faceDirection(2); + + } + try + { + ModCore.CoreMonitor.Log("thrice"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y-1)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y-1)].name == "Weeds") + { + ModCore.CoreMonitor.Log("thriceGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y-1)]; + Game1.player.faceDirection(0); + } + } + catch (Exception err) + { + + } + try + { + ModCore.CoreMonitor.Log("fourth"); + ModCore.CoreMonitor.Log(v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].name); + if (v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y + 1)].name == "Weeds") + { + ModCore.CoreMonitor.Log("fourthGood"); + sObject = v.thisLocation.objects[new Vector2(tileLocation.X, tileLocation.Y +1)]; + Game1.player.faceDirection(2); + } + } + catch (Exception err) + { + } foreach (var item in Game1.player.items) { @@ -676,10 +848,10 @@ namespace StarAI.TaskCore.DebrisLogic Game1.player.CurrentToolIndex = Game1.player.getIndexOfInventoryItem(item); } } - StardewValley.Object twig = v.thisLocation.objects[v.tileLocation]; - while ((twig.name == "Weeds")) + + while ((sObject.name == "Weeds")) { - if (!v.thisLocation.isObjectAt((int)v.tileLocation.X * Game1.tileSize, (int)v.tileLocation.Y * Game1.tileSize)) break; + if (!v.thisLocation.isObjectAt((int)sObject.tileLocation.X * Game1.tileSize, (int)sObject.tileLocation.Y * Game1.tileSize)) break; //CHANNGE THIS LINE if (WindowsInput.InputSimulator.IsKeyDown(WindowsInput.VirtualKeyCode.VK_C) == false) WindowsInput.InputSimulator.SimulateKeyDown(WindowsInput.VirtualKeyCode.VK_C); Vector2 center = new Vector2(); @@ -720,8 +892,11 @@ namespace StarAI.TaskCore.DebrisLogic WindowsInput.InputSimulator.SimulateKeyUp(WindowsInput.VirtualKeyCode.VK_C); } + #endregion + //Tree Logic + #region public static void getAllTreesToChopRadius(GameLocation location) { object[] arr = new object[1]; @@ -826,8 +1001,8 @@ namespace StarAI.TaskCore.DebrisLogic if (terrain.GetType() == terrainType) { - ModCore.CoreMonitor.Log(terrain.GetType().ToString(), LogLevel.Warn); - ModCore.CoreMonitor.Log(pos.ToString(), LogLevel.Warn); + //ModCore.CoreMonitor.Log(terrain.GetType().ToString(), LogLevel.Warn); + //ModCore.CoreMonitor.Log(pos.ToString(), LogLevel.Warn); TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Brown)); t.fakePlacementAction(Game1.currentLocation, (int)pos.X, (int)pos.Y); Utilities.tileExceptionList.Add(new TileExceptionMetaData(t, "ChopTree")); @@ -839,7 +1014,7 @@ namespace StarAI.TaskCore.DebrisLogic int ok = 0; - object[] objList = new object[3]; + object[] objList = new object[10]; List tempTreesToChop = new List(); foreach(var v in treesToChop) { @@ -1005,7 +1180,7 @@ namespace StarAI.TaskCore.DebrisLogic } WindowsInput.InputSimulator.SimulateKeyUp(WindowsInput.VirtualKeyCode.VK_C); } - + #endregion } }