SetNet.Quests
1.2.0
dotnet add package SetNet.Quests --version 1.2.0
NuGet\Install-Package SetNet.Quests -Version 1.2.0
<PackageReference Include="SetNet.Quests" Version="1.2.0" />
<PackageVersion Include="SetNet.Quests" Version="1.2.0" />
<PackageReference Include="SetNet.Quests" />
paket add SetNet.Quests --version 1.2.0
#r "nuget: SetNet.Quests, 1.2.0"
#:package SetNet.Quests@1.2.0
#addin nuget:?package=SetNet.Quests&version=1.2.0
#tool nuget:?package=SetNet.Quests&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.Quests
Server-authoritative quests for SetNet.
Define quests as a set of objectives plus item rewards. Players accept them; server game logic reports progress by objective key (which advances every accepted quest sharing that key); a QuestCompleted event fires the moment all objectives are met; and rewards are granted on claim through the shared SetNet.Inventory hub. Clients accept, claim, and watch progress — they never move their own counters. Added by composition — no base class.
Install
dotnet add package SetNet
dotnet add package SetNet.Inventory
dotnet add package SetNet.Quests
Usage
Call InventoryRuntime.Enable() and QuestRuntime.Enable() once at startup.
// server
InventoryRuntime.Enable(); QuestRuntime.Enable();
var inventory = server.UseInventory();
var quests = server.UseQuests(inventory).Define(new QuestDefinition("goblin_hunt",
objectives: new[] { new QuestObjective("kill_goblin", 10), new QuestObjective("collect_ear", 5) },
rewards: new[] { new ItemStack("gold", 100), new ItemStack("goblin_slayer_badge", 1) }));
quests.QuestCompleted += (playerKey, questId) => Log($"{playerKey} finished {questId}");
// game logic when a goblin dies near a player who accepted the quest:
await quests.ProgressAsync(playerKey, "kill_goblin");
// client
InventoryRuntime.Enable(); QuestRuntime.Enable();
var quests = client.UseQuests();
quests.Updated += v => DrawQuestLog(v);
await quests.AcceptAsync("goblin_hunt");
// ... later, when v.Completable:
await quests.ClaimAsync("goblin_hunt");
API
Server: server.UseQuests(InventoryServer, IQuestStore?) → QuestServer — Define, AcceptAsync, ProgressAsync, ClaimAsync, AbandonAsync, ViewsAsync, event QuestCompleted.
Client: client.UseQuests() → QuestClient — AcceptAsync, AbandonAsync, ClaimAsync, ListAsync, event Updated.
InventoryRuntime.Enable() + QuestRuntime.Enable() — one-time bootstrap.
Notes
- Rides the unified SetNet.Protocol messaging layer on the
Channels.Questschannel (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. - Progress is server-driven. Call
ProgressAsync(playerKey, objectiveKey)from game logic; it advances every accepted, unclaimed quest that has that objective, capped at the requirement. - Rewards. Item rewards grant through
SetNet.Inventoryon claim. For XP/currency rewards, handleQuestCompleted(or the client's claim ack) and callSetNet.Progression/SetNet.Wallet. - Persistence. Default
MemoryQuestStoreis per-process; implementIQuestStoreover Redis/SQL for durable quest logs.
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)
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 | 116 | 8/5/2026 |