示例#1
0
 private void AddToVoidTraderPostQueue(WarframeVoidTrader trader, bool notifyClient, bool traderHasExpired)
 {
     if (!_voidTraderMessagePostQueue.Any(x => x.WarframeEvent.GUID == trader.GUID))
     {
         _voidTraderMessagePostQueue.Add(new MessageQueueElement <WarframeVoidTrader>(trader, notifyClient, traderHasExpired));
     }
 }
示例#2
0
        public IEnumerable <WarframeVoidTrader> GetVoidTrader()
        {
            JObject worldState        = _scraper.WorldState;
            var     resultVoidTraders = new List <WarframeVoidTrader>();

            foreach (var jsonTrader in worldState["VoidTraders"])
            {
                WarframeVoidTrader currentTrader = _voidTraders.Find(x => x.GUID == jsonTrader["_id"]["$oid"].ToString());
                if (currentTrader == null)
                {
                    var id  = jsonTrader["_id"]["$oid"].ToString();
                    var loc = jsonTrader["Node"].ToString();

                    var millisecondsUntilStart  = long.Parse(jsonTrader["Activation"]["$date"]["$numberLong"].ToString()) - (long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER);
                    var millisecondsUntilExpire = long.Parse(jsonTrader["Expiry"]["$date"]["$numberLong"].ToString()) - (long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER);
                    var startTime  = DateTime.Now.AddMilliseconds(millisecondsUntilStart);
                    var expireTime = DateTime.Now.AddMilliseconds(millisecondsUntilExpire);

                    if (DateTime.Now < expireTime)
                    {
                        var nodeName = loc;
                        var itemName = string.Empty;

                        using (var unit = new UnitOfWork(new WarframeDataContext()))
                        {
                            nodeName = unit.WFSolarNodes.GetNodeName(loc);
                        }

                        currentTrader = new WarframeVoidTrader(id, nodeName, startTime, expireTime);
                        _voidTraders.Add(currentTrader);
                    }

                    if (currentTrader != null)
                    {
                        JToken traderInventory = jsonTrader["Manifest"];
                        if (!traderInventory.IsNullOrEmpty())
                        {
                            foreach (var i in traderInventory)
                            {
                                using (var unit = new UnitOfWork(new WarframeDataContext()))
                                {
                                    currentTrader.AddTraderItem(unit.WarframeItems.GetItemName(i["ItemType"].ToString()), int.Parse(i["RegularPrice"].ToString()), int.Parse(i["PrimePrice"].ToString()));
                                }
                            }
                        }
                    }
                }

                _voidTraders.RemoveAll(x => x.ExpireTime < DateTime.Now);

                if ((currentTrader != null) && (currentTrader.ExpireTime > DateTime.Now))
                {
                    resultVoidTraders.Add(currentTrader);
                }
            }
            return(_voidTraders);
        }
        public static string DiscordMessage(this WarframeVoidTrader trader, bool isNotification)
        {
            var ts              = (DateTime.Now < trader.StartTime) ? trader.GetTimeRemaining(true) : trader.GetTimeRemaining(false);
            var days            = ts.Days;
            var hours           = ts.Hours;
            var minutes         = ts.Minutes;
            var traderName      = "Baro Ki Teer";
            var traderInventory = new StringBuilder();

            //Ensure that the trader's inventory is not empty first.
            if (trader.Inventory.Count() > 0)
            {
                foreach (var i in trader.Inventory)
                {
                    traderInventory.Append(i.Name);
                    if (i.Credits > 0)
                    {
                        traderInventory.Append($" {i.Credits}cr{(i.Ducats > 0 ? " +" : string.Empty)}");
                    }
                    if (i.Ducats > 0)
                    {
                        traderInventory.Append($" {i.Ducats}dc");
                    }
                    traderInventory.AppendLine();
                }
            }

            var traderAction = (DateTime.Now < trader.StartTime) ? "arriving at" : "leaving";

            var returnMessage = new StringBuilder();

            if (!isNotification)
            {
                returnMessage.AppendLine($"{traderName} is {traderAction} {trader.DestinationName} in {$"{days} days {hours} hours and {minutes} minutes"}.{Environment.NewLine}");
                returnMessage.Append(traderInventory.ToString());
            }
            else
            {
                returnMessage.AppendLine(traderName);
                returnMessage.AppendLine(trader.DestinationName);
            }

            return(returnMessage.ToString());
        }