Hallo. Wieder mal ist der Vampir auf der Suche nach Skripts und hat leider keine Ahnung davon.
Ich brauche 2 Stück :
1.
Das Skript soll nur auftreten , wenn der Spieler Vampir ist. Es soll aktiviert werden , wenn man sich UNGESEHEN hinter einem NPC in schleichposition befindet. Nun könnte man ja normalerweise Taschendiebstahl. Da soll aber eine Messagebox kommen "Was wollt ihr tun? Und dann "Taschendiebstahl oder Blutsaugen" bei letzterem soll abhängig vom Schleichwert des Spielers (mit Boni) in % festgelegt werden , ob es klappt. Wenn es funktioniert soll einfach der übliche "Euer Hunger auf Blut ist gestillt....für den Moment" Message kommen und der Spieler wieder auf Vampirstufe 25 zurückgesetzt. Bei Fehlschlag soll genau das selbe passieren , wie wenn man beim Taschendiebstahl erwischt wird. Klar dass man , wenn man Taschendiebstahl wählt , normal Taschendiebstahl macht.
2.
Das Skript soll nur aktiviert werden wenn der Spieler die Eigenschaft "ZZZvampireinstinct" hat.Sobald er nur noch 10%(oder weniger) seiner Maximalen Lebensenergie(mit Boni) hat , soll er den Buff "ZZZvampireInstinctpowers" bekommen und außerdem soll er seine momentan angelegte Waffe ablegen(nicht wegwerfen oder zerstören oder so , nur ablegen) und er soll für die Dauer des Effekts keine Waffen anlegen können. Der Effekt soll abklingen sobald der Spieler wieder mehr HP hat als 10%
Dann soll der Buff "ZZZvampireinstinctpowers" wieder entfernt werden und der Spieler soll wieder Waffen anlegen können. Die Eigenschaft "ZZZvampireinstinct" soll unverändert bleiben.
Ich fürchte, die Scripte wirst du nicht bekommen. Denn es gibt sie meines Wissens nach noch nicht. In dem Fall mußt du sie selbst schreiben -> http://cs.elderscrolls.com/constwiki....php/Main_Page <- da findest du diverse Tutoriale.
Das Problem an deinem Scriptwunsch ist, daß es einfacher wäre, während eines Sturms brennende Teddybären regnen zu lassen, die beim Aufprall in Melonen zerplatzen.
Ein Script alleine reicht nicht, es muß auch laufen. Gleichzeitig sollte es aber auch nur laufen, während es benötigt wird. Und hier beginnt das Problem... was damit weitergeht, daß manche Sachen die du willst nur mit sehr komischen Scriptumgehungen möglich sind. Sehr aufwendig.
1. Die Bedingungen sind einfach (IsSneaking == 1, GetDetected == 0, et cetera), viel problematischer ist aber das neue Auswahlmenü. Ehrlich gesagt habe ich keine Idee, wie man daran kommen kann ohne sämtlichen NPCs ein Script zu verpassen.
2.
float threshold
short vi
set threshold to player.getav health
set threshold to threshold / 10.0
if player.getav health < threshold && vi != 1
; code
set vi to 1
endif
if vi == 1 && player.getav health > threshold
; code
set vi to 0
endif
Jetzt mußt du nur noch den Code für die Waffen finden. Imho eine Unmöglichkeit - es gibt zwar ein unequipbefehl, aber den müßtest du für *jede* Waffe einbauen - *und* der würde nicht für PlugIn-Waffen gelten. Soweit ich das sehe, wäre das vernünftig nur mit OBSE möglich.
Puh ,ist das kompliziert , das lass ich lieber sein und verzichte auf die Scripte.
Aber eine andere Scriptfrage , die vermutlich leichter zu erfüllen ist : Was für ein Script muss ich an eine Truhe hängen , damit ihr jeden Tag ein bestimmtes Item hinzugefügt wird.(Jeden Tag das selbe)
Aber eine andere Scriptfrage , die vermutlich leichter zu erfüllen ist : Was für ein Script muss ich an eine Truhe hängen , damit ihr jeden Tag ein bestimmtes Item hinzugefügt wird.(Jeden Tag das selbe)
...
Setz sie einfach auf Respawn und füge das gewünschte Item in.
Ansonsten müßtest du dir mal das Script der Alchemietruhe im Erzmagierzimmer anschauen .
Hab auf die schnelle und mit Blick auf das Truhen-Script der Erzmagiertruhe folgendes Script geschrieben und an die Truhe gehängt :
Zitat
Scn ZZZscriptfuertruhe
begin gamemode
short startday
short dayspassed
additem lockpick 1
end
...
Aber irgendwie füllt es die Truhe dauenrt mit Items auf und nicht mal in der richtigen Menge! Weiss jemand , was da nicht passt?Mit respawn will ich`s net machen.
Also zuerst mal müssen die Variablen afaik vor das begin gamemode.
2. muss da noch eine if-Abfrage rein, denn momentan wird dein Skript in jedem frame ausgeführt, womit pro frame 1 Dietrich der Truhe hinzugefügt wird. Außerdem: was nützen dir die Variablen, wenn du sie weder veränderst, noch irgentwo abfragst?
3. würde ich das ganze als Questskript (einer unsichtbaren Quest) machen, da es bei deiner Lösung (Skript auf Truhe) nur arbeiten würde, wenn der Spieler in der Nähe der Truhe ist. Nachteil ist halt, dass dann die ganze Zeit im Hintergrund ein Skript läuft, was evtl. die Performance belastet.
Probier mal dieses Skript:
Da jetzt in deiner Truhe soviele "Mein Item"s liegen würden wie Tage vergangen sind würde ich deiner Truhe noch folgendes Skript hinzufügen:
Zusätzlich musst du noch jeder if-Abfrage im obigen Skript noch folgendes anhängen (Code kopieren; Achtung: Leerzeichen am Anfang):
&& ( MeineTruheScript.discovered == 1 )
scn MeineTruhenAuffüllScript
short olddayVAR
short dayVAR
short done
begin gamemode
if ( done == 0 ) && ( MeineTruheScript.discovered == 1 )
set olddayVAR to getdayspassed
set dayVAR to getdayspassed
;ich bin mir jetzt aber nicht sicher, ob es diese Funktion gibt und das CS-Wiki ist momentan leider down
set done to 1
if ( done == 1 ) %% ( dayVAR == olddayVAR ) && ( MeineTruheScript.discovered == 1 )
;kann man das so abfragen?
set dayVAR to getdayspassed
set done to 2
if ( done == 2 ) && ( dayVAR > olddayVAR ) && ( MeineTruheScript.discovered == 1 )
;kann man das so abfragen?
meineTruhe.additem MeinItem 1
set done to 1
set olddayVAR to getdayspassed
endif
end
Da ich jetzt aber selbst nicht so der große Skripter bin gebe ich keine Garantie darauf, das alles funktioniert (Wie in den Kommentaren gesagt: ich bin mir nicht sicher, dass es alle Befehle gibt, die ich verwende, noch, dass alle if-Abfragen funktionieren). Mach eine Sicherheitskopie deiner *.esp und dann einfach aufprobieren. Mehr als schiefgehen kann's eigentlich nicht. Obwohl, bei Oblivion weiß man eigentlich nie...
--
Ich kam, sah, und konnte meinen Augen nicht trauen
Also zuerst mal müssen die Variablen afaik vor das begin gamemode.
2. muss da noch eine if-Abfrage rein, denn momentan wird dein Skript in jedem frame ausgeführt, womit pro frame 1 Dietrich der Truhe hinzugefügt wird. Außerdem: was nützen dir die Variablen, wenn du sie weder veränderst, noch irgentwo abfragst?
3. würde ich das ganze als Questskript (einer unsichtbaren Quest) machen, da es bei deiner Lösung (Skript auf Truhe) nur arbeiten würde, wenn der Spieler in der Nähe der Truhe ist. Nachteil ist halt, dass dann die ganze Zeit im Hintergrund ein Skript läuft, was evtl. die Performance belastet.
Probier mal dieses Skript:
scn MeineTruhenAuffüllScript
short olddayVAR
short dayVAR
short done
begin gamemode
if ( done == 0 )
set olddayVAR to getdayspassed
set dayVAR to getdayspassed
;ich bin mir jetzt aber nicht sicher, ob es diese Funktion gibt und das CS-Wiki ist momentan leider down
set done to 1
if ( done == 1 ) && ( dayVAR == olddayVAR )
;kann man das so abfragen?
set dayVAR to getdayspassed
set done to 2
if ( done == 2 ) && ( dayVAR > olddayVAR )
;kann man das so abfragen?
meineTruhe.additem MeinItem 1
set done to 1
set olddayVAR to getdayspassed
endif
end
Da jetzt in deiner Truhe soviele "Mein Item"s liegen würden wie Tage vergangen sind würde ich deiner Truhe noch folgendes Skript hinzufügen:
scn MeineTruheScript
Short discovered
Begin OnActivate
if ( discovered == 0 )
set discovered to 1
Activate
else
Activate
endif
end
Zusätzlich musst du noch jeder if-Abfrage im obigen Skript noch folgendes anhängen (Code kopieren; Achtung: Leerzeichen am Anfang):
&& ( MeineTruheScript.discovered == 1 )
scn MeineTruhenAuffüllScript
short olddayVAR
short dayVAR
short done
begin gamemode
if ( done == 0 ) && ( MeineTruheScript.discovered == 1 )
set olddayVAR to getdayspassed
set dayVAR to getdayspassed
;ich bin mir jetzt aber nicht sicher, ob es diese Funktion gibt und das CS-Wiki ist momentan leider down
set done to 1
if ( done == 1 ) %% ( dayVAR == olddayVAR ) && ( MeineTruheScript.discovered == 1 )
;kann man das so abfragen?
set dayVAR to getdayspassed
set done to 2
if ( done == 2 ) && ( dayVAR > olddayVAR ) && ( MeineTruheScript.discovered == 1 )
;kann man das so abfragen?
meineTruhe.additem MeinItem 1
set done to 1
set olddayVAR to getdayspassed
endif
end
Da ich jetzt aber selbst nicht so der große Skripter bin gebe ich keine Garantie darauf, das alles funktioniert (Wie in den Kommentaren gesagt: ich bin mir nicht sicher, dass es alle Befehle gibt, die ich verwende, noch, dass alle if-Abfragen funktionieren). Mach eine Sicherheitskopie deiner *.esp und dann einfach aufprobieren. Mehr als schiefgehen kann's eigentlich nicht. Obwohl, bei Oblivion weiß man eigentlich nie...
...
Wow , die Welt des Scriptings ist ja wahnsinnig kompliziert!
Leider erkennte das CS den befehl discovered nicht an.
EDIT : Vielleicht könnte man einen andere Befehl machen , zb ob der Spieler einen bestimmten Hebel umgelegt hat oder ob der die Truhe schonmal aktiviert hat?
Also zuerst mal müssen die Variablen afaik vor das begin gamemode.
...
Müssen tun sie nicht. Im Prinzip müssen Variablen lediglich vor ihrer Verwendung deklariert sein. Aber es ist guter Programmierstil und hat sich der besseren Übersichtlichkeit halber so eingebürgert, Variablen zu Beginn anzugeben.
Zitat
3. würde ich das ganze als Questskript (einer unsichtbaren Quest) machen, da es bei deiner Lösung (Skript auf Truhe) nur arbeiten würde, wenn der Spieler in der Nähe der Truhe ist. Nachteil ist halt, dass dann die ganze Zeit im Hintergrund ein Skript läuft, was evtl. die Performance belastet.
...
Meiner Ansicht und auch Erfahrung nach, wird der Performance-Einfluss von Skripten häufig überbewertet. Ich arbeite schon lange Zeit an einer Mod mit vielen, wirklich sehr vielen und langen Skripten. Einige dicke Brummer müssen nochdazu ständig laufen. Wenn ich mir die Situation im Scriptprofiler anschaue, verursachen die Skripte die meiste Zeit gerade mal so um die 1 bis 2% Prozessorauslastung. Wenn's hoch kommt auch schon mal mehr. Das sind dann Situationen, in denen rechenintensive Funktionen zum tragen kommen, wie z.B. GetLineOfSight. Doch dabei handelt es sich um Ausnahmen. Questskripte, die (in der Grundeinstellung) alle 5 Sekunden einmal laufen, kann man imho ganz vernachlässigen, sofern man nicht gerade hunderte davon laufen hat.
Womit ich natürlich nicht sagen möchte, dass man sich nicht trotzdem darum bemühen sollte, seine Skripte so effizient wie möglich zu schreiben. Hier bei der Kiste etwa bräuchte es eigentlich weder ein Questskript (bzw. einen GameMode-Block im Skript der Kiste). Man könnte im OnActivate-Block ausrechnen, wieviele Gegenstände seit dem letzten Öffnen der Kiste hinzugekommen sind. Ungefähr so müsste es klappen (aber ungetestet):
scn KistenSkript
short LastDay
short CurrentDay
short DoOnce
short Count
begin OnActivate
if DoOnce == 0
set DoOnce to 1
set LastDay to GameDaysPassed
AddItem Lockpick 1
endif
set CurrentDay to GameDaysPassed
set Count to CurrentDay - LastDay
AddItem Lockpick Count
set LastDay to CurrentDay
activate
end
Beim allerersten Öffnen wird ein Dietrich in die Kiste gelegt (könnte man natürlich auch schon im CS machen) und die "Zeitmessung" initialisiert. Später werden dann jeweils soviele neue Dietriche in die Kiste gelegt, wie Tage seit dem letzten Öffnen vergangen sind. Wenn die Kiste eine größere Anzahl von Dietrichen pro Tag produzieren soll, müsste man Count noch mit der entsprechenden Menge multiplizieren.
Wow , die Welt des Scriptings ist ja wahnsinnig kompliziert!
Leider erkennte das CS den befehl discovered nicht an.
EDIT : Vielleicht könnte man einen andere Befehl machen , zb ob der Spieler einen bestimmten Hebel umgelegt hat oder ob der die Truhe schonmal aktiviert hat?
...
Also discovered soll kein Befehl sein, sondern eine Variable, die beim ersten aktivieren(discovered == 0 ) auf 1 gestetzt wird.
Beim compilieren (=speichern) welches Skripts gibt er denn die Fehlermeldung aus?
Edit:
OK, nimm das Skript von Brausebart, der scheint sich da besser auszukennen.
--
Ich kam, sah, und konnte meinen Augen nicht trauen