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! )
Er wird hiermit aufgerufen:
AreEnemiesInArea( _player, _position, _range)
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)
------------------------------------------------------------------------------------------------------------------------------------------------------------ -- 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!
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
Zur Tutorial-Übersicht