Einen Schalter über einen anderen Schalter aktivieren.

Destero

Angehöriger
Ich habe folgendes Problem:

Der rot eingekringelte Pullchain soll die grün eingekringelten aktivieren, damit man mit diesen anschließend das Tor öffnen kann. Hat da jemand eine Lösung?



Danke im Vorraus!



Darüber hinaus würden mich PDF-Dateien interessieren, die man sich ausdrucken kann und in denen man nachschlagen kann. Insbesondere Papyrus und wie man das Creation-Kit anwendet. Ich habe zwar schon das ein oder andere Tutorial gefunden, aber die meisten waren zum ausdrucken nicht sonderlich geeignet. Ich schlage einfach gerne nach und kann damit besser arbeiten, als ständig die Ansicht auf dem Monitor zu wechseln.
 
Zuletzt bearbeitet:
Meinst du mit aktivieren, dass man erst an den linken ziehen kann, wenn der rechte gezogen wurde? Dann denke ich müsste das über einen Skript zu regeln sein...
 
Was du machen könntest, ist, dass du die linken zuerst als Statics platzierst. Dann könntest du scripten, dass die linken (die Statics) durch richtige Activator (also funktionierende Hebel) ersetzt werden, wenn der echte gezogen wird.

Anmerkung: Das ist nur eine Idee. Ich hab von Scripten überhaupt keine Ahnung und hab das noch nie gemacht. Aber vielleicht kann mans ja echt so machen :)
 
  • Like
Reaktionen: Destero
Mach es, wie Hadrian vorgeschlagen hat.

- Links jeweils ein Static-Mesh des Aktivators und den Aktivator an der gleichen Stelle platzieren.
- Den Aktivator auf "initially disabled" setzen.
- Auf den Aktivator rechts folgendes Skript:
Code:
Scriptname Gegenstand_aktivieren extends ObjectReference  

ObjectReference Property zu_aktivierender_Gegenstand Auto
ObjectReference Property zu_deaktivierender_Gegenstand Auto


Event OnActivate (ObjectReference akAktionRef)
  zu_deaktivierender_Gegenstand.disable()
  zu_aktivierender_Gegenstand.enable()
EndEvent
- Unter den Skript-Properties den zu aktivierenden und den zu deaktivierenden Gegenstand auswählen.
- Fertig - funktioniert :D


Entweder kannst du das Skript so erweitern, dass man die anderen beiden Schalter auch noch ins Skript rein nimmt oder du machst sie über "enable Parent" in den Objekt-Eigenschaften von dem ersten Master-Schalter abhängig.

Hoffe, es war einigermassen verständlich ... sonst halt nachfragen :D
 
Zuletzt bearbeitet:
Danke für Deine Antwort!

Habe den Code wie folgt geschrieben:

Scriptname MasterSchalter extends ObjectReference {Script für einen Schalter, der einen anderen Schalter aktiviert} MasterSchalter extends ObjectReference ObjectReference Property dest_GenPullChain01 Auto ObjectReference Property dest_GenPullChain01dummy Auto Event OnActivate (ObjectReference akAktionRef) dest_GenPullChain01dummy.disable() dest_GenPullChain01.enable() EndEvent

Mit Dummy habe ich die Pullchain bezeichnet, die ich mir erstellt habe, die nachher verschwinden soll. Das abspeichern des Scripts hat schon nicht geklappt. Da ich nichts anderes gefunden habe habe ich den gleichen Schalter genommen wie für den "richtigen" Schalter. Beide Schalter haben neue unterschiedliche IDs erhalten, s.o.
 
Die dritte Zeile (MasterSchalter extends ObjectReference) muss schon mal auf alle Fälle weg.

Für den Dummy würde ich evtl. ein Static erstellen und keinen Aktivator verwenden.

Du musst, nachdem du das Skript erstellt hast, die beiden Objekte dann im Dialogfenster unter "Skripts -> Properties" entsprechend eintragen.
 
  • Like
Reaktionen: Destero
Habe leider nur diesen einen Pullchain gefunden...bzw. woher kriege ich einen Static? Mit dem Filter habe ich das entsprechende nicht gefunden:huh:



EDIT:

Hahaaaa, egal, es hat funktioniert, auch mit dem Dummy, hatte vorher noch die Scripte entfernt, aber ich weiß nicht ob das jetzt dabei geholfen hat, ich glaube aber eher nicht...

Ja Super, jetzt bin ich einen kleinen Schritt weiter!!! THX!!!

EDIT:

Jetzt würde mich trotzdem noch interessieren, wo ich den Static herbekommen hätte... :)
 
Zuletzt bearbeitet:
Erzeuge dir ein neues Static und weise ihm "Dungeons\Nordic\Levers\Pullchain\GenPullChain01.nif" als Nif zu.
 
  • Like
