Mit ‘Scripting’ getaggte Artikel

Die Powershell in der eigenen Konsolenapplikation

Montag, 04. Januar 2010

Auch genannt: An embedded powershell in a console application.

Dazu benötigt man im Prinzip nur zwei Schritte:

  1. Microsoft.PowerShell.ConsoleHost und System.Management.Automation als Verweis hinzufügen.
  2. 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:

image

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

image

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:

image