Registrierung Häufig gestellte Fragen Suche Mitgliederliste Portal - Planet Skyrim.de Kalender Moderatoren und Administratoren Startseite
Morrowind&OblivionForum.de - PMM-Projects Network » The Elder Scrolls III: Morrowind » Morrowind Editor Help » NPC Disable - Problem » Hallo Gast [registrieren|anmelden]
« Vorheriges Thema Nächstes Thema » Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Autor
Beitrag
Lizard King
Crusader




Dabei seit: April 2003
Geschlecht:
Herkunft: bw
Beiträge: 482

Lizard King ist offline
NPC Disable - ProblemAntwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Folgende Situation:

Der PC führt ein Gespräch mit einem NPC. Das Endet mit einem Tagebucheintrag. Durch diesen wird ein Script, das auf dem NPC liegt, gestartet:

begin narhariscript_jkj

Short NoLore
short state
short doonce
float timer

AddTopic "Sorgen" // Hierfür unwichtig

if ( menumode == 1 )
................return
endif

if ( GetJournalIndex JKJ_1 > 29 ) // Hier beginnt der relevante Teil
.....set timer to timer + GetSecondsPassed
.....if ( timer > 1 )
........set state to 5
.....endif
endif

if ( state == 5 )
..if ( doonce == 0 )
...AiTravel, 39, 2, -120
.....set doonce to 1
.....set state to 10
...endif
endif

if ( state == 10 )
....if ( GetAIPackageDone == 1 )
........set state to 20
....endif
endif

if ( state == 20 )
........if ( CellChanged == 1 ) // Jetzt, nachdem der NPC sein Ziel erreicht hat, sollte er sich deaktivieren
........disable
....endif
endif

end

So, das Problem ist das der NPC nicht disabled wird - auch wenn der PC die Zelle verlässt.
Eigentlich wollte ich sogar, dass der NPC bis zum angegebenen Ziel läuft (im Spiel ist das eine Tür) und dann 'einfach' verschwindet.
Er bleibt jedoch stehen, und (wie schon gesagt) auch wenn der PC die Zelle verlässt und wieder kommt, ist der NPC noch da.

Ich schätze mal es liegt irgendwie am GetAIPackageDone, aber ich bin im Scripten noch ein ziemlicher Newb. Also bitte ich mal wieder um Hilfe.


__________________

07.11.2003, 16:29 Profil von Füge  deiner Freunde-Liste hinzu Email an Lizard King senden
Zuckung
Mage




Dabei seit: Oktober 2003
Geschlecht:
Herkunft: NRW
Beiträge: 245

Zuckung ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von Jerec

if ( GetJournalIndex JKJ_1 > 29 ) // Hier beginnt der relevante Teil
.....set timer to timer + GetSecondsPassed
.....if ( timer > 1 )
........set state to 5
.....endif
endif

if ( state == 5 )
..if ( doonce == 0 )
...AiTravel, 39, 2, -120
.....set doonce to 1
.....set state to 10
...endif
endif



timer läuft -> setzt state auf 5
2. bedingung läuft setzt state auf 10

zeit vergeht -> script läuft erneut
setzt state auf 5
doonce ist ABER jetzt 1
state wird NICHT mehr zu 10

07.11.2003, 17:17 Profil von Füge  deiner Freunde-Liste hinzu Email an Zuckung senden Homepage von Zuckung
Lizard King
Crusader




Dabei seit: April 2003
Geschlecht:
Herkunft: bw
Beiträge: 482

Lizard King ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Hm, wieso startet er nach dem 'state to 10' das Script nocheinmal neu?
Ich könnte einen kleinen Ansatz gebrauchen, wie ich das Script umschreiben muss.


__________________

07.11.2003, 17:32 Profil von Füge  deiner Freunde-Liste hinzu Email an Lizard King senden
Zuckung
Mage




Dabei seit: Oktober 2003
Geschlecht:
Herkunft: NRW
Beiträge: 245

Zuckung ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

das script is ne unendliche schleife und startet immer wieder von vorn

begin narhariscript_jkj

Short NoLore
short state
short doonceA
short doonceB
short doonceC

float timer

AddTopic "Sorgen" // Hierfür unwichtig

if ( menumode == 1 )
................return
endif


if ( GetJournalIndex JKJ_1 > 29 ) // Hier beginnt der relevante Teil
.....set timer to timer + GetSecondsPassed
.....if ( timer > 1 )
........if (doonceA == 0)
...........set state to 5
...........set doonceA to 1
........end if

.....endif
endif

if ( state == 5 )
..if ( doonceB == 0 )
...AiTravel, 39, 2, -120
.....set doonceB to 1
.....set state to 10
...endif
endif

if ( state == 10 )
....if ( GetAIPackageDone == 1 )
........if (doonceC ==0)
...........set state to 20
...........set doonceC to 1
........endif

....endif
endif

if ( state == 20 )
........if ( CellChanged == 1 ) // Jetzt, nachdem der NPC sein Ziel erreicht hat, sollte er sich deaktivieren
........disable
....endif
endif

end

07.11.2003, 17:47 Profil von Füge  deiner Freunde-Liste hinzu Email an Zuckung senden Homepage von Zuckung
Hephaistos
Verschollen




Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102

Hephaistos ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

set timer to timer + GetSecondsPassed

