Пример #1
0
 public static void LogUnload(this Ship ship)
 {
     Logger.Info(
         Localization.SHIPS_UNLOADING + LocalizationCache.GetNameFromLoc(
             Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.NameLoc,
             Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.Name));
 }
Пример #2
0
 public static void FinishUpgrade()
 {
     foreach (var data in Core.GlobalData.Buildings)
     {
         if (data.UpgStart != 0 && data.ProdStart == 0)
         {
             var defined = Definitions.BuildingDef.Items.Item.FirstOrDefault(n => n.DefId == data.DefId);
             var upgrade = defined.Levels.Level.FirstOrDefault(n => n.Id == data.Level + 1);
             if (upgrade != null)
             {
                 if ((TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(data.UpgStart)).TotalSeconds
                     > upgrade.UpgradeTime)
                 {
                     Logger.Info(
                         string.Format(
                             Localization.BUILDINGS_FINISHED_UPG,
                             LocalizationCache.GetNameFromLoc(defined.NameLoc, defined.Name)));
                     Networking.AddTask(new Task.FinishBuildingUpgradeTask(data.InstId));
                     data.UpgStart = 0;
                     data.Level++;
                 }
             }
         }
     }
 }
Пример #3
0
        public static void UpgradeContractor()
        {
            for (var index = 0; index < Core.GlobalData.Contracts.Count; index++)
            {
                var upg = Core.GlobalData.Contracts[index];
                if (upg.Done == 1)
                {
                    continue;
                }
                var def       = Definitions.ConDef.Items.Item.FirstOrDefault(n => n.DefId == upg.DefId);
                var currquest = def?.Quests.Quest.FirstOrDefault(n => n.Id == upg.QuestId);
                if (currquest == null)
                {
                    continue;
                }

                if (currquest.Amount != 0 && upg.Progress >= currquest.Amount && upg.QuestId <= def.QuestCount)
                {
                    // upgrade ofc
                    Logger.Info(
                        string.Format(Localization.CONTRACTOR_UPGRADED
                                      , LocalizationCache.GetNameFromLoc(def.NameLoc, def.Name)));

                    // todo: add new local
                    Networking.AddTask(new Task.ConfirmContractTask(upg.DefId, upg.QuestId, currquest.Rewards));

                    upg.QuestId++;
                    upg.Progress = 0;
                }
            }
        }
Пример #4
0
            public static BindingList <Ship> GetShips()
            {
                var ret = new BindingList <Ship>();

                if (Core.GlobalData == null)
                {
                    return(ret);
                }

                if (Core.GlobalData.Buildings == null)
                {
                    return(ret);
                }

                foreach (var ship in Core.GlobalData.Ships.Where(n => n.Activated != 0))
                {
                    var name = LocalizationCache.GetNameFromLoc(
                        Definitions.ShipDef.Items.Item.Where(n => n.DefId == ship.DefId)?.FirstOrDefault()?.NameLoc,
                        Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.Name);
                    var Ship = new Ship();
                    Ship.ID   = ship.InstId;
                    Ship.Name = name;

                    var willatportat = string.Empty;
                    if (ship.Sent != 0)
                    {
                        try
                        {
                            Ship.Route = LocalizationCache.GetNameFromLoc(ship.GetTravelName(), string.Empty);
                            if (ship.Type == "social_contract")
                            {
                                Ship.Route = PrivateLocal.SHIPS_SOCIAL_CONTRACT;
                            }

                            var willatportattime = ship.Sent + ship.GetTravelTime();

                            // lol xD
                            if ((TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willatportattime)).TotalSeconds > 0)
                            {
                                willatportat = "--:--:--";
                            }
                            else
                            {
                                willatportat =
                                    (TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willatportattime)).ToString(
                                        @"hh\:mm\:ss");
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }

                    Ship.InPortAt = willatportat;
                    ret.Add(Ship);
                }

                return(ret);
            }
Пример #5
0
        public static void LoadSocContractor(Ship ship)
        {
            Logger.Info(
                Localization.SHIPS_LOADING + LocalizationCache.GetNameFromLoc(
                    Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).NameLoc,
                    Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).Name));

            Networking.AddTask(new Task.UnloadShipSocialContractTask(ship.InstId));
            ship.Loaded = 1;
        }
