Construction Set Skriptthread zum Construction Set

Nein, die ID habe ich nicht genommen. Die lautet nämlich AWDDaemon01. Ich habe den Namen genommen, also das, was wir im NPC-Fenster unter Name schreiben.
Aber vielleicht liegt es doch an den Umlauten. Ich versuch's mal ohne Umlaute.



Edit:

Auch nach Umbenennung des NPC bzw. Weglassen der Umlaute immer noch Fehlermeldung, und danach stürzt regelmäßig das CS ab.
 
Zuletzt bearbeitet:
Der oben angegebene Skriptbefehl ist ohne Murren vom CS angenommen worden. Aber irgendwie läuft es nicht rund. Der NPC tut nicht das, was er soll. Vielleicht kann man es auf andere Weise lösen.

Situation ist folgende:

Player betritt einen Ort, NPC kommt auf den Player zu, Player-Controls werden disabled, NPC spricht zum Player ein paar Sätze, dann soll ein Creature den Player angreifen. Player tötet das Creature, daraufhin greift der NPC den Player an, Player tötet ihn und neue Stage wird geschaltet.

Bisher liegt auf dem NPC folgendes Skript:
PHP:
scn Skriptname

short doonce

begin GameMode

if GetInSameCell Player == 1
	if GetDistance Player < 100
		if doonce == 0
			enable
			StartConversation Player
			DisablePlayerControls
			set doonce to 1
		endif
	endif
endif
end


Short DoOnce

Begin OnDeath  
     If DoOnce == 0 
        if getstage "00AriellesWeyeDorfVergessenerSchrein" == 235
             SetStage "00AriellesWeyeDorfVergessenerSchrein" 240
           Set DoOnce to 1
        Endif
    Endif
End

Aber irgendwie startet die Conversation nicht. Der Teil mit dem Creature muss auch noch eingefügt werden.
Wie würdet ihr das machen?
 
a) Du benutzt doonce und DoOnce für zwei Dinge! Die Groß- und Kleinschreibung ist fürs CS egal. Benutze daher mal DoOnce01 und DoOnce02. Sonst kann es da Probleme geben.

b) Ich würd die Variablen ganz oben deklarieren.

c) Vielleicht hilft es was, einen Frame zwischen Enable und StartConversation zu warten. Mach mal nur Enable und Set DoOnce To 1 und im Anschluss direkt nen Elseif ( DoOnce == 1 ) und dort den ganzen Rest. Vielleicht hilfts.

d) Wegen dem Kampf: Mach noch SetAv Aggression 100. Dann sollte er auf jeden Fall kämpfen!

e) Wo wird die PlayerControl eigentlich wieder enabled??
 
OK, noch ein Versuch. Abspeichern liess es sich ohne Fehlermeldung. Kannst du mir noch den Teil mit der Creature einfügen?

PHP:
scn Skriptname

short DoOnce01
short DoOnce02

begin GameMode

if GetInSameCell Player == 1
	if GetDistance Player < 100
		if DoOnce01 == 0
			enable
			StartConversation Player
			DisablePlayerControls
			set DoOnce01 to 1
			EnablePlayerControls
			setAV Aggression 100
			elseif (DoOnce01 == 1)
		endif
	endif
endif
end


Begin OnDeath  
     If DoOnce02 == 0 
        if getstage "00AriellesWeyeDorfVergessenerSchrein" == 235
             SetStage "00AriellesWeyeDorfVergessenerSchrein" 240
           Set DoOnce02 to 1
        Endif
    Endif
End
 
Hey Leute.
Ich möchte für eine Mod das Portal nutzen, welches Martin gegen Ende der Hauptquest zu Camorans Paradies öffnet.
Das Duplikat zu bearbeiten hat aber nicht ausgereicht, daher nehme ich an, dass es skriptgesteuert aktiviert und am leben erhalten wird.

Habe mir das Originalskript angesehen und verstehe nur Bahnhof.

PHP:
scn MQ15PortalSCRIPT

short stage
short next
float timer

ref mySelf
ref myParent

begin onLoad

	; set up ref vars
	set mySelf to getSelf
	set myParent to getParentRef

end

begin onActivate
	
	if stage == 0 && isActionRef MQRitualDrawingRef == 1
	
		playgroup equip 0
		set stage to 1
		set next to 1
		set timer to 10

	elseif stage == 2 && isActionRef MQRitualDrawingRef == 1
		setdestroyed 1
		playgroup unequip 0
		set stage to 0

	elseif isActionRef player == 1
		activate

	endif

end

begin gameMode

	if stage == 1 && isAnimPlaying == 0
		set stage to 2
		playgroup forward 0
	endif

	; daisy-chain
	if next == 1 && timer <= 0
		myParent.activate mySelf 1
		set next to 0
	endif

	if timer > 0
		set timer to timer - getSecondsPassed
	endif

end

Was davon kann ich nutzen, was muss abgeändert werden, ist überhaupt ein Skript sinnvoll oder gibt es probleme mit der Spielmechanik?

Würde vielleicht ein einfaches begin onLoad; activate reichen (und wie schreibt man es korrekt)?

LG, Van
 
So wie ich das verstehe, läuft es so ab.
Code:
playgroup equip 0
        set stage to 1
        set next to 1
        set timer to 10

Diese Animation lässt das ganze starten.
Danach geht es im GameMode-Block hierüber weiter.
Code:
    if stage == 1 && isAnimPlaying == 0
        set stage to 2
        playgroup forward 0
    endif
    if timer > 0
        set timer to timer - getSecondsPassed
    endif

Falls das Tor am Ende noch mal kollabieren soll, brauchst du:
Code:
setdestroyed 1
        playgroup unequip 0
        set stage to 0

=> Es gibt 3 Animationen in der NIF
- Equip: Startet alles
- Forward: Führt die Animation fort
- Unequip: Lässt das Tor kollabieren
Das jetzt aber nur hypothetisch. Ich hab die NIF grad net vorliegend!
 
  • Like
Reaktionen: Ehemaliger Benutzer
Ich würd in den Resultskript die Referenz enablen und dann per Ref.StartCombat Player den Kampf gegen die Kreatur beginnen.

im Hauptskript dann über "If ( KreaturRef.GetDead == 1 )" den Tod der Kreatur abfragen und dann den NPC dem Kampf hinterherschicken.
 
Danke DarkRuler, aber könntest du mir das ganze (die ersten beiden Absätze reichen) in einen vollständigen Scriptaufbau bringen? Ich bin grad ein wenig überfordert, da ich beim Originalscript nicht weiß was noch stehen bleiben muss um das Script an sich zum laufen zu bringen. Ich krieg eine Fehlermeldung nach der anderen <.<
Obs den gewünschten Effekt hat teste ich selbst aus :)
 
steammusic

Hallo, leider funktioniert folgender Script nicht (er soll Musik wiedergeben und loopen). Es ist ein Questscript, und liegt auf einer Quest, die extra für die Musik erstellt wurde. Die Condition ist GetInCell, und bei "start game enabled" ist kein Haken.

Code:
SCN PCPMusicCaveDungeon01Script

Float Timer
Float fQuestDelayTime

Begin GameMode

set fquestdelaytime to 0.001
if(timer <= 0)
 streammusic "Data\Music\Astralis\10_amb.mp3"
 set timer to 30
else
  set timer to timer - getsecondspassed
endif

End

Begin MenuMode

set timer to 0
if(timer <= 0)
 streammusic "Data\Music\Astralis\10_amb.mp3"
 set timer to 30
else
  set timer to timer - getsecondspassed
endif

End

Ich freue mich auf Hilfe.

LG, peecee
 
