Construction Set Scriptsammlung

Sonea

Abenteurer
Script Sammlung



So, mir ist soeben die Idee gekommen auch hier ein Script Sammlung zu eröffnen.
Hier könnt ihr Scripte hereinschreiben, die
-entweder ziemlich oft verwendet werden und somit Anfängern helfen können
-oder ziemlich kompliziert und verwirrend sind (wie z.B. Messagebox Verschachtelungen o.ä.)

Hier bitte kein Diskussionen, ich weiß ich habe nicht das Recht das ech zu untersagen, aber so wird alles viel Übersichtlicher.
Für Diskussionen können wir ja einen anderen Thread eröffnen, sollte dieser Anklang finden.

Ich bitte euch auch darum, in euren Post zu schreiben worauf das Script liegt/liegen sollte, ebenso die "Art" des Scriptes.


Legende:
[RefID]-> So schreibt ihr die RefID hier im Thread. Im Oblivion SAcript sollte soetwas nicht auftauchen. Stattdessen steht dann dort halt eure RefID, also das was ihr dem NPC/der Kreatur/oder wasauchimmmer gebt wenn ihr doppelt draufklickt, und oben in das Fenster einen Namen eingebt. Weiteres wird in zahlreichen Tutorials erklärt.
[QuestID]-> So schreibt ihr eure QuestID...
[X]-> So schreibt ihr eure Queststage
[Anzahl]-> Wohl selbsterklärend;)

Wichtige Zeilen im Script könnt ihr Farblich hervorheben und hinter dem bekannten ";" erklärt werden. Möglichst Farblich anders gestalltet.


Dies dient nur der Übersichtlichkeit, also seid nicht der Meinung das ich behaupten würde das ihr das und das nicht dürftet.;)
 
Zuletzt bearbeitet:
Typ: Objekt
"Scriptträger": Activator

Beim Aktivieren des Activators wird eine Messagebox mit einer Frage und einer Zahl an Antwortmöglichkeiten aufgerufen.
Je nach Antwort können unterschiedliche Dinge passieren.
Ich benutzte einfach mal folgendes:
Antwort1: Spieler wird getötet
Antwort2: Spieler wird zu einem Punkt (durch X-Marker markiert) teleportiert


Dies soll nur beim ersten Aktivieren des Activators passieren.

Zuerst muss dafür ein X-Marker (zu finden unter "Static") an einer Stelle platziert werden und mit einer Reference-ID versehen werden. (siehe erster Post)
Dann muss natürlich noch der Activator irgendwo platziert werden.

Code:
Scriptname [Scriptname/ID]

short once          [COLOR="SeaGreen"];Variable, mit der dafür gesorgt wird, dass das Script nur einmal ausgeführt wird  [/COLOR]
short button        [COLOR="seagreen"];Variable, mit der abgefragt wird, welche Antwort gewählt wurde[/COLOR]

begin OnActivate
if (once == 0)            
messagebox "Text", "Antwort1", "Antwort2"      [COLOR="SeaGreen"];Messagebox mit Text und zwei Antwortmöglichkeiten. Die Zahl kann bis [B]10[/B] erhöht werden[/COLOR]
set once to 1        
endif
end

begin GameMode
set button to GetButtonPressed           [COLOR="SeaGreen"];Dieser Befehl stellt fest, ob eine Antwort gewählt wurde[/COLOR]
if (button == 0)                             [COLOR="seagreen"];Wenn die erste Anwort gewählt wurde[/COLOR]
player.kill
elseif (button == 1)                         [COLOR="seagreen"];Wenn die zweite Antwort gewählt wurde[/COLOR]
player.moveto [Ref-ID des X-Markers]
endif
end


Es können pro Messagebox nicht mehr als 10 Antwortmöglichkeiten erstellt werden.
Die erste Antwort bzw button muss immer mit 0 abgefragt werden.
Die Zahlen dafür können also maximal von 0 bis 9 gehen.

Die Bezeichnungen "button" und "once" müssen nicht so gewählt sein, aber die Namen machen klar, was dahinter steckt.
(Es dürfen natürlich keine Befehle als Variable benutzt werden.)
 
Zuletzt bearbeitet:
Bewegungsscript

