[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
\\
[[http://www.siedler-portal.de/vb3/member.php?u=2111|Noigi]] & [[http://www.siedler-portal.de/vb3/member.php?u=2109|Tenji]]\\
\\
====== Einleitung ======
Wer sich schon einmal an der Legenden-Kampagne "Kampf um die Smaragdebene" versucht hat, wird sich wohl schmerzhaft an die Fallen erinnern können, die einem dort das Leben schwer machen. Und Jeder sollte eigentlich die Tretminen kennen, die der Held Salim aufstellen kann.\\
\\
Wär doch schön, wenn man sowas in eine Karte einbauen könnte...\\
===== Fallen selbstgebaut =====
Mit der folgenden Funktion kann eine beliebige Entität in eine vergleichbare Falle verwandelt werden:\\
CreateTrap( _name, _playerID, _range, _amount )
Zum Beispiel in die FirstMapAction einfügen.\\
Dazu muss der weiter unten stehende Zusatzcode ins Skript (beliebige Stelle) kopiert werden.\\
Solche Fallen können ein beliebiges Objekt sein (Büsche, Bäume, Rohstoffhaufen; lustig wirds bei beweglichen Einheiten...), und verursachen wenn Feinde in der Nähe sind eine Reihe von Explosionen, bis sie sich selbst zerstören.\\
Hier die Parameter mit Erklärung:
* **_name** //ist der Skriptname der Entität, die zur Falle werden soll//
* **_playerID** //ist die ID des Spielers dem die Falle gehören soll; also wessen Feinde dadurch verletzt werden können//
* **_range** //ist der Radius um die Falle, innerhalb dessen die Falle auf Feinde reagiert; dieser Parameter ist optional//
* **_amount** //ist die Anzahl der Explosionen, die die Falle verursachen kann bis sie zerstört wird; ebenfalls optional//
\\
Ein Beispiel könnte z.B. so aussehen:\\
--Hier wird die Entity "trap" zur Falle gemacht,...
--...die die Feinde von Spieler 2 verletzen kann,...
--...einen Reaktionsradius von 1000 hat...
--...und insgesamt 50x explodieren kann.
CreateTrap( "trap" ,2 ,1000, 50 )
\\
So einfach geht das. Es können auf diese Weise beliebig viele Fallen erstellt werden!
===== Zusatzcode =====
function CreateTrap( _name, _playerID, _range, _amount )
gvTraps = gvTraps or { TrapsJobID = StartSimpleJob("TrapJob") };
local amount, range;
if _range == nil then range = 800;
else range = _range; end
if _amount == nil then amount = 1;
else amount = _amount; end
local trap = {
name = _name,
player = _playerID,
range = range,
amount = amount,
};
table.insert( gvTraps, trap );
end
function TrapJob()
for i = table.getn(gvTraps),1,-1 do
local trap = gvTraps[i];
if Counter.Tick2( trap.name, 2) then
if trap.amount > 0 and AreEnemiesInArea( trap.player, GetPosition( trap.name), trap.range ) then
CreateEntity( trap.player, Entities.XD_Bomb1, GetPosition( trap.name) );
trap.amount = trap.amount -1;
elseif trap.amount == 0 then
DestroyTrap( trap);
DestroyEntity( trap.name);
end
end
end
end
function DestroyTrap( _trap)
for i = 1,table.getn(gvTraps) do
if gvTraps[i] == _trap then
table.remove(gvTraps,i);
return true
end
end
end
--Zusätzlich wird die AreEnemiesInArea-Funktion von Tenji benötigt.
--Wenn sich diese schon im Skript befindet, muss sie nicht nochmal eingefügt werden.
function AreEnemiesInArea( _player, _position, _range)
for i = 1,8 do
if Logic.GetDiplomacyState( _player, i) == Diplomacy.Hostile then
if AreEntitiesInArea( i, 0, _position, _range, 1) then
return true
end
end
end
end