Türme bestimmte Einheiten anvisieren lassen

» Siedler Map Source Forum » Siedler DEdK Script Forum » Türme bestimmte Einheiten anvisieren lassen

Seiten: 1

Play4FuN
#1
24.08.2020 22:18
Beiträge: 704

Türme bestimmte Einheiten anvisieren lassen

Ahoi, kennt jemand eine Möglichkeit, einem Turm (Ballista bzw. Kanone; auch jeweils in deren dark Versionen) eines Computerspielers ein bestimmtes Angriffsziel per Skript zuzuweisen?

(am besten HE-konform...)

Ich möchte, wenn Pilgrims Kanone platziert wurde, dass alle umliegenden Türme auf diese feuern (anstatt auf bis dato evtl. angegriffene Truppen des Spielers).

Hier mal das Wichtigste extrahiert:

function OnEntityCreated()
	local entityId = Event.GetEntityID()
	local entityType = Logic.GetEntityType( entityId )
	
	-- Pilgrim: his cannons cause all enemy nearby towers to focus it instead of other player units
	-- do not use Entities.PU_Hero2_Foundation1 (which is created first) because this might easily be abused by the player (towers focus new multiple times)
	if entityType == Entities.PU_Hero2_Cannon1 then
		local pos = GetPos( entityId )
		local _, foundation = Logic.GetEntitiesInArea( Entities.PU_Hero2_Foundation1, pos.X, pos.Y, 100, 1 )
		if foundation then
			PilgrimCannonAttractTowerFire( foundation )
		end
	end
	
end

function PilgrimCannonAttractTowerFire( foundation )
	
	local pos = GetPos( foundation )
	local range = 3000	-- what is the attack range of a tower?
	local towers = { Entities.PB_DarkTower2, Entities.PB_DarkTower3, Entities.PB_Tower2, Entities.PB_Tower3, }
	
	for _, entityType in towers do
		local entities = { Logic.GetEntitiesInArea( entityType, pos.X, pos.Y, range, 64, 8 ) }	-- access category 8 = buildings
		for i = 2, entities[1]+1 do
			Logic.GroupAttack( entities[i], foundation )
			n = n + 1
		end
	end
	
end



Habe auch versucht, statt den Türmen (entities[ i]) den Angriffsbefehl deren Geschützen (Logic.GetFoundationTop) zu geben, ebenfalls ohne Erfolg. Damit meine ich, die Türme greifen weiterhin Pilgrim an, und nicht seine Kanone...

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

totalwarANGEL
#2
26.08.2020 00:10
Beiträge: 2123

Soweit ich mich erinnere, sind die Kanonen/Ballisten getrennte Entities mit einem eigenen Typen. _Balista und _Cannon steht da glaube ich hinten dran (guck mal in die G_Liste.xls)

Du könntest nach diesen Entities suchen und ihnen mit Logic.GroupAttack die Kanone als Ziel geben.

Die Attack Rage der Türme kannst du zur Not aus den XML des Spiels entnehmen, wenn es dafür keine Funktion gibt.

____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.

Play4FuN
#3
26.08.2020 08:21
Beiträge: 704

Logic.GroupAttack ist genau das, was ich verwende.
Auch deinen Vorschlag, die Ballista- bzw. Kanonenentitäten anstelle der Türme zu verwenden habe ich schon probiert (zunächst über Logic.GetFoundationTop, dann auch direkt indem ich nach Entities.PB_Tower2_Ballista statt Entities.PB_Tower2 usw. suche). Alles anscheinend ohne Auswirkungen. Ich vermute, die GroupAttack Funktion ist nur für Truppen anwendbar... :/

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum