GetAllLeader
Diese Funktion gibt zwei Table zurück. Das erste Table enthält (falls welche vorhanden sind) alle Leader-Ids eines Players (inkl. Kanonen!). Das zweite Table beinhaltet (falls vorhanden) alle Ids der Kanonen des Players. Sie hat den Vorteil, dass gegenüber den xyInArea-Funktionen zuverlässig alle Leader auf der gesamten Map erfasst werden.
Die Funktion benötigt beim Aufruf nur einen einzigen Parameter, nämlich die Player-Id. Und da es sich quasi um eine Art Hilfsfunktion handelt, die alleine wenig Sinn macht, muss sie aus anderen Funktionen heraus aufgerufen werden.
Bedenke: Die Leader können sich sehr schnell verändern (neue rekrutiert, im Kampf gefallen, etc.)! Von daher sollte die Funktion jedesmal, und unmittelbar bevor man auf die Leader-Ids zugreifen möchte, aufgerufen werden!
Der Aufruf erfolgt dann so (z.B. für Player 3):
local leaders, cannons = GetAllLeader( 3 )
und muss immer aus einer anderen Funktion heraus erfolgen!
Zur Verdeutlichung noch ein komplettes (wenn auch wenig sinniges) Beispiel:
function Army_Leader_Player3() local leaders, cannons = GetAllLeader( 3 ) for i=1,table.getn(leaders) do Message("Leader-Id: "..leaders[i].." Army-Id: "..AI.Entity_GetConnectedArmy(leaders[i])) end for j=1,table.getn(cannons) do Message("Cannon-Id: "..cannons[j].." Army-Id: "..AI.Entity_GetConnectedArmy(cannons[j])) end end
Code
irgendwo an eine freie Stelle (nicht innerhalb anderer Funktionen!) ins Script kopieren:
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