Autor |
|
Lizard King
Crusader
  

Dabei seit: April 2003
Geschlecht: 
Herkunft: bw
Beiträge: 482
 |
|
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 |
|
Zuckung
Mage
 

Dabei seit: Oktober 2003
Geschlecht: 
Herkunft: NRW
Beiträge: 245
 |
|
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 |
|
Lizard King
Crusader
  

Dabei seit: April 2003
Geschlecht: 
Herkunft: bw
Beiträge: 482
 |
|
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 |
|
Zuckung
Mage
 

Dabei seit: Oktober 2003
Geschlecht: 
Herkunft: NRW
Beiträge: 245
 |
|
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 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
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 |
|
Lizard King
Crusader
  

Dabei seit: April 2003
Geschlecht: 
Herkunft: bw
Beiträge: 482
 |
|
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 |
|
Zuckung
Mage
 

Dabei seit: Oktober 2003
Geschlecht: 
Herkunft: NRW
Beiträge: 245
 |
|
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 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
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 |
|
Lizard King
Crusader
  

Dabei seit: April 2003
Geschlecht: 
Herkunft: bw
Beiträge: 482
 |
|
-> 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 |
|
|