Verkauf von Einheiten per Söldnerquartier

Chromix

Das Söldnerquartier (Entities.CB_Mercenary) ermöglicht es einem Spieler, eine festgelegte Anzahl Einheiten, zu einem festgelegten Preis zu rekrutieren.

So kann der Spieler beispielsweise einen Scout erhalten, obwohl er diesen wegen nichterforschter Technologien noch nicht selber bauen kann.
Es könnte ihm auch eine Kanone für 2000 Gold angeboten werden. Dadurch kann ein Spieler, der keinen Zugang zu Schwefel hat, auch in den Besitz einer Kanone kommen.
Des weiteren können so auch Einheiten erworben werden, die sich der Spieler niemals selber bauen kann, wie beispielsweise Banditen.

Ein Söldnerquartier kann nur maximal 4 verschiedene Angebote verwalten. Das Hinzufügen von weiteren Angeboten wird ignoriert sobald 4 vorhanden sind.

Im folgenden Beispiel wird davon ausgegangen, daß dem Söldnerquartier der Name „MercTent“ gegeben wurde.

-- ID des Sölderquartiers speichern
local mercTent = GetEntityId( "MercTent" );
 
-- Biete zwei Scouts für je 200 Gold und 100 Holz an
Logic.AddMercenaryOffer( mercTent, Entities.PU_Scout, 2, ResourceType.Gold, 200, ResourceType.Wood, 100 );
 
-- Verkaufe eine Belagerungskanone für 2000 Gold
Logic.AddMercenaryOffer( mercTent, Entities.PV_Cannon4, 1, ResourceType.Gold, 2000 );
 
-- Biete 5 Barbarentruppen für je 100 Gold, 80 Holz, 60 Eisen, 40 Schwefel, 20 Stein und 1 Lehm an
Logic.AddMercenaryOffer( mercTent, Entities.CU_Barbarian_LeaderClub1, 5, ResourceType.Gold, 100,
					 ResourceType.Wood, 80, ResourceType.Iron, 60, ResourceType.Sulfur, 40,
					 ResourceType.Clay, 1 );

Man sollte bei der Platzierung des Söldnerquartiers, den Kosten für die Einheiten und deren Anzahl die Balance und den Spielspaß im Auge behalten.
So ist es nicht gut, wenn der Spieler zu früh an zu gute Einheiten gelangt, oder diese zu wenig kosten. Einheiten, die die Bewältigung der Karte erleichtern, dürfen auch gerne etwas teurer verkauft werden.

Man kann die zu verkaufenden Einheiten auch erst X Minuten nach Spielstart, oder nach dem Eintritt bestimmter Ereignisse, für das Söldnerquartier festlegen (nicht vergessen den Spieler dann darauf hinzuweisen).

Es können übrigens alle Arten von Entities verkauft werden. Diese haben dann aber meisstens nicht das passende Bild. Dies mag nicht unbedingt sinnvoll sein, aber es kann schon lustig sein einmal 100 Hasen (Entities.XA_Rabbit) für je 1 Gold zu kaufen… oder ein paar tote Bäume (Entities.XD_DeadTree01) für 40 Schwefel.
Der Händler könnte einem natürlich auch für 1000 Gold einen Haufen Lehm (Entities.XD_Clay1) vor die Tür legen…

Man kann auch abfragen, wieviele angebotene Einheiten noch verfügbar sind. Dadurch könnte man zum Beispiel eine Aktion auslösen, wenn der Spieler eine bestimmte Anzahl Einheiten gekauft (oder eben nach einem Countdown nicht gekauft) hat.

local mercTent = GetEntityId( "MercTent" );
-- Frage den Typ der angebotenen Einheit, und die noch verfügbare Anzahl aus Slot 1 ab
local entityType, amount = Logic.GetMercenaryOffer( mercTent, 1, {} );
Message( "In Slot 1 werden " .. amount .. " Einheiten vom Typ " .. entityType .. " angeboten." );

Gültige Slots sind 1 bis 4.
Wenn entityType 0 ist, dann wurde ein nicht belegter Slot gewählt.
Falls man nichtmehr weiß, welche Einheit man in welchem Slot angeboten hat, kann man das sogar abfragen:

if entityType == Entities.XA_Rabbit then
	Message( "Hier gibts Hasenbraten." );
end