Reaktionen: Destero
Die Lösung von Hadrian ist nicht wirklich elegant.
Es wäre einfacher und am Ende auch sauberer, damit man beispielsweise nicht unnötig viele Referenzen erstellen muss, wenn man es mit Variablen und einer kleinen Anpassung der bestehenden Skripte löst. Man müsste wie gesagt keine Vielzahl von Static-Objekte erstellen und platzieren, sondern kann direkt die Activator benutzen. ;)

MfG Master of Worlds
 
  • Like
Reaktionen: kiiin
Ähm... Das mit den Statics und soweiter finde ich auch einwenig umständlich^^.
Ich verstehe jetzt auch nicht ganz wieso das Object unbedingt disabled werden muss, man kann auch die blockactivation() function nehmen ;).
Dieser Skript sollte eigentlich die gewünschten ergebnisse erziehlen, falls ich alles richtig verstanden hab (ist ja auch schon spät^^):
Code:
Event OnLoad()
    if Chain2
        Chain2.Blockactivation()
    EndIf
EndEvent

Event OnActivate(ObjectReference akActionRef)
    if akActionRef == Game.Getplayer()
        If self == Chain1
            Chain2.Blockactivation(false)
            debug.messagebox("chain2 ist nun freigegeben")
        EndIf
    EndIf
EndEvent
 
Die Lösung von Hadrian ist nicht wirklich elegant.
Es wäre einfacher und am Ende auch sauberer, damit man beispielsweise nicht unnötig viele Referenzen erstellen muss, wenn man es mit Variablen und einer kleinen Anpassung der bestehenden Skripte löst. Man müsste wie gesagt keine Vielzahl von Static-Objekte erstellen und platzieren, sondern kann direkt die Activator benutzen. ;)

MfG Master of Worlds

Jop,

ich hatte schon den Verdacht dass das letzten endes komplizierter sein würde als eine wirkliche Skricpt- Lösung.

Aber ich besitze wie bereits erwähnt keine einzige Erfahrung bezüglich des Scriptens, hatte allerdings besagte Idee und wollte Destero nur helfen indem ich meinen Senf dazu gab, zumal ja allgeimeine Ratlosigkeit herrschte ;)

Aber es ist echt gut das Destero jetzt eine "richtige" Scriptlösung hat! :)
 
@Quad2Core
Für Destero würden in deinem Skript wohl noch die ObjectReference-Properties fehlen. An sich habe ich auch mit der Funktion BlockActivation gearbeitet, aber wie gesagt noch eine Variable die bei den Schaltern auf der linken Seite im Skript abgefragt wird. Außerdem habe ich die restlichen Schalter direkt als Properties und kann so direkt zugreifen, anstatt über Parents.
Eine kleine Frage, was erhälst du im If innerhalb deines OnLoad-Event? Da dort nur Chain2 direkt abgefragt wird, frage ich.

Die restlichen Schalter werden so dann auch verwaltet, über die Parentverbindungen oder?

@Hadrian
Eine Idee haben und dies einbringen ist auch gut. Es hat mich nur verwundert, dass hier bis auf Quad2Core scheinbar nur wenige überhaupt etwas von Papyrus verstehen.

MfG Master of Worlds
 
@Master of Worlds
Jo, das mit den Properties hab ich echt vergessen^^.
bei dem IF Chain2 bedeutet soviel wie IF self == Chain2, sprich es guckt einfach nur nach ob die ObjectReference mit der der Property Chain2 übereinstimmt.
Ich hatte einfach nur ein wenig weiter gedacht und wollte einen Script für alle Objekte erstellen, so das man einfach nur diesen Script benutzen muss und nicht für jedes Objekt einen einzelnen Script^^
Also Ungefähr so:
Code:
ScriptName MyScript Extends ObjectReference
;Property's Müssen bei jedem Script auf den [U]Selben[/U] Objekten gelegt werden.
ObjectReference Property FirstChain Auto 
ObjectReference Property Chain1 Auto
ObjectReference Property Chain2 Auto
ObjectReference Property Chain3 Auto
ObjectReference Property Door1 Auto

Event OnLoad()
    if Chain1 
        Chain1.Blockactivation()
    Elseif Chain2
        Chain2.Blockactivation()
    ElseIF Chain3
        Chain3.Blockactivation()
    EndIf
EndEvent

Event OnActivate(ObjectReference akActionRef)
    if akActionRef == Game.Getplayer()
        If self == FirstChain
            Chain1.Blockactivation(false)
            debug.messagebox("chain1 ist nun freigegeben")
        elseif self == Chain1
            chain2.Blockactivation(false)
        elseif self == Chain3
            Door1.SetOpen()
        EndIf
    EndIf
EndEvent

Achja das sollte eigentlich auch mit Event Onactivation funktionieren, also If FirstChain anstatt IF self == firstchain. Da ich das aber noch nicht getestet hab wollte ich auf nummer sicher gehen und da dann doch noch self vorpacken^^

Edit:
Das direckt hierdrüber geschriebene stimmt übringeds nicht. If Chain1 wird zu true wenn das property gesetzt ist. Sprich diese if-sätze stellen nur fest ob die jeweiligen propertys auch gefillt wurde.
 
Zuletzt bearbeitet: