Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum

The Elder Scrolls
Arena
Daggerfall
Spin-offs
Romane
Jubiläum
Reviews
Welt von TES
Lore-Bibliothek
Namens-
generator

FRPGs

Elder Scrolls Online
Allgemein
Fraktionen
Charakter
Kargstein
Technik
Tamriel-
Manuskript

Media

Skyrim
Allgemein
Lösungen
Tipps & Tricks
Steam-Kniffe
Review
Media
Plugins & Mods

Oblivion
Allgemein
Lösungen
Tipps & Tricks
Technik
Charakter
Media
Plugins & Mods
Kompendium

Morrowind
Allgemein
Lösungen
Tipps & Tricks
Media
Plugins & Mods

Foren
The Elder Scrolls Online
Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins & Mods

Ältere TES-Spiele
TES-Diskussion
Oblivion-Plugins
Morrowind-Plugins

Community
Taverne zum Shalk
Adventures of Vvardenfell
Tales of Tamriel
Ergebnis 1 bis 14 von 14

Thema: Kleines Scriptproblem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Kleines Scriptproblem

    Ich bin gerade dabei mich ein bisschen mit Moden zu beschäftigen(genauer gesagt bastle ich gerade an einer kleinen Hausmod herum)

    Und ich bin gerade dabei die Trainingshalle einzurichten. Jetzt habe ich das Problem, das das Script nicht das macht, was es eigentlich tun soll. Und zwar die Truhe beim Aktivieren wieder verschließen. Leider tut es das nicht. Stattdessen ist die Truhe gar nicht verschlossen(hat im CS ein Schweres Schloss) und lässt sich auch nicht aktivieren. Außerdem habe ich keine Ahnung, ob und wie ich das Öffnen der Kiste verhindern kann. Und wie ich es hinbekomme, das die Kiste danach sofort wieder verschlossen ist.

    Das hier ist die Funktion, die die Truhe wieder verschließen soll, was es aber nicht tut.

    Code:
    Begin OnActivate
    	if GetLocked == 0 
    	Lock 99;
    	endif;
    End
    Falls jemand einen Tipp oder eine Lösung für das Problem hat währe ich sehr dankbar.

  2. #2
    Wegen dem aktivieren, sobald du ein Script verwendest bei z.B Tür oder Container

    Zitat Zitat
    Beachte, das dieses die normale Aktivierung des Objektes verhindert. Um die Standard-Aktivierung des Objektes wieder herzustellen, mußt du ACTIVATE darauf ausführen.

  3. #3
    Danke für den Hinweiß, Rosebud, aber leider hilft mir das bei meinen Problem nicht weiter. Zwar geht die Kiste jetzt auf, allerdings ist sie nicht verschloßen und muss nicht mit dem Dietrich geöffnet werden.

  4. #4
    Versuch mal folgendes:
    Code:
    Begin OnActivate
    	Lock 99
    	Activate
    End

  5. #5
    Klappt leider auch nicht. Anscheinend verhindert alleine schon das legen eines Scriptes auf einen Gegenstand das Verschließen des Gegenstandes.

    Jetzt bin ich auf die Idee gekommen, das verschließen von einem Questscript machen zu lassen(das immer wieder ausgeführt wird, sobald die Truhe geöffnet wird).
    Leider funktioniert das aber auch nicht.
    Bei meiner Truhe habe ich die Referenz Editor ID eingetragen und den Haken bei Persistenter Referenz gesetzt (Genau wie bei der Questtüre für die Magiergilde in der Festung Blaublut), sobald ich die Referenz in einem Befehl verwende meldet er mir, das er den Befehl nicht gefunden hat und ohne Referenz meldet er, das ich eine Referenz eintragen soll. Habe ich irgendeinen Punkt übersprungen oder woran liegt das?
    Es macht hier übrigens keinen Unterschied, ob den Befehl in einer Questscript verwende oder ob ich ihn bei einer Queststage als Resultscript verwende.

    Anbei noch mal der Befehl:
    Code:
    000eisLockChest.lock 99;
    000eisLockChest ist die bei der Kiste eingetragene Referenz Editor ID.

  6. #6
    Vielleicht hilft Dir das hier weiter.

    Im Grunde macht der dort beschriebene Container das was du willst. Das Script ist im Grunde recht gut erklärt, allerdings auf Englisch.

  7. #7
    Das Problem sind die Zahlen am Anfang.
    Bei Referenzen löscht das CS die automatisch raus oder irgendwie sowas. Verwende stattdessen AAA, dann erscheinen die auch am Anfang der Liste und das CS akzeptiert sie ohne Probleme.



    Und was mein Script angeht: bei mir hat das ohne Probleme funktioniert, bei Aktivierung (gut, nur per Konsole via Activate Player 1 da ich zu faul war ein Mesh zuzuweisen, das wirkt aber wie eine normale Aktivierung) öffnet sich das Schossknacken-Menü.
    Ingame wird das aber nicht angezeigt, da das Script natürlich erst beim Öffnen ausgeführt wird und wenn man das Schloss dann knackt ist der Container natürlich nicht mehr verschlossen.
    Dafür ist dann ein Gamemode-Block nötig. Du könntest ja auch mal den hier versuchen:
    Code:
    Begin Gamemode
     if ( GetLocked == 0 )
      Lock 99
     endif
    End

  8. #8
    Danke für die Hinweise, aber ich habe jetzt eine Lösung für das Problem gefunden.
    Anstelle von einem Container verwende ich jetzt eine Tür ohne Ziel(dann muss ich das Öffnen des Containers auch nicht mehr abfangen). Irgendwie funktionert das erste Script von Low Post bei der Türe ohne Probleme während es bei der Truhe keine Wirkung zeigt.
    Ich vermute, das das irgendwie damit zusammenhängt, das ich die Truhe in einer Zelle die dem Spieler gehört platziert habe, außerhalb dieser Zelle und bei Türen funktionert das Script einwandfrei.
    Übrigens kann man das verschließen auch in das OnActivate mit reinmachen, nach dem Aktivieren, dann wird die Tür/Truhe danach immer gleich wieder verschloßen.

    Nochmals Danke für eure Hilfe

  9. #9
    Der Mod nähert sich langsam aber sicher der Fertigstellung. Allerdings tauchten jetzt noch ein paar kleine Probleme auf.

    Ich habe das Verschließescript jetzt noch mal um die Möglichkeit, die Stärke des Schlosses zu ändern, erweitert. Außerdem habe ich Trainingselytra eingefügt, die ich über Script Steuern möchte. Und für beides benötige ich Messageboxen, die aber nicht funktionieren. Hier die aktuelle Version des Verschließescripts. Es so zu erstellen wie hier im Scriptingtutorial habe ich schon versucht, aber das hat auch nichts geholfen(möglicherweise weil es bei dem Tutorial in einem Zauberspruch verwendet wird).
    Code:
    scn 000eisLockscript
    
    int Entscheidung 
    
    begin onActivate
    	if player.isSneaking == 1
    			MessageBox "Wie schwer soll die Tür verschlossen sein?", "Sehr schwer", "Schwer", "Mittel","Leicht","Sehr leicht"
    			Set Entscheidung to GetButtonPressed
    			if Entscheidung == 1
    				lock 80
    			elseif Entscheidung == 2
    				lock 40
    			elseif Entscheidung == 3
    				lock 20
    			elseif Entscheidung == 4
    				lock 7
    			else
    				lock 99
    			endif
    		endif
    	else
    		Activate
    		Lock
    	endif
    end
    2. Wie schon erwähnt wird die Trainingselytra ebenfalls per Script gesteuert. Während die Funktionen zum Beginnen und Beenden des Kampfes und zum Ausräumen der Pfeile funktionieren habe ich keine Ahnung wie ich ihn dazu bringen soll auf seine Startposition zu gehen, sich nicht zu bewegen und Angriffe zu ignorieren. Eventuell könnte ich dazu auch noch eine zweite Trainingselytra einfügen, die nur als Zielscheibe dient, allerdings müsste ich auch dazu wissen, wie ich sie dazu bekomme unter Beschuss still zu sitzen.

    3. Meine Händlerin trägt tagsüber eine Rüstung und nachts und beim Essen normale Kleidung. Und die Sachen, die sie aktuell nicht trägt verkauft sie. Ist es möglich das Verkaufen der Items im Inventar(ohne erstellen von unspielbaren Kopien der Rüstung/Kleidung/Waffen) zu unterbinden?

    Danke schon mal für euere Hilfe

  10. #10
    Hi,
    GetBUttonPressed geht nicht in einem OnActivate block. Dieser Weißheit hatte mich mal Low Post gelehrt. xD
    Also müsstest du einen 2 Block einfügen, einen GameMode.

    Code:
    scn 000eisLockscript
    
    short DoOnce
    int Entscheidung 
    
    begin onActivate
    	if (DoOnce == 0)
                            Set DoOnce to 1
            endif
    end
    
    Begin GameMode
    If (DoOnce == 1)
       	if (player.isSneaking == 1)
    			MessageBox "Wie schwer soll die Tür verschlossen sein?", "Sehr schwer", "Schwer", "Mittel","Leicht","Sehr leicht"
    			Set Entscheidung to GetButtonPressed
    			if Entscheidung == 1
    				lock 80
    			elseif Entscheidung == 2
    				lock 40
    			elseif Entscheidung == 3
    				lock 20
    			elseif Entscheidung == 4
    				lock 7
    			else
    				lock 99
    			endif
    		endif
    	else
     		Activate
    		Lock
    	endif
           Set DoOnce to 0
    end

  11. #11
    Eher nicht, da ist immer noch keine Absicherung für den Fall drin, dass GetButtonPressed nicht sofort den richtigen Wert annimmt.

    Code:
    scn 000eisLockscript
    
    int Entscheidung 
    int Menu
    
    begin onActivate
    	if player.isSneaking
    		MessageBox "Wie schwer soll die Tür verschlossen sein?", "Sehr schwer", "Schwer", "Mittel","Leicht","Sehr leicht"
    		Set Entscheidung to GetButtonPressed
    		set Menu to 1
    	else
    		Activate
    		Lock
    	endif
    end
    
    Begin Gamemode
    	if Menu
    		if Entscheidung == -1
    			set Entscheidung to GetButtonPressed
    			Return
    		elseif Entscheidung == 0
    			lock 80
    		elseif Entscheidung == 1
    			lock 40
    		elseif Entscheidung == 2
    			lock 20
    		elseif Entscheidung == 3
    			lock 7
    		else
    			lock 99
    		endif
    		set Menu to 0
    	endif
    End
    Außerdem hattest du ein Endif zu viel drin (heißt: Activate & Lock-Befehl wurden immer ausgeführt). Und du solltest dich daran gewöhnen, dass man eigentlich immer mit 0 zu Zählen beginnt (heißt: bei der erste Antwortmöglichkeit gibt GetButtonPressed 0 aus, bei der zweiten 1, etc.).
    Geändert von Low Post (15.03.2009 um 19:17 Uhr)

  12. #12
    Danke für die Hinweise. Dein Script funktioniert zwar immer noch nicht richtig, allerdings hat es mich auf eine Idee gebracht, wie ich das Script umschreiben kann, damit es funktioniert. Jetzt sieht es so aus. Und noch ein Hinweis für alle, die etwas Ähnliches machen wollen: Die Tür darf sich nicht ans Spielerlevel anpassen, da sonst das Spielerlevel auf die per Script zugewiesenen Werte addiert wird und das Script somit nicht mehr funktioniert. Es hat einige Zeit gedauert bis ich darauf gekommen bin, das das die Ursache für die falschen Locklevel mit der angepassten Variante sein könnte.
    Code:
    scn 000eisLockscript
    
    short DoOnce
    int Entscheidung 
    
    begin onActivate
    	if (player.isSneaking)
    		if (DoOnce == 0)
    			MessageBox "Wie schwer soll die Tür verschlossen sein?", "Sehr schwer", "Schwer", "Mittel","Leicht","Sehr leicht"
                   Set DoOnce to 1
    		endif
    	else
     		Activate
    		Lock
    	endif
    end
    
    Begin GameMode
    If (DoOnce)
           Set DoOnce to 0
    			Set Entscheidung to GetButtonPressed
    			if Entscheidung == 0
    				lock 99
    			elseif Entscheidung == 1
    				lock 80
    			elseif Entscheidung == 2
    				lock 40
    			elseif Entscheidung ==3
    				lock 20
    			elseif Entscheidung == 4
    				lock 7
    			else
    				 Set DoOnce to 1
    			endif
    		endif
    end
    Edit: Ich glaube ich nehme doch die Variante von Low Post, da die etwas performanter sein dürfte.
    Geändert von Low Post (15.03.2009 um 19:18 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •