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 Computergegner - Einführung in die Grundlagen (unter Hinweise, ziemlich weit unten auf der Seite)
Zusätzlich wird die Funktion 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