Construction Set Objekt soll nur zu bestimmter Zeit erscheinen

Fellan

Freund des Hauses
Ich will ein bestimmtes Objekt nur dann erscheinen, also "da sein" lassen, wenn eine Quest auf einer bestimmten Stufe ist. Ich habe schon eine neue ID für das Objekt erstellt. Wahrscheinlich brauche ich eine Script, die sagt, dass der Container eben nur da ist, wenn die Quest auf einer bestimmten Stage ist, sonst nicht. Ich will, dass der Container nach dem Öffnen und entnehmen zwei bestimmter Gegenstände nach 24 Stunden wieder verschwindet. Da ich absolut keine Ahnung vom Scripten habe, wie würde so ein Script aussehen?
 
Naja, man könnte es einfacher haben, wenn man einfach die beiden Gegenstände ins Inventar des Spielers macht (Also ohne so ein Truhenmenü, ich gehe davon aus, dass das Ding auch nicht wirklich als Truhe fungieren kann) und das Ding dann per Timer wegmacht.
 
Da ich absolut keine Ahnung vom Scripten habe, wie würde so ein Script aussehen?

MeinTollesKistenScriptvonRyandemichdafürbiszumsamtNimmerleinstagdankbarbin_Script

short EnableTolleKiste
short DisableTolleKiste

begin onGameMode

if ( GetCurrentTime <= 5 ) || ( GetCurrentTime >= 20 ) && ( EnableTolleKiste == 0 ) && ( GetStage TolleKistenQuest < 10 ) && ( GetStage TolleKistenQuest >= 5)

set DisableTolleKiste to 0
RefTolleKiste.Enable
set EnableTolleKiste to 1

endif

if ( GetCurrentTime > 5 ) && ( GetCurrentTime < 20 ) && ( DisableKiste == 0 )
set EnableTolleKiste to 0
RefTolleKiste.Disable
set DisableTolleKiste to 1

endif

if ( player.getitemcount TollesDingausKiste 1) && (player.getitemcount TollesZweitesDingausKiste 1)

set EnableTolleKiste to 2 ; oder 1 ist nur ein Wert damit das Ding nicht weiter zu einer bestimmten Uhrzeit erscheint
set DisableTolleKiste to 2 ; oder 1

endif

end

Bitte..

Gruß
Ryan
 
  • Like
Reaktionen: Fellan
Ähm, wieso soll das Erscheinen nur zwischen 20 und 5 und das Verschwinden nur zwischen 5 und 20 geschehen?
 
Wie das geschieht? Das geschieht so:

Plöpp Kiste da! Plöpp Kiste weg! Plöpp Kiste da! Plöpp Kiste weg!

Möchtest du es nochmal sehen? Plöpp Kiste da! Plöpp Kiste weg! <- Irre oder? <- So geschieht das.

Mal is se da... und mal is ne nicht da.... also du kannst dir das so vorstellen wie wenn du dir die Hand mal vor die Augen hälst... Mach mal! Und dann versuch die nächste Zeile zu lesen:

!NICHT SCHUMMELN!​



Ich bin Oberschts-Test-Zeile <- Ich war weg. Jetzt bin ich wieder da.​

<- Siehst du ... die Zeile wusste dass sie weg war... und sie war auch weg... natürlich nur solange du dir die Hand vor die Augen gehalten hast... jetzt ist se wieder da... (kannst du übrigens noch 100 Mal probieren... die Zeile ist dann immer weg, wenn du dir die Hand vor die Augen hälst...) Aber jetzt ist sie da. So wie alle anderen Zeilen hier auch... und in Oblivion ist das nix anderes... so ist das mit dem Geschehen von "Weg" und "Da"....

Gruß
Ryan
 
Wahrscheinlich brauche ich eine Script, die sagt, dass der Container eben nur da ist, wenn die Quest auf einer bestimmten Stage ist, sonst nicht.
...dafür brauchste keine Scripte. Die Referenz der Kiste in die Welt setzen und einen Namen vergeben (z.B. MeineKisteRef). Die Referenz "persistent" machen und auf "Initially Disabled" setzen, so dass sie bei Spielbeginn nicht erscheint. Bei den Grundeinstellungen der Kiste (ID nicht Ref) kommt bei "Respawn" kein Haken hin, damit sich die Items in der Kiste bei einem Reset der Zelle nicht erneuern.

Dann schaltest Du die Kiste per "Script Result" im Topic oder in der Stage der Quest an der gewünschten Stelle mit MeineKisteRef.Enable ein. Wenn die Quest erledigt ist, schaltest Du das Ding via "Script Result" bei Erreichen der nächsten Stage mit MeineKisteRef.Disable wieder aus.

Für den Fall, dass der Player aus Blödheit Zeugs in die Kiste gelegt hat, und Du verhindern möchtest, dass er die Sachen verliert, kannst Du noch ein MeineKisteRef.RemoveAllItems Player hinterherschieben und gut is.

Damit sparst Du dir die ganze Scripterei und stellst sicher, dass der Player die Quest auch lösen kann.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Fellan
Ach so... ich hatte mich auch schon gewundert ;)....lol *chichichi ich hab seinen 24 Stunden Satz anders verstanden... aber wieso auch nicht? Ist doch nett.. Kiste DA! Kiste Weg! Kiste DA! Kiste Weg! ... ist doch super... ein magischer Karton... :D ;)

