Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
            });
        }