A modular .NET template for creating V Rising mods with optional dependencies.
Install the template from NuGet:
dotnet new install ScarletTemplateCreate a new V Rising mod project:
dotnet new scarlettemplate -n MyMod- ScarletCore: Core framework for V Rising mods with integrated command system
- BepInEx: Mod framework for Unity games
- VRising.Unhollowed.Client: V Rising game bindings
MyMod/
├── MyMod.csproj # Project file with conditional dependencies
├── MyMod.sln # Solution file
├── Plugin.cs # Main plugin class with conditional code
├── MyPluginInfo.cs # Auto-generated plugin metadata
├── nuget.config # NuGet sources (BepInEx, Samboy Feed)
└── LICENSE # MIT License
[BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)]
[BepInDependency("markvaaz.ScarletCore")]
public class Plugin : BasePlugin
{
public override void Load()
{
Log.LogInfo($"Plugin {MyPluginInfo.PLUGIN_GUID} loaded!");
}
}using ScarletCore.Commanding;
[CommandGroup("mymod", Language.English, adminOnly: false)]
[CommandGroupAlias("meuplugin", Language.Portuguese)]
public static class MyCommands
{
[Command("hello", Language.English, description: "Say hello")]
[CommandAlias("ola", Language.Portuguese, description: "Dizer olá")]
public static void HelloCommand(CommandContext ctx)
{
ctx.ReplySuccess($"Hello {ctx.User.CharacterName}!");
}
[Command("info", Language.English, description: "Get player info")]
[CommandAlias("informacao", Language.Portuguese, description: "Obter informações")]
public static void InfoCommand(CommandContext ctx, PlayerData player)
{
ctx.ReplySuccess($"Player: {player.Name}, Level: {player.Level}");
}
}- .NET 6.0 SDK or later
- V Rising Dedicated Server (for testing)
dotnet buildThe template automatically copies built mods to:
C:\Program Files (x86)\Steam\steamapps\common\VRisingDedicatedServer\BepInEx\plugins
- .NET 6.0+
- V Rising Dedicated Server
- BepInEx 6.0+
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request