Construction Set "Lauffunktion" disablen

Hiho,

der Wert für die Schnelligkeit darf nur nicht ins negative abrutschen, sonst wird der Effekt ins Gegenteil gedreht. Man bekommt Speed ohne Ende. :lol:

Ausserdem arbeitet Oblivion nicht sauber bei der Berechnung, wenn Mods im Spiel sind, die das Limit auf 100 kappen.

GreeZ,
Suchan
 
Es sollte doch möglich sein, per Script den aktuellen Wert zu bestimmen und zu speichern und dann den Wert einfach auf 10 oder so zu setzen. (also, das der das mit auf 10 setzen geht weiß ich, nur das mit dem merken des aktuellen Wertes weiß ich nicht)
 
Achso. Nun, das ist nicht schwer. Man bräuchte nur folgende Informationen:

Wann/Wie kommt er in das Gebiet. Sprich, ist das Gebiet über mehrere Exteriorzellen definiert oder durch eine Triggerbox, wo der Spieler durch muss? Liegt das Gebiet in einer bestimmten Region, oder kommt man durch eine Tür rein?
 
hm... Also einfach irgendwelche Exteriorzellen?

dann wäre hier die Abfrage GetInCell nützlich. Du nennst also alle Exteriorzellen, die in dem Gebiet liegen, zum Beispiel "BoesesGebiet01", "BoesesGebiet02" usw. dabei sollte der Name "BoesesGebiet" nur für dieses einzigartige Gebiet benutzt werden.

Nun der Script:
Code:
scn Scriptname

short slow
short PlayerValue

Begin GameMode
if (slow == 0 ) && ( player.getincell BoesesGebiet == 1 ) ;schließt alle Zellen, die mit "BoesesGebiet" beginnen, ein
set slow to 1
set player.getav speed to PlayerValue
player.setav speed 20
Elseif ( slow == 1 ) && ( player.getincell BoesesGebiet == 0 )
set slow to 0
player.setav PlayerValue
Endif
End
 
  • Like
Reaktionen: elveon
Was genau ist der Teil, der langsamer macht und wie ist das jetzt geregelt mit der "Widerherstellung"?
 
Du hast Glück, dass Wochenende ist ^^

Also ich zersetze mal den Script in seine Bestandteile.:
Code:
if (slow == 0 ) && ( player.getincell BoesesGebiet == 1 )
Slow ist eine von mir defenierte Variable. Sie dient dazu, um einen sehr schwerwiegenden Fehler zu verhindern. Aber dazu später. Die Abfrage in der zweiten Klammer ist jetzt das Essentielle. Hier wird abgefragt, ob sich der Spieler in einer Zelle befindet, die mit "BoesesGebiet" anfängt. Das könnte zum Beispiel "BoesesGebietSchloss" oder "BoesesGebiet34" sein. "EinBoesesGebiet" würde jedoch nicht funktionieren, da der Name ja nicht unmittelbar mit "BoesesGebiet" beginnt.


Code:
set player.getav speed to PlayerValue
Also bei Scripten und auch in Programmiersprachen wird immer den Variablen auf der rechten Seite ein Wert zugeteilt. Hier wird der variable PlayerValue, die ich vorher definiert habe, der Schnelligkeitswert des Spielers zugewiesen. Also nehmen wir an, der Spieler hat 80 "Speed", dann hat ihn Playervalue nach dieser Zeile auch.

Code:
player.setav speed 20
Nachdem nun der alte Schnelligkeits-Wert des Spieler in einer Variable gespeichert wurde, können wir nun die Schnelligkeit des Spieler getrost auf 20 setzen. Somit wird er langsamer.

Code:
set slow to 1
Das, was eigentlich zuerst nach der If-abfrage kam, erkläre ich hier erst zuletzt. Denn die Variable dient dazu, dass der Spieler nicht ewig 20 Geschwindigkeit besitzt. Würden wir die "Slow"-variable weglassen, würde alles im If-block ausgeführt, solange der Spieler in den Cells ist. Also würde in dem Fall "set player.getav speed to PlayerValue" wieder ausgeführt werden. Da Aber der Geschwindigkeitswert schon 20 ist, würde die Variable "PlayerValue" auch den Wert 20 erhalten und ein Zurücksetzen auf den alten Wert wäre unmöglich.

Code:
Elseif ( slow == 1 ) && ( player.getincell BoesesGebiet == 0 )
Nun, die Variable Slow ist jetzt 1. Dabei ist nichts besonderes. Die Abfrage in der zweiten Klammer fragt nun ab, ob der Spieler nicht in den Zellen ist, die mit "BoesesGebiet" anfangen. Das liegt an der 0 ganz hinten.

