Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:begleitende_armeen_erstellen


Tenji

Manchmal will man ja eine befreundete Armee einem Helden folgen, und diesen Beschützen lassen!
Dazu kann man sich mit „CreateMilitaryGroup“ Truppen erstellen und diese dann mit einem SimpleJob steuern.
Wenn man nun mehrere solche Armeen haben will, hat man mehrere Jobs, die gleichzeitig laufen und eigentlich das selbe tun. Außerdem ist es viel Schreibarbeit!

Um das zu vereinfachen habe ich mir jetzt eine Comfort function dazu geschrieben, mit der das um vieles einfacher ist!

Verwendung:

So einfach könnt ihr euch mit dieser Comfort function eine folgende/beschützende Armee erstellen:

CreateFollowingArmy( _entity, _player, _typ, _soldiers, _position, _trups)
  • _entity: Die Entity, die von der Armee beschützt/begleitet wird.
  • _player: Die PlayerID, die die Armee haben soll.
  • _typ: Der EntityTyp, der Truppen in der Armee.
  • _soldiers: Die Anzahl der Soldaten in jeder Truppe der Armee.
  • _position: Die Position, an der die Armee bei ihrer Erstellung auftaucht.
  • _trups: Die Anzahl der Truppen in der Armee.


So könnte man einer Entity auch eigene Truppen folgen, oder sie von einer feindliche Armee verfolgen lassen!

Um alle Armeen zu deaktivieren kann man einfach das schreiben:

StopAllFollowingArmys()

Beispiel:

CreateFollowingArmy( "Erec", 4, Entities.PU_LeaderSword4, 8, "Pos1", 2)

Und schon habt ihr eine Armee von 2 Truppen mit je 8 Soldaten, des Typs Bastardschwertkämpfer, die an der Position einer SkriptEntity mit dem Namen „Pos1“ auftaucht, und der Entity mit dem Namen „Erec“ folgt!


Mit diesem Code ...

kann man sich beliebig viele dieser folgenden Armeen erstllen!

------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Comfort function to create a following Army                                                                                  by Tenji
------------------------------------------------------------------------------------------------------------------------------------------------------------
function CreateFollowingArmy( _entity, _player, _typ, _soldiers, _position, _trups)
	gvFollowingArmys = gvFollowingArmys or { FollowingArmysJobID = StartSimpleJob("ControlAllFollowingArmys") };
	local entityName = GetEntityName(_entity);
	for i = 1, table.getn(gvFollowingArmys) do
		if gvFollowingArmys[i].followEntity == entityName then
			local jStart = table.getn(gvFollowingArmys[i]);
			for j = 1, _trups do
				local number = jStart +j;
				local trup = { name = _entity.."Trup"..number};
				CreateMilitaryGroup( _player, _typ, _soldiers, GetPosition(_position), trup.name, entityName);
				table.insert( gvFollowingArmys[i], trup);
			end
			return true
		end
	end
	local insertTable = { followEntity = entityName };
	for i = 1, _trups do
		local trup = { name = _entity.."Trup"..i };
		CreateMilitaryGroup( _player, _typ, _soldiers, GetPosition(_position), trup.name, entityName);
		table.insert( insertTable, trup);
	end
	table.insert( gvFollowingArmys, insertTable);
end
function StopAllFollowingArmys()
	if (gvFollowingArmys ~= nil) then
		EndJob( gvFollowingArmys.FollowingArmysJobID );
		gvFollowingArmys = nil;
	end
end
function ControlAllFollowingArmys()
	for i = table.getn(gvFollowingArmys), 1, -1 do
		local entity = gvFollowingArmys[i].followEntity;
		for j = table.getn(gvFollowingArmys[i]), 1, -1 do
			local trup = gvFollowingArmys[i][j].name;
			if (not IsNear( trup, entity, 500)) and IsExisting( trup) then
				if IsNear( trup, entity, 3000) then
					Attack( trup, GetPosition( entity));
				else
					Move( trup, GetPosition( entity));
				end
			elseif not IsExisting( trup) then
				table.remove( gvFollowingArmys[i], j);
			end
		end
		if table.getn( gvFollowingArmys[i] ) == 0 then
			table.remove( gvFollowingArmys, i);
		end
	end
end 

Bei Problemen bitte hier im Forum melden!

Siehe auch

tutorials/begleitende_armeen_erstellen.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)