World of Gothic Archiv
> NWN-Hilfe Stadtwachescript |
|
25.08.2002, 10:24 | #1 | ||
The King Beiträge: 100 |
Stadtwachescript
Als mein erstes Script wollte ich ein Script machen wo die Wache dich aufhaltet wenn du dich ausruhst (wie in GB2) Allerdings das er einen sehen muss. Aber die Wache macht nichts! Der Kompiller sreibt bei der Zeile objekt oCreature = GetLastPerceived(); FEHLER: KEIN SEMIKOLON NACH ANWEISUNG - aber ich finde keinen Fehler. Wie es im Scriptkurs stand hab ich die // vor SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 weggenommen damit das OnUserdefinde aktiviert wird! Dann hab ich in OnUserdefinde das hier reingeschreiben! void main() { { if(nUser ==1002) { objekt oCreature = GetLastPerceived(); if(TRUE == GetLastPerceptionSeen()) && (GetisPC(oCreature)) && (GetIsResting(oCreature)) { AssignCommand(oCreature, ClearAllActions()); ActionDoCommander(SetFacingpoint(GetPosition(oCreature))); speakString("Sucht euch ein Gasthaus wenn ihr euch ausruhen wollt!"); } } } |
||
25.08.2002, 10:26 | #2 | ||
The King Beiträge: 100 |
eigentlich hab ich das gegliedert aber hier sieht man es komischerweise ungegliedert |
||
25.08.2002, 10:29 | #3 | ||
palme Beiträge: 466 |
Ich nehme dieses Script: quote: Ich hoffe es hilft dir... |
||
25.08.2002, 12:32 | #4 | ||
The King Beiträge: 100 |
Ich möchte aber noch wissen was hier falsch ist. Ich hab das Script jetzt ausgebessert (ein paar Fehler waren drin.) Das hier muss man nur noch in OnPerception eingeben: Die Wache schaut mir nur nach sonnst macht sie nichts! void main() { int zahl = 0; do { object Creature = GetFirstPC(); if(TRUE == GetIsResting(Creature)) { AssignCommand(Creature, ClearAllActions()); ActionDoCommand(SetFacingPoint(GetPosition(Creature))); ActionDoCommand(ActionMoveToObject(Creature)); SpeakString("Sucht euch ein Gasthaus wenn ihr euch ausruhen wollt!"); } } while(zahl ==1); } |
||
25.08.2002, 13:51 | #5 | ||
GuradonHellsing Beiträge: 232 |
anstelle von ActionDoCommand(ActionMoveToObject(Creature)); ActionMovetoObject is ja schon ein action befehl AssignCommand(OBJECT_SELF,ActionMoveToObject(Creature)); und natürlich AssignCommand(OBJECT_SELF,ActionSpeakString("BlaBlaBla")); er soll ja hin laufen und dann sprechen |
||
25.08.2002, 14:01 | #6 | ||
The King Beiträge: 100 |
Leider geht es immer noch nicht! |
||
25.08.2002, 16:18 | #7 | ||
GuradonHellsing Beiträge: 232 |
das problem is das er das script nur ausführt wenn er den pc zum erstenmal wahrnimmt packs mal unter onheartbeat und benutz getnearestobject und getdistancebetween objects falls die wache nurn bestimmten radius ham soll dann brauchste auch nimmer die do while schleife |
||
05.09.2002, 10:30 | #8 | ||
The King Beiträge: 100 |
Überarbeitete Version: Geht aber immer noch nicht. Kann es sein das ir object gesehen = GetFirstPC(); int aufgerufen =GetUserDefinedEventNumber(); void main() { switch(aufgerufen) { case 1001: // Jede 6 Sekunden kommt das Skript in action if(GetIsResting(gesehen)) //Es wird überprüft ob spieler Rastet { if(GetObjectSeen(gesehen,OBJECT_SELF) == TRUE || GetObjectHeard(gesehen,OBJECT_SELF)) Wenn er auch noch gesehen ofer gehört wir passiert das { location lGoBack = GetLocation(OBJECT_SELF); AssignCommand(gesehen,ClearAllActions()); AssignCommand(OBJECT_SELF,ActionMoveToObject(gesehen,TRUE)); AssignCommand(OBJECT_SELF,ActionSpeakString("Geht in ein Gasthaus wenn ihr euch ausruhen wollt!")); AssignCommand(OBJECT_SELF, DelayCommand(5.0, ActionMoveToLocation(lGoBack))); } } break; } } Kann es sein das was mit dem if(GetIsResting(gesehen)) nicht in ordnung ist |
||
05.09.2002, 17:02 | #9 | ||
GuradonHellsing Beiträge: 232 |
das getfirstpc ist falsch ich würde lieber GetLastPerceived() nehmen und die switch schleife ist mir nicht ganz klar (glaub die kann man weglassen) |
||
06.09.2002, 09:30 | #10 | ||
The King Beiträge: 100 |
Das case 1001 wird aufgerufen wenn Hearthbeath aktiviert wird. das macht GetUserDefinedEventNumber()- Klappt mit GetLastPerceived nicht |
||
06.09.2002, 09:35 | #11 | ||
Rhaegar Beiträge: 296 |
Hm, also auf den ersten Blick wuerde ich sagen, das Ganze sollte eigentlich einwandfrei funktionieren. Tut es aber blöderweise nicht... Ich mach mal ein wenig Debugging und schau woran's liegt... Edit: Ok, ich hab' jetzt folgendes gemacht: code\: Ergebnis: Der Nsc sagt alle 6 Sekunden "Case ist ok" , den Namen des PCs sowie 0. Blöderweise sagt er wenn man sich ausruht auch immer noch 0, es liegt also tatsaechlich am GetIsResting(), das irgendwie streikt... Ich koennte ja jetzt versuchen eine Loesung zu posten, die im OnPlayerRest bestimmte PlotFlags bzw. Variablen fuer den Waechter setzt, aber das Skript das Palme gepostet hat ist viel zu schoen, um damit zu konkurrieren ;), nimm' lieber das. ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
||
06.09.2002, 11:44 | #12 | ||
The King Beiträge: 100 |
Ok ich nehm das von Palme. PS: Gute Idee das mit dem Debugging |
||
|