Construction Set Aufzug Script

Sorry,

Das Script habe ich nicht auf dem Computer an dem ich im Internet bin.

Ich habe es eins zu eins aus deinem Beitrag (natürlich ohne die grünen Kommentare und nur entweder das rote oder das grüne) kopiert.

Und ja, der Käfig ist der Enable Parent vom Schalter.
 
Zuletzt bearbeitet:
Okay...

Ich versuche es mal logisch zu betrachten: Ich habe exakt meinen Script benutzt, wie er im Thread steht, Enable Parent benutzt und auch den Activator mit Script belegt... und es klappt.

Du sagst, du hast ihn auch exakt rauskopiert, und alle Kommentare gelöscht. Auch Enable Parent hast du beachtet und den Script auf den Activator gelegt. Bis auf die Kommentare löschen (was nicht nötig war) hast du also alles richtig gemacht... eine Frage: Hast du alles farbige gelöscht oder alles nach diesem Zeichen ; ? Wenn es das nicht ist, hast du irgendwas nicht richtig gemacht.
Denn die Zahlen davor müssen bleiben, die gehören nicht zum Kommentar und sind für die Funktion des Scriptes wesentlich. Außerdem: Ich habe eben gelesen, dass du dich mit dem Spieler darauf hochbewegen möchtest. Das geht noch nicht, da nur das mesh bewegt wird, nicht die Kollission. Also du siehst das objekt hoch fahren, aber bleibst letztendlich an selber Stelle. Das Problem ist schwer zu beheben. Das werde ich demnächst aber noch aktualisieren.

Gildur
 
Ich habe noch nicht ausprobiert den aufzug von außen hoch zu schicken (also ohne drin zu stehen).
die zahlen habe durch für mich geeignete ersetzt.

:good: Vielen Dank für deine Ganzen Mühen. :good:

Vielleicht schaffst du es ja noch rauszufinden wie es mit Personen drin klappt.

Ich werde jetzt erst mal ohne Aufzug weiter bauen, freue mich aber über jede neue erkenntnis bei dem Problem.
 
Außerdem: Ich habe eben gelesen, dass du dich mit dem Spieler darauf hochbewegen möchtest. Das geht noch nicht, da nur das mesh bewegt wird, nicht die Kollission. Also du siehst das objekt hoch fahren, aber bleibst letztendlich an selber Stelle. Das Problem ist schwer zu beheben. Das werde ich demnächst aber noch aktualisieren.

Gildur

Echt? So ein Mist, ich hatte das schon fest für eine Funktion eingeplant... :(
Naja, ich bin sicher du schaffst das... irgendwie (und wenn möglich ohne "enable"-"disable" (wobei das ja egal sein sollte, wenn man das über ein Questskript mit einer DelayTime von 0.001 laufen lässt, weil das menschliche Auge sowieso nur 12 Bilder pro Sekunde erfassen kann, wenn ich mich richtig erinnere...)).

Ps: OMG... Vierfachpost! Das hab ich hier im Forum bislang noch nicht gesehen... Falls du nicht weißt, was der "Ändern"-Button bedeutet, dann klick mal drauf... ;)
 
Hallo,

hab mein script jetzt auf diesem PC.

Und hier kommt es:

Mein Aufzugscript:


scn Aufzugscript

short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
float stopxb
float stopyb
float stopzb
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 0
set stopy to myself.getpos y 0
set stopz to myself.getpos z + 200
set stopxb to myself.getpos x
set stopyb to myself.getpos y
set stopzb to myself.getpos z
set speedx to +10
set speedy to +10
set speedz to +10
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

Elseif (activated == 1)
set activated to 2
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
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
Endif
End


Mein Schalterscript:

scn Aufzugschalter
ref par
ref myself

Begin OnActivate
set par to getparentref
set myself to getself
par.activate myself 1
End

Vielleicht findest du ja einen Fehler. ;)
 
Wen hats gewundert, der Script wurde falsch verändert.

Code:
scn Aufzugscript

short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
float stopxb
float stopyb
float stopzb
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
    set stopy to myself.getpos y
    set stopz to myself.getpos z + 200
    set stopxb to myself.getpos x
    set stopyb to myself.getpos y
    set stopzb to myself.getpos z 
    set speedx to 0
    set speedy to 0
    set speedz to 10
    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

Elseif (activated == 1)
    set activated to 2 
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
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
Endif
End
Der Schalterscript ist in Ordnung.

Kansnt du beim nächsten mal Posten bitte dafür sorgen, dass dir Formatierung bleibt? So lässt sich das nämlich schwerer lesen.

Gildur
 
  • Like
Reaktionen: Meister von Cyrodiil
Na klar.

Ich werds versuchen.

das doofe ist, wenn ich es kopiere, kopiert es die Formatierung nicht mit.

Heißt: Alles eine Zeile.

Deswegen Habe ich wahrscheinlich auch einen fehler gemacht.

Wo war jetzt der Fehler?

Könntest du es evtl. in farbe makieren?

Viele dank im voraus
 
Also, ich misch mich jetzt hier mal ein.

Das mit dem Player mitbewegen ist nicht sonderlich schwer, allerdings sieht das mit der normalen Version von Oblivion sagen wir...sonderbar aus, da es bei senkrechten Bewegungen zu Fallbewegungen kommt und das ganze ruckelt.

Wenn möglich solltest du auf einen Animierten Fahrstuhl wie den hier zurück greifen, ansonsten gibt es noch eine Variante mit Obse, ich hab die zwar noch nie im Zusammenhang mit Fahrstühlen getesten aber als einzelne Komponente.

Ich füge das jetzt einfach mal in Gildurs Aufzugscript ein. Vorraussetzung hier für sind OBSE und eine .txt datei im Ordner Oblivion/myScrips
mit dem Inhalt:

player.tcl

Code:
scn Bewegungsscript ;Dies ist der Scriptname. Benenne ihn so um, dass du ihn schnell wiederfindest

short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
float stopxb
float stopyb
float stopzb
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 + 500		;bestimmt, wie weit sich das Objekt auf der x-Koordinate bewegen soll (- und + bestimmen die Richtung auf der x-Koordinate)
	set stopy to myself.getpos y + 350		;bestimmt, wie weit sich das Objekt auf der y-Koordinate bewegen soll (- und + bestimmen die Richtung auf der y-Koordinate)
	set stopz to myself.getpos z - 200		;bestimmt, wie weit sich das Objekt auf der z-Koordinate bewegen soll (- und + bestimmen die Richtung auf der z-Koordinate)
	set stopxb to myself.getpos x
	set stopyb to myself.getpos y
	set stopzb to myself.getpos z
	set speedx to 5					;bestimmt die Geschwindigkeit auf der x-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
	set speedy to 3.5				;bestimmt die Geschwindigkeit auf der y-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
	set speedz to -1.8				;bestimmt die Geschwindigkeit auf der z-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)
	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
Elseif (activated == 1)
	set activated to 2
Elseif (activated == 2)
	set activated to 1
Endif
End

Begin GameMode
if activated == 0
return
Elseif activated == 1
[COLOR="Blue"]        RunBatchScript "myScripts\TxtDateiName.txt"[/COLOR]
	set locx to myself.getpos x + speedx
	set locy to myself.getpos y + speedy
	set locz to myself.getpos z + speedz
[COLOR="Blue"]        DisablePlayerControls[/COLOR]    ;sorgt dafür, dass der Spieler nicht mit tcl rumfliegen kann...
	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
                Player.Setpos z locz
	Elseif (wayz == -1) && (locz > stopz)
		myself.setpos z locz
                Player.SetPos Z locz
[COLOR="Blue"]                EnablePlayerControls[/COLOR]
[COLOR="Blue"]        RunBatchScript "myScripts\TxtDateiName.txt"[/COLOR]
	Endif
Elseif activated == 2
	set locx to myself.getpos x - speedx
	set locy to myself.getpos y - speedy
	set locz to myself.getpos z - speedz
[COLOR="Blue"]        DisablePlayerControls[/COLOR] 
	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
                Player.SetPos Z locz
	Elseif (wayz == -1) && (locz < stopzb)
		myself.setpos z locz
                Player.SetPos Z locz
[COLOR="Blue"]                EnablePlayerControls[/COLOR]
[COLOR="Blue"]        RunBatchScript "myScripts\TxtDateiName.txt"[/COLOR]
	Endif
Endif
End

Erklärung: Die .txt Datei deaktiviert die Kollision für den Player, somit "entfällt" das Fallen.

Weitere Notiz, um bei dem Objekt, die Kollision nach der Bewegung wieder herzustellen, musst du es disablen und dann nach > 1 Frame wieder enablen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Meister von Cyrodiil
Laut OBSE Dokumentation schon, aber ich hab das bei meinem letzten Mod ausprobiert und es funktionierte bei ALLEN außer bei dem Spieler selber, tcl üver die RunBatch ausführen zu lassen, war das einzige, was funktionierte.
 
Aber da ich den Usern lieber OBSE erspare, werde ich demnächst mal daran arbeiten, es ohne hinzukriegen. Das kann aber noch etwas dauern, da ich gerade an etwas anderem arbeite.
(und wenn möglich ohne "enable"-"disable" (wobei das ja egal sein sollte, wenn man das über ein Questskript mit einer DelayTime von 0.001 laufen lässt, weil das menschliche Auge sowieso nur 12 Bilder pro Sekunde erfassen kann, wenn ich mich richtig erinnere...)).
Wozu über die Quest laufen lassen, wenn man doch den Script auf das Objekt legen kann. Laut deiner Aussage muss der Spieler mindestens 24 FPS habe, dann sollte es gehen. ;)
 
Aber da ich den Usern lieber OBSE erspare, werde ich demnächst mal daran arbeiten, es ohne hinzukriegen. Das kann aber noch etwas dauern, da ich gerade an etwas anderem arbeite.

Wozu über die Quest laufen lassen, wenn man doch den Script auf das Objekt legen kann. Laut deiner Aussage muss der Spieler mindestens 24 FPS habe, dann sollte es gehen. ;)

Ich wüsste nicht, wie es ohne klappen sollte... das einzige was machen kann..es gibt ein Mesh in Oblivion, das komischerweise die Kollision behält, wenn man es bewegt. Das ist der Käfig von Si, der in der Folterhalle (diesen Ruinen am Anfang) über dem Goldvorrat ist. Müsste man sich mal ansehen.
 
  • Like
Reaktionen: Gildur
Vielen Dank für die Info! Das werde ich mir angucken.
Und wie Diarrhoe schon sagte: Man kann dir Kollission eines bewegten objektes mit enable/disable aktualisieren.

Gildur
 
@Gildur: Ich würde die Bewegung aber gerne auf mehrere Statics ausführen lassen. Und weil auf Statics keine Skripte liegen können... Außerdem sollen es ja mehrere Objekte sein...
 
Funktioniert mit Activatoren..(komisches Wort) auch.

Ich hab das mal mit einem Ruderboot gemacht. Wen es intressiert, hier ist der Script:

Code:
scn AjColdRowBoatScript2

float PosYY
float PosY
float Health
float timer
short reset
short phaseThere
short PhaseBack


Begin OnActivate 

If GetPos Y < 5881
Set PhaseThere to 1
Set Health to Player.GetAv Health
DisablePlayerControls

elseif GetPos Y > 5890
Set PhaseBack to 1
Set Health to Player.GetAv Health
DisablePlayerControls
endif
end

Begin GameMode

If PhaseThere == 1 && GetPos Y < 9065
Set PosY to GetPos Y + 1
Set PosYY to GetPos Y - 110
RowBoatTransport.SetPos Y PosY
Player.SetPos Y PosY
AjFerry.SetPos Y PosYY
RowBoatTransport.enable
Player.SetAv Health  Health
         
elseif PhaseThere == 1 && GetPos Y >= 9065
Set PhaseThere to 0
RowBoatTransport.MoveToMarker MarkerBoat1
RowboatTransport.Disable
Set timer to 1
AjFerry.MoveToMarker AjFerryManMarker2
Player.MoveToMarker PlayerBoatMarker2

elseif PhaseBack == 1 && GetPos Y > 5880
Set PosY to GetPos Y - 1
Set PosYY to GetPos Y - 110
RowBoatTransport.SetPos Y PosY
Player.SetPos Y PosY
AjFerry.SetPos Y PosYY
RowBoatTransport.enable
Player.SetAv Health Health

elseif PhaseBack == 1 && GetPos Y <= 5880
Set PhaseBack to 0
Set timer to 1
disable
AjFerry.MoveToMarker AjFerryManMarker1
Player.MoveToMarker PlayerBoatMarker
endif

If timer > 0
    Set timer to timer - GetSecondsPassed

elseif timer <= 0 && PhaseBack != 1 && PhaseThere != 1
         RowBoatTransport.enable
         EnablePlayerControls
endif
end

Begin OnLoad 
if reset == 0
AjFerry.MoveToMarker AjFerryManMarker1
Set reset to 1
endif
end

Begin OnReset 
Set reset to 0
end
 
Es gibt ja im CS extra Collisions, die man einfügen kann. So kann man zum Beispiel die "unsichtbare" Brücke wie in KotN erstellen. Wenn man diese über das Aufzug-Mesh legt und ein zweites Dummy-Script im Hintergrund laufen lässt; würde es nicht so funktionieren?

Oder wäre es das Selbe in grün und die eigentliche Collision bleibt unten?
 
Das ist leider das selbe.

Ich wüsste nicht, wie es ohne klappen sollte... das einzige was machen kann..es gibt ein Mesh in Oblivion, das komischerweise die Kollision behält, wenn man es bewegt. Das ist der Käfig von Si, der in der Folterhalle (diesen Ruinen am Anfang) über dem Goldvorrat ist. Müsste man sich mal ansehen.

Da ich SI nicht habe (bzw. ich habe es schon, nur nicht installiert und nie gespielt) habe ich mir die von einem Freund schicken lassen. Soweit ich es erkennen konnte, hatte der Käfig eine Animation. Vielleicht hatte ich auch die falsche. Jedenfalls habe ich heute herausgefunden, wie es möglich ist, die Kollision von Objekten "aktualisieren" zu lassen (Danke an P-Froggy, der mich auf die Raupe aufmerksam gemacht hat). Wer sich gut genug mit NifSkope auskennt kann dieser Anleitung folgen (Obwohl eigentlich kaum NifSkope-wissen nötig ist, das meiste ist erklärt).

Allerdings löst das nicht das Problem mit dem Script. Da ich es userfreundlich gestalten möchte und für jeden Anfänger möglich machen möchte, einen Aufzug erstellen, möchte ich NifSkope weglassen und es im CS möglich machen.

Mal sehen...

Gildur
 
Zuletzt bearbeitet:
Bei dem Käfig funktioniert das auch ohne Animation. Ich habe ihn in einem Mod verwendet, ohne selbige Animation.

Das Einzoge ohne NifScope wäre dann wohl ein animierter Fahrtstuhl...