Construction Set Skriptthread zum Construction Set

Was muss ich machen um einem bettler münzen zu geben und was muss ich machen um ein Bett zu vermieten.

Danke im voraus.
 
Um einem Bettler Münzen zu geben, fügst du lediglich "player.removeItem Gold001 <Anzahl>" in das Result-Skript der entsprechenden Dialogzeile ein. Wahlweise kannst du dem Bettler diese Menge Gold dann auch hinzufügen: "<Bettler-REF>.addItem Gold001 <Anzahl>".
Für das Betten-Vermieten wird - glaube ich - in Oblivion eine Quest mit entsprechendem -skript verwendet. Guck dir einfach mal an, wie das bei anderen Personen in Oblivion geregelt ist...
 
  • Like
Reaktionen: Anti_Held
Kein Wunder die steht ja auch im gamemode-Block und wiederholt sich somit immer (Messagebox macht automatisch return glaub ich genauso wie moveto) um das zu verhindern nimm anstelle der Messagebox ne normale message dann dürfte es klappen oder benutz ne doonce-Variable was glaub ich nicht richtig klappen wird...
 
  • Like
Reaktionen: Fluffy
Naja danke jedenfalls habs anders geregelt! Am ende des Skripts habe ich die Variablen auf -1 gesetzt somit ist das eingetroffen was ich wollte, und es kommen keine unendlich viele Boxen. Danke nochmals^^
 
Er hat schätze ich mal das von Mow benutzt
da ist nämlich bei der 2.Messagebox keine doonce Variable bei deinem Script aber ist eine..
 
Zuletzt bearbeitet:
Nope das von Diarrhoe Habs aber verändert.!

scn scripttest

short Button
short init

Begin OnActivate
If ( init == 0 )
Messagebox "Wollt ihr den Kalten Grabstein berühren?" "Ja", "Nein lieber nicht!"
set init to 1
endif
end

Begin GameMode
if ( Init == 1 )
Set Button to GetButtonPressed
If Button == 0
Target.moveto Markertest
Messagebox "Ihr spürt wie euch ein kalter Schauer über den Rücken läuft"
set button to -1
set init to -1
elseif Button == 1
Messagebox "In dem Moment als ihr euch entscheidet den Grabstein nicht anzufassen, spürt ihr einen starken Schmerz im Körper der nicht mehr aufhören will!"
player.addspell etwas
endif
endif
end
 
meintest du denn die Response-box auf ja oder die auf nein ?

Dachte nämlich du meinst die auf nein :sorry:
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Fluffy
Der Fehler war ja, das die 2te Messagebox also: Ihr spürt wie euch ein kalter Schauer über den Rücken läuft, immer wieder gekommen ist, durch meine Veränderung kommt die nun aber nicht mehr. Jedoch kann man den gegenstand dann nachher nicht mehr benutzen aber eigentlich ist das eh gut so. Nur würde ich trotzdem gerne wissen wieso keines dieser scripts zu einem guten Resultat führte!? Das ist eigenartig, bei jedem dieser Scripts kam diese Messagebox immer wieder naja aber egal danke auf jedenfall für eure hilfe!
 
Hast du mit deinem neuen Script schon die 3. getestet ? Ich glaub Oblivion "mag es nicht so gern" wenn ne messagebox im gamemode steht... daher weil die Variable button 0 war hatte sie sich offenbar immer wiederholt. Da du aber dann button zu -1 gesetzt hast traff anscheinend die Bedingung button==0 nicht mehr zu sondern war dann button==-1 daher konnte sich die messagebox nicht mehr wiederholen. Kann sein das ich mich irre aber ich glaube daran lag es.

Was aber auch möglich ist, ist ,dass es an der anderen Variable "init" liegt weil sie zu -1 gesetzt worauf Set button to getbuttonpressed nicht mehrmals mehr ausgeführt werden konnte.

Da man bei der 2.Messagebox ja mit ok bestätigen muss was wiederum dann button==0 bedeuten würde und somit sich der ganze if button==0 Block immer wiederholen würde glaub ich aber es liegt doch an der buttonVariable die zu -1 gesetzt wurde.

Um das Script nochmal auszuführen [weiß nicht ob es klappt] schreib am Anfang des Activate-Blocks anstatt von
If init==0
If init!=1
dann könnte es funktionieren.

Ich an deiner Stelle hätte erst gar keine 2. und 3. Messagebox genommen sondern eine normale Message aber egal jetzt funktionierts ja.
 
  • Like
Reaktionen: Fluffy
@ Diarrhoe

Wie sieht denn das dazugehörige Questskript aus und die Skripte auf den Schaltern?
Ein Manko bei deinem Skript wäre, - sofern du es nicht durch das Questskript so gelöst hast - dass du nicht abfragst, in welcher Reihenfolge die Schalter aktiviert wurden...
Script auf dem Schalter
SCN Schalter script

ref Schalter1

Begin OnActivate

if Schalter1==0
set Quest.Schalter1 to 1
Playsound enSound
playgroup forward 0

endif
Quest Script
[FONT=System, sans-serif]SCN QuestSCript[/FONT]

