Construction Set Der Scriptthread

soo hallo mal wieder :-D

ich habe mich am scripten versucht und wurde für zu leicht befunden :?
ehm auf jeden fall hab ich ein script gehext:

Code:
begin script

short zaehler

set zaehler to 0

    if(onActivate==1)
        if(journal "tagebucheintrag"<=10)
            if(zaehler==6)
                Journal "tagebucheintrag" 50
                activate
            endif
        endif
    else
        if(onActivate==1)
            set zaehler to zaehler + 1
             activate
        endif
    endif
end

das script soll einem misc-item gehören, und wenn man 6 davon aufgenommen hat, soll logischerweise nur einmal ein tagebucheintrag kommen. was hab ich alles falsch gemacht? :)
 
Ich würde den gesamten Umbau umkrempeln.

Anstatt deines jetzigen Scripts, würde ich denken, ließe sich das anders lösen:
Code:
begin script
 
short zaehler
 
if ( zaehler == 0 )
      if ( "Objekt-ID"->GetItemCount == 6 ) ; fragt ab ob sich angegebende Anzahl des Objektes im Inventar befindet
         set zaehler to 1
         Journal, "ID", 50
      endif
endif
 
end

Noch ein paar Kommentare zu deinem jetzigen Script:
Code:
begin script
 
short zaehler
 
set zaehler to 0 [COLOR=red]; dieser Befehl würde bewirken, dass "zaehler" immer wieder zu 0 zurück gesetzt wird = nicht Sinn der Sache[/COLOR]
 
    if(onActivate==1) [COLOR=red]; durch diese Abfrage kannst du das Objekt nicht mehr aufnehmen[/COLOR]
        if(journal "tagebucheintrag"<=10)
            if(zaehler==6) 
                Journal "tagebucheintrag" 50
                activate
            endif
        endif
    else [COLOR=#ff0000]; ich glaube hier müsste ein elseif hin[/COLOR]
        if(onActivate==1)
            set zaehler to zaehler + 1 [COLOR=red]; jetzt eher eine Frage (auch an andere) geht das überhaupt? (ich wüsste nicht dass)[/COLOR]
             activate [COLOR=red]; bringt dir nichts, denke ich[/COLOR]
        endif
    endif
end
 
Ich schreib mal dein Script um, J2W, da mir dein Ansatz besser gefällt als der von Kallor (was wenn man die Items wieder ablegen möchte, weil man zuwenig Tragkraft hat?)
Code:
begin script

if(onActivate==1)
    if(journal "tagebucheintrag"<=10)
        if(item_zaehler==6) ;globale variable!!!
            Journal "tagebucheintrag" 50
        elseif(item_zaehler<6)
            set item_zaehler to item_zaehler + 1
        endif
    endif
    Activate ;man soll es ja auch aufnehmen können, wenn man den eintrag schon hat 
endif

end
 
  • Like
Reaktionen: J2W
oh, daran hab ich nicht gedacht...
in dem Fall würd ich mich an Kallors lösung halten, auch wenn die (genauso wie meine) nicht perfekt ist. Theoretisch könntest du aber jedem der Items eine Unique-ID geben, es resitant persist (keine lust zum nachschauen, wies heisst, hoffe du weisst welches Häklein ich meine) machen und dann per Globalscript (oder auf einem anderen Objekt in der gleichen Zelle jedes Item abfragen, etwa so:

Code:
if (Item1-> Onactivate==1)
   set Item1state to 1;lokal oder global spielt keine rolle, wenn alles in einem Script abläuft, wenn nicht muss sie global sein
   Item1-> activate
elseif (Item2-> Onactivate==1)
   set Item2state to 1
   Item2-> activate
elseif....

....

If (Item1State==1)
 If (Item2state==1)
  If(Item3state==1)
   If(Item4state==1)
    If(Item5state==1)
     If(Item6state==1)
      do_something
....

end
 
  • Like
Reaktionen: J2W
Naja, es wäre seitens J2W zu klären, ob man zum Auslösen des Journals dann auch alle 6 aufgesammelten Items noch im Inventar haben muß, oder ob es genügt, sie irgendwann einmal aufgesammelt zu haben und die Meldung beim sechsten kommen soll. Wenn man 6 Stück im Inventar haben muß, würde ich Kallors Grundvariante nehmen, jedoch hinsichtlich des ItemCounters etwas korrigieren:

Code:
begin J2W_PickCount_SC
IF ( GetJournalIndex "Tagebucheintrag" >= 50 )
  ;Wenn der Tagebucheintrag schon da ist, mach ich gar nichts mehr
  Return
EndIF

IF ( OnActivate == 1 )
  IF ( player->GetItemCount "J2W_Item2CountID" == 5 )
  ;Hat der Spieler schon 5 Stück dabei, ist das aktivierte Nummer 6 => Auslösen des Journals
    Journal "Tagebucheintrag" 50
  EndIF
  Activate
EndIF

end
Wie man sieht, 'ne ganz billige Nummer...

Interessanter wird's wenn man mehr als sechs Items in der Welt verteilt, und der Spieler diese auch nicht mehr zwingend im Inventar lagern muß, sondern nur sechs beliebige gefunden und aufgenommen haben soll, um die Bedingung zu erfüllen. Dann benötigt man das:

1) eine Global Short Variable [J2W_ItemPickCounter]
2) eine Item Referenz (mit Script) [J2W_ItemID_Act]
4) das Script J2W_PickCount_SC

