示例#1
0
        public static Composite TryDoAreaTransition()
        {
            return(new PrioritySelector(
                       new Decorator(delegate
            {
                var ret = HasValidAreaTransitionByType(AreaTransitionType.Local);
                if (ret.Item1 == true)
                {
                    areaTransitionBeforeTransition = ret.Item2;
                    return true;
                }
                return false;
            }, DoLocalAreaTransition()),
                       new Decorator(delegate
            {
                var ret = HasValidAreaTransitionByType(AreaTransitionType.NormalToCorrupted);
                if (ret.Item1 == true)
                {
                    areaTransitionBeforeTransition = ret.Item2;
                    return true;
                }
                return false;
            }, DoCorruptedZoneTransition())

                       ));
        }
示例#2
0
        public static Composite DoLocalAreaTransition()
        {
            //sepearte between local, to corrupted etc. Handle accordingly.
            return(new Sequence(
                       new Inverter(CommonBehavior.MoveTo(x => areaTransitionBeforeTransition.areaTransitionGridPosition, spec: CommonBehavior.OpenablesMovementSpec)),

                       new Action(delegate
            {
                // Test if were actually close to the area transition
                if (GameController.Player.GridPos.Distance(areaTransitionBeforeTransition.areaTransitionGridPosition) > 35)
                {
                    WillBot.LogMessageCombo($"In trying to complete area transition. Movement to area transition must have been canceled");
                    return RunStatus.Failure;
                }
                areaHashBeforeTransition = GameController.Area.CurrentArea.Hash;

                islandIdBeforeTransition = areaTransitionBeforeTransition.locatedInIslandWithId;
                var closestAreaTransitionLabel = Me.ClosestAreaTransitionLabel;
                if (closestAreaTransitionLabel == null)
                {
                    WillBot.LogMessageCombo($"No area transition nearby");
                    return RunStatus.Failure;
                }
                labelTextOfAreaTransition = closestAreaTransitionLabel.Label.Text;
                ControlTimer.Restart();

                Vector2 prevGridPos = GameController.Player.GridPos;
                while (ControlTimer.ElapsedMilliseconds < 4000)
                {
                    Mouse.SetCursorPosAndLeftOrRightClick(closestAreaTransitionLabel.Label.GetClientRect(), Latency);
                    // Try to detect a jump in player gridpos
                    var currentGridPos = GameController.Player.GridPos;
                    if (currentGridPos.Distance(prevGridPos) > 20)
                    {
                        WillBot.LogMessageCombo($"detected large enough jump in grid pos. success");
                        Thread.Sleep(400);

                        // if local get zone map
                        // else initialize zone.. and add areatransition.
                        var zoneMapAfterTransition = WillBot.Mover.GetZoneMap();
                        var subMapAfterTransition = zoneMapAfterTransition.GetSubMap(GameController.Player.GridPos);
                        int islandIdAfterTransition = subMapAfterTransition.IslandId;
                        areaTransitionBeforeTransition.leadsToIslandWithId = islandIdAfterTransition;
                        areaTransitionBeforeTransition.hasBeenEntered = true;

                        if (Me.ClosestAreaTransitionLabel != null)
                        {
                            // verify that this is another area transition
                            var newKeyTuple = Me.ClosestAreaTransitionLabel.ItemOnGround.GridPos.ToIntTuple();
                            if (zoneMapAfterTransition.FoundAreaTransitions.ContainsKey(newKeyTuple))
                            {
                                //Already registered this area transition
                                WillBot.LogMessageCombo($"already have this area transition");
                            }
                            else
                            {
                                var transition = new AreaTransitionInfo(Me.ClosestAreaTransitionLabel.Label.Text, Me.ClosestAreaTransitionLabel.ItemOnGround.GridPos, islandIdAfterTransition);
                                transition.leadsToIslandWithId = islandIdBeforeTransition;
                                zoneMapAfterTransition.FoundAreaTransitions.Add(newKeyTuple, transition);
                            }
                        }
                        return RunStatus.Success;
                    }
                    prevGridPos = currentGridPos;
                    Thread.Sleep(100);
                }
                // time out can mean area transition that disappears + no movement during the transition
                // if it timed out but the area transition is gone
                return RunStatus.Failure;
            })

                       //new Action(delegate
                       //{
                       //    if (areaHashBeforeTransition != GameController.Area.CurrentArea.Hash)
                       //    {
                       //        areaTransitionBeforeTransition.isZoneTransition = true;
                       //        return RunStatus.Success;
                       //    }
                       //    else
                       //    {
                       //        var zoneMapAfterTransition = WillBot.Mover.GetZoneMap();
                       //        var subMapAfterTransition = zoneMapAfterTransition.GetSubMap(GameController.Player.GridPos);
                       //        int islandIdAfterTransition = subMapAfterTransition.IslandId;
                       //        areaTransitionBeforeTransition.leadsToIslandWithId = islandIdAfterTransition;
                       //        areaTransitionBeforeTransition.hasBeenEntered = true;

                       //        // Wait and try to add the area transition
                       //        ControlTimer.Restart();
                       //        while (ControlTimer.ElapsedMilliseconds < 6000)
                       //        {
                       //            areaTransitionAfterTransition = zoneMapAfterTransition.TryGetAreaTransition(Me.ClosestAreaTransitionLabel);
                       //            if (areaTransitionAfterTransition != null)
                       //            {
                       //                break;
                       //            }
                       //            Thread.Sleep(200);
                       //        }
                       //        if (areaTransitionAfterTransition == null) return RunStatus.Failure;
                       //        areaTransitionAfterTransition.hasBeenEntered = true;

                       //        areaTransitionAfterTransition.leadsToIslandWithId = islandIdBeforeTransition;

                       //        return RunStatus.Success;
                       //    }
                       //})

                       ));
        }