Die folgende Anleitung zeigt, wie ihr ein Objekt zum Bewegen bringen könnt. Damit ist nicht gemeint, dass es auf die Physik von Oblivion reagiert, sondern eine vorgegebene Strecke entlängfährt. Dies geht in alle Richtungen. Die Scripts sind so geschrieben, dass alle - sogar jene ohne Scripterfahrung - damit umgehen können (OBSE wird nicht benötigt).

1) gewünschtes Objekt beweglich machen
Der folgende Script dient dazu, ein Objekt auf der x-, y- oder z-Koordinate zu bewegen. Wahlweise auch auf 2 oder allen 3. Du kannst die Geschwindigkeit individuell einstellen, sowie die Entfernung, die das Objekt zurücklegen soll. Damit kannst du zum Beispiel ein Falltor um 400 units nach oben bewegen lassen.
Hier also der Script (achte auf die Kommentare hinter den Scriptzeilen):
Code:
scn [COLOR="Green"]Bewegungsscript ;Dies ist der Scriptname. Benenne ihn so um, dass du ihn schnell wiederfindest[/COLOR]

short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
[COLOR="red"]float stopxb
float stopyb
float stopzb[/COLOR]
float speedx
float speedy
float speedz
short wayx
short wayy
short wayz
ref myself

Begin OnActivate
if activated == 0
	set myself to getself
	set stopx to myself.getpos x [COLOR="Green"]+ 500		;bestimmt, wie weit sich das Objekt auf der x-Koordinate bewegen soll (- und + bestimmen die Richtung auf der x-Koordinate)[/COLOR]
	set stopy to myself.getpos y [COLOR="Green"]+ 350		;bestimmt, wie weit sich das Objekt auf der y-Koordinate bewegen soll (- und + bestimmen die Richtung auf der y-Koordinate)[/COLOR]
	set stopz to myself.getpos z [COLOR="Green"]- 200		;bestimmt, wie weit sich das Objekt auf der z-Koordinate bewegen soll (- und + bestimmen die Richtung auf der z-Koordinate)[/COLOR]
[COLOR="Red"]	set stopxb to myself.getpos x
	set stopyb to myself.getpos y
	set stopzb to myself.getpos z[/COLOR]
	set speedx to [COLOR="Green"]5					;bestimmt die Geschwindigkeit auf der x-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
	set speedy to [COLOR="Green"]3.5				;bestimmt die Geschwindigkeit auf der y-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
	set speedz to [COLOR="Green"]-1.8				;bestimmt die Geschwindigkeit auf der z-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
	If stopx > myself.getpos x
		set wayx to 1
	Elseif stopx < myself.getpos x
		set wayx to -1
	Endif
	If stopy > myself.getpos y
		set wayy to 1
	Elseif stopy < myself.getpos y
		set wayy to -1
	Endif
	If stopz > myself.getpos z
		set wayz to 1
	Elseif stopz < myself.getpos z
		set wayz to -1
	Endif
	set activated to 1
[COLOR="red"]Elseif (activated == 1)
	set activated to 2[/COLOR]
[COLOR="Blue"]Elseif (activated == 2)
	set activated to 1[/COLOR]
Endif
End

Begin GameMode
if activated == 0
return
Elseif activated == 1
	set locx to myself.getpos x + speedx
	set locy to myself.getpos y + speedy
	set locz to myself.getpos z + speedz
	If (wayx == 1) && (locx < stopx)
		myself.setpos x locx
	Elseif (wayx == -1) && (locx > stopx)
		myself.setpos x locx
	Endif
	If (wayy == 1) && (locy < stopy)
		myself.setpos y locy
	Elseif (wayy == -1) && (locy > stopy)
		myself.setpos y locy
	Endif
	If (wayz == 1) && (locz < stopz)
		myself.setpos z locz
	Elseif (wayz == -1) && (locz > stopz)
		myself.setpos z locz
	Endif
