SetNet.Vendor
1.2.0
dotnet add package SetNet.Vendor --version 1.2.0
NuGet\Install-Package SetNet.Vendor -Version 1.2.0
<PackageReference Include="SetNet.Vendor" Version="1.2.0" />
<PackageVersion Include="SetNet.Vendor" Version="1.2.0" />
<PackageReference Include="SetNet.Vendor" />
paket add SetNet.Vendor --version 1.2.0
#r "nuget: SetNet.Vendor, 1.2.0"
#:package SetNet.Vendor@1.2.0
#addin nuget:?package=SetNet.Vendor&version=1.2.0
#tool nuget:?package=SetNet.Vendor&version=1.2.0
<p align="center"> <img src="https://raw.githubusercontent.com/Povstalez/SetNet/master/assets/icon.png" alt="SetNet" width="96"> </p>
SetNet.Vendor
NPC shops for SetNet.
Define vendor catalogs — buy price, sell-back price, currency, and stock per item. Clients browse and buy/sell, and the server settles each transaction atomically through SetNet.Wallet and SetNet.Inventory: a buy reserves stock, withdraws currency, then grants the item; a sell revokes the item, then pays out. Money moves before goods (and vice-versa), so a failure never conjures either. Added by composition — no base class.
Install
dotnet add package SetNet
dotnet add package SetNet.Inventory
dotnet add package SetNet.Wallet
dotnet add package SetNet.Vendor
Usage
Call InventoryRuntime.Enable(), WalletRuntime.Enable(), and VendorRuntime.Enable() at startup.
// server
InventoryRuntime.Enable(); WalletRuntime.Enable(); VendorRuntime.Enable();
var inventory = server.UseInventory();
var wallet = server.UseWallet();
server.UseVendor(inventory, wallet).Define("blacksmith", new[]
{
new VendorEntry("iron_sword", buyPrice: 120, sellPrice: 40), // unlimited stock
new VendorEntry("rare_shield", buyPrice: 800, sellPrice: 200, stock: 3), // limited
});
// client
InventoryRuntime.Enable(); WalletRuntime.Enable(); VendorRuntime.Enable();
var vendor = client.UseVendor();
foreach (var e in await vendor.ListAsync("blacksmith")) ShowRow(e);
await vendor.BuyAsync("blacksmith", "iron_sword"); // throws VendorException if broke/out of stock
await vendor.SellAsync("blacksmith", "old_dagger", 2);
API
Server: server.UseVendor(InventoryServer, WalletServer) → VendorServer — Define(vendorId, entries).
Client: client.UseVendor() → VendorClient — ListAsync(vendorId), BuyAsync(vendorId, itemId, count), SellAsync(vendorId, itemId, count).
InventoryRuntime.Enable() + WalletRuntime.Enable() + VendorRuntime.Enable() — one-time bootstrap.
Notes
- Rides the unified SetNet.Protocol messaging layer on the
Channels.Vendorchannel (all modules share one envelope wire type,65447) — no per-module wire ids to reserve. Serializer-agnostic: the control protocol is hand-framedbyte[], your payloads use yourSetNetSerializer. - Atomic settlement. Buy: reserve stock →
Wallet.TryWithdraw→Inventory.Grant(stock refunded if the charge fails). Sell:Inventory.TryRevoke→Wallet.Deposit. No dupes, no free items. - Prices & stock are server-owned. Clients can only transact against the catalog you
Define.sellPrice: 0means the vendor won't buy;stock: -1is unlimited (sells don't restock). - Resulting wallet/inventory changes reach clients via their
SetNet.Wallet/SetNet.InventoryChangedsubscriptions. - For player-to-player sales use
SetNet.AuctionorSetNet.Trade; Vendor is player-to-NPC.
Documentation & source
- 🐙 https://github.com/Povstalez/SetNet — full catalog in docs/MODULES.md
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- SetNet (>= 1.2.0)
- SetNet.Inventory (>= 1.2.0)
- SetNet.Wallet (>= 1.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2.0 | 90 | 8/5/2026 |