//timeCooldownMax = DateTime.MaxValue; public void tester() { List <CraftBuildingView> craftBuildings = null; craftBuildings = _client.GetEntities <CraftBuildingView>((x) => { return(true); }); for (int i = 0; i < craftBuildings.Count; i++) { // Core.Log(craftBuildings[i].PrefabName); } if (GameGui.Instance.CharacterInfoGui.gameObject.activeInHierarchy) { var playerStorage = GameGui.Instance.CharacterInfoGui.InventoryItemStorage; foreach (var slot in playerStorage.ItemsSlotsRegistered) { if (slot != null && slot.ObservedItemView != null) { var slotItemName = slot.ObservedItemView.name.ToLowerInvariant(); Core.Log($"Item Name {slotItemName} "); } } } var t = new Vector3(195f, -5.8f, -153f); var t2D = new Vector2(t.x, t.z); Vector2 PC2D = new Vector2(_localPlayerCharacterView.transform.position.x, _localPlayerCharacterView.transform.position.z); var distance = Vector2.Distance(t2D, PC2D); Core.Log($"Current Pos {_localPlayerCharacterView.transform.position} "); Core.Log($"Distance to {t2D} from {PC2D} is {distance} "); _combatPlayer = _localPlayerCharacterView.GetLocalPlayerCharacter(); _combatSpells = _combatPlayer.GetSpellSlotsIndexed().Ready(_localPlayerCharacterView).Ignore("ESCAPE_DUNGEON").Ignore("PLAYER_COUPDEGRACE").Ignore("AMBUSH"); foreach (var cs in _combatSpells) { Core.Log($"{cs.GetSpellDescriptor().TryGetName()}"); Core.Log($"{cs.GetSpellDescriptor().TryGetTarget()}"); Core.Log($"{cs.GetSpellDescriptor().TryGetCategory()}"); } //var temp1 = ReadXML(); if (GameGui.Instance.BankBuildingVaultGui.gameObject.activeInHierarchy) { //_localPlayerCharacterView.Interact(resource); // return; var vaultStorage = GameGui.Instance.BankBuildingVaultGui.BankVault.InventoryStorage; var vaultListBox = GameGui.Instance.BankBuildingVaultGui.BankVault.VaultListBox; var ToDeposit = new List <UIItemSlot>(); foreach (var slot in vaultStorage.ItemsSlotsRegistered) { if (slot != null && slot.ObservedItemView != null) { var slotItemName = slot.ObservedItemView.name.ToLowerInvariant(); Core.Log($"Item Name {slotItemName} "); } } } // Core.Log($"{playerStorage.ItemsSlotsRegistered.Count}"); //Core.Log($"{vaultStorage.ItemsSlotsRegistered.Count}"); if (GameGui.Instance.BuildingUsageAndManagementGui.gameObject.activeInHierarchy) { var craftUsage = GameGui.Instance.BuildingUsageAndManagementGui.BuildingUsage; var silverUI = GameGui.Instance.PaySilverDetailGui; Core.Log($"There are this many tabs {craftUsage.TabButtons.TabEntries.Count()}"); //craftUsage.TabButtons.SetSelectedTabButton(2); BigTabEntry[] BTE = craftUsage.TabButtons.TabEntries; string tabname = "armor"; foreach (BigTabEntry BT in BTE) { Core.Log($"Big tab name {BT.Tooltip.TextToDisplay}"); string tabn = BT.Tooltip.TextToDisplay.ToLowerInvariant(); //BT.SetSelected(true); craftUsage.OnShowCrafting(); if (tabn.Contains(tabname)) { Core.Log($"{tabn} contains{BT.Tooltip.TextToDisplay}. Setting tab to display"); BT.OnClickTab(); craftUsage.UpdateData(); } // BT.Tooltip.TextToDisplay; } if (timeCooldownMax == DateTime.MaxValue) { timeCooldownMax = DateTime.Now + TimeSpan.FromSeconds(2); } if (timeCooldownMax > DateTime.Now) { Core.Log($"Time Now {DateTime.Now}"); return; } if (silverUI.gameObject.activeInHierarchy) { Core.Log("[Paying silver costs]"); silverUI.OnPay(); return; } if (_localPlayerCharacterView.IsCrafting()) { return; } if (!craftUsage.CraftItemView.FilterListToggle.value) { craftUsage.CraftItemView.FilterListToggle.value = true; return; } else { KguiCraftItemSlot[] comps = craftUsage.GetComponentsInChildren <KguiCraftItemSlot>(); if (craftUsage.CraftItemView.gameObject.activeInHierarchy) { if (craftUsage.CraftItemView.FilterListToggle.value) { if (!GameGui.Instance.ItemCraftingGui.gameObject.activeInHierarchy) { if (comps.Length < 1) { Core.Log("Cannot craft any items"); return; } Core.Log("Activating CraftingGui"); KguiCraftItemSlot craftSlot = comps[comps.Length - 1]; Core.Log($"Craft Slots Count {comps.Length}"); foreach (var slot in comps) { Core.Log($"{slot.ItemNameLabel.text}"); } try { if (comps.Length > 1) { for (int i = 0; i < comps.Length; i++) { string slotLabelName = comps[i].ItemNameLabel.text.ToLowerInvariant(); //string recipeName = craftRec.RecipeName; string recipeName = "t3_2h_tool_pick"; string[] subRecipeName = recipeName.Split('_'); string keyWord = subRecipeName[subRecipeName.Length - 1]; if (slotLabelName.Contains(keyWord)) { Core.Log($"{slotLabelName} CONTAINED {keyWord} "); craftSlot = comps[i]; craftUsage.CraftItemView.OnCraftSlotClicked(craftSlot); // buildingLoaded = false; return; } else { Core.Log($"{slotLabelName} didn't contain {keyWord} "); //return; } // Core.Log($"{slot.ItemNameLabel.text}"); } // return; } craftUsage.CraftItemView.OnCraftSlotClicked(craftSlot); Core.Log("CraftingGui activated"); return; } catch (IndexOutOfRangeException) { Core.Log("You dont have the resources"); //TODO add trigger to get the resources } return; } else { if (comps.Length > 0 && !_localPlayerCharacterView.IsCrafting()) { var craftUi = GameGui.Instance.ItemCraftingGui.CraftingView; if (craftUi.QuantityInput.isActiveAndEnabled) { craftUi.QuantityInput.value = 1; } var craftUiType = craftUi.GetType(); var onCraftButtonmethod = craftUiType.GetMethod("OnCraftButton", BindingFlags.NonPublic | BindingFlags.Instance); onCraftButtonmethod.Invoke(craftUi, null); } else { Core.Log("Crafting Done. Getting Items"); ResetCraftingVariables(); ResetCriticalVariables(); GameGui.Instance.MessageBox.CloseImmediately(); GameGui.Instance.ItemCraftingGui.CraftingView.Close(); _state.Fire(Trigger.GetItems); Core.Log("Trigger Change"); } } } else { Core.Log("not filtered"); return; } } } } //isMovingUpdate(); // bool ismoving = IsMoving; // Core.Log($"{ismoving}"); }
public void Craft() { Worldmap worldmapInstance = GameGui.Instance.WorldMap; Vector3 playerCenter = _localPlayerCharacterView.transform.position; ClusterDescriptor currentWorldCluster = _world.GetCurrentCluster(); ClusterDescriptor townCluster = worldmapInstance.GetCluster(TownClusterNames[_selectedCraftTownClusterIndex]).Info; //Vector2 buildingSize = Vector2.zero; Collider buildingCollider; Vector3 building3dcenter; Vector2 building2dcenter; Vector3 building2d3dcenter; Vector3 closestpoint; ClusterMapUI clustermapinstance = null; List <Vector3> posBoundary = null; if (HandlePathing(ref _worldPathingRequest)) { return; } //Core.Log("Here 66"); //if (HandlePathing(ref _craftFindPathingRequest, () => _client.GetEntities<RepairBuildingView>((x) => { return true; }).Count > 0)) // return; //if (HandlePathing(ref _craftFindPathingRequest, () => _client.GetEntities<CraftBuildingView>((x) => { return true; }).Count > 0)) // return; if (HandlePathing(ref _craftingClusterPathingRequest)) { return; } if (HandlePathing(ref _craftingPathingRequest, null, () => _craftreachedPointInBetween = true)) { return; } //Core.Log($"CraftreachedPointInBetween {_craftreachedPointInBetween}"); // Core.Log("Here 67"); //GameManager.GetInstance().GetLocalPlayerCharacterView().useGUILayout if (currentWorldCluster.GetName() == townCluster.GetName()) { try { // Core.Log("Number of buildings " + Convert.ToString(Town._building.Length)); //Core.Log("Notes2"); } catch (NullReferenceException) { } if (Town == null || Town._building.Length <= 0) { try { if (!GameGui.Instance.ClusterMapGui.gameObject.activeInHierarchy) { Core.Log("Opening Map"); GameGui.Instance.ClusterMapGui.Show(); // Core.Log("here3"); } if (GameGui.Instance.ClusterMapGui.gameObject.activeInHierarchy) { // Core.Log("Map is open"); clustermapinstance = GameGui.Instance.ClusterMapGui; List <ClusterBuilding> tempClusterBuildingList = new List <ClusterBuilding>(); List <int> idlist = new List <int>(); // Core.Log("here4"); for (int i = 0; i < 2000; i++) { try { ClusterBuilding tempClusterBuilding = clustermapinstance.GetBuilding(i); if (tempClusterBuilding.CanUse) { tempClusterBuildingList.Add(tempClusterBuilding); idlist.Add(i); //Core.Log($"added {i}"); } } catch (NullReferenceException) { //Core.Log("caught"); } } Building[] buildingArray = new Building[tempClusterBuildingList.Count]; int counter = 0; // Core.Log("here5"); foreach (ClusterBuilding CB in tempClusterBuildingList) { GameGui.Instance.ClusterMapGui.ShowDetails(CB); string Title = GameGui.Instance.ClusterMapGui.BuildingUI.Title.text; string Owner = GameGui.Instance.ClusterMapGui.BuildingUI.Owner.text; // string objTitle = CB.Hitbox.name; //Core.Log("making buidling"); string UsageFeeS = GameGui.Instance.ClusterMapGui.BuildingUI.UsageFee.text; string DurabilityS = GameGui.Instance.ClusterMapGui.BuildingUI.Durability.text; string FoodS = GameGui.Instance.ClusterMapGui.BuildingUI.Food.text; String[] substringsDurabilityS = DurabilityS.Split('%'); String[] substringsUsageFee = UsageFeeS.Split(' ', '%'); String[] substringsFood = FoodS.Split(' ', '%'); // Core.Log(FoodS); float Food = Convert.ToSingle(substringsFood[0]); float DurabilityF = Convert.ToSingle(substringsDurabilityS[0]); float UsageFeeF = Convert.ToSingle(substringsUsageFee[1]); //Core.Log("making buidling2"); bool CanUse = CB.CanUse; Vector2 Size = CB.Size; //Core.Log("making buidling2"); int Tier = Convert.ToInt32(CB.Tier); Vector2 Position = CB.Position; Collider collider = CB.Hitbox; GameObject obj = collider.gameObject; // Core.Log($" collider object name {obj.name}"); var pP = obj.transform.position.c(); var point = pP; float Buildingy = _landscape.GetTerrainHeight(point, out RaycastHit hit); long ID = idlist[counter]; Building tempBuilding = new Building(Title, Tier, Food, CanUse, Position, Owner, Size, collider, Buildingy, UsageFeeF, ID, DurabilityF); buildingArray[counter] = tempBuilding; counter++; } Town = new Town(buildingArray); Core.Log("Town made"); } //if (!GameGui.Instance.ClusterMapGui.gameObject.activeInHierarchy) //{ // Core.Log("Closing Map"); // GameGui.Instance.ClusterMapGui.Close(); //} // GameGui.Instance.CloseAllGui(); } catch (NullReferenceException) { //Core.Log("here2"); //return; } catch (ArgumentOutOfRangeException) { Core.Log("here3"); } } else { try { int minTier = 1; //Building[] clusterBuildings = Town._building; //for(int i = 0; i < clusterBuildings.Length;i++) //{ // Core.Log($" {clusterBuildings[i].Title}"); //} //string bname = "toolmaker"; string bname = craftRec.CraftBuilding; // Core.Log("Here 7"); //var TchosenB = clusterBuildings.TakeWhile( b => b.Title.ToLowerInvariant().Contains(bname) && b.Tier > minTier); //var TchosenB = clusterBuildings.First(b => b.Title.ToLowerInvariant().Contains(bname) && b.Tier > minTier); // var TchosenB = clusterBuildings.Where(BItem => BItem.Tier > minTier) //.Where(BItem => BItem.Title.ToLowerInvariant().Contains(bname)) // .Select(BItem =>BItem.Title); //var minUsage = TchosenB.Min(b => b.UsageFee); //Building B1 = (Building)TchosenB.Select(b => b.UsageFee == minUsage); // Core.Log(chosenB.); // Building[] minTierBuildings = clusterBuildings.All<Building>(B) //Core.Log("here"); List <Building> reducedBuildings = new List <Building>(); foreach (Building B in Town) { //Core.Log($"{ B.Title}"); if (B.Title.ToLowerInvariant().Contains(bname) && B.Durability > 50 && B.Food >= 4) { if (B.Tier > minTier) { reducedBuildings.Add(B); } } } if (reducedBuildings.Count <= 0) { Core.Log("There are no builings available for crafting"); return; } // Core.Log($"Number of buildings { reducedBuildings.Count}"); //var minUsage = reducedBuildings.Min(b => b.UsageFee); var minUsage = 1e20; for (int i = 0; i < reducedBuildings.Count; i++) { if (reducedBuildings[i].UsageFee < minUsage) { minUsage = reducedBuildings[i].UsageFee; // Core.Log("min feeset"); } } foreach (Building bb in reducedBuildings) { if (bb.UsageFee == minUsage) { // Core.Log("Found min. Building chosen"); this.craftBuilding = bb; break; } else { // Core.Log("not min"); } } // Core.Log($"made it{B1.Title}"); //Building B1 = reducedBuildings.First(b => (b.UsageFee == minUsage)); for (int i = 0; i < reducedBuildings.Count; i++) { // Core.Log($" {reducedBuildings[i].UsageFee}"); } building2dcenter = this.craftBuilding.Position; if (this._buildingSize == Vector2.zero) { // Core.Log("setting building size"); this._buildingSize = this.craftBuilding.Size; } else { // Core.Log("building size is set"); } buildingCollider = this.craftBuilding.BuildingCollider; float buildingy = this.craftBuilding.Buildingy; List <Vector3> getPosBoundary(Vector2 _size, Vector2 _center, float buildingH) { float sizecheck = 0.1f; if (_size.x > 5) { sizecheck = 0.1f; } float _xmax = _center.x + (_size.x / 2); float _xmin = _center.x - (_size.x / 2); float _ymax = _center.y + (_size.y / 2); float _ymin = _center.y - (_size.y / 2); List <Vector3> _posBoundary = new List <Vector3>(); for (float i = _xmin; i < _xmax; i++) { Vector3 temp = new Vector3(i, buildingH, _ymin); _posBoundary.Add(temp); } for (float i = _ymin; i < _ymax; i++) { Vector3 temp = new Vector3(_xmax, buildingH, i); _posBoundary.Add(temp); } for (float i = _xmax; i > _xmin; i--) { Vector3 temp = new Vector3(i, buildingH, _ymax); _posBoundary.Add(temp); } for (float i = _ymax; i > _ymin; i--) { Vector3 temp = new Vector3(_xmax, buildingH, i); _posBoundary.Add(temp); } return(_posBoundary); } bool Mover(List <Vector3> vList) { bool pathFound = false; int failedAttempts = 1; int iterator = 1; foreach (Vector3 tryV in vList) { if (_localPlayerCharacterView.TryFindPath(new ClusterPathfinder(), tryV, IsBlockedWithExitCheck, out List <Vector3> pathing)) { pathFound = true; Core.Log($"PATH FOUND TO {tryV} !!!!!!!!!!!!!!!!!!!!!!!!!!!!! "); finalDestination = tryV; _craftingPathingRequest = new PositionPathingRequest(_localPlayerCharacterView, tryV, pathing, true, true); if (GameGui.Instance.ClusterMapGui.gameObject.activeInHierarchy) { Core.Log("Closing Map"); GameGui.Instance.ClusterMapGui.Close(); } return(pathFound); } else { Core.Log($"No path to {tryV} found. Attempt {iterator} / {vList.Count}"); failedAttempts++; _failedFindAttempts = 0; } iterator++; } return(pathFound); } List <List <Vector3> > ListReducer(List <Vector3> full) { var lShort = new List <List <Vector3> >(); int maxListLength = 2; for (int i = 0; i < full.Count; i += maxListLength) { lShort.Add(full.GetRange(i, Math.Min(maxListLength, full.Count - i))); } return(lShort); } //if (_craftreachedPointInBetween) // return; var distanceToFinalDestination = 0f; Vector2 PC2D = new Vector2(playerCenter.x, playerCenter.z); Vector2 FD2D = new Vector2(finalDestination.x, finalDestination.z); var distanceToBuildingCentre = Vector2.Distance(building2dcenter, PC2D); var minimumDistance = -40f; if (FD2D != Vector2.zero) { distanceToFinalDestination = Vector2.Distance(PC2D, FD2D); minimumDistance = 40f; } //If gets stuck // if (_craftreachedPointInBetween && finalDestination != Vector3.zero && distanceToFinalDestination>minimumDistance) List <CraftBuildingView> craftBuildings = null; List <CraftBuildingView> reducedCraftBuildings = new List <CraftBuildingView>(); craftBuildings = _client.GetEntities <CraftBuildingView>((x) => { return(true); }); if (this._craftTarget == null) { for (int i = 0; i < craftBuildings.Count; i++) { // Core.Log($"Building name {craftBuildings[i].PrefabName}"); string craftname = craftBuildings[i].PrefabName.ToLowerInvariant(); string B1name = this.craftBuilding.Title.ToLowerInvariant(); B1name = B1name.Replace(" ", ""); craftname = craftname.Replace(" ", ""); if (B1name.Contains(craftname)) { Core.Log($"Target Acquired with {craftname} using string {B1name}. Adding to reduced list "); reducedCraftBuildings.Add(craftBuildings[i]); } } Core.Log($"Reduced Craft building list count is {reducedCraftBuildings.Count}"); if (reducedCraftBuildings != null && reducedCraftBuildings.Count > 0) { float closestDistance = 1e20f; for (int i = 0; i < reducedCraftBuildings.Count; i++) { var CB = reducedCraftBuildings[i]; var CBC = CB.GetComponentsInChildren <Collider>().First(c => c.name.ToLowerInvariant().Contains("clickable")); var CBCpos = new Vector2(CBC.transform.position.x, CBC.transform.position.z); var finalDestination2D = new Vector2(finalDestination.x, finalDestination.z); var maxDistanceToCollider = Vector2.Distance(this.craftBuilding.Position, new Vector2(this.craftBuilding.Position.x + this.craftBuilding.Size.x * 0.5f, this.craftBuilding.Position.y + this.craftBuilding.Size.y * 0.5f)); var distanceBetween = Vector2.Distance(CBCpos, this.craftBuilding.Position); Core.Log($"Reduced Building name {reducedCraftBuildings[i].PrefabName}"); Core.Log($"Collider {CBC}"); Core.Log($"Collider Position {CBCpos}"); Core.Log($"Building Center {this.craftBuilding.Position}"); Core.Log($"Max distance Between Collider and Center {maxDistanceToCollider}"); Core.Log($"Final Destination {finalDestination2D}"); Core.Log($"Distance Between {distanceBetween}"); Core.Log($"Closest distance {closestDistance}"); if (distanceBetween < maxDistanceToCollider) { //closestDistance = distanceBetween; //Core.Log($"Closest distance {closestDistance}"); Core.Log($"Craft Target Located "); this._craftTarget = reducedCraftBuildings[i]; } } if (_craftreachedPointInBetween && finalDestination != Vector3.zero) { Vector3 rangedFinalDestination = Vector3.zero; if (stuckTimer < DateTime.Now) { isMovingUpdate(); } else { _localPlayerCharacterView.RequestMove(randomSpot); return; } if (!IsMoving) { Core.Log("Not Moving. Going To random Spot"); stuckTimer = DateTime.Now + TimeSpan.FromSeconds(2); randomSpot = new Vector3(UnityEngine.Random.Range(-100f, 100f), 0, UnityEngine.Random.Range(-100f, 100f)) + _localPlayerCharacterView.transform.position; rangedFinalDestination = new Vector3(finalDestination.x + UnityEngine.Random.Range(-10f, 10f), finalDestination.y + UnityEngine.Random.Range(-10f, 10f), finalDestination.z + UnityEngine.Random.Range(-10f, 10f)); } else { Core.Log("Moving CLoser with request move 1"); _localPlayerCharacterView.RequestMove(rangedFinalDestination); return; } } //if (_craftreachedPointInBetween) //{ // if (_localPlayerCharacterView.TryFindPath(new ClusterPathfinder(), finalDestination, IsBlockedGathering, out List<Vector3> pathing)) // { // Core.Log("Creating new path from crafting "); // _craftingPathingRequest = new PositionPathingRequest(_localPlayerCharacterView, finalDestination, pathing, true, true, _skipUnrestrictedPvPZones ); // } // Core.Log($"Still not at destination. {distanceToFinalDestination} away"); // return; //} } else { if (_craftreachedPointInBetween && finalDestination != Vector3.zero) { Vector3 rangedFinalDestination = Vector3.zero; if (stuckTimer < DateTime.Now) { isMovingUpdate(); } else { _localPlayerCharacterView.RequestMove(randomSpot); return; } if (!IsMoving) { Core.Log("Not Moving. Going To random Spot"); stuckTimer = DateTime.Now + TimeSpan.FromSeconds(2); randomSpot = new Vector3(UnityEngine.Random.Range(-100f, 100f), 0, UnityEngine.Random.Range(-100f, 100f)) + _localPlayerCharacterView.transform.position; //rangedFinalDestination = new Vector3(finalDestination.x + UnityEngine.Random.Range(-10f, 10f), finalDestination.y + UnityEngine.Random.Range(-10f, 10f), finalDestination.z + UnityEngine.Random.Range(-10f, 10f)); } else { Core.Log($"Moving CLoser with request move to final destination at {finalDestination}"); _localPlayerCharacterView.RequestMove(finalDestination); return; } } } } else if (!reachedFinalDestination) { if (_localPlayerCharacterView.TryFindPath(new ClusterPathfinder(), this._craftTarget, IsBlockedWithExitCheck, out List <Vector3> pathing)) { Core.Log("FOUND A CLUSTER PATH"); _craftingClusterPathingRequest = new ClusterPathingRequest(_localPlayerCharacterView, this._craftTarget, pathing); return; } else { Core.Log("Couldnt find a cluster path"); } } //if (this._craftTarget != null && this._craftTarget is CraftBuildingView cb) //{ // Core.Log("Close Enough "); // _craftingPathingRequest = null; // _craftreachedPointInBetween = false; // return; //} //if (_localPlayerCharacterView.TryFindPath(new ClusterPathfinder(), finalDestination, IsBlockedGathering, out List<Vector3> pathing)) //{ // Core.Log("Creating new path from crafting "); // _craftingPathingRequest = new PositionPathingRequest(_localPlayerCharacterView, finalDestination, pathing, true, true); //} //else //{ // Core.Log($" Not Moving Timer {notMovingTimer}"); // Core.Log($"Time Now {DateTime.Now}"); // if (DateTime.Now > notMovingTimer) // { // Core.Log("Moving from crafting"); // isMovingUpdate(); // } // else // { // Core.Log($"Moving To random position (Crafting) {randomSpot}"); // _localPlayerCharacterView.RequestMove(randomSpot); // return; // } // if (!IsMoving) // { // Core.Log("Not moving called from Crafting"); // randomSpot = (_localPlayerCharacterView.transform.position + new Vector3(UnityEngine.Random.Range(-100f, 100f), 0, UnityEngine.Random.Range(-100f, 100f))); // notMovingTimer = DateTime.Now + TimeSpan.FromSeconds(2); // } //} //if (_craftreachedPointInBetween) //{ // Core.Log("Pathing Request Restarting"); // _craftPathFound = !_craftreachedPointInBetween; //} if (!this._craftPathFound) { Core.Log("[Move closer to craftStation]"); if (posBoundary == null || posBoundary.Count <= 0) { posBoundary = getPosBoundary(_buildingSize, building2dcenter, buildingy); } var shortPosBoundary = ListReducer(posBoundary); Core.Log($"Counter at {pathFindingCounter} out of {shortPosBoundary.Count}"); Core.Log($"current building size {_buildingSize}"); if (pathFindingCounter < shortPosBoundary.Count && !this._craftPathFound) { this._craftPathFound = Mover(shortPosBoundary[pathFindingCounter]); pathFindingCounter++; } else { Core.Log("Increasing Boundary Size by 0.5"); _buildingSize = new Vector2(_buildingSize.x + .5f, _buildingSize.x + .5f); posBoundary = getPosBoundary(_buildingSize, building2dcenter, buildingy); Core.Log($"Changed building size {_buildingSize}"); pathFindingCounter = 0; } } Core.Log($" Distance is { distanceToFinalDestination} between points {PC2D} and {FD2D}. {reachedFinalDestination}"); if (distanceToFinalDestination > minimumDistance && reachedFinalDestination == false) { //if (_localPlayerCharacterView.TryFindPath(new ClusterPathfinder(), finalDestination, IsBlockedGathering, out List<Vector3> pathing)) //{ // Core.Log("Creating new path from crafting "); // _craftingPathingRequest = new PositionPathingRequest(_localPlayerCharacterView, finalDestination, pathing, true, true); //} Core.Log($"Still not at destination. {distanceToFinalDestination} away"); return; } else { Core.Log($" Distance { distanceToFinalDestination} between points {playerCenter} and {finalDestination}. {reachedFinalDestination}"); Core.Log("At final Destination"); reachedFinalDestination = true; } //Core.Log($"Target building name {this.craftBuilding.Title.ToLowerInvariant()}"); if (this._craftTarget == null) { Core.Log("No Craft Target"); return; } //Core.Log("Ready to interact2"); if (this._craftTarget is CraftBuildingView craftbuilding) { string name = this._craftTarget.PrefabName; // Core.Log($"Building is {this.craftBuilding.Title}"); // Core.Log("Current Target is " + name); GameGui.Instance.MessageBox.CloseImmediately(); if (!GameGui.Instance.BuildingUsageAndManagementGui.gameObject.activeInHierarchy) { if (!craftbuilding.IsInUseRange(_localPlayerCharacterView.LocalPlayerCharacter)) { if (stuckTimer < DateTime.Now) { isMovingUpdate(); } else { _localPlayerCharacterView.RequestMove(randomSpot); return; } if (!IsMoving) { Core.Log("Not Moving. Going To random Spot"); stuckTimer = DateTime.Now + TimeSpan.FromSeconds(2); randomSpot = new Vector3(UnityEngine.Random.Range(-100f, 100f), 0, UnityEngine.Random.Range(-100f, 100f)) + _localPlayerCharacterView.transform.position; } else { Core.Log("getcloser"); _localPlayerCharacterView.Interact(craftbuilding); return; } } else { Core.Log($"Close Enough {playerCenter}"); } } else { var craftUsage = GameGui.Instance.BuildingUsageAndManagementGui.BuildingUsage; var silverUI = GameGui.Instance.PaySilverDetailGui; //Select the correct craft tab if (!GameGui.Instance.ItemCraftingGui.gameObject.activeInHierarchy) { BigTabEntry[] BTE = craftUsage.TabButtons.TabEntries; string tabname = craftRec.CraftTab; foreach (BigTabEntry BT in BTE) { string tabn = BT.Tooltip.TextToDisplay.ToLowerInvariant(); craftUsage.OnShowCrafting(); if (tabn.Contains(tabname)) { Core.Log($"{tabn} contains{BT.Tooltip.TextToDisplay}. Setting tab to display"); BT.OnClickTab(); } } } if (!craftUsage.CraftItemView.FilterListToggle.value) { craftUsage.CraftItemView.FilterListToggle.value = true; return; } if (timeCooldownMax == DateTime.MaxValue) { timeCooldownMax = DateTime.Now + TimeSpan.FromSeconds(1); } if (timeCooldownMax > DateTime.Now) { Core.Log($"Time Now {DateTime.Now}"); return; } // Core.Log("Here2"); if (silverUI.gameObject.activeInHierarchy) { Core.Log("[Paying silver costs]"); silverUI.OnPay(); return; } if (craftUsage.gameObject.activeInHierarchy) { if (_localPlayerCharacterView.IsCrafting()) { return; } //craftUsage.OnShowCrafting(); else { KguiCraftItemSlot[] craftSlots = craftUsage.GetComponentsInChildren <KguiCraftItemSlot>(); // Core.Log("Here3"); //Core.Log($"Number of Slots craftitem {comps.Length}"); if (craftUsage.CraftItemView.gameObject.activeInHierarchy) { if (craftUsage.CraftItemView.FilterListToggle.value) { if (!GameGui.Instance.ItemCraftingGui.gameObject.activeInHierarchy) { Core.Log("Activating CraftingGui"); KguiCraftItemSlot craftSlot = craftSlots[craftSlots.Length - 1]; try { if (craftSlots.Length < 1) { Core.Log("Cannot craft any items"); return; } if (craftSlots.Length > 1) { for (int i = 0; i < craftSlots.Length; i++) { string recipeName; string[] subRecipeName; string keyWord; string slotLabelName = craftSlots[i].ItemNameLabel.text.ToLowerInvariant(); slotLabelName = slotLabelName.Replace(" ", ""); if (craftRec.AltName == null) { recipeName = craftRec.RecipeName; subRecipeName = recipeName.Split('_'); keyWord = subRecipeName[subRecipeName.Length - 1]; } else { keyWord = craftRec.AltName; } // string recipeName = "t3_2h_tool_pick"; if (slotLabelName.Contains(keyWord)) { Core.Log($"{slotLabelName} CONTAINED {keyWord} "); craftSlot = craftSlots[i]; craftUsage.CraftItemView.OnCraftSlotClicked(craftSlot); // buildingLoaded = false; //timeCooldownMax = DateTime.MaxValue; return; } else { Core.Log($"{slotLabelName} didn't contain {keyWord} "); //return; } // Core.Log($"{slot.ItemNameLabel.text}"); } return; } craftUsage.CraftItemView.OnCraftSlotClicked(craftSlot); Core.Log("CraftingGui activated"); return; } catch (IndexOutOfRangeException) { Core.Log("You dont have the resources"); //TODO add trigger to get the resources } return; } else { if (craftSlots.Length > 0 && !_localPlayerCharacterView.IsCrafting()) { var craftUi = GameGui.Instance.ItemCraftingGui.CraftingView; if (craftUi.QuantityInput.isActiveAndEnabled) { craftUi.QuantityInput.value = 1; } var craftUiType = craftUi.GetType(); var onCraftButtonmethod = craftUiType.GetMethod("OnCraftButton", BindingFlags.NonPublic | BindingFlags.Instance); onCraftButtonmethod.Invoke(craftUi, null); } else { Core.Log("Crafting Done. Getting Items"); ResetCraftingVariables(); ResetCriticalVariables(); GameGui.Instance.MessageBox.CloseImmediately(); GameGui.Instance.ItemCraftingGui.CraftingView.Close(); _state.Fire(Trigger.GetItems); Core.Log("Trigger Change"); } } } else { Core.Log("not filtered"); return; } } } return; } } } } catch (NullReferenceException) { Core.Log("here 6"); } } } //_isUIshown = true; else { var pathfinder = new WorldmapPathfinder(); Core.Log("Finding path to cluser"); if (pathfinder.TryFindPath(currentWorldCluster, townCluster, StopClusterFunction, out var path, out var pivots)) { _worldPathingRequest = new WorldPathingRequest(currentWorldCluster, townCluster, path, _skipUnrestrictedPvPZones); } } void reset() { _buildingSize = Vector2.zero; buildingCollider = null; building3dcenter = Vector3.zero; building2dcenter = Vector3.zero; building2d3dcenter = Vector3.zero; closestpoint = Vector3.zero; CraftBuildingView _craftTarget = null; } }