Пример #6
0
        public static bool SendToUpgradable(Ship ship, string itemname)
        {
            var bestplace = SendingHelper.GetBestUpgPlace(itemname, ship.Sailors(), Core.Config.upgradablestrategy);

            if (bestplace == null || Core.GlobalData.Sailors < ship.Sailors())
            {
                return(false);
            }

            var place    = Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == bestplace.DefId);
            var shipfull = Definitions.ShipDef.Items.Item.Where(n => n.DefId == ship.DefId).FirstOrDefault();
            var lvls     = place?.Levels.Level.FirstOrDefault(n => n.Id == bestplace.Level);

            if (shipfull?.SlotUsage < place?.Slots)
            {
                return(false);
            }

            if (lvls != null)
            {
                var wecan  = lvls.MaterialKoef * ship.Capacity();
                var remain = bestplace.Amount - bestplace.Progress;
                if (remain < wecan)
                {
                    wecan = remain;
                }

                Core.GlobalData.Sailors -= lvls.Sailors;

                bestplace.CargoOnTheWay += wecan;
                var shp = Core.GlobalData.Ships.Where(n => n.InstId == ship.InstId).First();
                shp.Sent        = TimeUtils.GetEpochTime();
                shp.Loaded      = 0;
                shp.Type        = "upgradeable";
                shp.TargetId    = bestplace.DefId;
                shp.TargetLevel = bestplace.Level;
                Logger.Info(
                    Localization.SHIPS_SENDING + LocalizationCache.GetNameFromLoc(
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).NameLoc,
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).Name));
                Networking.AddTask(new Task.SendShipUpgradeableTask(ship, bestplace, wecan));
                return(true);
            }

            return(false);
        }
Пример #7
0
        public static void LoadUpgradeable(Ship ship)
        {
            var lvl = Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId)?.Levels
                      .Level.First(n => n.Id == ship.TargetLevel);

            if (lvl != null)
            {
                Logger.Info(
                    Localization.SHIPS_LOADING + LocalizationCache.GetNameFromLoc(
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).NameLoc,
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).Name));
                Core.GlobalData.Upgradeables.First(n => n.DefId == ship.TargetId).CargoOnTheWay -=
                    lvl.MaterialKoef * SendingHelper.GetCapacity(ship);
                Core.GlobalData.Upgradeables.First(n => n.DefId == ship.TargetId).Progress +=
                    lvl.MaterialKoef * SendingHelper.GetCapacity(ship);

                Networking.AddTask(new Task.LoadShipUpgradeableTask(ship.InstId));
                ship.Loaded = 1;
            }
        }
Пример #8
0
        public static void UpgradeUpgradable()
        {
            for (var index = 0; index < Core.GlobalData.Upgradeables.Count; index++)
            {
                var upg        = Core.GlobalData.Upgradeables[index];
                var def        = Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == upg.DefId);
                var currentlvl = def?.Levels.Level.FirstOrDefault(n => n.Id == upg.Level);
                if (def == null || currentlvl == null)
                {
                    continue;
                }

                if (upg.Level >= def.MaxLevel)
                {
                    continue;
                }

                var nextlvl = def.Levels.Level.FirstOrDefault(n => n.Id == upg.Level + 1);
                if (nextlvl == null)
                {
                    continue;
                }

                if (upg.Progress >= currentlvl.Amount)
                {
                    // upgrade ofc
                    Core.GlobalData.Upgradeables[index].Level++;
                    Core.GlobalData.Upgradeables[index].Progress     = 0;
                    Core.GlobalData.Upgradeables[index].Amount       = nextlvl.Amount;
                    Core.GlobalData.Upgradeables[index].MaterialKoef = nextlvl.MaterialKoef;
                    Logger.Info(
                        Localization.UPGRADABLE_UPGRADED + LocalizationCache.GetNameFromLoc(def.NameLoc, def.Name));
                    Networking.AddTask(new Task.ConfirmUpgradeableTask(upg.DefId, Core.GlobalData.Level));
                }
            }
        }
Пример #9
0
 public static string GetLocalizedName(int id)
 {
     return(LocalizationCache.GetNameFromLoc(
                Definitions.MatDef.Items.Item.FirstOrDefault(n => n.DefId == id)?.NameLoc.ToLower(),
                Definitions.MatDef.Items.Item.FirstOrDefault(n => n.DefId == id)?.Name));
 }