Gruß
Ryan
 
Wie schnell so eine Frage in OT ausarten kann, was solls. :p

Danke an Ryan, funktioniert wunderbar. Plopp - Kiste weg. :)

edit: Wo wir grad bei Scripts sind...ich bräuchte einen Script, einen Result Script für einen Dialog, bei dem der NPC dem Spieler einen Zettel gibt, dann das Gespräch beendet ist (das geht ja mit "Goodbye"), der Zettel automatisch geöffnet wird (also gelesen wird) und sobald der Spieler den Zettel wieder zumacht, also auf "Fertig" geht, der NPC das Gespräch wieder beginnt. Also sowas in der Art wie:

Code:
NPCXY.GiveItem ItemID to Player
Player.Use ItemID
   if ( player.Close ItemID )
   begin.Gespräch
endif
Ich weiß, dass der Script wahrscheinlich schwachsinnig ist...

edit²: Danke auch an Seidenweber, da beides funktioniert. :p
 
Zuletzt bearbeitet:
Nein, das script ist schon richtig... aber ... ich glaube nicht, dass du automatisch ein Buch öffnen kannst wenn der Spieler es nicht will... mir ist das zumindest nicht bekannt... ich glaub hier liegt wenn das Problem an deiner Idee...


Aber wo wir gerade Dr.Freud im Thread haben! Sehen Sie mal hier, Herr Diener... dieser junge Herr möchte gerne, dass ein Pergament gegen den Willes des Ichs des Spielers geöffnet wird. Ist sowas möglich?


Gruß
Ryan

P.S. da ich sowas des öfteren gesagt bekomme... hat mich das zu dem logischen Schluss gebracht... dass ich eigentlich der einzige normale bin....
 
  • Like
Reaktionen: Fellan
Danke (mal wieder) an Seidenweber. Du bist/Ihr seid eine große Hilfe :D

edit: Wie gebe ich einem Objekt im Inventar eines NPCs eine Referenz? Meines Wissens geht das doch nur mit Objekten, die "in der Welt rumliegen"?
 
Zuletzt bearbeitet:
edit: Wie gebe ich einem Objekt im Inventar eines NPCs eine Referenz? Meines Wissens geht das doch nur mit Objekten, die "in der Welt rumliegen"?
Geben gar nicht, aber feststellen kannst Du die z.B. mit einem Script, welches auf der Referenz läuft

Deklaration:
Ref MyRef

Referenz ermitteln:
Set MyRef To GetSelf

Funktion ausführen
MyRef.Funktion <parameter>

Folgender Befehl "sollte" ebenfalls funktionieren, um die Referenz von anderer Stelle, als von der Referenz aus, festzustellen:

Deklaration:
Ref ScrollRef

Funktion:
Set ScrollRef To Player.AddItem SchriftrolleID, 1



Ein Beispiel, um das anders zu lösen (ohne Rücksicht darauf, ob das nun sinnvoll ist - es geht nur um die Funktion):

Mit Activate kannst Du Gegenstände den Spieler aktivieren lassen, die sich irgendwo befinden. Das gilt auch für Zellen, die nicht geladen sind und auch nie geladen werden.
  • Du machst 2 Schriftrollen mit identischem Text.
  • Rolle #1 bekommt die ID Quest1ScrollPlayer
  • Rolle #2 bekommt die ID Quest1ScrollView
  • Bei Quest1ScrollView wird "Can´t be Taken" markiert
  • Quest1ScrollPlayer legst Du dem Spieler mit Player.AddItem Quest1ScrollPlayer, 1 ins Inventar
  • Quest1ScrollView wird irgendwo in der Welt, wo der Spieler niemals hinkommt, abgelegt und persistent gemacht. Sie bekommt die Referenz Quest1ScrollViewRef
  • Dann kannst Du dem Spieler den Inhalt der Rolle jederzeit mit Quest1ScrollViewRef.Activate Player anzeigen. Er kann sie aber nur lesen und nicht nehmen. Wenn er sie später nochmal lesen will, kann er die aus seinem Inventar nehmen.
 
Der Player soll das Ding gar nicht ins Inventar kriegen, er soll es nur lesen. Ich habe jetzt die Notiz irgendwo in die Cell geworfen, irgendwohin, wo der Spieler sowieso nicht hinkommt. Der NPC hat die Notiz gar nicht im Inventar, braucht er ja auch nicht. Die Notiz ist auf "Can't be taken" geschaltet und "Persistent". Mein Result Script nach dem Dialog sieht jetzt so aus:

Code:
NotizRef.Activate Player
NPCRef.Activate Player

Also die Notiz aktiviert den Spieler, wenn der auf "Fertig" geht (nehmen kann er das Ding ja nicht wegen "Can't be taken"), wird er vom NPC mit meinem Greeting angesprochen, dass nur funktioniert, wenn er vorher die Notiz gelesen hat, weil diese eine Quest auf die nächste Stage setzt, was das Greeting als Condition hat.
Wie auch immer - so funktionierts. Danke nochmal. :)