Dann mach doch einfach mal einen Haken bei "Start Game Enabled". Die Questbedingung kannst du eigentlich auch weglassen, die zählt nur für Dialoge und nicht, ob die Quest starten kann. Du musst sie dann also ins Skript einfügen.
 
  • Like
Reaktionen: peecee
Okay. So?
Code:
SCN PCPMusicCaveDungeon01Script

Float Timer
Float fQuestDelayTime

Begin GameMode

set fquestdelaytime to 0.001
[U]if(timer <= 0) && (player.GetinCell aaAstralisDungeon01)[/U]
 streammusic "Data\Music\Astralis\10_amb.mp3"
 set timer to 30
else
  set timer to timer - getsecondspassed
endif

End

Begin MenuMode

set timer to 0
[U]if(timer <= 0) && (player.GetinCell aaAstralisDungeon01)[/U]
 streammusic "Data\Music\Astralis\10_amb.mp3"
 set timer to 30
else
  set timer to timer - getsecondspassed
endif

End

Ich möchte ebenhalt, dass es individuelle Soundtracks für jede Cell in der Mod gibt.

EDIT: Danke, es funktioniert. Am Anfang hört man allerdings noch sehr kurz die Vanilla Musik. Kann man nicht ändern, oder?
EDIT2: Es geht doch nicht mehr. Ich höre immernoch die langweilige Vanillamusik, und die wird unterbrochen, sobald man das Menü oder die Konsole öffnet, als wäre sie nurnoch ein Sound. Was nun?

EDIT3: Ich habe vergessen, die Endung .mp3 an den Dateinamen ranzusetzen. Jetzt geht es eigendlich, aber die Musik wird weiterhin unterbrochen, wenn man das Menü öffnet. Wenn man es wieder schließt, fängt sie von vorne an. Woran liegt das? Kann man das beheben?
 
Zuletzt bearbeitet:
EDIT3: Ich habe vergessen, die Endung .mp3 an den Dateinamen ranzusetzen. Jetzt geht es eigendlich, aber die Musik wird weiterhin unterbrochen, wenn man das Menü öffnet. Wenn man es wieder schließt, fängt sie von vorne an. Woran liegt das? Kann man das beheben?

Äh, du setzt doch im Menümodus den Timer auf 0 zurück, und hast gleich danach eine Abfrage, die die Musik startet, wenn der Timer auf 0 ist...

Was mir ein wenig "Sorgen" bereitet, ist das set fquestdelaytime to 0.001. Ist das Abspielen der Musik so zeitkritisch (Übergänge von einem zum nächsten Musikstück, bzw. lückenloser Rücksprung zum Anfang), dass das Script quasi während der gesamten Spielzeit (da "Start Game Enabled") tausend mal pro Sekunde durchlaufen muss? Auch wenn man sich überhaupt nicht in der Zone befindet? Ein paar mehr von den Skripten, und das Spiel dürfte unglaublich zäh werden...

Edit: Ok, zäh wirds wohl nicht, da die Skripte eh nur max. 1x pro Frame durchlaufen werden, für die 0.001 sec müsste man auf 1000 FPS kommen, was wohl die wenigsten erreichen dürften.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peecee
...und dann kommt die Abfrage, ob timer <= 0 und ob man in einer bestimmten Zelle ist.
Wenn es so ist soll die Musik gestreamt werden! Was aber scheinbar nicht passiert.
peecees Frage ist daher berechtigt.

Allerdings sollte man sich eher fragen, ob man im MenuMode überhaupt Musik streamen kann.
Das geschilderte Verhalten klingt nämlich gerade so, als ob Oblivion sich merkt, welches Stück gerade läuft, es unterbricht und später wieder startet.
Es könnte durchaus sein, dass dies so gewollt ist.
 
Malwieder ein gutes Beispiel, wie uns Moddern seitens Beth Steine in den Weg gelegt werden. Aber ich könnte einfach die Originalmusik überschreiben, dann dürfte das doch problemlos gehen, oder?