Open Source · LGPL v3+

Investycoon Core SDK

SDK modulaire pour créer des plugins personnalisés dans l'écosystème Investycoon.

Installer nuget install InvestycoonCore -Source "GitLab"

Vue d'ensemble

InvestycoonCore vous permet de personnaliser les types d'entreprises, les items et leurs spécifications, ainsi que les technologies. Le package requiert .NET 10 sans dépendances NuGet supplémentaires.

  • Types d'entreprises personnalisés
  • Items et spécifications sur mesure
  • Technologies extensibles

Installation

Pour débuter, créez une solution .NET et référencez InvestycoonCore via NuGet :

nuget install InvestycoonCore -Source "GitLab"

Ou téléchargez le fichier .nupkg depuis le registre officiel.

Exemple de classe Plugin minimale :

public class CustomPlugin : Plugin
{
    public override string Code => "custom-plugin";
    public override string Version => "1.0";
    public override string Name => "Custom Plugin";
    public override string Explanation => "This is a custom plugin";
    public override ResourceManager MainResourceManager => new CustomResourceManager();
}

La classe expose les propriétés Code, Version, Name, Explanation et MainResourceManager à personnaliser.

Référence des membres

La classe abstraite Plugin expose les membres suivants. Code, Name, Version, Explanation et MainResourceManager sont obligatoires. Les autres sont optionnels et retournent false ou une liste vide par défaut.

Membre Type Description
Code string Identifiant unique du plugin, utilisé en interne.
Name string Nom affiché dans l'interface d'administration.
Version string Version du plugin, affichée dans InvestycoonSky.
Explanation string Description affichée aux administrateurs.
MainResourceManager ResourceManager Gestionnaire de ressources pour la localisation des labels.
ItemIgnoreVanilla bool Si true, les items vanilla du jeu sont retirés. Défaut : false.
CompanyTypeIgnoreVanilla bool Si true, les types d'entreprises vanilla sont retirés. Défaut : false.
Items() List<Item> Retourne la liste des items fournis par le plugin.
CompanyTypes() List<CompanyType> Retourne la liste des types d'entreprises.
ItemSpecificationTypes() List<ItemSpecificationType> Retourne la liste des types de spécification (qualité, etc.).

Exemple de plugin complet :

public sealed class MyPlugin : Plugin
{
    public override string Code        => "my-plugin";
    public override string Version     => "1.0";
    public override string Name        => "My Plugin";
    public override string Explanation => "Plugin description.";
    public override ResourceManager MainResourceManager
        => Resources.Resources.ResourceManager;

    public override bool ItemIgnoreVanilla        => true;
    public override bool CompanyTypeIgnoreVanilla => true;

    public override List<Item> Items() =>
    [
        new ItemResource(1, "lithium", 20_00).SetMass(25f).SetItemGroup("resource"),
        new Item(2, "battery", 2, 10_00).SetMass(0.1f).SetItemGroup("refined"),
    ];

    public override List<CompanyType> CompanyTypes() =>
    [
        new(1, "tech-company",
            nameof(Resources.Resources.TechCompany_Label),
            nameof(Resources.Resources.TechCompany_Label))
    ];

    public override List<ItemSpecificationType> ItemSpecificationTypes() =>
    [
        new(1, "quality", ItemSpecificationTypeEnum.Quality, [10])
    ];
}

Types d'items

Choisissez le type qui correspond à la nature de votre item :

Item

Produit de base : composant, bien manufacturé. Accepte un niveau (tier 1–5) qui influence la rareté et les progressions de jeu.

new Item(id: 1, name: "battery", tier: 2, defaultPrice: 10_00)
    .SetMass(0.1f)
    .SetVolume(0.0001f)
    .SetItemGroup("refined");

ItemResource

Ressource naturelle extractible. Fixe automatiquement tier=1, IsDivisible=true et IsStackable=true. Les méthodes optionnelles SetRarity() et SetWorldGeneration() permettent de configurer la rareté et la génération sur la carte.

new ItemResource(id: 1, name: "lithium", price: 20_00)
    .SetMass(25f)
    .SetRarity(ItemRarity.GetByName("ordinary")!);

ItemFuel

Source d'énergie consommable. Définissez sa capacité avec SetEnergy().

new ItemFuel(id: 1, code: "atomic-battery", price: 300_00)
    .SetEnergy(1_000)
    .SetMass(1f);

ItemNonPhysical

Item numérique ou immatériel (logiciel, données). Pas de masse ni de volume.

new ItemNonPhysical(id: 1, code: "program", price: 0);

MachineTransformer

Machine de production avec recettes d'entrée/sortie. Ajoutez des recettes avec AddRecipe().

new MachineTransformer(id: 1, code: "factory", price: 10_000_00)
    .SetNbInput(2)
    .SetNbOutput(1)
    .SetDelayBuild(TimeSpan.FromHours(1))
    .SetMaxWorkers(3)
    .AddRecipe(new MachineRecipeFuel(
        "my-recipe", "company-type-code",
        inputCapacity: 64, outputCapacity: 12,
        inputs:  [new RecipeProduct("lithium", 2)],
        outputs: [new RecipeProduct("battery", 10)]
    ));

Localisation

Les labels affichés en jeu (noms d'items, types d'entreprises, recettes) sont traduits via des fichiers .resx. Créez Resources/Resources.resx (anglais par défaut) et Resources/Resources.fr.resx (français).

Configurez votre .csproj pour générer la classe d'accès statique :

<ItemGroup>
  <EmbeddedResource Update="Resources\Resources.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resources.Designer.cs</LastGenOutput>
  </EmbeddedResource>
</ItemGroup>

Référencez ensuite le ResourceManager dans votre plugin :

public override ResourceManager MainResourceManager => Resources.Resources.ResourceManager;

Déployer le plugin dans InvestycoonSky

Une fois votre plugin compilé, c'est l'administrateur du serveur qui gère l'import et l'activation depuis InvestycoonSky. Vous n'avez pas à gérer l'infrastructure.

1. Compilez votre plugin en configuration Release et transmettez le fichier .dll à l'administrateur :

dotnet publish -c Release

2. L'administrateur importe le .dll via InvestycoonSky et peut activer ou désactiver le plugin à tout moment sans redémarrer le serveur.

Le plugin apparaît dans InvestycoonSky avec son nom, son code et sa version dès l'import. L'activation et la désactivation sont gérées entièrement depuis l'interface d'administration.

Illustrations

Chaque item et type d'entreprise peut être associé à une image PNG embarquée directement dans l'assembly du plugin.

Placez les images dans les dossiers suivants de votre projet :

Resources/
└── Images/
    ├── Items/
    │   ├── lithium.png
    │   └── battery.png
    └── CompanyTypes/
        └── tech-company.png

Déclarez-les comme ressources embarquées dans le .csproj :

<ItemGroup>
  <EmbeddedResource Include="Resources\Images\**\*" />
</ItemGroup>

Le nom du fichier doit correspondre exactement à la propriété Name de l'item ou du CompanyType (sensible à la casse). Au démarrage, AssertValidItem() lève une ResourceCompilingException si l'image est absente.

Licence

Distribué sous licence LGPL v3+.

Crédits

Développé par Alan Bretelle.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.