示例#3
0
        public static Composite DoCorruptedZoneTransition()
        {
            return(new Sequence(
                       new Inverter(CommonBehavior.MoveTo(x => areaTransitionBeforeTransition.areaTransitionGridPosition,
                                                          spec: CommonBehavior.OpenablesMovementSpec)),

                       new Action(delegate
            {
                // Test if were actually close to the area transition
                if (GameController.Player.GridPos.Distance(areaTransitionBeforeTransition.areaTransitionGridPosition) > 35)
                {
                    WillBot.LogMessageCombo($"In trying to complete area transition. Movement to area transition must have been canceled");
                    return RunStatus.Failure;
                }
                areaHashBeforeTransition = GameController.Area.CurrentArea.Hash;

                islandIdBeforeTransition = areaTransitionBeforeTransition.locatedInIslandWithId;
                var closestAreaTransitionLabel = Me.ClosestAreaTransitionLabel;
                if (closestAreaTransitionLabel == null)
                {
                    WillBot.LogMessageCombo($"No area transition nearby");
                    return RunStatus.Failure;
                }
                labelTextOfAreaTransition = closestAreaTransitionLabel.Label.Text;
                ControlTimer.Restart();

                Vector2 prevGridPos = GameController.Player.GridPos;
                while (ControlTimer.ElapsedMilliseconds < 4000)
                {
                    Mouse.SetCursorPosAndLeftOrRightClick(closestAreaTransitionLabel.Label.GetClientRect(), Latency);
                    // Try to detect a jump in player gridpos
                    var currentGridPos = GameController.Player.GridPos;
                    if (currentGridPos.Distance(prevGridPos) > 20)
                    {
                        WillBot.LogMessageCombo($"detected large enough jump in grid pos. success");
                        Thread.Sleep(400);
                        lock (MyLocks.UpdateTerrainDataLock)
                        {
                            //Issue is that AreaChange function run on another thread and will updateterraindata too..
                            // Just wait until this can be aquired since that should mean its done updating terrain data
                        }
                        var zoneMapAfterTransition = WillBot.Mover.GetZoneMap();
                        var subMapAfterTransition = zoneMapAfterTransition.GetSubMap(GameController.Player.GridPos);
                        int islandIdAfterTransition = subMapAfterTransition.IslandId;
                        areaTransitionBeforeTransition.leadsToIslandWithId = islandIdAfterTransition;
                        areaTransitionBeforeTransition.hasBeenEntered = true;

                        if (Me.ClosestAreaTransitionLabel != null)
                        {
                            // verify that this is another area transition
                            var newKeyTuple = Me.ClosestAreaTransitionLabel.ItemOnGround.GridPos.ToIntTuple();
                            if (zoneMapAfterTransition.FoundAreaTransitions.ContainsKey(newKeyTuple))
                            {
                                //Already registered this area transition
                                WillBot.LogMessageCombo($"already have this area transition");
                            }
                            else
                            {
                                var transition = new AreaTransitionInfo(Me.ClosestAreaTransitionLabel.Label.Text, Me.ClosestAreaTransitionLabel.ItemOnGround.GridPos, islandIdAfterTransition);
                                transition.leadsToIslandWithId = islandIdBeforeTransition;
                                transition.leadsToZoneWithAreaHash = areaHashBeforeTransition;
                                transition.transitionType = Me.ClosestAreaTransitionLabel.ItemOnGround.GetComponent <AreaTransition>().TransitionType;
                                zoneMapAfterTransition.FoundAreaTransitions.Add(newKeyTuple, transition);
                            }
                        }
                        return RunStatus.Success;
                    }
                    prevGridPos = currentGridPos;
                    Thread.Sleep(100);
                }
                // time out can mean area transition that disappears + no movement during the transition
                // if it timed out but the area transition is gone
                return RunStatus.Failure;
            })));
        }