예제 #1
0
        public Dialog_PayByBankNotes(int expense, int playersilver, int playernotes, int tradersilver, int tradernotes, bool isVirtual)
        {
            forcePause      = true;
            silverTradeable = new Tradeable();
            notesTradeable  = new Tradeable();
            this.isVirtual  = isVirtual;

            Thing item = new Thing
            {
                def        = ThingDefOf.Silver,
                stackCount = playersilver
            };

            silverTradeable.thingsColony.Add(item);

            item = new Thing
            {
                def        = ThingDefOf.Silver,
                stackCount = tradersilver
            };
            silverTradeable.thingsTrader.Add(item);

            item = new Thing
            {
                def        = BankDefOf.BankNote,
                stackCount = playernotes
            };
            notesTradeable.thingsColony.Add(item);

            item = new Thing
            {
                def        = BankDefOf.BankNote,
                stackCount = tradernotes
            };
            notesTradeable.thingsTrader.Add(item);
            silverTradeable.ForceTo(expense);
        }
예제 #2
0
        public override void DoWindowContents(Rect inRect)
        {
            Rect rect = new Rect(inRect.x, inRect.y, inRect.width, 45f);

            Text.Anchor = TextAnchor.MiddleCenter;
            Text.Font   = GameFont.Medium;
            if (isVirtual)
            {
                Widgets.Label(rect, VirtualTrader.TipString(1));
                TooltipHandler.TipRegion(rect, VirtualTrader.TipString(2));
            }
            else
            {
                Widgets.Label(rect, "AdjustPayment".Translate());
            }
            float height = rect.height;
            Color color  = GUI.color;

            GUI.color = Color.gray;
            Widgets.DrawLineHorizontal(inRect.x, height, inRect.width);
            GUI.color = color;
            height   += 2.5f;
            Rect rect2 = new Rect(inRect.x, height, inRect.width, 30f);

            DrawTradeableRow(rect2, silverTradeable, 1);
            int  countToTransfer  = notesTradeable.CountToTransfer;
            int  countToTransfer2 = silverTradeable.CountToTransfer;
            Rect rect3            = new Rect(inRect.x, height + 30f, inRect.width, 30f);

            DrawTradeableRow(rect3, notesTradeable, 2);
            if (countToTransfer != notesTradeable.CountToTransfer)
            {
                if (!isVirtual || !VirtualTrader.UniqueBalanceMethod)
                {
                    int countToTransfer3 = silverTradeable.CountToTransfer;
                    silverTradeable.ForceTo(countToTransfer3 + (countToTransfer - notesTradeable.CountToTransfer) * 1000);
                }
                else
                {
                    int notes  = notesTradeable.CountToTransfer;
                    int silver = silverTradeable.CountToTransfer;
                    VirtualTrader.BalanceMethod(countToTransfer2, countToTransfer, ref silver, ref notes);
                    notesTradeable.ForceTo(notes);
                    silverTradeable.ForceTo(silver);
                }
            }
            Rect rect4 = new Rect(rect2.x, rect2.y, 27f, 27f);

            if (Mouse.IsOver(rect4))
            {
                Widgets.DrawHighlight(rect4);
            }
            Widgets.ThingIcon(rect4, silverTradeable.AnyThing);
            Rect rect5 = new Rect(rect2.x, rect3.y, 27f, 27f);

            if (Mouse.IsOver(rect5))
            {
                Widgets.DrawHighlight(rect5);
            }
            Widgets.ThingIcon(rect5, notesTradeable.AnyThing);
            if (isVirtual)
            {
                TooltipHandler.TipRegion(rect4, VirtualTrader.TipString(3));
                TooltipHandler.TipRegion(rect5, VirtualTrader.TipString(4));
            }
            else
            {
                TooltipHandler.TipRegion(rect4, "SilverTip".Translate());
                TooltipHandler.TipRegion(rect5, "BankNoteTip".Translate());
            }
            float num     = 120f;
            float height2 = 40f;

            if (Widgets.ButtonText(new Rect(inRect.width * 9f / 16f, inRect.height - 55f, num, height2), "CancelButton".Translate()))
            {
                Event.current.Use();
                Close(doCloseSound: false);
            }
            if (Widgets.ButtonText(new Rect(inRect.width * 7f / 16f - num, inRect.height - 55f, num, height2), "AcceptButton".Translate()))
            {
                Action ExecuteTrade = delegate
                {
                    currencyfmt = new Pair <int, int>(notesTradeable.CountToTransfer, silverTradeable.CountToTransfer);
                    if (TradeSession.deal.DoExecute())
                    {
                        SoundDefOf.ExecuteTrade.PlayOneShotOnCamera();
                        if (TradeSession.trader is Pawn pawn)
                        {
                            TaleRecorder.RecordTale(TaleDefOf.TradedWith, TradeSession.playerNegotiator, pawn);
                        }
                        if (isVirtual)
                        {
                            VirtualTrader.CloseTradeUI();
                        }
                        else
                        {
                            Find.WindowStack.WindowOfType <Dialog_Trade>().Close(doCloseSound: false);
                        }
                    }
                    Close(doCloseSound: false);
                };
                Action ConfirmedExecuteTrade = delegate
                {
                    silverTradeable.ForceTo(silverTradeable.CountHeldBy(Transactor.Trader));
                    ExecuteTrade();
                };
                ((Action) delegate
                {
                    if (!TestPlayerSilver())
                    {
                        Messages.Message("NotEnoughSilverColony".Translate(), MessageTypeDefOf.RejectInput);
                    }
                    else if (isVirtual && VirtualTrader.CustomCheckViolation(silverTradeable, notesTradeable))
                    {
                        VirtualTrader.CustomViolationAction();
                    }
                    else if (!TestTraderSilver())
                    {
                        SoundDefOf.ClickReject.PlayOneShotOnCamera();
                        Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmTraderShortFunds".Translate(), ConfirmedExecuteTrade));
                    }
                    else
                    {
                        ExecuteTrade();
                    }
                })();
                Event.current.Use();
            }
        }