Construction Set Der Scriptthread

Habe eine kleines Problem: Ich bräuchte für ein Skript eine Zellenabfrage, ob der Spieler in einer speziellen Exterior-Zelle ist (Bitterküste, -7, -6). Es gibt zwar den Befehl GetPCCell, dass Problem nur, wenn ich GetPCCell "Bitterküste" nutze, liefert der Befehl mir eine 1, sobald ich irgendeine Zelle betrete, die mit Bitterküste anfängt. Kennt einer eine Möglichkeit, zu überprüfen, ob der Spieler die gewünschten Zelle betritt, ohne die Zelle im CS zu verändern? Also nicht sowas wie, "positioniere eine Aktivator in der Mitte der Zelle und mach eine Entfernungsabfrage mit Getdistance"?
Danke schonmal im Voraus.
 
Die Exteriorzellen haben ja feste Koordinaten im World-Koordinatensystem. Mit einer geschachtelten Abfrage GetInterior=0, GetPos, X > ?, GetPos, X < ?, GetPos, Y > ? , GetPos, Y < ? könnest du somit die Zelle rausfinden.

Einfacher wäre wahrscheinlich eine GetDistance Abfrage, die halt eine Kugel statt einem Quadrat um deinen Punkt zieht.
 
Bei der GetDistance-Abfrage brauche ich doch aber irgendein Bezugsobjekt, am besten ein einzigartiges Objekt, sonst greift das globale Skript doch bei jeder Annäherung an jedes der vorhandenen Objekte?
 
Ja, brauchst du. Kannst ja zum Beispiel einen einzigartiges Static mit dem Model eines Draken erstellen und knapp unter dem Boden verstecken.
 
EDIT: Sry, bin am Phone und hab ausversehen gepostet. Bitte um Nachsicht und Löschung..
 
