private IEnumerator TryToPickV2(CustomItem pickItItem) { if (!pickItItem.IsValid) { FullWork = true; //LogMessage("PickItem is not valid.", 5, Color.Red); yield break; } var centerOfItemLabel = pickItItem.LabelOnGround.Label.GetClientRectCache.Center; var rectangleOfGameWindow = GameController.Window.GetWindowRectangleTimeCache; var oldMousePosition = Mouse.GetCursorPositionVector(); _clickWindowOffset = rectangleOfGameWindow.TopLeft; rectangleOfGameWindow.Inflate(-36, -36); centerOfItemLabel.X += rectangleOfGameWindow.Left; centerOfItemLabel.Y += rectangleOfGameWindow.Top; if (!rectangleOfGameWindow.Intersects(new RectangleF(centerOfItemLabel.X, centerOfItemLabel.Y, 3, 3))) { FullWork = true; //LogMessage($"Label outside game window. Label: {centerOfItemLabel} Window: {rectangleOfGameWindow}", 5, Color.Red); yield break; } var tryCount = 0; while (tryCount < 3) { var completeItemLabel = pickItItem.LabelOnGround?.Label; if (completeItemLabel == null) { if (tryCount > 0) { //LogMessage("Probably item already picked.", 3); yield break; } //LogError("Label for item not found.", 5); yield break; } //while (GameController.Player.GetComponent<Actor>().isMoving) //{ // yield return waitPlayerMove; //} var clientRect = completeItemLabel.GetClientRect(); var clientRectCenter = clientRect.Center; var vector2 = clientRectCenter + _clickWindowOffset; if (!rectangleOfGameWindow.Intersects(new RectangleF(vector2.X, vector2.Y, 3, 3))) { FullWork = true; //LogMessage($"x,y outside game window. Label: {centerOfItemLabel} Window: {rectangleOfGameWindow}", 5, Color.Red); yield break; } Mouse.MoveCursorToPosition(vector2); yield return(wait2ms); if (pickItItem.IsTargeted()) { yield return(Mouse.LeftClick()); } yield return(toPick); tryCount++; } tryCount = 0; while (GameController.Game.IngameState.IngameUi.ItemsOnGroundLabelsVisible.FirstOrDefault( x => x.Address == pickItItem.LabelOnGround.Address) != null && tryCount < 6) { tryCount++; //yield return waitForNextTry; } //yield return waitForNextTry; // Mouse.MoveCursorToPosition(oldMousePosition); }
private IEnumerator TryToPickV2(CustomItem pickItItem) { if (!pickItItem.IsValid && !pickItItem.IsMetamorphBodyPart) { _fullWork = true; LogMessage("PickItem is not valid.", 5, Color.Red); yield break; } var centerOfItemLabel = pickItItem.LabelOnGround.Label.GetClientRectCache.Center; var rectangleOfGameWindow = GameController.Window.GetWindowRectangleTimeCache; var oldMousePosition = Mouse.GetCursorPositionVector(); _clickWindowOffset = rectangleOfGameWindow.TopLeft; centerOfItemLabel.X += rectangleOfGameWindow.Left; centerOfItemLabel.Y += rectangleOfGameWindow.Top; rectangleOfGameWindow.Inflate(-155, -100); rectangleOfGameWindow.Height -= 50; if (!rectangleOfGameWindow.Contains(centerOfItemLabel)) { _fullWork = true; LogMessage($"Label outside game window. Label: {centerOfItemLabel} Window: {rectangleOfGameWindow}", 5, Color.Red); yield break; } var tryCount = 0; while (!pickItItem.IsTargeted() && tryCount < 5) { var completeItemLabel = pickItItem.LabelOnGround?.Label; if (completeItemLabel == null) { if (tryCount > 0) { LogMessage("Probably item already picked.", 3); yield break; } LogError("Label for item not found.", 5); yield break; } /*while (GameController.Player.GetComponent<Actor>().isMoving) * { * yield return waitPlayerMove; * }*/ var clientRect = completeItemLabel.GetClientRect(); var clientRectCenter = clientRect.Center; var vector2 = clientRectCenter + _clickWindowOffset; Mouse.MoveCursorToPosition(vector2); yield return(_wait3Ms); Mouse.MoveCursorToPosition(vector2); yield return(_wait3Ms); yield return(Mouse.LeftClick()); yield return(_toPick); tryCount++; } if (pickItItem.IsTargeted()) { Input.Click(MouseButtons.Left); } tryCount = 0; while (GameController.Game.IngameState.IngameUi.ItemsOnGroundLabels.FirstOrDefault( x => x.Address == pickItItem.LabelOnGround.Address) != null && tryCount < 6) { tryCount++; yield return(_waitForNextTry); } yield return(_waitForNextTry); // Mouse.MoveCursorToPosition(oldMousePosition); }
private IEnumerator TryToPickV2(CustomItem pickItItem, LabelOnGround portalLabel) { if (!pickItItem.IsValid) { _fullWork = true; //LogMessage("PickItem is not valid.", 5, Color.Red); yield break; } var centerOfItemLabel = pickItItem.LabelOnGround.Label.GetClientRectCache.Center; var rectangleOfGameWindow = GameController.Window.GetWindowRectangleTimeCache; _clickWindowOffset = rectangleOfGameWindow.TopLeft; rectangleOfGameWindow.Inflate(-36, -36); centerOfItemLabel.X += rectangleOfGameWindow.Left; centerOfItemLabel.Y += rectangleOfGameWindow.Top; if (!rectangleOfGameWindow.Intersects(new RectangleF(centerOfItemLabel.X, centerOfItemLabel.Y, 3, 3))) { _fullWork = true; //LogMessage($"Label outside game window. Label: {centerOfItemLabel} Window: {rectangleOfGameWindow}", 5, Color.Red); yield break; } var tryCount = 0; while (tryCount < 3) { var completeItemLabel = pickItItem.LabelOnGround?.Label; if (completeItemLabel == null) { if (tryCount > 0) { //LogMessage("Probably item already picked.", 3); yield break; } //LogError("Label for item not found.", 5); yield break; } Vector2 vector2; if (IsPortalNearby(portalLabel, pickItItem.LabelOnGround)) { vector2 = completeItemLabel.GetClientRect().ClickRandom() + _clickWindowOffset; } else { vector2 = completeItemLabel.GetClientRect().Center + _clickWindowOffset; } if (!rectangleOfGameWindow.Intersects(new RectangleF(vector2.X, vector2.Y, 3, 3))) { _fullWork = true; //LogMessage($"x,y outside game window. Label: {centerOfItemLabel} Window: {rectangleOfGameWindow}", 5, Color.Red); yield break; } Input.SetCursorPos(vector2); yield return(_wait2Ms); if (pickItItem.IsTargeted()) { // in case of portal nearby do extra checks with delays if (IsPortalNearby(portalLabel, pickItItem.LabelOnGround) && !IsPortalTargeted(portalLabel)) { yield return(new WaitTime(25)); if (IsPortalNearby(portalLabel, pickItItem.LabelOnGround) && !IsPortalTargeted(portalLabel)) { Input.Click(MouseButtons.Left); } } else if (!IsPortalNearby(portalLabel, pickItItem.LabelOnGround)) { Input.Click(MouseButtons.Left); } } yield return(_toPick); tryCount++; } tryCount = 0; while (GameController.Game.IngameState.IngameUi.ItemsOnGroundLabelsVisible.FirstOrDefault( x => x.Address == pickItItem.LabelOnGround.Address) != null && tryCount < 6) { tryCount++; } }