[FONT=System, sans-serif]Ref Schalter1[/FONT]
[FONT=System, sans-serif]Ref Schalter2[/FONT]
[FONT=System, sans-serif]Ref Schalter3[/FONT]
[FONT=System, sans-serif]Ref Schalter4[/FONT]
[FONT=System, sans-serif]Ref Schalter5[/FONT]
[FONT=System, sans-serif]Ref Schalter6[/FONT]
[FONT=System, sans-serif]Ref Schalter7[/FONT]
[FONT=System, sans-serif][/FONT]

Wie meinst du das? sofern du es nicht durch das Questskript so gelöst hast - dass du nicht abfragst, in welcher Reihenfolge die Schalter aktiviert wurden...

Ich würd schon gern wissen wie das funktioniert. Und wen du mir jetzt wieder ein script baust könntest du mir noch eine beschreibung dazu geben damit ich es auch kapiere?
 
Ref-Variablen stehen für Referenzen und short-Variablen für ganze/natürliche (?; hab jetzt die genaue Definition vergessen; auf jeden Fall negativ und positiv) Zahlen in einem gewissen Bereich. Ich weiß jetzt nicht, in welchem Bereich, aber er ist schon groß genug... Da du in diesem Fall die Variablen auf einen klar definierten Wert setzen willst, solltest du short-Variablen benutzen...

Zu dem Problem:
Ich würde das ganze eventuell über eine Global lösen. Die erstellst du unter Gameplay --> Global als "short" und mit "0" als Default-Wert. Benenne sie mit einem eindeutigen Namen, sodass sie nicht verwechselt werden kann. Dann legst du auf die normalen Schalter folgendes Skript (ich gehe davon aus, dass es vier Schalter gibt - drei normale, die in einer bestimmten Reihenfolge aktiviert werden müssen; und einen vierten der die Reihenfolge überprüft und bei zwei verschiedenen Kombinationen etwas macht und bei dem Rest die ganze sache zurücksetzt):
Also... normaler Schalter:
Code:
scn Schalter1SCRIPT

short doonce
short init

Begin onActivate
 if isActionRef player == 1
  if doonce == 0
   set doonce to 1
   set init to <Global> + 1
   set <Global> to <Global> + 1
   playgroup forward 1
  endif
 elseif isActionRef <Schalter4-Ref> == 1
  set doonce to 0
  set init to 0
  playgroup backward 1
 endif
end

Auf den vierten Schalter:
Code:
scn Schalter2SCRIPT

short init
float timer
ref mySelf

Begin onActivate
 if <Global> == 3 && init == 0
  if <Schalter1-Ref>.init == 1 && <Schalter2-Ref>.init == 2 && Schalter3-Ref>.init == 3 [COLOR="Red"];die Reihenfolge der Aktivierung: 1-2-3[/COLOR]
   ;do stuff
   playgroup forward 1
  elseif <Schalter1-Ref>.init == 2 && <Schalter2-Ref>.init == 1 && <Schalter3-Ref>.init == 3 [COLOR="Red"];die Reihenfolge der Aktivierung: 2-1-3[/COLOR]
   ;do stuff
   playgroup forward 1
  else
   set mySelf to getSelf
   <Schalter1-Ref>.activate mySelf 1
   <Schalter2-Ref>.activate mySelf 1
   <Schalter3-Ref>.activate mySelf 1
   set <Global> to 0
   playgroup forward 1
   set timer to 3
   set init to 1
  endif
 endif
end

Begin GameMode
 if timer > 0 && init == 1
  set timer to timer - getSecondsPassed
 endif
 if timer <= 0 && init == 1
  playgroup backward 1
  set init to 0
 endif
end
 
"playgroup" lässt einen Aktivator eine Animation abspielen, die dieser aber auch besitzen muss. Gewöhnliche Schalter haben die Animation "forward" und "backward". Mehr Info gibts hier.
 
Aha aber die eigentliche funktion wird damit nicht aktiviert, also das dieser Activator eine Referenz steuert: Schalter.... Aktivieren..... Steine fallen irgendwo runter?
Das würde also hier nur bewirken das der Schalter sich umlegt mehr nicht oder?
 
Ich habe folgendes Problem: Ich möchte, dass sich die Oblivion Tore erst später öffnen, also habe ich mir das Script für die Tore angesehen. Ich habe dann im OnLoad-Block eine Bedingung eingefügt mit dem Befehl CloseForceOblivionGate (oder so ähnlich) dieser Befehl stand auch bei der Bedingung, dass die HQ zu ende ist. Nur funktioniert das irgendwie nicht. Im Spiel sind weiterhin Oblivion Tore zu sehen. :(
 
Aha aber die eigentliche funktion wird damit nicht aktiviert, also das dieser Activator eine Referenz steuert: Schalter.... Aktivieren..... Steine fallen irgendwo runter?
Das würde also hier nur bewirken das der Schalter sich umlegt mehr nicht oder?

Genau, je nach Art des Schalters. Bei Türen als Aktivator würde es bedeuten, dass sie sich öffnen und schließen ("forward" und "backward"). Bei der Steinfalle und anderen Fallen, die nur einmal aktiviert werden können (schwingende Streitkolben), heißt die entsprechende Animation dann "unequip".
Das Aktivieren - z.B. - eines Parents wird aber ganz normal mit dem "activate"-Befehl gehandhabt.