Construction Set [Frage] AITravel durch Tür

Killfetzer

Super-Moderator
Teammitglied
Ich habe wieder mal ein Problem:

In einem Script weise ich einen NPC an zu einer bestimmten Uhrzeit seine Tätigkeit einzustellen und öffne gleichzeitig eine Tür (die allerdings ein Activator ist). Dann warte ich per Timer 1 Sekunde damit sich die Tür öffnen kann. Danach bekommt der NPC eine Anweisung sich durch die Tür zu bewegen. Sobald er auf der anderen Seite angekommen ist, soll die Tür durch Abfragen von GetAIPackageDone wieder geschlossen werden (durch direkten Befehl).

Mein Problem ist, dass der NPC nicht erkennt, dass die Tür offen ist. Er reagiert überhaupt nicht auf den Befehl und nach einigen Sekunden bricht er scheinbar AITravel ab, da sich die Tür wieder schließt. Ich denke das Problem liegt daran, dass Activator im Weg (auch wenn er wegbewegt wird) die Pathgrids durcheinander bringt.

Gibt es irgendeinen Weg das zu umgehen?
 
probier's mit zwei Aktivatoren. Der eine stellt die geschlossene Tür dar und ist enabled, der zweite wäre die sich öffnende Tür und zunächst disabled.
Den zweiten müssest Du mit dem MeshMessi etwas bearbeiten: Alle Shapes unter der RootCollisionNode müsstest Du durch ein einzelnes, winziges Dreieck ersetzen welches entweder irgendwo weit weg vom Tür-Modell im Mesh platziert werden muss bzw. mit der unsichtbaren Seite dem Betrachter zugewandt so das er durchlaufen kann.

Wenn die Tür sich öffnen soll muss sich der zweite Aktivator enablen und der erste Aktivator, der die geschlossene Türe mit Kollision wäre muss in dem Augenblick disabled und zusätzlich mit einem MoveWorld-Befehl aus dem Weg fahren auch wenn er disabled ist. Die Kollision mit dem Aktivator bleibt nämlich beim 'Disablen' an der Stelle bestehen bis ein Cellchanged stattfindet und die Zelle neu geladen wird. Ausser eben Du bewegst den Aktivator mit MoveWorld (nicht Move- das tuts nicht!!) aus dem Weg. Währenddessen könntest Du das Modell ohne Kollision einblenden und die Tür-Auf-Rotation durchführen.

Eventuell - ich mutmaße mal das Du in Deinem jetzigen Script "Rotate" genommen hast- ansonsten ignoriere den nächsten Absatz...

Vieleicht geht's ja auch mit einem "gewöhnlichen" Aktivator wenn Du einen RotateWorld-Befehl statt Rotate zum Drehen der "Tür" nimmst. Ein Blick ins Script der Kurbel von Nchuleftingth sollte Dir sagen ob ich richtig vermute.. Wenn die Wand dort mit RotateWorld gedreht wird dann ist es sicher möglich
Ansonsten bleibt nur die umständliche Methode, siehe oben 🙂
 
Zuletzt bearbeitet:
Leider verwende ich eine Schiebetür (übrigens mit deinem Gittermesh 😉):cry:

Eine Zelle muss nicht mit einem Zellenwechsel upgedatet werden. Ich habe auch eine andere Möglichkeit gefunden: der FixMe-Befehl. Der veranlasst auch das neuladen der Collisionsabfrage.

Außerdem hab ich das Problem jetzt gelöst: Mein NPC wurde nicht von der Tür aufgehalten sondern von einem anderen NPC, der gegen ihn gekämpft hatte, aber den Kampf sofort wieder beendet hat. Dadurch wurde mein AITravel-Befehl überschrieben.
 
Na bei 'ner Schiebetür isses wirklich einfach: Moveworld nehmen und die RootCollisionNode wird auch mit dem Mesh mitbewegt. Die Frage hätte sich wohl dann erledigt.
Sollte aber mal wieder jemand per Suchfunktion in den Tiefen des Forums diesen Thread rauskramen: Bei Move und Rotate wird das Kollision-Shape (F4 im CS drücken um diese Shapes zu sehen) nicht immer korrekt behandelt.
Moveworld/Rotateworld funktionieren dagegen korrekt.
Und wenn man eine Wand oder Tür disabled und der Spieler trotzdem noch dagegenrennt (bis nach dem nächsten Cellchange weil der CellUpdate-Befehl fehlerhaft programmiert ist) kann man das Wand- bzw. Tür-Objekt zusätzlich aus dem Weg Moveworld'en um die Kollision aus dem Weg zu räumen 🙂