public RouteInfo(List <WowPoint> pathPoints, List <WowPoint> spiritPath, FollowRouteAction followRouteAction, WalkToCorpseAction walkToCorpseAction) { this.PathPoints = pathPoints.ToList(); this.SpiritPath = spiritPath.ToList(); this.followRouteAction = followRouteAction; this.walkToCorpseAction = walkToCorpseAction; CalculateDiffs(); }
public HashSet <GoapAction> CreateActions(ClassConfiguration classConfig, IBlacklist blacklist) { var availableActions = new HashSet <GoapAction>(); List <WowPoint> pathPoints, spiritPath; GetPaths(out pathPoints, out spiritPath, classConfig); var playerDirection = new PlayerDirection(addonReader.PlayerReader, wowProcess, logger); var stopMoving = new StopMoving(wowProcess, addonReader.PlayerReader, logger); var castingHandler = new CastingHandler(wowProcess, addonReader.PlayerReader, stopMoving, logger, classConfig, playerDirection, NpcNameFinder); var stuckDetector = new StuckDetector(addonReader.PlayerReader, wowProcess, playerDirection, stopMoving, logger); var followRouteAction = new FollowRouteAction(addonReader.PlayerReader, wowProcess, playerDirection, pathPoints, stopMoving, NpcNameFinder, blacklist, logger, stuckDetector, classConfig); var walkToCorpseAction = new WalkToCorpseAction(addonReader.PlayerReader, wowProcess, playerDirection, spiritPath, pathPoints, stopMoving, logger, stuckDetector); this.RouteInfo = new RouteInfo(pathPoints, spiritPath, followRouteAction, walkToCorpseAction); availableActions.Clear(); if (classConfig.CorpseRunOnly) { availableActions.Add(new WaitAction(logger)); availableActions.Add(new CorpseRunAction(addonReader.PlayerReader, wowProcess, playerDirection, spiritPath, stopMoving, logger, stuckDetector)); } else { availableActions.Add(new ItemsBrokenAction(addonReader.PlayerReader, logger)); availableActions.Add(followRouteAction); availableActions.Add(walkToCorpseAction); availableActions.Add(new TargetDeadAction(wowProcess, addonReader.PlayerReader, NpcNameFinder, logger)); availableActions.Add(new ApproachTargetAction(wowProcess, addonReader.PlayerReader, stopMoving, NpcNameFinder, logger, stuckDetector, classConfig)); if (classConfig.WrongZone.ZoneId > 0) { availableActions.Add(new WrongZoneAction(addonReader.PlayerReader, wowProcess, playerDirection, logger, stuckDetector, classConfig)); } if (classConfig.Parallel.Sequence.Count > 0) { availableActions.Add(new ParallelAction(wowProcess, addonReader.PlayerReader, stopMoving, classConfig.Parallel.Sequence, castingHandler, logger)); } if (classConfig.Loot) { var lootAction = new LootAction(wowProcess, addonReader.PlayerReader, addonReader.BagReader, stopMoving, logger, classConfig); lootAction.AddPreconditions(); availableActions.Add(lootAction); lootAction = new PostKillLootAction(wowProcess, addonReader.PlayerReader, addonReader.BagReader, stopMoving, logger, classConfig); lootAction.AddPreconditions(); availableActions.Add(lootAction); } try { var genericCombat = new CombatAction(wowProcess, addonReader.PlayerReader, stopMoving, logger, classConfig, castingHandler); availableActions.Add(genericCombat); availableActions.Add(new PullTargetAction(wowProcess, addonReader.PlayerReader, NpcNameFinder, stopMoving, logger, castingHandler, stuckDetector, classConfig)); foreach (var item in classConfig.Adhoc.Sequence) { availableActions.Add(new AdhocAction(wowProcess, addonReader.PlayerReader, stopMoving, item, castingHandler, logger)); } } catch (Exception ex) { logger.LogError(ex.ToString()); } } return(availableActions); }