Code:
begin J2W_PickCount_SC
short Triggered

IF ( OnActivate == 1 )
  IF ( Triggered == 0 )
    IF ( J2W_ItemPickCounter < 6 )
      IF ( J2W_ItemPickCounter == 5 ) ;das hier ist Nummer 6, also Journal
        Journal "Tagebucheintrag" 50
      EndIF
      set J2W_ItemPickCounter to ( J2W_ItemPickCounter + 1 )
    EndIF
    set Triggered to 1
  EndIF
  Activate
EndIF

end
Man könnte das ganze noch weiter treiben, aber ich belasse es mal dabei.

:)
 
  • Like
Reaktionen: J2W
dieser zwischentagebucheintrag ist einfach als test gedacht gewesen, d.h. man braucht für den finalen tagebucheintrag bzw dialog zum Questfinish sowieso 6 gleiche (nicht unique) Gegenstände.

dann ist mir eben
@BoneHead
und was ist wenn man 6 mal das selbe Item aufhebt? ;)
gekommen und ich hab mich nicht mehr wirklich ausgekannt :?
 
hallo,

diesmal brauche ich den Scriptbefehl um zu prüfen, ob der Spieler eine Feuer..oder Frostresistenz von 50 besitzt.
also habe ich

if(GetResistFrost Player <= 50)
*mache restliche Scriptbefehle*
endif

gemacht. hört sich gut an, funktioniert aber ned :( benutze ich den falschen Befehl?
 
hallo,

diesmal brauche ich den Scriptbefehl um zu prüfen, ob der Spieler eine Feuer..oder Frostresistenz von 50 besitzt.
also habe ich

if(GetResistFrost Player <= 50)
*mache restliche Scriptbefehle*
endif

gemacht. hört sich gut an, funktioniert aber ned :( benutze ich den falschen Befehl?

"Player"->GetResistFrost
 
  • Like
Reaktionen: J2W
ja natürlich :-D das sind nur reine Logikfehler, die ich mit Absicht reinmache um mich auf die Probe zu stellen :roll: danke xD

eeehm wieviele einheiten sind es vom Meeresboden bis zur Wasseroberfläche? (viele Fragen gerade :shock:)
 
eeehm wieviele einheiten sind es vom Meeresboden bis zur Wasseroberfläche? (viele Fragen gerade :shock:)

Da die Höhe des Meeresbodens nicht konstant ist, kann man die Frage wohl nicht einfach beantworten...

Wenn du es im Editor rausbekommen willst, kannst du einfach einen Draken auf dem Meeresgrund platzieren und dir den Z-Wert anschauen.

Im Spiel kannst du in der Konsole tdt aktivieren und zum Meeresgrund schwimmen, dann siehst du da die Tiefe.
 
ich übersetze gerade ein stark geskriptetes plugin. ih ersetze in den skripts wirklich nur die englischen cells und die messageboxen. beim speichern des letzten versuchs kam das:

thumb entfernt

was mach ich denn nun?
 
Zuletzt bearbeitet:
was ist denn die maximale skriptlänge in zeichen?
Die Scriptlänge wird als 16bit Integer gespeichert (also im esp Format)... mit Vorzeichen. Die Länge eines Scripts kann daher maximal 2^15-1 Zeichen betragen, das wären 32.767 Zeichen.

Wenn das Script länger wird, mußt Du Teile neu programmieren - Kommentare löschen genügt nicht.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: WormforEnnio
wie wärs, wenn man das scripts in der mitte halbiert, und dann an den schluss startscript (zweiter teil, als globales script, natürlich mit neudeklaration und setzung aller variabeln)