Zuletzt bearbeitet:
Hallo,
Hab da ein Problem mit einen Script von Morrowind Crafting, hab es etwas modifiziert, funktioniert leider nur teilweise und wird auch nicht richtig beendet.. :(
Könnte sich das mal jemand anschauen?

Danke

Code:
begin _vdm_kegstand_xyz

short temp
short inventory
short state
short button
short daysleft
short currentday
float timer
short doOnce

if ( doOnce == 0 )
    set currentday to dayspassed
    set doonce to 1
    set daysleft to 1
endif

if ( getdisabled == 1 )
    set timer to ( timer + getsecondspassed )
    if ( timer > 5 )
        setdelete 1
    endif
endif

if ( currentday != dayspassed )
    set temp to ( dayspassed - currentday )
    set currentday to dayspassed
    if ( daysleft >= 1 )
        set daysleft to ( daysleft - temp )
        if ( daysleft <= 0 )
            set daysleft to 0
            set inventory to 10
        endif
    endif
    set temp to 0
endif

if ( OnActivate == 1 )
    if ( Inventory > 0 )
        set state to 1
    else
        set state to 4
    endif
endif

if ( state == 0 )
    return
endif

if ( state == 1 )
    messagebox "The kegstand contains %g bottles of xyz.", inventory, "Fill a bottle", "Fill as many bottles as possible", "Drain the kegstand", "Cancel"
    set state to 2
elseif ( state == 2 )
    set button to getbuttonpressed
    if ( button == -1 )
        return
    elseif ( button == 0 )
    if ( player->GetItemCount "misc_com_bottle_01" > 0 )
        player->RemoveItem "misc_com_bottle_01" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_02" > 0 )
        player->RemoveItem "misc_com_bottle_02" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_04" > 0 )
        player->RemoveItem "misc_com_bottle_04" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_05" > 0 )
        player->RemoveItem "misc_com_bottle_05" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_06" > 0 )
        player->RemoveItem "misc_com_bottle_06" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_08" > 0 )
        player->RemoveItem "misc_com_bottle_08" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_09" > 0 )
        player->RemoveItem "misc_com_bottle_09" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_10" > 0 )
        player->RemoveItem "misc_com_bottle_10" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_11" > 0 )
        player->RemoveItem "misc_com_bottle_11" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_13" > 0 )
        player->RemoveItem "misc_com_bottle_13" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_14" > 0 )
        player->RemoveItem "misc_com_bottle_14" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
    elseif ( player->GetItemCount "misc_com_bottle_15" > 0 )
        player->RemoveItem "misc_com_bottle_15" 1
        player->additem _vdm_xyz_01 1
            set inventory to ( inventory - 1 )
            messagebox "You fill one of your empty bottles."
            if ( inventory == 0 )
                set state to 999
            else
                set state to 0
            endif
            return
        else
            messagebox "You need an empty bottle."
            set state to 0
        endif
    elseif ( button == 1 )
        set temp to 0
        while ( inventory > 0 )
    if ( player->GetItemCount "misc_com_bottle_01" > 0 )
        player->RemoveItem "misc_com_bottle_01" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_02" > 0 )
        player->RemoveItem "misc_com_bottle_02" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_04" > 0 )
        player->RemoveItem "misc_com_bottle_04" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_05" > 0 )
        player->RemoveItem "misc_com_bottle_05" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_06" > 0 )
        player->RemoveItem "misc_com_bottle_06" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_08" > 0 )
        player->RemoveItem "misc_com_bottle_08" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_09" > 0 )
        player->RemoveItem "misc_com_bottle_09" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_10" > 0 )
        player->RemoveItem "misc_com_bottle_10" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_11" > 0 )
        player->RemoveItem "misc_com_bottle_11" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_13" > 0 )
        player->RemoveItem "misc_com_bottle_13" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_14" > 0 )
        player->RemoveItem "misc_com_bottle_14" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
    elseif ( player->GetItemCount "misc_com_bottle_15" > 0 )
        player->RemoveItem "misc_com_bottle_15" 1
        player->additem _vdm_xyz_01 1
                set inventory to ( inventory - 1 )
                set temp to ( temp + 1 )
            else
                if ( temp == 0 )
                    messagebox "You don't have any empty bottles."
                else
                    if ( inventory > 1 )
                        messagebox "You managed to fill %g empty bottles.  There are still %g servings of xyz left in the kegstand.", temp, inventory
                    else
                        messagebox "You managed to fill %g empty bottles.  There is still 1 serving of xyz left in the kegstand.", temp
                    endif  
                endif
                set state to 0
                return
            endif
        endwhile
        messagebox "You managed to fill %g empty bottles before the keg went dry.", temp
        set state to 999
        return
    elseif ( button == 2 )
        messagebox "The kegstand still contains %g bottles of xyz.  Are you sure you want to do that?", inventory, "Yes. Empty it.", "Cancel"
        set state to 3
    elseif ( button == 3 )
        set state to 0
    endif
elseif ( state == 3 )
    set button to getbuttonpressed
    if ( button == -1 )
        return
    elseif ( button == 0 )
        set inventory to 0
        set state to 999
    elseif ( button == 1 )
        set state to 0
        return
    endif
elseif ( state == 4 )
    messagebox "The kegstand contains fermenting xyz.  What do you want to do?" "Empty it.", "Check it."
    set state to 5
elseif ( state == 5 )
    set button to getbuttonpressed
    if ( button == -1 )
        return
    elseif ( button == 0 )
        messagebox "You completely drain the kegstand and clean it out."
        set state to 999
    elseif ( button == 1 )
        if ( daysleft > 1 )
            messagebox "The fermenting is going well.  You should have the finished xyz in %g days.", daysleft
        else
            messagebox "The fermenting is going well.  You should have the finished xyz tomorrow."
        endif
        set state to 0
    endif

elseif ( state == 999 )
    placeatme "_vdm_kegstand_empty" 1,0,0
    set state to 0
    set water to 0
    disable

endif

end
 
Könnte sich das mal jemand anschauen?
Ich hab mal versucht, den Sinn zu ergründen und das ganze dann "etwas" umgeschrieben, allerdings habe ich mein Notebook mit Morrowind nicht hier, also kann ich das Ding grad nicht ins CS hauen, um zu schauen, ob der Hund das auch kompiliert. Ist halt schon einige Zeit her, dass ich im CS gescripted habe und in meinem Alter vergisst man schon mal was...

Code:
begin _vdm_kegstand_xyz

short temp
short inventory
short state
short button
short daysleft
short currentday
short doOnce
short Counter

if ( doOnce == 0 )
    set currentday to dayspassed
    set doonce to 1
    set daysleft to 1
endif

if ( getdisabled == 1 )
    set Counter to ( Counter - 1 )
    IF ( Counter == 0 )
      setdelete 1
    ENDIF
    RETURN
ENDIF

IF ( state == 0 )

  IF ( currentday != dayspassed )
    set temp to ( dayspassed - currentday )
    set currentday to dayspassed
    IF ( daysleft >= 1 )
      set daysleft to ( daysleft - temp )
      IF ( daysleft <= 0 )
        set daysleft to 0
        set inventory to 10
      ENDIF
    ENDIF
    set temp to 0
  ENDIF

  IF ( OnActivate == 1 )
    IF ( Inventory > 0 )
      set state to 1
    ELSE
      set state to 4
    ENDIF
    activate
  ENDIF

  RETURN

ELSEIF ( state == 1 )
  messagebox "The kegstand contains %g bottles of xyz.", inventory, "Fill a bottle", "Fill as many bottles as possible", "Drain the kegstand", "Cancel"
  set state to 2
ENDIF
   
IF ( state == 2 )
  set button to getbuttonpressed

  IF ( button == -1 )
    RETURN
  ELSE
    set state to 0
  ENDIF

  IF ( button == 0 )
    IF ( player->GetItemCount "misc_com_bottle_01" > 0 )
      player->RemoveItem "misc_com_bottle_01" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_02" > 0 )
      player->RemoveItem "misc_com_bottle_02" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_04" > 0 )
      player->RemoveItem "misc_com_bottle_04" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_05" > 0 )
      player->RemoveItem "misc_com_bottle_05" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_06" > 0 )
      player->RemoveItem "misc_com_bottle_06" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_08" > 0 )
      player->RemoveItem "misc_com_bottle_08" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_09" > 0 )
      player->RemoveItem "misc_com_bottle_09" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_10" > 0 )
      player->RemoveItem "misc_com_bottle_10" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_11" > 0 )
      player->RemoveItem "misc_com_bottle_11" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_13" > 0 )
      player->RemoveItem "misc_com_bottle_13" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_14" > 0 )
      player->RemoveItem "misc_com_bottle_14" 1
    ELSEIF ( player->GetItemCount "misc_com_bottle_15" > 0 )
      player->RemoveItem "misc_com_bottle_15" 1
    ELSE
      messagebox "You need an empty bottle."
      RETURN
    ENDIF
    player->additem _vdm_xyz_01 1
    messagebox "You fill one of your empty bottles."
    set inventory to ( inventory - 1 )
    IF ( inventory == 0 )
      set state to 999
    ENDIF

  ELSEIF ( button == 1 )
    set temp to player->GetItemCount "misc_com_bottle_01" + player->GetItemCount "misc_com_bottle_02" + player->GetItemCount "misc_com_bottle_03"
    set temp to temp + player->GetItemCount "misc_com_bottle_04" + player->GetItemCount "misc_com_bottle_05" + player->GetItemCount "misc_com_bottle_06"
    set temp to temp + player->GetItemCount "misc_com_bottle_07" + player->GetItemCount "misc_com_bottle_08" + player->GetItemCount "misc_com_bottle_09"
    set temp to temp + player->GetItemCount "misc_com_bottle_10" + player->GetItemCount "misc_com_bottle_11" + player->GetItemCount "misc_com_bottle_12"
    set temp to temp + player->GetItemCount "misc_com_bottle_13" + player->GetItemCount "misc_com_bottle_14" + player->GetItemCount "misc_com_bottle_15"
 
    IF ( temp == 0 )
      messagebox "You don't have any empty bottles."
      RETURN
    ELSEIF ( temp < inventory )
      set Counter to temp
    ELSE
      set Counter to inventory
      set temp to inventory
    ENDIF
 
    set inventory to ( inventory - Counter )
 
    WHILE ( Counter > 0 )
      IF ( player->GetItemCount "misc_com_bottle_01" > 0 )
        player->RemoveItem "misc_com_bottle_01" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_02" > 0 )
        player->RemoveItem "misc_com_bottle_02" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_04" > 0 )
        player->RemoveItem "misc_com_bottle_04" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_05" > 0 )
        player->RemoveItem "misc_com_bottle_05" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_06" > 0 )
        player->RemoveItem "misc_com_bottle_06" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_08" > 0 )
        player->RemoveItem "misc_com_bottle_08" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_09" > 0 )
        player->RemoveItem "misc_com_bottle_09" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_10" > 0 )
        player->RemoveItem "misc_com_bottle_10" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_11" > 0 )
        player->RemoveItem "misc_com_bottle_11" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_13" > 0 )
        player->RemoveItem "misc_com_bottle_13" 1
      ELSEIF ( player->GetItemCount "misc_com_bottle_14" > 0 )
        player->RemoveItem "misc_com_bottle_14" 1
      ELSE
        player->RemoveItem "misc_com_bottle_15" 1
      ENDIF
      player->additem _vdm_xyz_01 1
      set Counter to ( Counter - 1 )
    ENDWHILE
 
    IF ( inventory > 1 )
      messagebox "You managed to fill %g empty bottles.  There are still %g servings of xyz left in the kegstand.", temp, inventory
    ELSEIF ( inventory = 1 )
      messagebox "You managed to fill %g empty bottles.  There is still 1 serving of xyz left in the kegstand.", temp
    ELSE
      messagebox "You managed to fill %g empty bottles before the keg went dry.", temp
      set state to 999
    ENDIF

  ELSEIF ( button == 2 )
    messagebox "The kegstand still contains %g bottles of xyz.  Are you sure you want to do that?", inventory, "Yes. Empty it.", "Cancel"
    set state to 3
  ENDIF; button 3 does zilch, so nothing needed here.
  RETURN
ENDIF

IF ( state == 3 )
  set button to getbuttonpressed
  IF ( button == 1 )
    set state to 0
  ELSEIF( button == 0 )
    set inventory to 0
    set state to 999
   ENDIF
   RETURN

ELSEIF ( state == 4 )
  messagebox "The kegstand contains fermenting xyz.  What do you want to do?" "Empty it.", "Check it."
  set state to 5
  RETURN

ENDIF

IF ( state == 5 )
 set button to getbuttonpressed
 IF ( button == -1 )
   return
  ELSEIF ( button == 0 )
    messagebox "You completely drain the kegstand and clean it out."
    set state to 999
  ELSE
    IF ( daysleft > 1 )
      messagebox "The fermenting is going well.  You should have the finished xyz in %g days.", daysleft
    ELSE
      messagebox "The fermenting is going well.  You should have the finished xyz tomorrow."
    ENDIF
    set state to 0
  ENDIF
ENDIF

IF ( state == 999 )
  placeatme "_vdm_kegstand_empty" 1,0,0
  set state to 0
  set Counter to 10
  disable
ENDIF

end
 
Ich bin zwar völlig unbedarft was das scripting von MW angeht, aber ist der code vom Script case sensitive?
Falls ja und ich nicht vollkommen daneben liege, müsste dann nicht
Code:
if ( doOnce == 0 )
   set currentday to dayspassed
   set doonce to 1
   set daysleft to 1
endif
so aussehen?
Code:
if ( doOnce == 0 )
   set currentday to dayspassed
   set doOnce to 1
   set daysleft to 1
endif

Also mit einem großen O
So als stiller und vollkommen ahnungsloser Beobachter reingeworfen, wo evtl. auch ein Problem liegen könnte...:D
 
Ich bin zwar völlig unbedarft was das scripting von MW angeht, aber ist der code vom Script case sensitive?
Der Morrowind Script Compiler ist zickig... aber so zickig nun doch wieder nicht ;)

getsecondspassed funktioniert genauso gut wie GetSecondsPassed getSECONDSPASSED oder GETSecondsPassed
 
Ich habe hier im Downloadbereich ein Scripttutorial gesehen in dem ein NPC (versteckt) bei einem bestimmten Ereignis erscheint und den Spieler anspricht. Bis dahin könnte ich das ggf für mich noch verwenden.
Aber im gesamten ist da zuviel weiteres enthalten.
Kennt jemand ein Script das folgendes erledigen könnte, ich nenne unter a-b-c erst die Dinge die feststehen und unter 1-2-3 was ein Script bewirken sollte:
a
Ein bereits vorhandener NPC
b
Der NPC hat funktionierende Dialoge und Journaleinträge
c
In den Resultboxen bei dem NPC sind funktionierende AddTopic Einträge
jetzt aber
wenn der Spieler in Seyda Neen aus dem Gefangenenschiff kommt kann er ja mehrere NPC ansprechen
oder
direkt den Schlickschreiter aufsuchen und nach Balmora reisen
jedoch
1
sobald der Spieler in einer Entfernung von <512 vom NPC entfernt ist dann soll diesere ihn aufsuchen und via Forcegreeting ansprechen um die Dialoge abzuarbeiten
2
sollte es so sein das der Spieler erfolgreich den NPC umgangen hat und beim Schlickschreiter ankommen dann sollte eine Abfrage kommen ob ein bestimmter >Journaleintrag vorhanden ist, in dem Fall passiert nichts und das Script endet
wenn der Eintrag aber nicht vorhanden ist soll der Reiseleiter sagen: Ihr solltet erst mit NPC ID sprechen
 
Naja, Punkt 1 kannst du mit if GetPlayerDistance < 512 sehr einfach abfangen. Für Punkt zwei würde ich dem Schlickschreiterführer ein neues Greeting verpassen, dass die Bedingungen abprüft. Wenn du das dann noch mit einem GoodBye im Result zwangsbeendest, sollte der Spieler auch nicht mehr gegen deinen Willen mehr mit dem Schlickschreiter reisen können.

Beides hindert ihn aber nicht daran einfach zu Fuß nach Balmora (oder wo auch sonst) zu laufen.
 
Beides hindert ihn aber nicht daran einfach zu Fuß nach Balmora (oder wo auch sonst) zu laufen.
Darf er doch, ich hab in Balmora einen Aktivator versenkt. Der läuft schon in sein Unglück.:oops:

Naja, Punkt 1 kannst du mit if GetPlayerDistance < 512 sehr einfach abfangen
Ich werd mal unverschämt: Wie sähe das denn in einem Script aus? Also Scripting und ich ist ungefähr wie Mungo und Kobra wobei ich die Kobra bin

Muss nicht zu meinem Anliegen passen aber ich sehe dann wie es aussehen sollte
Danke im Voraus
 
Das könntest du etwa so gestalten:

begin my_ForceGreeting_script

if ( MenuMode == 1 )
return
endif