Пример #10
0
        public static void AutoUpgrade(bool onlyfactory)
        {
            foreach (var data in Core.GlobalData.Buildings)
            {
                if (data.UpgStart == 0 && data.ProdStart == 0)
                {
                    var defined    = Definitions.BuildingDef.Items.Item.FirstOrDefault(n => n.DefId == data.DefId);
                    var neededmats = defined?.Levels.Level.FirstOrDefault(n => n.Id == data.Level + 1);

                    if (defined != null && defined.Type != "factory" && onlyfactory)
                    {
                        continue;
                    }

                    if (neededmats != null)
                    {
                        var ok = true;

                        foreach (var neededmat in neededmats.Materials.Material)
                        {
                            if (Core.GlobalData.Inventory.FirstOrDefault(n => n.Id == neededmat.Id) != null)
                            {
                                var m = Core.GlobalData.Inventory.First(n => n.Id == neededmat.Id);
                                if (neededmat.Amount > m.Amount)
                                {
                                    ok = false;
                                }
                            }
                            else
                            {
                                ok = false;
                                break;
                            }
                        }

                        if (ok)
                        {
                            if (neededmats.ReqId != 0)
                            {
                                var def = Core.GlobalData.Buildings.FirstOrDefault(n => n.DefId == neededmats.ReqId);
                                if (def != null)
                                {
                                    ok = def.Level >= neededmats.ReqLevel;
                                }
                                else
                                {
                                    ok = false;
                                }
                            }

                            if (neededmats.PlayerLevel > Core.GlobalData.Level)
                            {
                                ok = false;
                            }
                        }

                        if (ok)
                        {
                            foreach (var neededmat in neededmats.Materials.Material)
                            {
                                var m = Core.GlobalData.Inventory.First(n => n.Id == neededmat.Id);
                                m.Amount -= neededmat.Amount;
                            }

                            Logger.Info(
                                string.Format(
                                    Localization.BUILDINGS_STARTED_UPG,
                                    LocalizationCache.GetNameFromLoc(defined.NameLoc, defined.Name)));
                            Networking.AddTask(
                                new Task.StartBuildingUpgradeTask(
                                    data.InstId,
                                    data.ProdId,
                                    data.Level,
                                    data.UpgType.ToString(),
                                    data.DefId,
                                    data.GridX,
                                    data.GridY));
                            data.UpgStart = TimeUtils.GetEpochTime();
                        }
                    }
                }
            }
        }
Пример #11
0
 public static string GetShipName(this Ship ship)
 {
     return(LocalizationCache.GetNameFromLoc(
                Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.NameLoc,
                Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.Name));
 }
