baseline: OpenMU upstream b5a0961 (fresh source)
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
// <copyright file="ChangeTradeButtonStatePlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="IChangeTradeButtonStatePlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.ChangeTradeButtonStatePlugIn_Name), Description = nameof(PlugInResources.ChangeTradeButtonStatePlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("d33144a1-634a-4c7a-9add-2086c3b9b0ea")]
|
||||
public class ChangeTradeButtonStatePlugIn : IChangeTradeButtonStatePlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ChangeTradeButtonStatePlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public ChangeTradeButtonStatePlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <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 async ValueTask ChangeTradeButtonStateAsync(TradeButtonState state)
|
||||
{
|
||||
await this._player.Connection.SendTradeButtonStateChangedAsync(Convert(state)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static TradeButtonStateChanged.TradeButtonState Convert(TradeButtonState state)
|
||||
{
|
||||
return state switch
|
||||
{
|
||||
TradeButtonState.Unchecked => TradeButtonStateChanged.TradeButtonState.Unchecked,
|
||||
TradeButtonState.Checked => TradeButtonStateChanged.TradeButtonState.Checked,
|
||||
TradeButtonState.Red => TradeButtonStateChanged.TradeButtonState.Red,
|
||||
_ => throw new ArgumentException($"Unhandled enum value {state}."),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// <copyright file="RequestedTradeMoneyHasBeenSetPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="IRequestedTradeMoneyHasBeenSetPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.RequestedTradeMoneyHasBeenSetPlugIn_Name), Description = nameof(PlugInResources.RequestedTradeMoneyHasBeenSetPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("d07bc23a-e4ec-462b-96d6-b2da739664d0")]
|
||||
public class RequestedTradeMoneyHasBeenSetPlugIn : IRequestedTradeMoneyHasBeenSetPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="RequestedTradeMoneyHasBeenSetPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public RequestedTradeMoneyHasBeenSetPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc />
|
||||
public ValueTask RequestedTradeMoneyHasBeenSetAsync()
|
||||
{
|
||||
return this._player.Connection.SendTradeMoneySetResponseAsync();
|
||||
}
|
||||
}
|
||||
33
src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs
Normal file
33
src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
// <copyright file="SetTradeMoneyPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="ISetTradeMoneyPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.SetTradeMoneyPlugIn_Name), Description = nameof(PlugInResources.SetTradeMoneyPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("ca421b33-4ac2-4496-a8a3-11b740cded8c")]
|
||||
public class SetTradeMoneyPlugIn : ISetTradeMoneyPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SetTradeMoneyPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public SetTradeMoneyPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ValueTask SetTradeMoneyAsync(uint moneyAmount)
|
||||
{
|
||||
return this._player.Connection.SendTradeMoneyUpdateAsync(moneyAmount);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
// <copyright file="ShowTradeRequestAnswerPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="IShowTradeRequestAnswerPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.ShowTradeRequestAnswerPlugIn_Name), Description = nameof(PlugInResources.ShowTradeRequestAnswerPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("243cbc67-7af3-48e2-9a56-d6e49c86b816")]
|
||||
public class ShowTradeRequestAnswerPlugIn : IShowTradeRequestAnswerPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ShowTradeRequestAnswerPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public ShowTradeRequestAnswerPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async ValueTask ShowTradeRequestAnswerAsync(bool tradeAccepted)
|
||||
{
|
||||
await this._player.Connection.SendTradeRequestAnswerAsync(
|
||||
tradeAccepted,
|
||||
this._player.TradingPartner?.Name ?? string.Empty,
|
||||
(ushort)(tradeAccepted ? this._player.TradingPartner?.Level ?? 0 : 0),
|
||||
tradeAccepted ? this._player.TradingPartner?.GuildStatus?.GuildId ?? 0 : 0).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
34
src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs
Normal file
34
src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
// <copyright file="ShowTradeRequestPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="IShowTradeRequestPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.ShowTradeRequestPlugIn_Name), Description = nameof(PlugInResources.ShowTradeRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("2e6e8c0e-8220-46e3-931a-630d596178ca")]
|
||||
public class ShowTradeRequestPlugIn : IShowTradeRequestPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ShowTradeRequestPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public ShowTradeRequestPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async ValueTask ShowTradeRequestAsync(ITrader requester)
|
||||
{
|
||||
await this._player.Connection.SendTradeRequestAsync(requester.Name).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
54
src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs
Normal file
54
src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
// <copyright file="TradeFinishedPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.GameLogic;
|
||||
using MUnique.OpenMU.GameLogic.Views.Inventory;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="ITradeFinishedPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.TradeFinishedPlugIn_Name), Description = nameof(PlugInResources.TradeFinishedPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("ec11fe95-31c6-4a2e-942d-4d10a84830c1")]
|
||||
public class TradeFinishedPlugIn : ITradeFinishedPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TradeFinishedPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public TradeFinishedPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc />
|
||||
public async ValueTask TradeFinishedAsync(TradeResult tradeResult)
|
||||
{
|
||||
await this._player.Connection.SendTradeFinishedAsync(Convert(tradeResult)).ConfigureAwait(false);
|
||||
|
||||
if (tradeResult != TradeResult.TimedOut)
|
||||
{
|
||||
await this._player.InvokeViewPlugInAsync<IUpdateInventoryListPlugIn>(p => p.UpdateInventoryListAsync()).ConfigureAwait(false);
|
||||
await this._player.InvokeViewPlugInAsync<IUpdateMoneyPlugIn>(p => p.UpdateMoneyAsync()).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
private static TradeFinished.TradeResult Convert(TradeResult tradeResult)
|
||||
{
|
||||
return tradeResult switch
|
||||
{
|
||||
TradeResult.Cancelled => Network.Packets.ServerToClient.TradeFinished.TradeResult.Cancelled,
|
||||
TradeResult.Success => Network.Packets.ServerToClient.TradeFinished.TradeResult.Success,
|
||||
TradeResult.FailedByFullInventory => Network.Packets.ServerToClient.TradeFinished.TradeResult.FailedByFullInventory,
|
||||
TradeResult.TimedOut => Network.Packets.ServerToClient.TradeFinished.TradeResult.TimedOut,
|
||||
TradeResult.FailedByItemsNotAllowedToTrade => Network.Packets.ServerToClient.TradeFinished.TradeResult.FailedByItemsNotAllowedToTrade,
|
||||
_ => throw new ArgumentException($"TradeResult {tradeResult} not mapped to a byte value."),
|
||||
};
|
||||
}
|
||||
}
|
||||
56
src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs
Normal file
56
src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
// <copyright file="TradeItemAppearPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.DataModel.Entities;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="ITradeItemAppearPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.TradeItemAppearPlugIn_Name), Description = nameof(PlugInResources.TradeItemAppearPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("560d18e7-7d36-47bf-9298-8017454fa7bf")]
|
||||
public class TradeItemAppearPlugIn : ITradeItemAppearPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TradeItemAppearPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public TradeItemAppearPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async ValueTask TradeItemAppearAsync(byte toSlot, Item item)
|
||||
{
|
||||
var connection = this._player.Connection;
|
||||
if (connection is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int Write()
|
||||
{
|
||||
var itemSerializer = this._player.ItemSerializer;
|
||||
var size = TradeItemAddedRef.GetRequiredSize(itemSerializer.NeededSpace);
|
||||
var span = connection.Output.GetSpan(size)[..size];
|
||||
var packet = new TradeItemAddedRef(span)
|
||||
{
|
||||
ToSlot = toSlot,
|
||||
};
|
||||
var itemSize = itemSerializer.SerializeItem(packet.ItemData, item);
|
||||
var actualSize = TradeItemAddedRef.GetRequiredSize(itemSize);
|
||||
span.Slice(0, actualSize).SetPacketSize();
|
||||
return actualSize;
|
||||
}
|
||||
|
||||
await connection.SendAsync(Write).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
34
src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs
Normal file
34
src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
// <copyright file="TradeItemDisappearPlugIn.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameServer.RemoteView.Trade;
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
using MUnique.OpenMU.DataModel.Entities;
|
||||
using MUnique.OpenMU.GameLogic.Views.Trade;
|
||||
using MUnique.OpenMU.Network.Packets.ServerToClient;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// The default implementation of the <see cref="ITradeItemDisappearPlugIn"/> which is forwarding everything to the game client with specific data packets.
|
||||
/// </summary>
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.TradeItemDisappearPlugIn_Name), Description = nameof(PlugInResources.TradeItemDisappearPlugIn_Description), ResourceType = typeof(PlugInResources))]
|
||||
[Guid("5ac9569b-3c5a-468e-bf48-1e67f81281c5")]
|
||||
public class TradeItemDisappearPlugIn : ITradeItemDisappearPlugIn
|
||||
{
|
||||
private readonly RemotePlayer _player;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TradeItemDisappearPlugIn"/> class.
|
||||
/// </summary>
|
||||
/// <param name="player">The player.</param>
|
||||
public TradeItemDisappearPlugIn(RemotePlayer player) => this._player = player;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ValueTask TradeItemDisappearAsync(byte slot, Item item)
|
||||
{
|
||||
return this._player.Connection.SendTradeItemRemovedAsync(slot);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user