private Resources Attack(IEnumerable <EspionageReport> messages) { Progress = "Attacking"; //Check if the planet wasn't changed in the meantime (ie. by user action), we'd be sending cargos for a long trip ResponseContainer resp = Client.IssueRequest(RequestBuilder.GetPage(PageType.Fleet, PlanetId)); OgamePageInfo info = resp.GetParsedSingle <OgamePageInfo>(); Resources totalPlunder = new Resources(); foreach (var farm in Strategy.GetTargets(messages)) { Thread.Sleep(3000 + _sleepTime.Next(2000)); totalPlunder += farm.ExpectedPlunder; Logger.Instance.Log(LogLevel.Info, $"Attacking planet {farm.Destination} to plunder {farm.ExpectedPlunder}"); SendFleetCommand attack = new SendFleetCommand() { Mission = farm.Mission, Destination = farm.Destination, PlanetId = PlanetId, Fleet = farm.Fleet }; attack.Run(); } return(totalPlunder); }
private static void SetupProxyCommands(OGameClient client, Config config, OgameClientProxy proxy) { proxy.AddCommand("bid", (parameters) => { ResourceType resourceType = ResourceType.Deuterium; string resource = parameters["resource"]; if (resource != null) { if (resource.Equals("m", StringComparison.InvariantCultureIgnoreCase) || resource.Equals("metal", StringComparison.InvariantCultureIgnoreCase)) { resourceType = ResourceType.Metal; } else if (resource.Equals("c", StringComparison.InvariantCultureIgnoreCase) || resource.Equals("crystal", StringComparison.InvariantCultureIgnoreCase)) { resourceType = ResourceType.Crystal; } else if (resource.Equals("d", StringComparison.InvariantCultureIgnoreCase) || resource.Equals("deuterium", StringComparison.InvariantCultureIgnoreCase)) { resourceType = ResourceType.Deuterium; } } BidAuctionCommand bid = new BidAuctionCommand() { PlanetId = int.Parse(parameters["cp"]), BidResource = resourceType }; bid.Run(); }); proxy.AddCommand("transport", (parameters) => { TransportAllCommand transportAll = new TransportAllCommand() { PlanetId = int.Parse(parameters["from"]), Destination = DbHelper.GetPlanetCoordinateByCp(int.Parse(parameters["to"])) }; transportAll.Run(); }); proxy.AddCommand("readmessages", (parameters) => { (new ReadAllMessagesCommand()).Run(); }); proxy.AddCommand("scanaround", (parameters) => { int range = 60; if (parameters["range"] != null) { range = int.Parse(parameters["range"]); } new ScanAroundOwnCommand() { Range = range }.Run(); }); proxy.AddCommand("hunt", (parameters) => { IFarmingStrategy strategy = new FleetFinderStrategy() { MaxRanking = config.Farming.HuntMaximumRanking > 0 ? config.Farming.HuntMaximumRanking : 400, MinRanking = config.Farming.HuntMinimumRanking > 0 ? config.Farming.HuntMinimumRanking : 600, MoonsOnly = config.Farming.HuntMoonsOnly, ProbeCount = config.Farming.HuntProbeCount > 0 ? config.Farming.HuntProbeCount : 4 }; Farm(client, config, strategy, parameters).Run(); }); proxy.AddCommand("build", (parameters) => { BuildCommand cmd = new BuildCommand() { PlanetId = int.Parse(parameters["cp"]), BuildingToBuild = (BuildingType)int.Parse(parameters["id"]) }; cmd.Run(); }); proxy.AddCommand("fs", (parameters) => { FleetSaveCommand cmd = new FleetSaveCommand() { PlanetId = int.Parse(parameters["cp"]), ReturnTime = DateTimeOffset.Now.AddMinutes(int.Parse(parameters["in"])) }; cmd.Run(); }); proxy.AddCommand("farm", (parameters) => { IFarmingStrategy strategy = new InactiveFarmingStrategy() { MinimumCargosToSend = 2, SlotsLeaveRemaining = parameters["slots"] == null ? 1 : int.Parse(parameters["slots"]), MinimumTotalStorageLevel = 5, ResourcePriority = new Resources(1, 2, 1), MinimumRanking = config.Farming.InactiveMinimumRanking }; Farm(client, config, strategy, parameters).Run(); }); proxy.AddCommand("schedule", (parameters) => { long unixTime = 0; var runAt = parameters["at"]; var runIn = parameters["in"]; if (runAt != null) { unixTime = long.Parse(runAt); } else if (runIn != null) { int secs = 0; if (runIn.Contains('h') || runIn.Contains('m')) { // this should be a function, or maybe there's a way to use TimeSpan.ParseExact to parse this correctly int hours = 0, minutes = 0; int hIx = runIn.IndexOf('h'); int mIx = runIn.IndexOf('m'); if (hIx != -1) { hours = int.Parse(runIn.Substring(0, hIx)); } if (mIx != -1) { hIx++; minutes = int.Parse(runIn.Substring(hIx, mIx - hIx)); } secs = hours * 3600 + minutes * 60; } else { secs = int.Parse(runIn); } unixTime = DateTimeOffset.Now.AddSeconds(secs).ToUnixTimeSeconds(); } string cmd = parameters["cmd"]; parameters.Remove("cmd"); parameters.Remove("at"); parameters.Remove("in"); var command = new RunProxyCommand() { Command = cmd, Parameters = parameters }; client.Commander.Run(command, DateTimeOffset.FromUnixTimeSeconds(unixTime)); }); proxy.AddCommand("fake", (parameters) => { FakePlanetExclusive op = new FakePlanetExclusive() { PlanetId = int.Parse(parameters["cp"]) }; op.Run(); }); proxy.AddCommand("fullscan", (parameters) => new ScanCommand() { From = new SystemCoordinate(1, 1), To = new SystemCoordinate(6, 499), }.Run()); proxy.AddCommand("expedition", (parameters) => { int cp = int.Parse(parameters["cp"]); Coordinate dest; using (BotDb db = new BotDb()) { var here = db.Planets.FirstOrDefault(p => p.PlanetId == cp); dest = Coordinate.Create(here.Coordinate, 16, CoordinateType.Unknown); } SendFleetCommand cmd = new SendFleetCommand() { PlanetId = cp, Destination = dest, Mission = MissionType.Expedition }; cmd.Fleet = new FleetComposition(); cmd.Fleet.Ships[ShipType.Bomber] = 1; cmd.Fleet.Ships[ShipType.LightFighter] = 5; cmd.Fleet.Ships[ShipType.LargeCargo] = 192; cmd.Fleet.Ships[ShipType.EspionageProbe] = 1; cmd.Run(); }); proxy.AddCommand("jump", (parameters) => { int cp = int.Parse(parameters["from"]); int dest = int.Parse(parameters["to"]);; GateJumpCommand cmd = new GateJumpCommand() { PlanetId = cp, Destination = dest, Fleet = null }; cmd.Run(); }); }