Example #1
0
        private async Task <List <OpenTrade> > ConvertToOpenTrades(IAsyncEnumerable <RawCsvData> readData)
        {
            var result = new List <OpenTrade>(50);

            await foreach (var entry in readData)
            {
                var trade = new OpenTrade
                            (
                    accountId: _curAccount.CurrentAccount.Id,
                    datetime: entry.Time,
                    type: entry.Type.ParseToSideEnum(),
                    firstCurrency: entry.Pair.GetCurrencyEnumPair().Item1,
                    secondCurrency: entry.Pair.GetCurrencyEnumPair().Item2,
                    price: entry.Price,
                    amount: entry.Vol,
                    sum: entry.Cost,
                    feeCurency: Currency.USD,
                    fee: entry.Fee
                            );

                result.Add(trade);
            }

            return(result);
        }
Example #2
0
        void OnItemAddedToContainer(ItemContainer container, Item item)
        {
            if (container.playerOwner is BasePlayer)
            {
                OnlinePlayer onlinePlayer;
                if (onlinePlayers.TryGetValue(container.playerOwner, out onlinePlayer) && onlinePlayer.Trade != null)
                {
                    OpenTrade t = onlinePlayers [container.playerOwner].Trade;

                    if (!t.complete)
                    {
                        t.ResetAcceptance();

                        if (t.IsValid())
                        {
                            ShowTrades(t, "Trade: Pending");
                        }
                        else
                        {
                            TradeCloseBoxes(t);
                        }
                    }
                }
            }
        }
Example #3
0
        void OnItemRemovedFromContainer(ItemContainer container, Item item)
        {
            if (container.playerOwner is BasePlayer)
            {
                OnlinePlayer onlinePlayer;
                if (onlinePlayers.TryGetValue(container.playerOwner, out onlinePlayer) && onlinePlayer.Trade != null)
                {
                    OpenTrade t = onlinePlayers[container.playerOwner].Trade;
                    if (!t.complete)
                    {
                        t.sourceAccept = false;
                        t.targetAccept = false;

                        if (t.IsValid())
                        {
                            ShowTrades(t, "Trade: Pending");
                        }
                        else
                        {
                            TradeCloseBoxes(t);
                        }
                    }
                }
            }
        }
Example #4
0
 void TradeReply(OpenTrade trade, string msg, string msg2 = null)
 {
     if (msg2 == null)
     {
         msg2 = msg;
     }
     SendReply(trade.targetPlayer, GetMsg(msg, trade.targetPlayer));
     SendReply(trade.sourcePlayer, GetMsg(msg2, trade.sourcePlayer));
 }
Example #5
0
        void StartTrades(BasePlayer source, BasePlayer target)
        {
            var trade = new OpenTrade(onlinePlayers [source], onlinePlayers [target]);

            StartTrade(source, target, trade);
            if (source != target)
            {
                StartTrade(target, source, trade);
            }
        }
Example #6
0
        void TradeCloseBoxes(OpenTrade trade)
        {
            if (trade.IsSourceValid())
            {
                CloseBoxView(trade.sourcePlayer, trade.source.View);
            }

            if (trade.IsTargetValid() && trade.targetPlayer != trade.sourcePlayer)
            {
                CloseBoxView(trade.targetPlayer, trade.target.View);
            }
        }
Example #7
0
        void StartTrade(BasePlayer source, BasePlayer target, OpenTrade trade)
        {
            OpenBox(source, source);

            if (!openTrades.Contains(trade))
            {
                openTrades.Add(trade);
            }
            onlinePlayers [source].Trade = trade;

            timer.In(0.1f, () => ShowTrade(source, trade, GetMsg("Trade: Pending", source)));
        }
Example #8
0
        void FinishTrade(OpenTrade t)
        {
            foreach (var i in t.source.View.inventory.itemList.ToArray())
            {
                i.MoveToContainer(t.target.containerMain);
            }

            foreach (var i in t.target.View.inventory.itemList.ToArray())
            {
                i.MoveToContainer(t.source.containerMain);
            }

            TradeCloseBoxes(t);
        }
Example #9
0
        bool CheckTargetInventory(OpenTrade t)
        {
            var i = t.source.View.inventory.itemList.Count;
            var f = t.target.containerMain.capacity - t.target.containerMain.itemList.Count;

            if (i > f)
            {
                TradeReply(t, "Inventory: You", "Inventory: Them");
                t.targetAccept = false;
                ShowTrades(t, "Inventory: Generic");
                return(false);
            }

            return(true);
        }
