Benutzer-Werkzeuge

Webseiten-Werkzeuge


utilfunctions:destroyarmy

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:

  1. die Player-Id des Spielers, dessen Armee zerstört werden soll
  2. 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
utilfunctions/destroyarmy.txt · Zuletzt geändert: 2021/09/18 19:16 von 127.0.0.1