Esempio n. 1
0
        /// <summary>
        /// Tries to change the trade button change to the new <paramref name="tradeButtonState"/>.
        /// </summary>
        /// <param name="trader">The trader.</param>
        /// <param name="tradeButtonState">The new state of the trade button.</param>
        public void TradeButtonChanged(ITrader trader, TradeButtonState tradeButtonState)
        {
            using var loggerScope = (trader as Player)?.Logger.BeginScope(this.GetType());
            var success = (tradeButtonState == TradeButtonState.Checked && trader.PlayerState.TryAdvanceTo(PlayerState.TradeButtonPressed)) ||
                          (tradeButtonState == TradeButtonState.Unchecked && trader.PlayerState.TryAdvanceTo(PlayerState.TradeOpened));

            if (!success)
            {
                return;
            }

            var tradingPartner = trader.TradingPartner;

            if (trader.PlayerState.CurrentState == PlayerState.TradeButtonPressed &&
                tradingPartner != null &&
                tradingPartner.PlayerState.CurrentState == PlayerState.TradeButtonPressed)
            {
                TradeResult result = this.InternalFinishTrade(trader, tradingPartner);
                if (result != TradeResult.Success)
                {
                    this.CancelTrade(tradingPartner);
                    this.CancelTrade(trader);
                    (trader as Player)?.Logger.LogDebug($"Cancelled the trade because of unfinished state. trader: {trader.Name}, partner:{tradingPartner.Name}");
                }

                trader.ViewPlugIns.GetPlugIn <ITradeFinishedPlugIn>()?.TradeFinished(result);
                tradingPartner.ViewPlugIns.GetPlugIn <ITradeFinishedPlugIn>()?.TradeFinished(result);
            }
            else
            {
                tradingPartner?.ViewPlugIns.GetPlugIn <IChangeTradeButtonStatePlugIn>()?.ChangeTradeButtonState(TradeButtonState.Checked);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Tries to change the trade button change to the new <paramref name="tradeButtonState"/>.
        /// </summary>
        /// <param name="trader">The trader.</param>
        /// <param name="tradeButtonState">The new state of the trade button.</param>
        public void TradeButtonChanged(ITrader trader, TradeButtonState tradeButtonState)
        {
            var success = (tradeButtonState == TradeButtonState.Checked && trader.PlayerState.TryAdvanceTo(PlayerState.TradeButtonPressed)) ||
                          (tradeButtonState == TradeButtonState.Unchecked && trader.PlayerState.TryAdvanceTo(PlayerState.TradeOpened));

            if (!success)
            {
                return;
            }

            var tradingPartner = trader.TradingPartner;

            if (trader.PlayerState.CurrentState == PlayerState.TradeButtonPressed &&
                tradingPartner != null &&
                tradingPartner.PlayerState.CurrentState == PlayerState.TradeButtonPressed)
            {
                TradeResult result = this.InternalFinishTrade(trader, tradingPartner);
                if (result != TradeResult.Success)
                {
                    this.CancelTrade(tradingPartner);
                    this.CancelTrade(trader);
                    Log.Warn($"Cancelled the trade because of unfinished state. trader: {trader.Name}, partner:{tradingPartner.Name}");
                }

                trader.TradeView.TradeFinished(result);
                tradingPartner.TradeView.TradeFinished(result);
            }
            else
            {
                (trader.TradingPartner as Player)?.PlayerView.TradeView.ChangeTradeButtonState(TradeButtonState.Checked);
            }
        }
Esempio n. 3
0
 /// <inheritdoc/>
 /// <remarks>
 /// This message is sent when the trading partner presses or un-presses the trade accept button.
 /// Examples:
 /// C1 04 3C 00 Partner unpressed
 /// C1 04 3C 01 Partner pressed
 /// C1 04 3C 02 Button is red for x seconds
 /// </remarks>
 public void ChangeTradeButtonState(TradeButtonState state)
 {
     using (var writer = this.connection.StartSafeWrite(0xC1, 4))
     {
         var packet = writer.Span;
         packet[2] = 0x3C;
         packet[3] = (byte)state;
         writer.Commit();
     }
 }
Esempio n. 4
0
 /// <inheritdoc/>
 /// <remarks>
 /// This message is sent when the trading partner presses or un-presses the trade accept button.
 /// Examples:
 /// C1 04 3C 00 Partner unpressed
 /// C1 04 3C 01 Partner pressed
 /// C1 04 3C 02 Button is red for x seconds
 /// </remarks>
 public void ChangeTradeButtonState(TradeButtonState state)
 {
     this.connection.Send(new byte[] { 0xC1, 0x04, 0x3C, (byte)state });
 }