[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
[[http://www.siedler-portal.de/vb3/member.php?find=lastposter&t=4502|Tenji]]
**Bestimmt wolltet die meisten von euch schon mal abfragen, ob gerade Gegner in der Nähe sind!** \\
\\
Wie macht man das meistens? \\
Genau, man frägt ab, ob eine Entity des feindlichen Players ( nehmen wir mal an id = 2 ) in der Nähe ist:
AreEntitiesInArea( 2, 0, GetPosition("Irgendwo"), 1000, 1) -- Die 0 bedeutet alle Arten von Entities
Aber jetzt muss man ja immer wissen, ob der Player, den man angegeben hat zur Zeit auch wirklich feindlich ist! \\
( Mann kann ja auch mitten im Spiel die Diplomatie ändern! ) \\
\\
\\
===== Ich habe da einen Code geschrieben, der das auf angenemere Weise für einen erledigt: =====
Er wird hiermit aufgerufen:
AreEnemiesInArea( _player, _position, _range)
* "_player" ist der Spieler, der wissen will, ob ein Gegner in der Nähe ist
* "_position" ist die Position (muss wie bei AreEntitiesInArea mit GetPosition("Irgendwo") angegeben werden)
* "_range" ist der Radius um die "_position"
\\
Natürlich gibt es dafür auch ein Gegenstück, das abfragt, ob Verbündete in der Nähe sind! \\
Dazu einfach diesen Aufruf verwenden:
AreAlliesInArea( _player, _position, _range)
\\
=== Dies ist der dazu benötigte Code: ===
------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Comfort functions zur Abfrage, ob Feinde/Verbündete in einem bestimmten Bereich sind by Tenji
------------------------------------------------------------------------------------------------------------------------------------------------------------
function AreEnemiesInArea( _player, _position, _range)
return AreEntitiesOfDiplomacyStateInArea( _player, _position, _range, Diplomacy.Hostile )
end
function AreAlliesInArea( _player, _position, _range)
return AreEntitiesOfDiplomacyStateInArea( _player, _position, _range, Diplomacy.Friendly )
end
function AreEntitiesOfDiplomacyStateInArea( _player, _position, _range, _state )
for i = 1,8 do
if Logic.GetDiplomacyState( _player, i) == _state then
if AreEntitiesInArea( i, 0, _position, _range, 1) then
return true
end
end
end
return false
end
Beide Code geben "true", also ja, zurück, wenn Feinde/Verbündete in der Gegend sind! \\
\\
===== Verwenden könnte man sie zB. so: =====
Achtung, Feinde sind im Anmarsch!
StartSimpleJob("MessageJobKommenFeinde")
---------------------------------------------------------
function MessageJobKommenFeinde()
if AreEnemiesInArea( 1, GetPosition("Brücke"), 1000) then
Message("Feinde nähern sich euch!")
return true
end
end
Wann kommt denn die Verstärkung?
StartSimpleJob("MessageJobKommenVerbündete")
---------------------------------------------------------
function MessageJobKommenVerbündete()
if AreAlliesInArea( 1, GetPosition("Brücke"), 1000) then
Message("Die Verstärkung rückt an!")
return true
end
end
\\
Hoffe, dass "Allies" als Bezeichnung durch geht! \\
Und, natürlich, man hätte es auch so einrichten können, das man nicht "GetPosition()" schreiben muss, aber ich dachte, dass man das von "AreEntitiesInArea" so gewohnt ist - und das würde sonst eher verwirren! ;-) Tenji
\\
\\
[[:tutorials:index|Zur Tutorial-Übersicht]]