StoreAPI 1.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package StoreAPI --version 1.0.3
                    
NuGet\Install-Package StoreAPI -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="StoreAPI" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="StoreAPI" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="StoreAPI" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add StoreAPI --version 1.0.3
                    
#r "nuget: StoreAPI, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package StoreAPI@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=StoreAPI&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=StoreAPI&version=1.0.3
                    
Install as a Cake Tool

[StoreCore]

  • StoreCore, as the name says it's designed to enhances your server gameplay and have a credit system that can be used to buy items from the store or create mini-games for players.

  • Since it's a core when you first add it to your server it won't have any items in it, just the menu and the credits system. To have items in the store you need to instal the modules from release too.

  • After installing a module, it's config it's automaticly created in configs/plugins/StoreCore/Modules/ModuleName.json (Of course that will be from modules created by me. You can put your own module config anywhere you want.)

  • If you need example of how to use the StoreApi, you have all examples you need in the StoreModules folder.

  • More modules will be created by me in the future, but if you want feel free to create a module and open a PR, i'll gladly accept it. For the repository, add your module and open the pr.

  • I don't plan on giving up on this project anytime soon, so there will be updates weekly on this. Maybe even sooner.

Premium Modules | In order to buy them DM me on discord: mariust3

  • [Pets] - 20$ | Add as many pets as you want, player can preview them. Of course you need to have your own pets models.

Free Modules

  • [PlayerModels] | Allows you to add how many models you want from the module config.

  • [Abilities] | Speed/Gravity/God Mode/No Clip. You can add more of them with each one having a different Duration, etc.

  • [Flags] | Players can buy custom flags from the store with duration. For example you could add vip flag, premium flag, acces flag.

  • [SpawnEffects] | SpawnEffects on player spawn, a bomb like explosion.

  • [Hit-Sounds] | As the name says, you can add how much hit sounds you want with different prices/durations/etc. They are able to preview the hit sounds too.

  • [Killscreen] | This one is also previewable, players gains killscreen with the healtshot like effect.

  • [SmokeColor] | You can add how many smoke colors you want in config.

  • [Tracers] | You can add how many tracers colors you want in config + random tracer or team tracer.

  • [Trails] | Allows players to buy trails, grenade trails, you can set all colors u want.

  • [VIPShop] | You need VIPCore for this. You can allow players to buy vip groups with durations.

  • [VIPBhop] | Allows players to buy BHOP from shop, speed aplicable

  • [Roulette] | Made by @varkit | Allows players to bet on red/blue/green configurable from config.

  • [Parachute] | Made by @Mesharsky | Allows players to fall slowly by holding E key.

  • [Medic] | Made by @GSM-RO | Standard Medic Module.

  • [TopCredits] | See Top Credits with !topcredits. Editable in config.

  • [PlayerColor] | Allows players to buy different colors red/rainbow/etc.

  • [Cases] | Create cases with custom items from config.

  • All modules will have a default config automaticly created when added, so no worry about how to use them!.

  • [ T3Menu ]

  • [ CS2ScreenMenu ]

  • I know it's a bit annoying to have 2 more API's installed with this one, but i can't do it other way at the moment, SORRY!

NOTE: There's a special option in store menu only for t3menu named functions. Which allows an admin to send credits from the menu to players (@css/root). It might be added in screen menu in the future.

Config

ConfigVersion = 1

[Database] # database connection
Host = ""
Name = ""
User = ""
Pass = ""
Port = 3306

[MainConfig]
MenuType = "t3"              # there are only 2 menus, screen or t3.
StartCredits = 0             # How much credits a new player will have at start. 
PlaytimeInterval = 60        # Each second player will be awarded with credits for activity. Put 0 to disabled it. 
CreditsPerInterval = 0       # How many credits player gets per activity interval. Put 0 to disable it.
CreditsPerKill = 0           # How many credits player gets from a kill. Put 0 to disable it.
CreditsPerRoundWin = 0       # How many credits player gets after winning a round. Put 0 to disable it.
ShowCreditsOnRoundEnd = true # true = all credits message will be in only one message on round end.
IgnoreWarmup = true          # Give credits during warmup? true to not or false to do.

[Multiplier]
CreditsPerInterval = { "@css/vip" = 2, "@css/root" = 4 }        # credits multiplier for these flags.
CreditsPerKill = { "@css/vip" = 2, "@css/root" = 4 }
CreditsPerRoundWin = { "@css/vip" = 2, "@css/root" = 4 }


[Commands]
OpenStore = ["store", "shop", "market"]          # commands to open the main store.
OpenInventoy = ["inventory", "inv"]              # commands to open the inventory.
ShowCredits = ["credits", "mycredits"]           # commands to show your current credits.
AddCredits = ["addcredits", "givecredits"]       # commands to give credits, as an admin.
SetCredits = ["setcredits"]                      # command to set credits, as an admin.
RemoveCredits = ["removecredits"]                # command to remove an amount of credits from a player.
GiftCredits = ["giftcredits", "gift"]            # commands to gift someone credits (for normal players)
ResetCredits = ["rc", "resetcredits"]            # commands to reset all players credits