Пример #12
0
        public static void Login()
        {
            LocalizationController.SetLanguage(Core.Config.language);
            Logger.Logger.Info("Logining ");

            // Get big token
            var tempuid = string.Empty;

            var baseAddress     = new Uri("https://portal.pixelfederation.com/");
            var cookieContainer = new CookieContainer();
            var loc_cookies     = Cookies.ReadCookiesFromDisk();

            //var pxcookie = loc_cookies.GetCookies(new Uri("https://portal.pixelfederation.com"));
            //if (pxcookie.Count != 0)
            //{

            //        if (pxcookie["_pf_login_server_token"].Value == Core.Config.server_token)
            //        {
            //            cookieContainer = loc_cookies;
            //        }

            //}

            using (var handler = new HttpClientHandler {
                CookieContainer = cookieContainer
            })
                using (var client = new HttpClient(handler)
                {
                    BaseAddress = baseAddress
                })
                {
                    cookieContainer.Add(baseAddress, new Cookie("_pf_login_server_token", Core.Config.server_token));
                    Logger.Logger.Info(Localization.NETWORKING_LOGIN_1);
                    client.DefaultRequestHeaders.UserAgent.ParseAdd(
                        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36");

                    try
                    {
                        var result = client.GetAsync("en/seaport/").Result;

                        result = client.GetAsync("en/seaport/").Result;
                        Logger.Logger.Info(Localization.NETWORKING_LOGIN_2);
                        var stringtext = result.Content.ReadAsStringAsync().Result;
                        var regex      = new Regex(
                            "portal.pixelfederation.com\\/(_sp\\/\\?direct_login=portal&portal_request=(.*))\" allowfullscreen>");
                        var match = regex.Match(stringtext);
                        if (match.Success)
                        {
                            var data = client.GetAsync(match.Groups[1].Value).Result.Content.ReadAsStringAsync().Result;
                            Logger.Logger.Info(Localization.NETWORKING_LOGIN_3);
                            regex = new Regex(@"session_id': '(.*)', 'test");

                            Core.Ssid = regex.Match(data).Groups[1].Value;
                            regex     = new Regex(@"pid': '(.*)', 'platform");
                            tempuid   = regex.Match(data).Groups[1].Value;
                            Logger.Logger.Info(Localization.NETWORKING_LOGIN_SUCCESS + Core.Ssid);
                            regex = new Regex(@"'definition_filelist_url1': 'https:\/\/r4a4v3g4\.ssl\.hwcdn\.net\/definitions\/filelists\/(.+)\.xml', 'definition_filelist_url2'");
                            var mtch = regex.Match(data);
                            if (mtch.Success)
                            {
                                DefenitionCache.Update(mtch.Groups[1].Value);
                            }

                            regex = new Regex(
                                @"loca_filelist_url2': 'https:\/\/static\.seaportgame\.com\/localization\/(.+?)\.xml', '");
                            mtch = regex.Match(data);
                            if (mtch.Success)
                            {
                                LocalizationCache.Update(mtch.Groups[1].Value);
                            }

                            regex = new Regex("clientPath = \"(.+)\";");
                            mtch  = regex.Match(data);
                            if (mtch.Success)
                            {
                                Client.DefaultRequestHeaders.Referrer = new Uri(mtch.Groups[1].Value);
                            }

                            Client.DefaultRequestHeaders.Host = "portal.pixelfederation.com";
                            Client.DefaultRequestHeaders.Add("Origin", "https://r4a4v3g4.ssl.hwcdn.net");
                            Client.DefaultRequestHeaders.AcceptEncoding.TryParseAdd("gzip, deflate, br");
                            Client.DefaultRequestHeaders.Accept.TryParseAdd(@"*/*");
                            Client.DefaultRequestHeaders.AcceptLanguage.TryParseAdd(
                                "en-GB,en-US;q=0.9,en;q=0.8,ru;q=0.7,uk;q=0.6");
                            Client.DefaultRequestHeaders.Add("DNT", "1");
                            Client.DefaultRequestHeaders.Add("X-Requested-With", "ShockwaveFlash/32.0.0.114");
                        }
                        else
                        {
                            Logger.Logger.Fatal(Localization.NETWORKING_LOGIN_CANT_LOGIN);
                            return;
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Logger.Fatal(Localization.NETWORKING_LOGIN_CANT_LOGIN + e);
                    }
                }

            var values = new Dictionary <string, string> {
                { "pid", tempuid }, { "session_id", Core.Ssid }
            };
            var s = SendRequest(values, "client.login");

            SendRequest(values, "client.update");
            if (s.StartsWith("<xml>"))
            {
                Core.GlobalData = Parser.ParseXmlToGlobalData(s);
                var rand = new Random();

                var loadtime = rand.Next(5000, 13000);
                if (!Core.Debug)
                {
                    Logger.Logger.Info(string.Format(Localization.NETWORKING_LOGIN_FAKE_LOAD, loadtime / 1000D));
                    Thread.Sleep(loadtime);
                    Logger.Logger.Info(
                        string.Format(Localization.NETWORKING_LOGIN_FAKE_LOAD_ELAPSED, loadtime / 1000D));
                }

                values.Add("loading_time", loadtime.ToString());
                SendRequest(values, "tracking.finishedLoading");
                Cookies.WriteCookiesToDisk(cookieContainer);
                Events.Events.LoginedEvent.Logined.Invoke();
                StatisticsWriter.Start();
            }
            else
            {
                Logger.Logger.Fatal("Server responded " + s);
                Core.StopBot();
            }
        }
Пример #13
0
            public static BindingList <Building> GetBuildings()
            {
                var ret = new BindingList <Building>();

                if (Core.GlobalData == null)
                {
                    return(ret);
                }

                if (Core.GlobalData.Buildings == null)
                {
                    return(ret);
                }

                foreach (var building in Core.GlobalData.Buildings)
                {
                    var Building = new Building();
                    Building.ID   = building.InstId;
                    Building.Name = LocalizationCache.GetNameFromLoc(
                        Definitions.BuildingDef.Items.Item.Where(n => n.DefId == building.DefId).FirstOrDefault()
                        ?.NameLoc,
                        Definitions.BuildingDef.Items.Item.Where(n => n.DefId == building.DefId).FirstOrDefault()
                        ?.Name);
                    Building.Level = building.Level;
                    var producing = string.Empty;
                    if (building.ProdStart != 0)
                    {
                        var willbeproducedat = building.ProdStart + Definitions.BuildingDef.Items.Item
                                               .Where(n => n.DefId == building.DefId).FirstOrDefault()?.Levels.Level
                                               .Where(n => n.Id == building.Level).FirstOrDefault()?.ProdOutputs
                                               .ProdOutput[0].Time;
                        if (willbeproducedat.HasValue)
                        {
                            producing = (TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willbeproducedat.Value))
                                        .ToString(@"hh\:mm\:ss");
                        }

                        // lol xD
                    }

                    var upgrade = string.Empty;
                    if (building.UpgStart != 0)
                    {
                        var willbeproducedat = building.UpgStart + Definitions.BuildingDef.Items.Item
                                               .Where(n => n.DefId == building.DefId).FirstOrDefault()?.Levels.Level
                                               .Where(n => n.Id == building.Level + 1).FirstOrDefault()
                                               ?.UpgradeTime;
                        if (willbeproducedat.HasValue)
                        {
                            upgrade = (TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime((long)willbeproducedat))
                                      .ToString(@"hh\:mm\:ss");
                        }
                    }

                    if (building.DefId == 12)
                    {
                        if (building.UpgStart == 0)
                        {
                            var slot = Core.GlobalData.Slots.FirstOrDefault(n => n.Type == "museum_ship");
                            if (slot == null)
                            {
                                continue;
                            }

                            if (slot.SlotUsed == 0)
                            {
                                continue;
                            }

                            var started = TimeUtils.FromUnixTime(slot.LastUsed);

                            var b = Definitions.MuseumLvlDef.Items.Item.First(n => n.DefId == building.Level);

                            producing = (TimeUtils.FixedUTCTime - started.AddSeconds(b.TurnCount * b.TurnTime))
                                        .ToString(@"hh\:mm\:ss");
                        }
                    }

                    Building.UpgradeIgnore = false;

                    Building.Producing = producing;
                    Building.Upgrade   = upgrade;
                    ret.Add(Building);
                }

                return(ret);
            }
Пример #14
0
                    private string GetShips()
                    {
                        var builder = new StringBuilder();

                        if (Core.GlobalData != null)
                        {
                            if (Core.GlobalData.Ships != null)
                            {
                                foreach (var ship in Core.GlobalData.Ships.Where(n => n.Activated != 0))
                                {
                                    var name = LocalizationCache.GetNameFromLoc(
                                        Definitions.ShipDef.Items.Item.Where(n => n.DefId == ship.DefId)?.FirstOrDefault()?.NameLoc,
                                        Definitions.ShipDef.Items.Item.FirstOrDefault(n => n.DefId == ship.DefId)?.Name);

                                    builder.Append(name + "|");


                                    if (ship.Sent != 0)
                                    {
                                        try
                                        {
                                            if (ship.Type == "social_contract")
                                            {
                                                builder.Append(PrivateLocal.SHIPS_SOCIAL_CONTRACT);
                                            }
                                            else
                                            {
                                                builder.Append(LocalizationCache.GetNameFromLoc(ship.GetTravelName(), string.Empty));
                                            }



                                            var willatportattime = ship.Sent + ship.GetTravelTime();

                                            // lol xD
                                            if ((TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willatportattime)).TotalSeconds > 0)
                                            {
                                                builder.Append("|--:--:--");
                                            }
                                            else
                                            {
                                                builder.Append("|" +
                                                               (TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willatportattime)).ToString(
                                                                   @"hh\:mm\:ss"));
                                            }
                                        }
                                        catch (Exception)
                                        {
                                        }
                                    }


                                    builder.AppendLine();
                                }
                            }
                            else
                            {
                                builder.Append(PrivateLocal.TELEGRAM_EXCEPTION_NULL);
                            }
                        }
                        else
                        {
                            builder.Append(PrivateLocal.TELEGRAM_EXCEPTION_NULL);
                        }

                        return(builder.ToString());
                    }