soweit ich weiß gehört das so:

set timer to (timer + GetSecondsPassed)

Außerdem solltest du verhindern, daß das Script unnötig oft läuft, z.B.: mit

if ( state == 20 )
..return
endif

Das ganze nach dem "if ( menumode == 1 )"-Block eingefügt.

Zitat:
....if ( GetAIPackageDone == 1 )

Mit AI-Befehlen fehlt mir die Erfahrung, aber ich würde das mittels Getdistance auf die Tür erledigen.



__________________


Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein

Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach

07.11.2003, 17:50 Profil von Füge  deiner Freunde-Liste hinzu Email an Hephaistos senden
Lizard King
Crusader




Dabei seit: April 2003
Geschlecht:
Herkunft: bw
Beiträge: 482

Lizard King ist offline
Danke!Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zuckung's Methode hat funktioniert, vielen Dank dafür!

Für Performance-Fragen ist es noch zu früh, da erst mal das Grundgerüst der Mod stehen muss

---

Es gäbe da noch ein paar Kleinigkeiten, die ich den Thread mal reinpacke:

Wie wird ein neuer NPC, der in eine Stadt eingefügt wird, unter den Schutz der Stadtwachen gestellt?
Bisher ist es den Wachen "egal", ob ich ihn töte oder nicht.

---

Dann habe ich noch Probleme mit Greetings. Die Suchfunktion hat mich nicht wirklich weitergebracht.

In welche Greeting-Kategorie (0-9) fällt ein "normales" Greeting (oder ist das egal?). Also eines, das ein beliebiger NPC von sich gibt.

Noch etwas:
Fargoth in Seyda Neen fragt den Spieler anfangs nach seinem gestohlenen Ring. Der PC hat dann die Möglichkeit ihn anzulügen oder ihm die Wahrheit zu sagen.
Wie wird vom Greeting die Verbindung zum Topic hergestellt ?
Über die Choices 1, 2, usw. oder vielleicht nur über Journaleinträge?

So, wenn mir da jemand noch zur Hand gehen könnte, sähe meine Modding-Welt schon erheblich freundlicher aus

---

Zu guter Letzt: No Lore
Da hat mich die Suchfunktion schon etwas schlauer gemacht. In Balmora klappt dieser Befehl wunderbar, aber in Gramfeste/Mournhold nicht.
Muss ich jetzt bei allen Tribunal-Topics die No-Lore-Funktion einbauen (oder was dann)?
Wen ja, kann ich das im allgemeinen Dialog-Menü machen, oder muss ich das bei dem betreffenden NPC machen?


__________________

07.11.2003, 18:25 Profil von Füge  deiner Freunde-Liste hinzu Email an Lizard King senden
Zuckung
Mage




Dabei seit: Oktober 2003
Geschlecht:
Herkunft: NRW
Beiträge: 245

Zuckung ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

kein problem, denke aber auch, dass es bischen auf performance geht

zum thema npcs killen
kein plan, vielleicht faction setzen

greting 1 und 5 sind für quests, da komme die überleitungen rein. untern im scriptteil schreibste addtopic "xyz" rein.

07.11.2003, 19:23 Profil von Füge  deiner Freunde-Liste hinzu Email an Zuckung senden Homepage von Zuckung
Garak
Admin




Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9269

Garak ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

zu den Wachen: eigentlich sollten sie auf morde aller Art reagieren - Sind es denn originalwachen? für das Wachenverhalten brauchen sie ein Alarmsetting von 100 und die Buchstabenfolge Guard in der ID, dann sollten sie auf jeden unprovozierten NPC#Mord reagieren...

Greetings: "normale" greetings sind gewöhnlich in Greeting5 zu finden - in der Hilfe zum CS steht ne unverbindliche Liste mit den zuordnungen...

Die verbindung zuim Topic entsteht automatisch, wenn im text eines NPC's ein Begriff auftaucht, der ein Topic darstellt, zu dem der NPC was zu sagen hat - keine besondere Kennzeichnung nötig.... daher bin ich auch dafür, dass Du das Addtopic aus Deinem Script entfernst...ganz schlechter stil, sowas


__________________
drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen

07.11.2003, 23:38 Profil von Füge  deiner Freunde-Liste hinzu Email an Garak senden Homepage von Garak Füge Garak in deine Contact-Liste ein
Lizard King
Crusader




Dabei seit: April 2003
Geschlecht:
Herkunft: bw
Beiträge: 482

Lizard King ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

-> Hat sich erledigt!

Es bleibt aber noch das Problem mit NoLore.
Wie kann ich festlegen, dass die einzelnen Topics in einer bestimmten Zelle nicht aufgeführt werden (sofern die NPCs in dieser Zelle NoLore als Variable haben).
Muss ich alle möglichen Antworten kopieren und mit der betreffenden Zelle und Not Local = 0 versehen, oder geht das auch anders?


__________________

Dieser Beitrag wurde von Lizard King am 08.11.2003, 15:49 Uhr editiert.

07.11.2003, 23:56 Profil von Füge  deiner Freunde-Liste hinzu Email an Lizard King senden
  « Vorheriges Thema Nächstes Thema »
Neues Thema erstellen Antwort erstellen
Gehe zu:

Design by: Garak - Powered by: Burning Board 1.1.1 © 2001 WoltLab GbR