[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
====== DestroyArmy ======
Manchmal möchte man eine Armee einfach per Script von der Map verschwinden lassen, z.B. eine begleitende Armee, die eine Karawane eskortiert hat und wenn die Karawane ihr Ziel erreicht hat, nicht mehr benötigt wird.
Die Funktion benötigt beim Aufruf 2 Parameter:
- die Player-Id des Spielers, dessen Armee zerstört werden soll
- die Army-Id der Armee, die zerstört werden soll
Der Funktionsaufruf sieht dann bspw. so aus:
DestroyArmy( 2, 9 )
Hier würde also die Armee mit der ID 9 von Player 2 zerstört.\\
**//Achtung://** Man sollte keine Armeen mit IDs zerstören, die für die KI reserviert sind - siehe [[tutorials:computergegner_-_grundlagen|Computergegner - Einführung in die Grundlagen]] (unter Hinweise, ziemlich weit unten auf der Seite)
Zusätzlich wird die Funktion [[utilfunctions:getallleader|GetAllLeader]] benötigt!
===== Code =====
irgendwo an eine freie Stelle (nicht innerhalb anderer Funktionen!) ins Script kopieren:
function DestroyArmy(_player,_armyId)
local leaders = GetAllLeader(_player)
for i=1,table.getn(leaders) do
if AI.Entity_GetConnectedArmy(leaders[i]) == _armyId then
Logic.DestroyGroupByLeader(leaders[i])
end
end
end
und zusätzlich, falls noch nicht im Script bereits vorhanden:
function GetAllLeader(_player)
local leaderIds = {}
local cannonIds = {}
local numberOfLeaders = Logic.GetNumberOfLeader(_player)
local cannonCount = 0
local prevLeaderId = 0
local existing = {}
for i=1,numberOfLeaders do
local nextLeaderId = Logic.GetNextLeader( _player, prevLeaderId )
if existing[nextLeaderId] then
cannonCount = cannonCount + 1
else
existing[nextLeaderId] = true;
table.insert(leaderIds,nextLeaderId)
end
prevLeaderId = nextLeaderId
end
if cannonCount > 0 then
local tempCannonIds = {}
for i=1,4 do
local counter = 0
counter = Logic.GetNumberOfEntitiesOfTypeOfPlayer(_player, Entities["PV_Cannon"..i])
if counter > 0 then
tempCannonIds = {Logic.GetPlayerEntities(_player, Entities["PV_Cannon"..i], counter)}
table.remove(tempCannonIds,1)
for j=1,table.getn(tempCannonIds) do
table.insert(leaderIds,tempCannonIds[j])
table.insert(cannonIds,tempCannonIds[j])
end
end
end
end
return leaderIds, cannonIds
end