Auch genannt: An embedded powershell in a console application.
Dazu benötigt man im Prinzip nur zwei Schritte:
- Microsoft.PowerShell.ConsoleHost und System.Management.Automation als Verweis hinzufügen.
- Folgenden Quelltext in der einfügen.
// Create Powershell
ConsoleShell.Start(
RunspaceConfiguration.Create(),
"Welcome to FBK-Shell",
string.Empty,
new string[] { });
Bei Ausführung dieses Befehles übernimmt die Powershell die Kontrolle über die Konsole:
Mit Hilfe des Powershell-Befehles
$game = [BurnSystems.FBK.App.ConsoleProgram]::Game
holt man sich das Spiel-Objekt.
Damit kann man nun direkt auf die Spielobjekte zugreifen:
PS> $game.DataStorage["world"].WorldData.Players | Select-Object {$_.Playername, $_.Towns[0].Resources.Available
{TEST2, Metal=3520, Crystal=3610, Fuel=3600, Energy=15, Fields=100, Construc…
{Undead, Metal=3605, Crystal=3602,5, Fuel=3600, Energy=15, Fields=100, Const…
Oder gar die Objekte manipulieren
Damit ist es nun für einen Spielbetreiber sehr einfach möglich Powershell-Skripte zu schreiben mit dessen Hilfe man direkt auf die FBK-Datenbank zugreifen kann. In den nächsten Wochen werde ich mich in dem Thema vertiefen, so dass man mit der PowerShell einfacher auf die Datenbank und der Logik zugreifen kann.
Als Beispiel schwebt mir folgendes Kommando vor:
$logic.GetLogic(“TradingPlatform”).GetAuctions() | % { $_.Cancel(); }
Dies ist prinzipiell jetzt schon mit folgenden Befehlen möglich:
# Initialisierung
$game = [BurnSystems.FBK.App.ConsoleProgram]::Game
$session = $game.LogicCore.CreateSession();
$auctionLogicType = [BurnSystems.FBK.Plugins.TradingPlatform.ITradingPlatformLogic]
$auction = $game.LogicCore.CreateLogicHandler($auctionLogicType)
$auction.LogicSession = $session;# Anzeige aller Auktionen
$auction.GetAuctions() | % { $_.Data } | Format-Table# Abbruch der Auktionen
$auction.GetAuctions() | % { $_.Cancel(); }$auction.GetAuctions().Count
In der Shell sieht es folgendermaßen aus: