Investycoon Core SDK
SDK modulaire pour créer des plugins personnalisés dans l'écosystème Investycoon.
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.