Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level2:mercenaries

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
scripting:tutorials:level2:mercenaries [2023/11/23 14:25] – angelegt fritz_98scripting:tutorials:level2:mercenaries [2023/11/30 08:41] (aktuell) fritz_98
Zeile 5: Zeile 5:
 Für die folgenden Beispiele muss ein Söldnerquartier (''CB_Mercenary'') mit dem Skriptnamen ''"MercenaryCamp"'' auf der Karte sein. Für die folgenden Beispiele muss ein Söldnerquartier (''CB_Mercenary'') mit dem Skriptnamen ''"MercenaryCamp"'' auf der Karte sein.
  
-FIXME Komfortfunktion für Logic.AddMercenaryOffer ?+Außerdem wird folgende Komfortfunktion vorausgesetzt: 
 +<code lua> 
 +-- Komfortfunktion für das Einstellen von Söldnerquartierangeboten 
 +function AddMercenaryOffer(_MercenaryCamp, _OfferType, _OfferAmount, _Cost) 
 +    local EntityId = GetEntityId(_MercenaryCamp) 
 +    assert(IsAlive(_MercenaryCamp), "MercenaryCamp is no longer alive"
 +    assert(Logic.GetEntityType(EntityId) == Entities.CB_Mercenary, "MercenaryCamp must be of entity type CB_Mercenary"
 +    assert(type(_OfferType) == "number", "OfferType must be an entity type, got " .. type(_OfferType)) 
 +    assert((type(_OfferAmount) == "number") and (math.floor(_OfferAmount) == _OfferAmount), "OfferAmount must be an integer, got " .. type(_OfferAmount)) 
 +    assert(type(_Cost) == "table", "Cost must be a table, got " .. type(_Cost)) 
 +    assert(Logic.GetNumerOfMerchantOffers(EntityId) < 4, "MercenaryCamp already offers the maximum number of trades")
  
-''Logic.AddMercenaryOffer(_MercenaryCampId_EntityType_Amount_ResourceType1_Cost1_ResourceType2_Cost2, ...)''+    local CostTable = {} 
 +    for ResourceName, ResourceAmount in pairs(_Cost) do 
 +        assert(ResourceType[ResourceName], ResourceName .. " is not a valid resource"
 +        assert((type(ResourceAmount) == "number") and (ResourceAmount >= 0), "Resource costs must be a positive number, got " .. ResourceName .. " = " .. type(ResourceAmount)) 
 +        table.insert(CostTable, ResourceType[ResourceName]) 
 +        table.insert(CostTable, ResourceAmount) 
 +    end 
 + 
 +    Logic.AddMercenaryOffer(EntityId_OfferType_OfferAmountunpack(CostTable)) 
 +end 
 +</code> 
 + 
 +Die Funktion hat die folgenden Parameter: 
 + 
 +^Name^Typ^Beschreibung^ 
 +| **_MercenaryCamp** | String oder Number | Skriptname oder Entity-Id des Söldnerquartiers | 
 +| **_OfferType** | Entity-Typ | Entity-Typder im Angebot sein soll. Für Hauptmänner werden automatisch volle Trupps erzeugt | 
 +| **_OfferAmount** | Number | Wie oft dieses Angebot zur Verfügung stehen soll. Kann auch ''-1'' sein für unendlich oft | 
 +| **_Cost** | Table | Die Kosten des Angebots in einem [[ scripting:tutorials:level1:tables#tables_als_woerterbuecher|assoziativen Table]]bei dem der Ressourcentyp Key und die geforderte Menge Value ist (siehe auch die folgenden Beispiele) | 
 + 
 +In unserem Söldnerquartier bieten wir 3 Truppen Breitschwertkämpfer und beliebig viele Bogenschützen-Banditen an: 
 +<code lua> 
 +AddMercenaryOffer("MercenaryCamp"Entities.PU_LeaderSword23, {Gold = 400, Iron = 200}) 
 +AddMercenaryOffer("MercenaryCamp", Entities.CU_BanditLeaderBow1, -1, {Gold = 200, Wood = 200}) 
 +</code> 
 + 
 +Beim Anbieten von Söldnern sollte die Balance im Auge behalten werdenWie kann der Spieler durch die Nutzung von Söldnern die Karte besser bewältigen und welchen Ressourcenaufwand sollte er dafür betreiben müssen? 
 + 
 +Tatsächlich kann in Söldnerquartieren jeder beliebige Entity-Typ angeboten werden, auch Helden und LehmhaufenDiesen fehlt dann das passende Icon (standardmäßig das Schwert). Vor allem unbewegliche Entities sind problematisch, da sie immer an genau der gleichen Stelle vor dem Zelt erscheinen. Blockende Entities verhindern, dass andere gekaufte Einheiten den Bereich vor dem Zelt verlassen können. 
 + 
 +---- 
 + 
 +Im nächsten Kapitel wird der Einsatz von Timern und Zeitlimits erklärt. 
 + 
 +[[ scripting:tutorials:level2:chests | Voriges Kapitel: Schatztruhen ]] \\ 
 +[[ scripting:tutorials:level2:countdowns | Nächstes Kapitel: Zähler und Zeitlimits ]] \\ 
 +[[ scripting:tutorials:level2:mercenaries | Zurück nach oben ]]
scripting/tutorials/level2/mercenaries.1700749537.txt.gz · Zuletzt geändert: 2023/11/23 14:25 von fritz_98