if ( GetJournalIndex, "My_Topic" < 10 )
if ( GetPlayerDistance < 512 )
ForceGreet
SetJournalIndex, "My_Topic", 10
endif
endif

end

Das MenuMode verhindert, dass das Script bei geöffnetem Dialog erneut anläuft.
Über die Abfrage des Tagebuchs stelle ich sicher, dass du nur einmal angesprochen wirst.
Den Tagebucheintrag (in der Art von "Ich wurde auf der Straße von xy angequatscht") setze ich absichtlich bereits im Script (und nicht im Dialog) um sicher zu sein, dass er im gleichen Frame gesetzt wird, und du somit nicht zweimal ein Force Greeting stattfinden kann.
 
Wenn das funktioniert hast du einen Platz in der ReadMe sicher. Mir spart es ggf ein oder zwei andere Scripte und davon kann man jan nie zuwenig haben
 
Noch mal zu dem Script. Ich bekomme mehrere Fehlermeldungen. Ich habe das mal nach meinem Kenntnisstand (ich lese schon mal im Internet:eek:)
so abgeändert:
begin my_ForceGreeting_script

if ( MenuMode == 1 )
return
endif

if ( GetJournalIndex, "DB_Bookhunt" < 10 )
if ( GetDistance Player < 512 )
ForceGreeting
SetJournalIndex, "DB_Bookhunt", 20
endif
endif

