-
NPC ignorieren TA-Änderung
Nun, genau genommen, ignorieren sie sie zur Hälfe. Aber dazu später.
Ich habe folgende Situation: Ein Schlauchlevel mit Fallen, tückischen Höhenunterschieden und 6 NPC Begleiter im TA_FOLLOW_PLAYER. Diese Begleiter wechseln, sobald der Held sich einer Falle oder einem unmöglich zu überwindenden Höhenunterschiedlich nähert, den TA über ein Gruppenmitglied, dass den Helden anquatscht.
Das ganze sieht im Dialog so aus:
Code:
FUNC void DIA_LASTLEVEL_1_info()
{
//TEMPLE_PILLAR
AI_Output (self, other, "DIA_LASTLEVEL_1_00"); // (zynisch) Brodelnde Lava und zusammenfallende Tempel. Weltuntergangstimmung. Toll.
AI_Output (self, other, "DIA_LASTLEVEL_1_01"); // Passt auf, wenn ihr hier rüberbalanciert.
Npc_ClearAIQueue (slp2);
Npc_ClearAIQueue (slp3);
Npc_ClearAIQueue (slp4);
Npc_ClearAIQueue (slp5);
Npc_ClearAIQueue (slp6);
B_StartOtherRoutine (SLP1,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP2,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP3,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP4,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP5,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP6,"FIRSTENTRANCE");
//Siehe EDIT
AI_StartState (slp6, ZS_guard_temple, 0, "");
AI_StartState (slp2, ZS_guard_temple, 0, "");
AI_StartState (slp3, ZS_guard_temple, 0, "");
AI_StartState (slp4, ZS_guard_temple, 0, "");
AI_StartState (slp5, ZS_guard_temple, 0, "");
};
Das Problem, dass ich nun mit diesen 6. Begleitern habe, ist, dass viele diese TA-Änderung ignorieren. Sie tritt nicht immer auf, aber in gut 50% der Fälle. Zwei bis Drei der Begleiter bleiben in der ZS_FOLLOW_PLAYER stecken und rennen dem Helden nach (ins Verderben), statt in den gewünschten ZS zu wechseln.
Amüsanterweise sind diese ignoranten Begleiter laut Anzeige im gewünschten Tagesablauf. Klicke ich sie mit j an, wird der gewünschte TA als aktiv angezeigt. Aber dennoch führen sie ihren alten aus.
EDIT
Ok, ich habe es zum Teil gelöst bekommen.
Ich habe einfach im Dialog den Beginn der gewünschten ZS erzwungen, also für jeden der NPC
AI_StartState (NPC, ZS_TAGESABLAUF, 0, "");
eingetippt. Simpel, aber bis ich darauf mal gekommen bin.
EDIT 2
Leider doch nicht so perfekt, wie erst vermutet. In einigen Testdurchläufen ignoriert immer noch einer der NPC sogar den erzwungenen ZS Befehl.
Mich würde interessieren: Ist bekannt, wieso NPCs manchmal so störrisch an ihrem alten TA festhängen? Es scheint besonders häufig zu passieren, wenn sie "hinter" dem Helden stehen, also außerhalb der Kamera sind. Aber das ist nicht darauf beschränkt. Für die Zukunft wäre das evtt hilfreich zu wissen. Meine Mod ist sehr ... tagesablauflastig.
Geändert von Lukar (08.08.2020 um 11:03 Uhr)
-
08.08.2020 11:41
#2
Du könntest alternativ Npc_ExchangeRoutine probieren.
-
It happens that NPCs don't finish performing the current animation/action yet - they don't always switch correctly to the new routine.
If you are using Ikarus+Lego extenders try using AI_Function
Code:
FUNC void DIA_LASTLEVEL_1_info()
{
//TEMPLE_PILLAR
AI_Output (self, other, "DIA_LASTLEVEL_1_00"); // (zynisch) Brodelnde Lava und zusammenfallende Tempel. Weltuntergangstimmung. Toll.
AI_Output (self, other, "DIA_LASTLEVEL_1_01"); // Passt auf, wenn ihr hier rüberbalanciert.
B_StartOtherRoutine (SLP1,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP2,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP3,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP4,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP5,"FIRSTENTRANCE");
B_StartOtherRoutine (SLP6,"FIRSTENTRANCE");
//Siehe EDIT
AI_Function(self, ExchangeRoutineNpc_01);
};
func void ExchangeRoutineNpc_01()
{
Npc_ClearAIQueue (slp2);
Npc_ClearAIQueue (slp3);
Npc_ClearAIQueue (slp4);
Npc_ClearAIQueue (slp5);
Npc_ClearAIQueue (slp6);
AI_StartState (slp6, ZS_guard_temple, 0, "");
AI_StartState (slp2, ZS_guard_temple, 0, "");
AI_StartState (slp3, ZS_guard_temple, 0, "");
AI_StartState (slp4, ZS_guard_temple, 0, "");
AI_StartState (slp5, ZS_guard_temple, 0, "");
};
-
Danke euch für die Antworten.
@N1kX
I had Ikarus installed some years ago. I still roams around in my scripts, but i never really used it. Will the AI_Function command also take action without the Lego scripts?
@Falugify
Mit diesem Befehl hatte ich auch schon herumexperimentiert. Für sich alleine zeigte er nicht die gewünschte Wirkung. Aaaaber ... verbunden mit Npc_ClearAIQueue (slp2); sehe ich tatsächlich eine gewisse Stabilität in meinen TA-Änderungen.
-
Zitat von Lukar
@N1kX
I had Ikarus installed some years ago. I still roams around in my scripts, but i never really used it. Will the AI_Function command also take action without the Lego scripts?
Nein. AI_Function (und verwandte Funktionen) werden von LeGo bereit gestellt.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|