Example #10
0
        void CompleteTrade(OpenTrade t)
        {
            if (t.IsInventorySufficient())
            {
                t.ResetAcceptance();
                ShowTrades(t, "Inventory: Generic");
                return;
            }
            if (t.complete)
            {
                return;
            }
            t.complete = true;
            t.closing  = true;

            TradeCooldown(t);

            TradeReply(t, "Status: Completing");
            Interface.Oxide.NextTick(() => FinishTrade(t));
        }
Example #11
0
        object CanMoveItem(Item item, PlayerInventory playerLoot, uint targetContainer, int targetSlot)
        {
            var player = playerLoot.GetComponent <BasePlayer> ();

            if (player == null)
            {
                return(null);
            }

            OnlinePlayer onlinePlayer;

            if (onlinePlayers.TryGetValue(player, out onlinePlayer) && onlinePlayer.Trade != null)
            {
                OpenTrade t = onlinePlayers [player].Trade;
                if (t.closing)
                {
                    return(false);
                }
            }

            return(null);
        }
Example #12
0
        void OnPlayerLootEnd(PlayerLoot inventory)
        {
            var player = inventory.GetComponent <BasePlayer> ();

            if (player == null)
            {
                return;
            }

            OnlinePlayer onlinePlayer;

            if (onlinePlayers.TryGetValue(player, out onlinePlayer) && onlinePlayer.View != null)
            {
                if (onlinePlayer.View == inventory.entitySource && onlinePlayer.Trade != null)
                {
                    OpenTrade t = onlinePlayer.Trade;

                    if (!t.closing)
                    {
                        t.closing = true;
                        if (!onlinePlayer.Trade.complete)
                        {
                            if (onlinePlayer.Trade.sourcePlayer == player)
                            {
                                TradeReply(t, "Status: They Interrupted", "Status: You Interrupted");
                            }
                            else
                            {
                                TradeReply(t, "Status: You Interrupted", "Status: They Interrupted");
                            }
                        }
                        CloseBoxView(player, (StorageContainer)inventory.entitySource);
                    }
                }
            }
        }
Example #13
0
        void CloseBoxView(BasePlayer player, StorageContainer view)
        {
            OnlinePlayer onlinePlayer;

            if (!onlinePlayers.TryGetValue(player, out onlinePlayer))
            {
                return;
            }
            if (onlinePlayer.View == null)
            {
                return;
            }

            HideTrade(player);
            if (onlinePlayer.Trade != null)
            {
                OpenTrade t = onlinePlayer.Trade;
                t.closing = true;

                if (t.sourcePlayer == player && t.targetPlayer != player && t.target.View != null)
                {
                    t.target.Trade = null;
                    CloseBoxView(t.targetPlayer, t.target.View);
                }
                else if (t.targetPlayer == player && t.sourcePlayer != player && t.source.View != null)
                {
                    t.source.Trade = null;
                    CloseBoxView(t.sourcePlayer, t.source.View);
                }

                if (openTrades.Contains(t))
                {
                    openTrades.Remove(t);
                }
            }

            if (view.inventory.itemList.Count > 0)
            {
                foreach (Item item in view.inventory.itemList.ToArray())
                {
                    if (item.position != -1)
                    {
                        item.MoveToContainer(player.inventory.containerMain);
                    }
                }
            }

            if (view.inventory.itemList.Count > 0)
            {
                foreach (Item item in view.inventory.itemList.ToArray())
                {
                    if (item.position != -1)
                    {
                        item.MoveToContainer(player.inventory.containerBelt);
                    }
                }
            }

            if (player.inventory.loot.entitySource != null)
            {
                player.inventory.loot.Invoke("SendUpdate", 0.1f);
                view.SendMessage("PlayerStoppedLooting", player, SendMessageOptions.DontRequireReceiver);
                player.SendConsoleCommand("inventory.endloot", null);
            }

            player.inventory.loot.entitySource = null;
            player.inventory.loot.itemSource   = null;
            player.inventory.loot.containers   = new List <ItemContainer> ();

            view.inventory = new ItemContainer();

            onlinePlayer.Clear();

            view.Kill(BaseNetworkable.DestroyMode.None);

            if (onlinePlayers.Values.Count(p => p.View != null) <= 0)
            {
                UnsubscribeAll();
            }
        }