end
Es wurde so gespeichert im CS aber ich kann es InGame nicht testen. Ist das überhaupt so lauffähig oder habe ich es total verhunzt?
GetDistance Player habe ich so abgeändert weil es in einem Aktivatorscript von mir so steht und es funktioniert (das AktivatorScript)
 
Zuletzt bearbeitet von einem Moderator:
Ist das überhaupt so lauffähig oder habe ich es total verhunzt?
Nö, das schaut schon recht brauchbar aus.

Allerdings würde ich noch die Frage stellen, inwieweit das Questlog DB_Bookhunt einen Status 10 hat. Weil du gegen 10 prüfst, aber direkt 20 setzt. Wenn der "Ich wurde angesprochen" Eintrag ein echter Journaleintrag ist, dann kannst du den ohne SetJournalIndex setzen.

Außerdem würde ich ForceGreeting nach der Journaländerung aufrufen - also eher so:

Code:
begin my_ForceGreeting_script

if ( MenuMode == 1 )
  return
endif

if ( GetJournalIndex "DB_Bookhunt" < 10 )
  if ( GetDistance Player <= 512 )
    Journal "DB_Bookhunt", 10
    ForceGreeting
  endif
endif

end
 
Das mit den Journaleinträgen wird sich noch etwas ändern. Ich habe hier eine existierende Mod von mir genutzt und erweitert. Dabei musste ich Zwischeneinträge setzen. Der Eintrag mit der Nummer 10 war der bisher niedrigste, bewirkte aber in der alten Mod etwas was ich jetzt erst mit dem Eintrag 20 erreichen will. Daher hatte ich einen Eintrag 5 vorangestellt.
Würde dann für mich bedeuten das ich es so ändere oder umschreibe
if ( GetJournalIndex "DB_Bookhunt" < 20 )
dann übergeht zu Journal "DB_Bookhunt", 20
Ich denke dann passt es wieder. Ist halt eine Weile her das ich mit scripten bei MW zu tun hatte
 
In Oblivion war es relativ einfach wenn man es erst mal raus hatte aber ich würde gerne in Morrowind einigen NPC eine "Art Tagesablauf" geben. Im Prinzip eigentlich etwas das sie nicht irgendwo herumstehen lässt sondern eine einfache Tätigkeit ausführen lässt.

In meinem Beispiel würde das "Wander" selbst mit einer Radiusbegrenzung auf unter 512 nicht funktionieren da sie aus dem vorgesehenen Gebiet herauslaufen können.
In Oblivion also konnte man dem NPC eine Hacke ins Inventar geben, ihm sagen von wann bis wann er damit auf die kleinen Pfänzchen eindreschen soll und und dann essen gehen und schlafen
Aber wie kann man das ohne große Scripterei mit Morrowind lösen?