Esempio n. 1
0
        public static void CollectMaterials()
        {
            foreach (var data in Core.GlobalData.Buildings)
            {
                if (data.UpgStart == 0 && data.ProdStart != 0)
                {
                    var def = Definitions.BuildingDef.Items.Item.First(n => n.DefId == data.DefId);
                    if (def.Type != "factory")
                    {
                        continue;
                    }

                    var defs    = def.Levels.Level.First(n => n.Id == data.Level);
                    var started = TimeUtils.FromUnixTime(data.ProdStart);

                    // var prodtime = defs.ProdOutputs.ProdOutput[data.ProdId - 1]; //todo add this!
                    if ((TimeUtils.FixedUTCTime - started).TotalSeconds > defs.ProdOutputs.ProdOutput[0].Time)
                    {
                        Logger.Info(
                            string.Format(
                                Localization.BUILDINGS_COLLECTING,
                                defs.ProdOutputs.ProdOutput[0].Amount,
                                MaterialDB.GetLocalizedName(defs.ProdOutputs.ProdOutput[0].MaterialId)));

                        Networking.AddTask(new Task.FinishBuildingProducingTask(data.InstId));

                        data.ProdStart = 0;
                    }
                }
            }
        }
Esempio n. 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++;
                 }
             }
         }
     }
 }
Esempio n. 3
0
        public static void CollectFish()
        {
            var totalfish = 0;

            foreach (var boat in Core.GlobalData.Boats)
            {
                var started = TimeUtils.FromUnixTime(boat.ProdStart);
                var b       = Definitions.BoatDef.Items.Item.FirstOrDefault(n => n.DefId == 1)?.Levels.Level
                              .FirstOrDefault(n => n.Id == Core.GlobalData.BoatLevel);
                if (b == null)
                {
                    continue;
                }

                var turns = Math.Round((TimeUtils.FixedUTCTime - started).TotalSeconds / b.TurnTime);
                if (turns > b.TurnCount / 2)
                {
                    totalfish += (int)(b.OutputAmount * turns);
                    Networking.AddTask(new Task.TakeFish(boat));
                }
            }

            if (totalfish > 0)
            {
                Logger.Info(string.Format(Localization.FISH_COLLECTING, totalfish));
            }
        }
Esempio n. 4
0
        public static void CollectMuseum()
        {
            // 12 = museum
            var museum = Core.GlobalData.Buildings.FirstOrDefault(n => n.DefId == 12);

            if (museum == null)
            {
                return;
            }

            var slot = Core.GlobalData.Slots.FirstOrDefault(n => n.Type == "museum_ship");

            if (slot == null)
            {
                return;
            }

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

            var started = TimeUtils.FromUnixTime(slot.LastUsed);
            var b       = Definitions.MuseumLvlDef.Items.Item.First(n => n.DefId == slot.Level);

            var turns = Math.Round((TimeUtils.FixedUTCTime - started).TotalSeconds / b.TurnTime);

            if (turns >= b.TurnCount)
            {
                museum.ProdStart = TimeUtils.GetEpochTime();
                Logger.Info(Localization.MUSEUM_COLLECT);
                Networking.AddTask(new Task.ConfirmMuseumTask(b.TurnCount));
            }
        }