Example #14
0
        private void ShowTrade(BasePlayer player, OpenTrade trade, string status)
        {
            HideTrade(player);

            OnlinePlayer onlinePlayer;

            if (!onlinePlayers.TryGetValue(player, out onlinePlayer))
            {
                return;
            }

            if (onlinePlayer.View == null)
            {
                return;
            }

            StorageContainer sourceContainer = onlinePlayer.View;
            StorageContainer targetContainer = null;
            BasePlayer       target          = null;

            if (trade.sourcePlayer == player && trade.target.View != null)
            {
                targetContainer = trade.target.View;
                target          = trade.targetPlayer;
                if (target is BasePlayer)
                {
                    if (trade.targetAccept)
                    {
                        status += string.Format(GetMsg("Trade: They Accepted", player), CleanName(target.displayName));
                    }
                    else if (trade.sourceAccept)
                    {
                        status += GetMsg("Trade: You Accepted", player);
                    }
                }
                else
                {
                    return;
                }
            }
            else if (trade.targetPlayer == player && trade.source.View != null)
            {
                targetContainer = trade.source.View;
                target          = trade.sourcePlayer;
                if (target is BasePlayer)
                {
                    if (trade.sourceAccept)
                    {
                        status += string.Format(GetMsg("Trade: They Accepted", player), CleanName(target.displayName));
                    }
                    else if (trade.targetAccept)
                    {
                        status += GetMsg("Trade: You Accepted", player);
                    }
                }
                else
                {
                    return;
                }
            }

            if (targetContainer == null || target == null)
            {
                return;
            }

            string send = jsonTrade;

            for (int i = 1; i < 100; i++)
            {
                send = send.Replace("{" + i + "}", Oxide.Core.Random.Range(9999, 99999).ToString());
            }

            send = send.Replace("{sourcename}", CleanName(player.displayName));
            if (target != null)
            {
                send = send.Replace("{targetname}", CleanName(target.displayName));
            }
            else
            {
                send = send.Replace("{targetname}", GetMsg("Player: Unknown", player));
            }
            send = send.Replace("{targetstatus}", status);

            var           slotsAvailable = target.inventory.containerMain.capacity - (target.inventory.containerMain.itemList.Count);
            List <string> sourceItems    = new List <string> ();
            var           x = 1;

            foreach (Item i in sourceContainer.inventory.itemList)
            {
                string n = "";
                if (i.IsBlueprint())
                {
                    n = i.amount + " x <color=lightblue>" + i.blueprintTargetDef.displayName.english + " [" + GetMsg("Item: BP", player) + "]</color>";
                }
                else
                {
                    n = i.amount + " x " + i.info.displayName.english;
                }

                if (x > slotsAvailable)
                {
                    n = "<color=red>" + n + "</color>";
                }
                x++;

                sourceItems.Add(n);
            }

            send = send.Replace("{sourceitems}", string.Join("\n", sourceItems.ToArray()));

            if (player != target)
            {
                slotsAvailable = player.inventory.containerMain.capacity - (player.inventory.containerMain.itemList.Count);
                List <string> targetItems = new List <string> ();
                x = 1;
                if (targetContainer != null)
                {
                    foreach (Item i in targetContainer.inventory.itemList)
                    {
                        string n2 = "";
                        if (i.IsBlueprint())
                        {
                            n2 = i.amount + " x <color=lightblue>" + i.blueprintTargetDef.displayName.english + " [" + GetMsg("Item: BP", player) + "]</color>";
                        }
                        else
                        {
                            n2 = i.amount + " x " + i.info.displayName.english;
                        }
                        if (x > slotsAvailable)
                        {
                            n2 = "<color=red>" + n2 + "</color>";
                        }
                        x++;
                        targetItems.Add(n2);
                    }
                }

                send = send.Replace("{targetitems}", string.Join("\n", targetItems.ToArray()));
            }
            else
            {
                send = send.Replace("{targetitems}", "");
            }

            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo {
                connection = player.net.connection
            }, null, "AddUI", send);
        }
Example #15
0
 public void Clear()
 {
     View  = null;
     Trade = null;
 }
Example #16
0
 void ShowTrades(OpenTrade trade, string msg)
 {
     ShowTrade(trade.sourcePlayer, trade, GetMsg(msg, trade.sourcePlayer));
     ShowTrade(trade.targetPlayer, trade, GetMsg(msg, trade.targetPlayer));
 }
Example #17
0
 void TradeCooldown(OpenTrade trade)
 {
     PlayerCooldown(trade.targetPlayer);
     PlayerCooldown(trade.sourcePlayer);
 }