Construction Set Skriptthread zum Construction Set

Ja gibt es aber was muss ich da reinschreiben, damit der Typ danach verschwindet?

Ps: Das Queststage erhöhen, funktionirt nicht wen man das in diese Box schreibt.
 
Das mit dem Npc solltest du nicht in den ResultScript schreiben. Wenn man das macht, führt das häufig dazu, das Oblivion abschmiert, da man seinen Gesprächspartner disabled...
 
Jo und da bin ich wieder. Guckt euch das hier mal bitte an:

Code:
scn NoUseScript

Begin OnActivate
               if isActionRef player == 1
                  ; ich glaube das muss man haben damit das script klappt
           		if player.GetLevel <= 5
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell01 player
		elseif ( player.GetLevel >= 6 ) && ( player.GetLevel <= 10 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell02 player
		elseif ( player.GetLevel >= 11) && ( player.GetLevel <= 15 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell03 player
		elseif ( player.GetLevel >= 16 ) && ( player.GetLevel <= 20 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell04 player
		elseif ( player.GetLevel >= 21 ) && (player.GetLevel <= 25 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell05 player
		elseif ( player.GetLevel >= 26 ) && (player.GetLevel <= 30 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell06 player
		elseif ( player.GetLevel >= 31 ) && (player.GetLevel <= 35 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell07 player
		elseif ( player.GetLevel >= 36 ) && (player.GetLevel <= 40 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell08 player
		elseif ( player.GetLevel >= 41 ) && (player.GetLevel <= 45 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell09 player
		elseif player.GetLevel >= 46
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell10 player         
               endif
          endif
End

Ich hab echt keine Ahnung, warum das wieder nicht funktioniert. Das Script liegt auf einigen Alchemiegeräten und soll, wie man ja sehen kann, dem Player einen Schockzauber verpassen, levelabhängig. Zuerst wollte ich ja einen Leveled Spell nehmen, bis mir dann aufgefallen ist, dass das nicht funktioniert. Also hab ich eben zehn unterschiedlich starke Zauber gemacht. Die Idee habe ich von den Priestern der Ordnung aus SI, bei denen ist das ja auch so ähnlich.
Zuerst stand dort anstatt "NoUseMarker.MoveTo und Cast" nur Cast, und anstatt "if is AktionRef Player" einfach Player hinter OnActivate

Das hat allerdings nicht geklappt, bei aktivieren des Objekts ist gar nichts passiert.
Dann habe ich mir Mal das Script für die Ordnungspriester angesehen. Daher habe ich das "if is ActionRef Player" und das mit dem Marker. In einem Vermerk im Script stand, dass tote Actors nichts Casten können. Mörsel & Stößel und so sind zwar keine toten Actors, aber ich dachte eben, dass es daran liegen würde.
Also hab ich nen X-Marker erstellt, dem die Ref-ID gegeben und ihn in einer Dummy-Cell plaziert.
Aber bei Anklicken eines der Objekte passiert trotzdem noch nichts.
:cry:
 
Statics können auch nicht casten ....:pfeif:

Activator können casten.

Only certain types of objects appear to serve as valid targets. Actors and activators work, but when some other object types, such as Items, are supplied for the Target parameter, the spell projectile will travel down the negative y-axis rather than in the direction of the target.
 
Der X-Marker kann aber casten. Bei den Priestern der Ordnung geht es ja auch und da ist es der X-Marker, der für das Casten zuständig ist.

Code:
scn SEOrderPriest1ResurrectSCRIPT

float resurrectTimer		; used to time resurrection
short resurrecting			; set to 1 when when dead and resurrecting
								; set to 2 when really dead (obelisk is shut down)
short SpellRemove		; flag for if spell is removed because spell removal is not immediate
ref myParent				; parent obelisk
ref mySelf					; myself

begin OnLoad
	set myParent to GetParentRef
	set mySelf to GetSelf
	if resurrecting == 1
		; I'm not really dead
		pms SEPriestResurrectShader
	endif
	; make sure he doesn't drop his staff when he dies
	equipItem SEObeliskPriestStaff01 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff02 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff03 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff04 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff05 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff06 1	; so he doesn't drop it when he dies
end

begin OnDeath
end

[B]begin OnActivate
	if isActionRef player == 1
		; I'm not really dead
		if resurrecting == 1
			; don't touch me, I'm ELECTRIFIED!
			[COLOR="Red"]; move marker to player and cast from it -- hack because dead actors can't cast spells[/COLOR]
[COLOR="Lime"]			SEOrderPriestCastingMarker.moveto player
			SEOrderPriestCastingMarker.cast[/COLOR] StandardShockDamageTarget1Novice player[/B]
		else
			Activate
		endif
	else
		Activate
	endif
end

begin gamemode
	; don't run script if disabled or really dead
	if getdisabled == 1 || resurrecting == 2
		return
	endif
	
	if resurrecting == 0
		if getDead == 1
			; NOTE: priest faction used to indicate that obelisk is deactivated
			if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 0
				; I'm not really dead
				pms SEPriestResurrectShader
				set resurrecting to 1
				set resurrectTimer to SEOrderPriestResurrectTimer
			else
				; I'm really dead
				setownership
				set resurrecting to 2
			endif
		endif
	endif


	if resurrecting == 1
		if resurrectTimer > 0
			set resurrectTimer to resurrectTimer - getsecondsPassed
		else
			sms SEPriestResurrectShader
			; NOTE: priest faction used to indicate that obelisk is deactivated
			if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 0
				set resurrecting to 0
				; start resurrection
				pme REAN
;				myParent.cast StandardShockDamageTarget1Novice mySelf
				resurrect 1
				; reequip staff
				equipItem SEObeliskPriestStaff01 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff02 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff03 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff04 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff05 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff06 1	; so he doesn't drop it when he dies
			else
				set resurrecting to 2
			endif
		endif
	endif

	; add power if obelisk is active, remove it if inactive
	if myParent != 0
		; if I have the spell, and obelisk is deactivated, remove it
		if SpellRemove == 0 && myParent.isOwner SEOrderPriestFaction == 1
			pme RFLC
			Set SpellRemove to 1
			; TODO: modify model?

			; while we're at it, check package to see if I should be going to Find obelisk
			if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
				if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
					if getitemcount SEOrderPriestWidget == 0
						additem SEOrderPriestWidget 1
						modav aggression -100
						evp
					else
						stopcombat
					endif
				endif
			endif


		; if I don't have the spell, and obelisk is activated, add it
		elseif SpellRemove == 1 && myParent.isOwner SEOrderPriestFaction == 0 && getdead == 0
			pme RFLC
			Set SpellRemove to 0
			; TODO: modify model?

			; while we're at it, check package to see if I'm still on the Find obelisk
			if getiscurrentpackage SEOrderPriestActivateObelisk1 == 1
				evp
			endif
		endif
	endif
end

begin OnHit
	if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
		if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
			evp
		else
			; 20% chance to drop out of combat and go for the obelisk with each hit
			if getrandompercent <= 20
				stopcombat
			endif
		endif
	endif
end

begin OnStartCombat
	if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
		if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
			evp
		endif
	endif
end

Und der SEOrderPriestCastingMarker ist ein Static namens XMarker.
Oder hab ich mich verguckt?
 
Sorry, bei mir is gestern das Internet abgeschmiert. :D
Aber um die Queststage herraufzusetzen habe ich in Resultscript (als letztes) Setstage (meinquest) 100 angegeben.

Achja, nochwas, der Npc soll nicht einfach "so" verschwinden, weil wenn man den disabelt, is der ja von jetzt auf gleich verschwunden. :lol:
Der soll aber erst leuchten (als wenn der zaubert), und dann verschwinden.


mfg
Shadow-King
 
Was für ein Leuchten hättens den gern?

Eis,Feuer, Leben, Gift.......?


Ich würde das so machen, dass ich in den ResultScript vom Topic schreibe:

Code:
DeinNpc.Cast DeinZauber DeinNpc

Dein Zauber solle ein Zauber mit dem gewünschten Effekt und 0 Mana kosten sein. Außerdem sollte er auf sich selber gewirkt sein. Der Zauber bekommt dann als Scripteffect einen
Code:
Begin ScriptEffectStart
disable
end

Wenn du nicht willst, dass der Npc den Zauber auf sich selbst wirkt, musst du mit PlayMagicShader und einem Timer arbeite.
 
  • Like
Reaktionen: Shadow-King
Also mit dem verschwinden klappts jetzt, aber ich hab jetzt 2 neue Probs.

1. Ich hab als visualisirungs effect "Leben wiederherstellen" genommen, wenn der NPC jetzt Gezaubert hat, Bleibt aber das Leuchten immernoch da.
Soll es aber nicht. :lol:

2. Das Result-Script ist:
Code:
Shadownpc4.cast Verschwindespell Shadownpc4
Setstage 1Shadowquest 100
Das erste macht er ja noch aber das zweite nicht mehr.
Wie bekomme ich jetzt die Stage erhöht?

Kann mir einer weiterhelfen?

mfg
Shadow-King
 
Heißt denn die Stage auch 100?

Zum ersten:
Du brauchst noch die Zeile:
StopMagicEffectVisuals REHE

Wenn du allerdings bei Play noch ne Zeit (Duration) angegeben hast, sollte der Shader auch verschwinden.
 
  • Like
Reaktionen: Shadow-King
2. Das Result-Script ist:
Code:
Shadownpc4.cast Verschwindespell Shadownpc4
Setstage 1Shadowquest 100
Das erste macht er ja noch aber das zweite nicht mehr.
Wie bekomme ich jetzt die Stage erhöht?

was ist, wenn du das setstage vor den verschwindespell setzt?
dein verschwindespell disabled ja deinen npc, oder? dadurch wird eventuell auch sein script (vorzeitig) beendet...
 
  • Like
Reaktionen: Shadow-King
@Shadow-King
Also ich würde einen Timer machen, wo zuerst die SetStage und dann nach 2 Sekunden oder so das Disbale kommt. Wie das genau geht, weiß ich aber auch nicht, der Timer ist einer meiner Script-Todfeinde.^^

@All

Sagen wir mal ich hätte mich verguckt und der XMarker ist doch das falsche Objekt - wie kann ich das dann beheben?

Ich habe noch mal nachgeforscht und gesehen, dass du doch Recht hattest AjAeXx. Der Fehler lag bei mir, sorry. :oops: Den XMarker als Activator zu nehmen bringt aber gar nichts. :( Welchen Marker sollte ich denn statt dem XMarker nehmen? Überhaupt einen Marker?
 
@Naboradd: Nein ob ich das setstage danach davor oder daneben stell es passirt einfach nichts (Auch bei anderen Dialogen im result-Script nicht)

@Blacklands: Gute Idee Allerding weis ich auch nicht wie das geht, binn ja en neuling :-D

Hat sich erledigt. Ausser das ich eine Queststage nicht im Result Script bereich
einer Topic erhöhen kann. ^^

mfg
Shadow-King
 
Zuletzt bearbeitet:
Ok ich habe mich nochmal mit dem Script beschäftigt und folgenges rausgefunden:

Der Marker beim Profiscript (so nenne ich jetzt das Script SEOrderPriest1ResurrectSCRIPT, da es von Bethsoft gemacht wurde und auch funktioniert) ist ein XMarkerHeading. Ich habe also dem NoUseMarker dieses Mesh gegeben. Klappt nicht.

Dann habe ich als Probe den Marker aus dem Profiscript genommen. Gleiche Probleme.

Es liegt also nicht am Marker.

Aber es scheint noch mehr falsch zu sein. Der Marker ist ingame sichtbar. Außerdem scheint das Script nur einmal zu funzen. Denn wenn ich danach zu einem anderen Objekt mit diesem Script gehe, kann ich es zwar auch nicht anklicken, aber der Marker bleibt wo er ist. Er kommt nur beim ersten Mal zum Player.

Irgendwas am Script ist falsch. Nur was?

Nochmal zum Vergleich. Das Script von mir:

Code:
scn NoUseScript

Begin OnActivate Player
           		if player.GetLevel <= 5
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell01 player
		elseif ( player.GetLevel >= 6 ) && ( player.GetLevel <= 10 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell02 player
		elseif ( player.GetLevel >= 11) && ( player.GetLevel <= 15 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell03 player
		elseif ( player.GetLevel >= 16 ) && ( player.GetLevel <= 20 )
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell04 player
		elseif ( player.GetLevel >= 21 ) && (player.GetLevel <= 25 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell05 player
		elseif ( player.GetLevel >= 26 ) && (player.GetLevel <= 30 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell06 player
		elseif ( player.GetLevel >= 31 ) && (player.GetLevel <= 35 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell07 player
		elseif ( player.GetLevel >= 36 ) && (player.GetLevel <= 40 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell08 player
		elseif ( player.GetLevel >= 41 ) && (player.GetLevel <= 45 ) 
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell09 player
		elseif player.GetLevel >= 46
               NoUseMarker.MoveTo Player 
			NoUseMarker.cast NoUseSpell09 player         
               endif
          endif
End

das nicht geht.

Und hier das von Bethsoft, von dem ein Teil genau das bewirkt, was ich will (OnActivate ein Schockzauber auf den Player, levelabhängig) und das auch komplett funktioniert. ;)

Code:
scn SEOrderPriest1ResurrectSCRIPT

float resurrectTimer		; used to time resurrection
short resurrecting			; set to 1 when when dead and resurrecting
								; set to 2 when really dead (obelisk is shut down)
short SpellRemove		; flag for if spell is removed because spell removal is not immediate
ref myParent				; parent obelisk
ref mySelf					; myself

begin OnLoad
	set myParent to GetParentRef
	set mySelf to GetSelf
	if resurrecting == 1
		; I'm not really dead
		pms SEPriestResurrectShader
	endif
	; make sure he doesn't drop his staff when he dies
	equipItem SEObeliskPriestStaff01 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff02 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff03 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff04 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff05 1	; so he doesn't drop it when he dies
	equipItem SEObeliskPriestStaff06 1	; so he doesn't drop it when he dies
end

begin OnDeath
end

begin OnActivate
	if isActionRef player == 1
		; I'm not really dead
		if resurrecting == 1
			; don't touch me, I'm ELECTRIFIED!
			; move marker to player and cast from it -- hack because dead actors can't cast spells
			SEOrderPriestCastingMarker.moveto player
			SEOrderPriestCastingMarker.cast StandardShockDamageTarget1Novice player
		else
			Activate
		endif
	else
		Activate
	endif
end

begin gamemode
	; don't run script if disabled or really dead
	if getdisabled == 1 || resurrecting == 2
		return
	endif
	
	if resurrecting == 0
		if getDead == 1
			; NOTE: priest faction used to indicate that obelisk is deactivated
			if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 0
				; I'm not really dead
				pms SEPriestResurrectShader
				set resurrecting to 1
				set resurrectTimer to SEOrderPriestResurrectTimer
			else
				; I'm really dead
				setownership
				set resurrecting to 2
			endif
		endif
	endif


	if resurrecting == 1
		if resurrectTimer > 0
			set resurrectTimer to resurrectTimer - getsecondsPassed
		else
			sms SEPriestResurrectShader
			; NOTE: priest faction used to indicate that obelisk is deactivated
			if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 0
				set resurrecting to 0
				; start resurrection
				pme REAN
;				myParent.cast StandardShockDamageTarget1Novice mySelf
				resurrect 1
				; reequip staff
				equipItem SEObeliskPriestStaff01 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff02 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff03 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff04 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff05 1	; so he doesn't drop it when he dies
				equipItem SEObeliskPriestStaff06 1	; so he doesn't drop it when he dies
			else
				set resurrecting to 2
			endif
		endif
	endif

	; add power if obelisk is active, remove it if inactive
	if myParent != 0
		; if I have the spell, and obelisk is deactivated, remove it
		if SpellRemove == 0 && myParent.isOwner SEOrderPriestFaction == 1
			pme RFLC
			Set SpellRemove to 1
			; TODO: modify model?

			; while we're at it, check package to see if I should be going to Find obelisk
			if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
				if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
					if getitemcount SEOrderPriestWidget == 0
						additem SEOrderPriestWidget 1
						modav aggression -100
						evp
					else
						stopcombat
					endif
				endif
			endif


		; if I don't have the spell, and obelisk is activated, add it
		elseif SpellRemove == 1 && myParent.isOwner SEOrderPriestFaction == 0 && getdead == 0
			pme RFLC
			Set SpellRemove to 0
			; TODO: modify model?

			; while we're at it, check package to see if I'm still on the Find obelisk
			if getiscurrentpackage SEOrderPriestActivateObelisk1 == 1
				evp
			endif
		endif
	endif
end

begin OnHit
	if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
		if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
			evp
		else
			; 20% chance to drop out of combat and go for the obelisk with each hit
			if getrandompercent <= 20
				stopcombat
			endif
		endif
	endif
end

begin OnStartCombat
	if myParent != 0 && myParent.isOwner SEOrderPriestFaction == 1
		if getiscurrentpackage SEOrderPriestActivateObelisk1 == 0
			evp
		endif
	endif
end