[COLOR="Red"]Elseif activated == 2
	set locx to myself.getpos x - speedx
	set locy to myself.getpos y - speedy
	set locz to myself.getpos z - speedz
	If (wayx == 1) && (locx > stopxb)
		myself.setpos x locx
	Elseif (wayx == -1) && (locx < stopxb)
		myself.setpos x locx
	Endif
	If (wayy == 1) && (locy > stopyb)
		myself.setpos y locy
	Elseif (wayy == -1) && (locy < stopyb)
		myself.setpos y locy
	Endif
	If (wayz == 1) && (locz > stopzb)
		myself.setpos z locz
	Elseif (wayz == -1) && (locz < stopzb)
		myself.setpos z locz
	Endif[/COLOR]
Endif
End
Beschreibung: Die grünen Kommentare sollten selbsterklärend sein. Eines noch: Wenn du keine Bewegung um eine bestimmte Koordinate willst, ersetzt du die zu ersetzenden Werte der Koordinate durch 0.
Den rot markierten Teil müsst ihr nur übernehmen, wenn ihr wollt, dass man die Bewegung beim zweiten mal drücken wieder rückgängig ausführen kann.
Den blau markierten Teil müsst ihr übernehmen, wenn ihr wollt, dass man die Bwegung so oft man will vor- und rückwärts abspielen kann.

2)zu bewegendes Objekt per Schalter aktivieren


Vorraussetzung ist, dass du Schritt 1 komplett abgeschlossen hast.
Zuerst platzierst du das Objekt mit dem Bewegungsscript an die gewünschte Stelle in der Welt. Dann klickst du doppelt auf das Objekt und machst in dem neuen Fenster einen Haken bei "Persistent Reference".
Dann erstellst du folgenden Script für den Schalter :
Code:
[COLOR="Green"]scn ScriptName ;Dies ist der Scriptname. Benenne ihn so um, dass du ihn schnell wiederfindest[/COLOR]

ref par
ref myself

Begin OnActivate
set par to getparentref
set myself to getself
par.activate myself 1
End
Nachdem du den Schalter in der Welt platziert hast, klickst du doppelt auf ihn. Anschließend gibt es in dem neuen Fenster einen Tab namens "Enable Parent. Da klickst du drauf und dann klickst du auf den Knopf "select Reference in Render Window" o.ä. Dann wird der Cursor im 3D-fenster zu einer Art Zeilscheibe, die sich weiß verfärbt, wenn du über das bewegliche Objekt fährst. Du klickst dann einfach drauf.
Mit OK bestätigen. Fertig.

Sollten Probleme auftreten, gebt mir bitte per PN oder hier im Thread Bescheid.

Gildur
 
Zuletzt bearbeitet:
So hab mal ein kleines MesageBox script gemacht, aber etwas erweitert.
Code:
scn MessageBoxScriptErweitert

Short Button
Short MenuType       [B];Wird beim drücken eines Buttons hochgesetzt und später abgefragt für weitere MessageBoxen[/B]
Short Exit          [B];Benutze ich zum schließen des Menus[/B]

Begin OnActivate ;GameMode, OnDrop, OnAdd - Nehmt was ihr wollt
	Set Exit to 1
	Set Button to GetButtonPressed
	Set MenuType to 0
	If MenuType == 0
		MessageBox "Welche Waffe wollt ihr?", "Waffe", "Kleidung", "Nichts"
	endif
end

Begin GameMode
	If Exit
		If Button == -1              [B]; Sollte die MessageBox mal als[/B] erstes -1 ausgeben, manchmal funktioniert es denn nicht.
			Set Button to GetButtonPressed          [B];GetButtonPressed gibt an welcher "Knopf" gedrückt wurde.[/B]
		Elseif Button == 0
			Set MenuType to 1
		Elseif Button == 1
			Set MenuType to 2
	Else           [B];Sollte einer der Buttons nicht 0 oder 1 sein, wird Exit auf 0 gesetzt und die MessageBox beendet[/B]
		Set Exit to 0
		Endif
	Endif
		If MenuType == 1
			MessageBox "Welche Waffe?", "Silber", "Stahl", "Ende" ;[B];und so weiter[/B]
			If Button == 0
				Player.AddItem [SilberwaffenID]
			Elseif Button == 1
				Player.Additem [StahlwaffenID]
			Elseif Button > 1    [B];Solltet ihr mehr Buttons haben muss die Zahl natürlich größer als 1 sein.[/B]
				Set exit to 0     [B];Wieder zum schließen der MessageBox[/B]
			endif    [B];Ihr könnt jetzt natürlich noch eine weitere Box machen die abfragt welche Silber/Stahlwaffe, dafür müsst ihr nur einen neuen MenuType bestimmen und diesen abfragen und da die MessageBox machen ;)[/B]
		Elseif MenuType == 2
			MessageBox "Welche Kleidung wollt ihr?", "Schöne", "Welche von Rittern", "Deine!", "Soneas ;)", "Ende"
			If Button == 0
				Player.AddItem [SchöneKleidungID]
			Elseif Button == 1
				Player.Additem [RitterkleidungID]
			Elseif Button == 2
				NpcREF.kill
				Message "Nimm sie..."
			Elseif Button == 3
				Sonea.RemoveKleidung && Addplayer [B]; Scherzblock^^[/B]
			Elseif Button > 3
				Set Exit to 0
			endif
	endif