[Permissions]		# set permission foreach command.
StoreCommand = []
InventoryCommand = []
AddCredits = ["@css/root"]
RemoveCredits = ["@css/root"]
SetCredits = ["@css/root"]
ResetCredits = ["@css/root"]

Module Example

.csproj file

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <RootNamespace>_StoreCore__Killscreen</RootNamespace>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="CounterStrikeSharp.API" Version="1.0.316" />
  </ItemGroup>

	<ItemGroup> // add the store api dll reference, need to be in your project.
		<Reference Include="StoreAPI">
			<HintPath>..\..\StoreAPI.dll</HintPath>
		</Reference>
	</ItemGroup>

</Project>
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using StoreAPI;

namespace StoreCore;

public class Killscreen : BasePlugin
{
    public override string ModuleAuthor => "T3Marius";
    public override string ModuleName => "[StoreCore] Killscreen";
    public override string ModuleVersion => "1.0.0";
    public IStoreAPI? StoreApi; // get the api
    public PluginConfig Config { get; set; } = new PluginConfig(); // get the plugin config
    public override void Load(bool hotReload)
    {
        RegisterEventHandler<EventPlayerDeath>(OnPlayerDeath);
    }
    public override void OnAllPluginsLoaded(bool hotReload)
    {
        StoreApi = IStoreAPI.Capability.Get() ?? throw new Exception("StoreApi not found!"); // get the store core capability.
        Config = StoreApi.GetModuleConfig<PluginConfig>("Killscreen"); // this will automaticly create the config in configs/plugins/StoreCore/Modules/.

        if (!hotReload)
        {
            foreach (var kvp in Config.Killscreens)
            {
                var killScreen = kvp.Value;

                StoreApi.RegisterItem(
                    killScreen.Id,
                    killScreen.Name,
                    Config.Category,
                    killScreen.Type,
                    killScreen.Price,
                    killScreen.Description,
                    duration: killScreen.Duration);
            }
        }
        StoreApi.OnItemPreview += OnItemPreview; // register the event when player selects preview button
    }
    public HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info)
    {
        CCSPlayerController? victim = @event.Userid;
        CCSPlayerController? attacker = @event.Attacker;
        
        if (victim == null || attacker == null || victim == attacker)
            return HookResult.Continue;

        CCSPlayerPawn? attackerPawn = attacker.PlayerPawn.Value;

        if (StoreApi == null || attackerPawn == null)
            return HookResult.Continue;

        foreach (var kvp in Config.Killscreens)
        {
            var killScreen = kvp.Value;
            if (StoreApi.IsItemEquipped(attacker.SteamID, killScreen.Id, attacker.TeamNum))
            {
                attackerPawn.HealthShotBoostExpirationTime = Server.CurrentTime + 1.0f;
                Utilities.SetStateChanged(attackerPawn, "CCSPlayerPawn", "m_flHealthShotBoostExpirationTime");
                break;
            }
        }

        return HookResult.Continue;
    }
    public void OnItemPreview(CCSPlayerController player, string uniqueId)
    {
        CCSPlayerPawn? pawn = player.PlayerPawn.Value;
        if (pawn == null)
            return;

        foreach (var kvp in Config.Killscreens)
        {
            var killScreen = kvp.Value;
            if (uniqueId == killScreen.Id) // if item unique id is equals to the one he selects it then create the code...
            {
                pawn.HealthShotBoostExpirationTime = Server.CurrentTime + 1.0f;
                Utilities.SetStateChanged(pawn, "CCSPlayerPawn", "m_flHealthShotBoostExpirationTime");
                break;
            }
        }
    }
}
public class PluginConfig // if you want the config to be created automaticly in configs/plugins/StoreCore/Modules/ModuleName.json
{
    public string Category { get; set; } = "Special Effects";
    public Dictionary<string, Killscreen_Item> Killscreens { get; set; } = new Dictionary<string, Killscreen_Item>()
    {
        {
            "1", new Killscreen_Item
            {
                Id = "killscreen_2_minutes",
                Name = "Killscreen (2) minutes",
                Price = 500,
                Duration = 120,
                Type = "Visual",
                Description = ""
            }
        },
    };
}
public class Killscreen_Item
{
    public string Id { get; set; } = "store_killscreen"; // item id, very imporatant to not have them duplicated.
    public string Name { get; set; } = "Killscreen";     // the item name that will be shown in the store menu.
    public int Price { get; set; } = 1500;               // item price, sell price is automaticly for now.
    public int Duration { get; set; } = 240;             // item duration, in seconds. This will work only if IsEquipable is set to true when you register an item.
    public string Type { get; set; } = "Visual";         // item type, this is not that important.
    public string Description { get; set; } = "";        // item description, if it's not empty it will be shown when they try to purchase the item.
}

If you willing to donate/support me you can do that here [ Donation ]

if you need help or have trouble with the plugin dm me on discord mariust3 or send a message on the thread from CounterStrikeSharp server.

Product 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 netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

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.0.4 87 6/6/2025
1.0.3 131 6/5/2025
1.0.2 98 6/1/2025
1.0.1 229 5/12/2025
1.0.0 77 5/10/2025