[[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]]