end

Sollten Fehler entdeckt werden, teilt es mit, ich komme nicht zum testen, es sollte aber alles funktionieren.
Liebe Grüße

Edit: Zum thema Farbe^^ Dunkelschwarz und Hellschwarz sind doch 2 Unterschiedliche Farben oder nicht?^^
Ich kanns gut lesen, sollte jemand was dagegen haben..... Pech xD
 
  • Like
Reaktionen: Standalone und peecee
Danke. So das ist erst mal Kochenkeules Script:

Code:
Scriptname [Scriptname/ID]

short once          [COLOR="SeaGreen"];Variable, mit der dafür gesorgt wird, dass das Script nur einmal ausgeführt wird  [/COLOR]
short button        [COLOR="seagreen"];Variable, mit der abgefragt wird, welche Antwort gewählt wurde[/COLOR]

begin OnActivate
if (once == 0)            
messagebox "Text", "Antwort1", "Antwort2"      [COLOR="SeaGreen"];Messagebox mit Text und zwei Antwortmöglichkeiten. Die Zahl kann bis [B]10[/B] erhöht werden[/COLOR]
set once to 1        
endif
end

begin GameMode
set button to GetButtonPressed           [COLOR="SeaGreen"];Dieser Befehl stellt fest, ob eine Antwort gewählt wurde[/COLOR]
if (button == 0)                             [COLOR="seagreen"];Wenn die erste Anwort gewählt wurde[/COLOR]
player.kill
elseif (button == 1)                         [COLOR="seagreen"];Wenn die zweite Antwort gewählt wurde[/COLOR]
player.moveto [Ref-ID des X-Markers]
endif
end


Wie muss das Script heißen, wenn der Spieler bei der ersten Antwort nun nicht getötet wird, sondern die Messagebox geschlossen wird, also Abbrechen?

Edit: SRY, FALSCHER THREAD!
 
Zuletzt bearbeitet:
Ein einfaches Timerscript:

Code:
scriptname TimerScriptTutorial

; [B]Written by SirTroy[/B]
; [B]4.4.2009[/B]

Float Timer ; [B]Der eigentliche Timer[/B]
Short Act ; [B]Nur eine Abfrage[/B]

Begin OnActivate
	Set Timer to 10 ; [B]Hier wird die Länge des Timers bestimmt[/B]
	Set Act to 1
End

Begin GameMode
	If Act == 1
		DisablePlayerControl ; [B]Nur ein Bsp.[/B]
		Set Timer to Timer - GetSecondsPassed ; [B]Hier wird bestimmt das der Timer mit jeder Sekunde verringert wird[/B]
			If Timer <= 0 ; [B]Sobald der Timer bei 0 ist wird eien Aktion ausgeführt. Ihr könnt auch etwas machen wenn der Timer erst 5 ist[/B]
				EnablePlayerControls
			EndIf
	EndIf
End ; [B]Das ist nur ein einfacher Timer, aber es ist die grundlage, ihr müsst es nur ein wenig ausbauen ;-)[/B]
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Standalone
Hier ein Script für einen Trainingsraum
Das ganze ist ein Object Script und sollte möglichst auf einen Activator gelegt werden.
Code:
scn Trainingsraum