Code:
Set slow to 0
player.setav PlayerValue
Jetzt kommt die Wiederherstellung des alten Wertes. dabei muss slow wieder auf 0 gesetzt werden, damit das Langsamwerden auch wieder funktioniert, wenn der Spieler ein zweites oder drittes mal das Gebiet betritt.
der letzte Befehl nun (Mir ist was aufgefallen!), setzt die Geschwindigkeit wieder auf den alten Wert. Aber sicher ist dir was aufgefallen: Speed fehlt. Es müsste so heißen:
Code:
player.setav speed PlayerValue
Bitte ändere das noch in deinem Script, das habe ich übersehen. Diese Zeile setzt einfach den Geschwindigkeitswert auf den ursprünglichen: PlayerValue.

Endif beendet jetzt den If-block und End den GameMode-block.

MfG Gildur
 
  • Like
Reaktionen: elveon
Super vielen Dank Meister ;)

Vor allem für das aufdröseln. Hast du das studiert? Oder wieso bist du so gut?

Funktioniert aber irgendwie noch nicht?! Ich habe meine Cells alle mit einem NirnaethEruProlog versehen, aber er sagt "Item Nirnaeth Eru not found for parameter Cell", was heißt das?
 
  • Like
Reaktionen: Gildur
Also du hast schon zusammen geschrieben?
also NirnaethEru01, NirnaethEru02, NirnaethEru3 usw. und im Script dann entsprechend:
Code:
if ( slow == 0 ) && ( player.getinCell NirnaethEru == 1 )
mir ist gerade was aufgefallen:
CS-Wiki schrieb:
Notes:

* The CellName has to be a valid interior cell name. Exterior cells will not work. In some cases, it is necessary to create a "dummy" interior cell (e.g. Chorrol) in order to use GetInCell for a set of related interior and exterior cells (e.g. all the ChorrolXXX cells).
Also in manchen Fällen ist es nötig, eine "dummy"-Cell zu erstellen, damit es auch für Exteriors funktioniert. Würde evtl. bestimmte dummy-cells von standard-Oblivion erklären. Also versuch es mal so, dass du noch einen Interior erstellst, den du NirnaethEru nennst.

Ach ja, deine fehlermeldung bedeutet, dass er den Parameter, also das Ziel "Nirnaeth Eru" nicht findet. Mit dem Interior-cell sollte das behoben sein.

MfG Gildur
 
  • Like
Reaktionen: elveon
Das heißt ich mache jetzt eine Cell die NirnaethEruProlog heißt und sonst nichts? Bzw, ihm fehlt in Zeile 9 ein "to"

Code:
scn NEPGRABUNGlaufgeschw

short slow
short PlayerValue

Begin GameMode
if (slow == 0 ) && ( player.getincell "NirnaethEruProlog" == 1 ) ;schließt alle Zellen, die mit "BoesesGebiet" beginnen, ein
set slow to 1
set player.getav speed to PlayerValue
player.setav speed 20
Elseif ( slow == 1 ) && ( player.getincell "NirnaethEruProlog" == 0 )
set slow to 0
player.setav PlayerValue
Endif
End
 
Code:
scn NEPGRABUNGlaufgeschw

short slow
short PlayerValue

Begin GameMode
if (slow == 0 ) && ( player.getincell NirnaethEruProlog == 1 ) ;schließt alle Zellen, die mit "BoesesGebiet" beginnen, ein
set slow to 1
set player.getav speed to PlayerValue
player.setav speed 20
Elseif ( slow == 1 ) && ( player.getincell NirnaethEruProlog == 0 )
set slow to 0
player.setav [B][COLOR="Red"]speed[/COLOR][/B] PlayerValue
Endif
End
 
Und da fällt es mir wie Schuppen von den Augen.

Code:
scn NEPGRABUNGlaufgeschw

short slow
short PlayerValue

Begin GameMode
if (slow == 0 ) && ( player.getincell NirnaethEruProlog == 1 ) ;schließt alle Zellen, die mit "BoesesGebiet" beginnen, ein
set slow to 1
set PlayerValue to player.getav speed
player.setav speed 20
Elseif ( slow == 1 ) && ( player.getincell NirnaethEruProlog == 0 )
set slow to 0
player.setav speed PlayerValue
Endif
End
Vorhin habe ich es falsch erklärt und falsch aufgeschrieben. Der Wert ganz links ist der, der verändert wird.

MfG Gildur
 
  • Like
Reaktionen: elveon
Vielen dank.

Aber ich stelle mich hinter "Low post". Der ist der wahre Meister. Man könnte meinen, er hätte alle Befehle selbst erstellt.