Esempio n. 5
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);
            }
        /// <summary>
        /// Parse a line from ausearch output into an AuditEvent
        /// </summary>
        /// <param name="eventText">Line from ausearch</param>
        /// <returns>An AuditEvent</returns>
        public static AuditEvent ParseFromAusearchLine(string eventText)
        {
            var messageData = new Dictionary <AuditMessageProperty, string>();

            foreach (AuditMessageProperty prop in Enum.GetValues(typeof(AuditMessageProperty)))
            {
                if (TryGetPropertyValue(eventText, prop, out string match))
                {
                    string expectedValue;
                    if (prop == AuditMessageProperty.SocketAddress)
                    {
                        expectedValue = match; // In case of 'saddr', hex-encoded bytes are expected
                    }
                    else
                    {
                        expectedValue = EncodedAuditFieldsUtils.DecodeHexStringIfNeeded(match, Encoding.UTF8);
                    }

                    messageData[prop] = expectedValue;

                    if (prop == AuditMessageProperty.ProcessArgCount && UInt32.TryParse(match, out uint argCount))
                    {
                        string[] processCommandArgs = new string[argCount];
                        for (int i = 0; i < argCount; i++)
                        {
                            string parameter = Regex.Match(eventText, string.Format(QuotedPropertyRegexTemplate, $"a{i}")).Value;
                            if (string.IsNullOrEmpty(parameter))
                            {
                                var encodedString = Regex.Match(eventText, string.Format(PropertyRegexTemplate, $"a{i}")).Value;
                                parameter = EncodedAuditFieldsUtils.DecodeHexStringIfNeeded(encodedString, Encoding.UTF8);
                            }

                            processCommandArgs[i] = parameter;
                        }
                        messageData[AuditMessageProperty.CommandLine] = String.Join(' ', processCommandArgs);
                    }
                }
            }
            if (messageData.ContainsKey(AuditMessageProperty.FilePath))
            {
                messageData[AuditMessageProperty.Executable] = messageData[AuditMessageProperty.FilePath];
            }
            AuditEventType type         = (AuditEventType)TypeRegex.Match(eventText).Value.ParseFromDisplayName <AuditEventType>();
            string         eventId      = IdRegex.Match(eventText).Value;
            DateTime       eventTimeUTC = TimeUtils.FromUnixTime(eventId.Split(':').First());

            var ev = new AuditEvent
                     (
                type,
                eventTimeUTC,
                eventId,
                messageData,
                eventText
                     );

            return(ev);
        }
Esempio n. 7
0
        public DateTime RetrieveGuildBamDateTime()
        {
            var t = DownloadGuildBamTimestamp();

            t.Wait();
            var ts = t.Result;

            return(TimeUtils.FromUnixTime(ts));
        }
 public PlayerLevel(IDictionary data)
 {
     foreach (string x in data.Keys)
     {
         if (x == "date")
         {
             date = TimeUtils.FromUnixTime(data[x]);
         }
         else
         {
             this[x] = data[x];
         }
     }
 }
    public PlayerAward(Dictionary <string, object> data)
    {
        foreach (string x in data.Keys)
        {
            if (x == "date")
            {
                date = TimeUtils.FromUnixTime(data[x]);
                continue;
            }

            if (x == "awarded")
            {
                awarded = new PlayerAchievement((Dictionary <string, object>)data[x]);
                continue;
            }

            this[x] = data[x];
        }
    }
Esempio n. 10
0
            public TakeFish(Boat boat)
            {
                this.Time = (uint)TimeUtils.GetEpochTime();

                // calculate turns :thinking:
                var started = TimeUtils.FromUnixTime(boat.ProdStart);
                var b       = Definitions.BoatDef.Items.Item.First(n => n.DefId == 1).Levels.Level
                              .First(n => n.Id == Core.GlobalData.BoatLevel);
                var turns = Math.Round((TimeUtils.FixedUTCTime - started).TotalSeconds / b.TurnTime);

                this.CustomObjects.Add("inst_id", boat.InstId);
                if (turns > b.TurnCount)
                {
                    this.CustomObjects.Add("turns", b.TurnCount);
                }
                else
                {
                    this.CustomObjects.Add("turns", turns);
                }

                Core.GlobalData.Boats.First(n => n.InstId == boat.InstId).ProdStart = TimeUtils.GetEpochTime();
            }
Esempio n. 11
0
 public static bool IsVoyageCompleted(this Ship ship, int offset = 0)
 {
     return((TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(ship.Sent)).TotalSeconds > ship.GetTravelTime() + offset);
 }
Esempio n. 12
0
        public static void Sleep()
        {
            if (Core.Config.sleepevery != 0)
            {
                if ((DateTime.Now - Core.lastsleep).TotalMinutes >= (Core.Config.sleepeveryhrs
                                                                         ? Core.Config.sleepevery * 60
                                                                         : Core.Config.sleepevery))
                {
                    var sleeptimeinmin = 0;

                    Core.lastsleep = DateTime.Now;
                    if (Core.Config.smartsleepenabled)
                    {
                        // 10 min
                        var thresholdinmin = 20;
                        var DelayMinList   = new List <int>();
                        foreach (var ship in Core.GlobalData.Ships.Where(n => n.Activated != 0))
                        {
                            if (ship.Sent != 0)
                            {
                                try
                                {
                                    var shipdef =
                                        Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId);
                                    if (shipdef == null)
                                    {
                                        continue;
                                    }

                                    if (Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId)
                                        ?.Levels == null)
                                    {
                                        continue;
                                    }

                                    if (Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId)
                                        ?.Levels.Level.Count == 0)
                                    {
                                        continue;
                                    }

                                    var lvl = Definitions.UpgrDef.Items.Item
                                              .FirstOrDefault(n => n.DefId == ship.TargetId)?.Levels.Level
                                              .FirstOrDefault(n => n.Id == ship.TargetLevel);
                                    if (lvl == null)
                                    {
                                        continue;
                                    }

                                    var willatportattime = ship.Sent + lvl.TravelTime;

                                    // lol xD
                                    if (!((TimeUtils.FixedUTCTime - TimeUtils.FromUnixTime(willatportattime))
                                          .TotalSeconds > 0))
                                    {
                                        DelayMinList.Add(
                                            (int)Math.Ceiling(
                                                (TimeUtils.FromUnixTime(willatportattime) - TimeUtils.FixedUTCTime)
                                                .TotalMinutes));
                                    }
                                }
                                catch (Exception)
                                {
                                    Logger.Debug(
                                        $"Again f*****g exception -> Ship def id = {ship.DefId} Destination = {ship.TargetId} Level = {ship.TargetLevel}");
                                }
                            }
                        }

                        foreach (var building in Core.GlobalData.Buildings)
                        {
                            if (building.ProdStart != 0)
                            {
                                var willbeproducedat = building.ProdStart + Definitions.BuildingDef.Items.Item
                                                       .First(n => n.DefId == building.DefId).Levels.Level
                                                       .First(n => n.Id == building.Level).ProdOutputs.ProdOutput[0]
                                                       .Time;

                                // lol xD
                                DelayMinList.Add(
                                    (int)Math.Ceiling(
                                        (TimeUtils.FromUnixTime(willbeproducedat) - TimeUtils.FixedUTCTime)
                                        .TotalMinutes));
                            }

                            if (building.UpgStart != 0)
                            {
                                var willbeproducedat = building.UpgStart + Definitions.BuildingDef.Items.Item
                                                       .Where(n => n.DefId == building.DefId).First().Levels.Level
                                                       .Where(n => n.Id == building.Level + 1).First().UpgradeTime;

                                DelayMinList.Add(
                                    (int)Math.Ceiling(
                                        (TimeUtils.FromUnixTime(willbeproducedat) - TimeUtils.FixedUTCTime)
                                        .TotalMinutes));
                            }
                        }

                        // Find center
                        var a          = DelayMinList.Where(n => n > thresholdinmin).GroupBy(i => i);
                        var b          = a.OrderByDescending(grp => grp.Count());
                        var mostlikely = b.Select(grp => grp.Key).FirstOrDefault();
                        var avg        = (int)DelayMinList.Average();

                        if (mostlikely > avg * 1.5)
                        {
                            sleeptimeinmin = avg > thresholdinmin ? avg : thresholdinmin;
                        }
                        else
                        {
                            sleeptimeinmin = mostlikely > thresholdinmin ? mostlikely : thresholdinmin;
                        }
                    }
                    else
                    {
                        sleeptimeinmin = Core.Config.sleepforhrs ? Core.Config.sleepfor * 60 : Core.Config.sleepfor;
                    }

                    new Task(
                        () =>
                    {
                        Core.StopBot();
                        Logger.Info(string.Format(Localization.SLEEP_STARTING, sleeptimeinmin));
                        Thread.Sleep(sleeptimeinmin * 60 * 1000);
                        Core.StartBot();
                    }).Start();

                    // StartSleeping
                }
            }
        }
Esempio n. 13
0
        public async Task <DateTime> RetrieveGuildBamDateTime()
        {
            var t = await DownloadGuildBamTimestamp();

            return(TimeUtils.FromUnixTime(t));
        }
Esempio n. 14
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);
            }
Esempio n. 15
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());
                    }