short Button ;;; Das sind die Variablen zum abfragen der Befehle wie z.B. GetButtonPressed
short Count
short Enemy
short MenuType

Begin OnActivate
 if ( IsActionRef Player )
  set MenuType to 1
  set Button to ( GetButtonPressed + 1 )
  MessageBox "Gegen wen wollt ihr kämpfen?" "Lich" "Skelette" "Ratten" "Ende" ; Hier die MessageBox, ihr müsst hier nur eure gegner einsetzen
 endif
End

Begin Gamemode
 if ( MenuType == 255 )
  set MenuType to 0
  if ( Enemy == 1 )
   [Erste Lichreferenz].MoveTo Player ;MoveTo bringt eine bestimmte Reference zu einer anderen ("Teleport")
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [2. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [3. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [4. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [5. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [6. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [7. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [8. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [9. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [10. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [11. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [12. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [13. Lichreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [14. Lichreferenz].MoveTo Player
   endif
  elseif ( Enemy == 2 )
   [Erste Skelettreferenz].MoveTo Player
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [2. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [3. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [4. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [5. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [6. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [7. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [8. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [9. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [10. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [11. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [12. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [13. Skelettreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [14. Skelettreferenz].MoveTo Player
   endif
  else
   [Erste Rattenreferenz].MoveTo Player
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [2. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [3. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [4. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [5. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [6. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [7. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [8. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [9. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [10. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [11. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [12. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [13. Rattenreferenz].MoveTo Player
   endif
   set Count to ( Count - 1 )
   if ( Count > 0 )
    [14. Rattenreferenz].MoveTo Player
   endif
  endif
 elseif ( MenuType )
  if ( Button )
   if ( MenuType == 1 )
    if ( Button > 3 ) ; Sollte der Button größer als 3 sein (Bei der ersten MessageBox) wird die Box geschlossen
     set MenuType to 0
    else ; Ist der Button nicht größer als 3 wird der MenuType erhöht
     set MenuType to 2 
     set Enemy to Button ;Enemy wird jetzt zur Variable Button gesetzt und bestimmt wie oben geschrieben welcher Gegner gerufen wird
     set Button to ( GetButtonPressed + 1 )
     MessageBox "Gegen wie viele Gegner willst du antreten?" "einen" "zwei" "drei" "vier" "fünf" "sechs" "sieben" "mehr als sieben" "Ich will gegen einen anderen Gegner kämpfen" "Ich will nicht kämpfen"
    endif
   elseif ( MenuType == 2 ) || ( MenuType == 3 )
    if ( Button > 9 ) ;Sollte der Button jetzt größer als 9 sein wird die MessageBox beendet
     set MenuType to 0
    elseif ( Button == 9 ) ; Sollte der Button genau 9 sein ("Ich will gegen einen anderen Gegner kämpfen") wird der Gegenstand erneut Aktiviert dadurch wird die erste MessageBox erneut aufgerufen
     Activate Player 1
    elseif ( MenuType == 2 )
     if ( Button == 8 )
      set MenuType to 3
      set Button to ( GetButtonPressed + 1 )
      MessageBox "Gegen wie viele Gegner willst du antreten?" "acht" "neun" "zehn" "elf" "zwölf" "dreizehn" "vierzehn" "weniger als acht" "Ich will gegen einen anderen Gegner kämpfen" "Ich will nicht kämpfen"
     else
      set MenuType to 255 ;Erst jetzt wird der MenuType auf 255 gesetzt, wenn das Script sich also nochmal abspielt (Ist ja GameMode läuft also die ganze zeit ab) wird der obere Block ausgeführt
      set Count to Button ; Jetzt bestimmt der gedrückte Button die Gegneranzahl (Count)
     endif
    elseif ( Button == 8 )
      set MenuType to 2
      set Button to ( GetButtonPressed + 1 )
      MessageBox "Gegen wie viele Gegner willst du antreten?" "acht" "neun" "zehn" "elf" "zwölf" "dreizehn" "vierzehn" "weniger als acht" "Ich will gegen einen anderen Gegner kämpfen" "Ich will nicht kämpfen"
    else
     set MenuType to 255
     set Count to ( Button + 7 )
    endif
   endif
  else
   set Button to ( GetButtonPressed + 1 )
  endif
 endif
End

Ihr müsst dabei nur eure Referencen einsetzen. (Diese platziert ihr in irgendeiner Zelle)

Auf diese Monster muss dieses Script:
Code:
Begin OnDeath
	MoveTo [REF in DummyCell]
	Resurrect ; Wiederbeleben
End
Das bewirkt das die Gegner wenn sie sterben wiederbelebt und in die Zelle zurück geschickt werden.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Standalone
Dieses kleine Skript macht aus jeder verlinkten Tür ein One Way Ticket. Noch ein paar Gasfallen oder Rote Ayleidkristalle in den Raum gesetzt, voilà fertig ist die tödliche Falle :)
Damit, wenn gewünscht, doch noch ein Ausweg per Schalter oder Schlüssel bleibt, ist eine Status Variable eingebaut.

Code:
short AN
ref target
ref mySelf

begin onTrigger player
	
	if AN == 0
		set target to getParentRef
		set mySelf to getSelf
		target.activate mySelf 1
		playgroup forward 0
		set AN to 1
	endif

	end

begin gameMode

  if isAnimPlaying == 0 && AN == 1
		
	if (target.GetLocked == 0)
         target.Lock 100
		set AN to 0
	endif
  endif

end
 
@ Sonea,

ich finde es eine gute Idee mit dem Thread, aber vielleicht könnte man immer dazu schreiben, mit welchen Objekt man das Script verbinden kann. Denn nicht jeder ist ein Profi und es gibt jede Menge Anfänger. Bei einigen ist das ja schon Erklärt,aber nicht bei allen

z.B. Trainingsraum

PS: Es wäre auch für die Laien sehr hilfreich zu Wissen wie man ein Script und wo im CS speichert und mit dem Objekt verbindet.

Wäre schön wenn jemand das mal ausführlich schreiben würde. Die meisten Tutorials sind nämlich schon veraltet und man kann nicht immer die Beispiele davon nachvollziehen, weil sich die Software geändert hat.

Vielen Dank im voraus Piet
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Sonea
Bei meinem Trainingsraum Script muss das Script nur auf irgendeinen Activator gelegt werden. Das sieht man daran das der erste block Begin OnActivate heißt. D.h. soviel wie: Wenn der Gegenstand aktiviert wird auf dem das Script liegt kommt die MessageBox und man kann sich entscheiden welchen Gegner man herbeschwören will. Ich hatte gestern abend keine Zeit/Lust mehr eine so ausführliche beschreibung zu machen das es sogar jemand versteht der garnicht Scripten kann. Irgendein Tutorial sollte man sich anfangs schon suchen ;)
Ich mach jetzt noch einmal eine genaue Beschreibung zu jedem Befehl den ich verwendet habe...
MfG
 
1. Eine zufällige zahl zwischen 1 und 99 via GetRandomPercent bestimmen

Scripttyp: Object, Magic Effect
Kann auf einen Activator oder als Spell verwendet werden

Code:
Scriptname RandomScript

Short Random

Begin OnActivate
	Set Random to 1 + 0.05 * GetRandomPercent ; Das ganze würde hier eine Zahl zwischen 1 und 5 ausgeben
	If Random == 1 ; Ab hier könnt ihr jetzt eure abfragen machen
		; Do Stuff
	Elseif Random == 5
		; Do Stuff
	Endif
End
Code:
Scriptname RandomScript

Short Random

Begin OnActivate
	Set Random to 1 + 0.99 * GetRandomPercent ; Hier wird jetzt eine zahl zwischen 1 und 99 ausgegeben
	If Random == 56
		; Do Stuff
	Endif
End
Mal 2 Beispielscripts, ihr müsstet dann eure abfragen und Effekte einbauen.

1. Eine zufällige Zahl zwischen 1 und 100 mit Rand bestimmen

ACHTUNG: Dieser Befehl benötigt den Oblivion Script Extender!!

Scripttyp: Object, Magic Effect
Kann auf einen Activator oder als Spell verwendet werden
Code:
ScriptName RandomScriptRand

Short Random

Begin OnActivate
	Set Random to Rand 1 100 ; Die Erste Zahl ist die Zahl die Mindestens kommt und die Zweite Zahl die Maximal kommt
	If Random == 90
		; Do Stuff
	Endif
End

PS: Ich finde die variante mit Rand besser, weils einfacher und zuverlässiger geht ;)
 
Zu GetRandomPercent sei noch gesagt, dass es sinnvoller ist, mit Prozentbereichen zu arbeiten, als mit bestimmten Werten.

Dazu noch ein weiteres Beispielscript:

Code:
Scriptname [GetRandomPercent Example]

short random

begin GameMode

set random to GetRandomPercent

if (random <= 9)
    ;Aktion 
elseif (random <= 19)
    ;Aktion
elseif (random <= 29)
    ;Aktion
elseif (random <= 39)
    ;Aktion
elseif (random <= 49)
    ;Aktion
elseif (random <= 59)
    ;Aktion
elseif (random <= 69)
    ;Aktion
elseif (random <= 79)
    ;Aktion
elseif (random <= 89)
    ;Aktion
elseif (random <= 99)
    ;Aktion
endif
end

Außerdem, auch wenn es etwas Klug******erei ist, wird mit GetRandomPercent eine Zahl von 0 bis 99 bestimmt;)
 
Bei mir kam niemals 0 Raus egal wat ich gemacht hab, deswegen hab ich von 1-99 geschrieben. Klug******er :roll:
 
Gebe ich gerne zu^^, allerdings ist es auch logisch. Schließlich müssen es bis 99 ja trotzdem 100% sein und das geht nur, wenn die 0 mit einbezogen wird.
 
Um dem Thread mal wieder ein bisschen Leben einzuhauchen... Ein Skript(-komplex), das ich schon längere Zeit auf der Festplatte habe:

Das Skript kommt auf eine Tür, wodurch der Modder entscheiden kann, wie diese Tür zu öffnen sein soll; entweder durch den Spieler oder durch einen Schalter (Standard). Um die Öffnung durch den Spieler zu ermöglichen wird lediglich eine spezielle Triggerbox benötigt, die der Spieler durchläuft. Wenn diese nicht vorhanden ist, lässt sich die Tür nur durch einen Activator öffnen und nicht anders. Durchläuft der Spieler eine solche Triggerbox, kann die Tür durch ihn oder durch einen Schalter geöffnet werden. Wenn der Spieler die Tür passiert, kann sie durch einen anderen Activator wieder hinter ihm verschlossen werden, sodass der Spieler sie nicht wieder öffnen kann. Die Tür kann auch einen beliebigen Locklevel haben (macht natürlich nur bei möglicher Spieler-Aktivierung Sinn).
Das Skript ist also auf alle Türen universell anwendbar und erfordert als eventuellen Zusatz lediglich einen Trigger, der natürlich möglichst so platziert werden sollte, dass der Spieler ihn zwingend durchläuft.

Code:
scn [COLOR="Red"]TürSCRIPT[/COLOR]

short next [COLOR="Red"];zum Auslösen einer Kettenreaktion[/COLOR]
short open [COLOR="Red"];gibt de Status der Tür an: offen oder geschlossen[/COLOR]
short busy [COLOR="Red"];gibt an, ob eine Animation abgespielt wird[/COLOR]
short declared [COLOR="Red"];gibt an, ob die Öffnungsweise schon bestimmt wurde[/COLOR]
short activated [COLOR="Red"];gibt die Zahl der Aktivierungen an[/COLOR]
short playerActivation [COLOR="Red"];gibt an, ob der Spieler die Tür aktivieren kann, oder nicht[/COLOR]
float timer [COLOR="Red"];ein einfacher Timer...[/COLOR]

ref mySelf
ref myParent [COLOR="Red"];Variablen zum Auslösen der Kettenreaktion[/COLOR]

ref refVAR1
ref refVAR2 [COLOR="Red"];Variablen für die aktivierende Referenz[/COLOR]


Begin onActivate
	if busy == 0
		if declared == 0
			set refVAR1 to getActionRef
			if isActionRef player == 1
				set refVAR1 to 0
				return
			endif
			set declared to 1
			if refVAR1.getIsID [COLOR="Red"]TriggerBox[/COLOR] == 1 [COLOR="Red"];ich nehme immer mehrere Triggerboxen in verschiedenen Formen; die ID ist natürlich abänderbar[/COLOR]
				set playerActivation to 1
				set refVAR1 to 0
				return
			endif
			if open == 0
				set open to 1
			else
				set open to 0
			endif
			activate
			set timer to 0.3
			set next to 1
			set declared to 1
			set activated to 1
			set busy to 1
		else
			if activated == 0
				set refVAR1 to getActionRef
				if open == 0
					set open to 1
				else
					set open to 0
				endif
				activate
				set timer to 0.3
				set next to 1
				set activated to 1
				set busy to 1
			elseif activated == 1
				if playerActivation == 0
					if isActionRef player == 1
						messagebox "Dieses Tor wird anderweitig gesteuert."
						return
					else
						set refVAR2 to getActionRef
						if refVAR2.getIsReference refVAR1 == 1
							set refVAR2 to 0
							if open == 0
								set open to 1
							else
								set open to 0
							endif
							activate
							set busy to 1
						elseif refVAR2.getIsReference refVAR1 == 0
							if open == 0
								set activated to 2
							else
								set open to 0
								activate
								set activated to 2
								set busy to 1
							endif
						endif
					endif
				else
					set refVAR2 to getActionRef
					if refVAR2.getIsReference refVAR1 == 1
						set refVAR2 to 0
						if open == 0
							set open to 1
						else
							set open to 0
						endif
						activate
					elseif refVAR2.getIsReference refVAR1 == 0
						if isActionRef player == 0
							if open == 0
								set activated to 2
							else
								set open to 0
								activate
								set activated to 2
							endif
						else
							if open == 0
								set open to 1
							else
								set open to 0
							endif
							activate
						endif
						set busy to 1
					endif
				endif
			else
				if isActionRef player == 1
					if playerActivation == 0
						messagebox "Dieses Tor wird anderweitig gesteuert."
					else
						messagebox "Ihr könnt dieses Tor nicht betätigen."
					endif
				endif
			endif
		endif
	endif
end


Begin GameMode
	if timer > 0 && next == 1
		set timer to timer - getSecondsPassed
	endif
	if timer <= 0 && next == 1
		set mySelf to getSelf
		set myParent to getParentRef
		myParent.activate mySelf 1
		set next to 2
	endif

	if getOpenState == 1 || getOpenState == 2 && open == 0
		set open to 1
	endif
	if getOpenState == 3 || getOpenState == 4 && open == 1
		set open to 0
	endif

	if isAnimPlaying == 0&& busy == 1
		set busy to 0
	endif
end


Begin onReset
	set next to 0
	set open to 0
	set busy to 0
	set declared to 0
	set activated to 0
	set playerActivation to 0
end

Das Skript auf der angesprochenen Triggerbox sollte wie folgt aussehen (eigentlich ganz normal ;) ):
Code:
scn [COLOR="Red"]TriggerBoxSCRIPT[/COLOR]

short triggered
ref myParent
ref mySelf

Begin onTrigger player
	if triggered == 0
		set myParent to getParentRef
		set mySelf to getSelf
		myParent.activate mySelf 1
		set triggered to 1
	endif
end

Begin onReset
	set triggered to 0
end

Die Triggerbox muss natürlich die Tür als Parent haben.

Viel Spaß damit!

Ps: Kann jemand diesen Thread nicht mal als "Wichtg" markieren, sodass er nicht immer in der Versenkung verschwindet? :(
 
  • Like
Reaktionen: peecee
Hi Diarrhoe,
ich habe mal eine Frage zu deinem Skript. Wenn ich eine Tür habe, die ich mit einem Schalter öffnen kann und hinter ihr ein Trigzoneplayer01 setze und bei Parent die Tür angebe, dann fällt sie auch zu, ohne dieses Skript. Zum erneuten öffnen der Tür habe ich einen weiteren Schalter positioniert, den man suchen muss. Deshalb verstehe ich irgendwie nicht so richtig den Sinn dieses Skriptes. Das geht auch so.
MfG.
Aspiria
 
  • Like
Reaktionen: Bernd009