Construction Set Skriptthread zum Construction Set

Hmm, ich kann da eigentlich nichts falsches entdecken. Außer, dass das zweite endif überflüssig ist, aber das sollte es eigentlich nicht sein.
Hast du sonst alle Einstellungen richtig gemacht? Was für einen Marker hast du verwendet? "XMarkerHeading"? Oder nen anderen? (Der ist jedenfalls unter dem XMarker zu finden.)
 
Hmm, ich kann da eigentlich nichts falsches entdecken. Außer, dass das zweite endif überflüssig ist, aber das sollte es eigentlich nicht sein.
Hast du sonst alle Einstellungen richtig gemacht? Was für einen Marker hast du verwendet? "XMarkerHeading"? Oder nen anderen? (Der ist jedenfalls unter dem XMarker zu finden.)

Ich habe bisher 3 Sachen versucht:

1. Den XMarkerHeading. Ergebnis: Beim aklicken erscheint er ingame - merkwürdigerweise ist er sichtbar. :eek: Sonst passiert gar nichts.

2. Den normalen XMarker. Ergebnis: Gleiches wie oben.

Dann habe ich einfach eine unsichtbare Mesh genommen: Meshes\Magieffects\Null
Jetzt sieht man ingame nichts mehr, aber es geht trotzdem nicht.

Ich weiß nur eines:
Es liegt NICHT am Marker!

Der XMarkerHeading wurde beim Proficript (siehe oben) von Bethesda verwendet. Ich habe ja selber schon oft genug gegen die Priester der Ordnung gekämpft, um zu wissen, dass es DA keine Fehler gibt. Der MArker ist ingame nicht sichtbar und der Schockzauber funktioniert auch.

Wahrscheinlich fehlt irgendetwas sehr wichtiges im Script, nur was?
Kann man das vielleicht aus dem Script von Bethsoft rauslesen? Ich habe den Teil, von dem ich glaube, dass er wichtig ist mal gefärbt. Aber anscheinend fehlt da ja noch etwas. :(

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!
			[COLOR="Red"]; move marker to player and cast from it -- hack because dead actors can't cast spells[/COLOR]
[COLOR="Lime"]			[B]SEOrderPriestCastingMarker.moveto player
			SEOrderPriestCastingMarker.cast StandardShockDamageTarget1Novice player[/B][/COLOR]
		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

Hier habt ihr noch ein Bild des Original-Markers:
 
Zuletzt bearbeitet:
Hallo ich brauch mal wieder ein Script.

Es soll folgendes Können:

Wenn ma einen Activator aktivirt, soll beim erstenmal ein gegenstand entfernt werden, und ein Feuer soll aktivirt werden. Wenn das Feuer aktivirt ist soll der Queststage erhöht werden. Wenn der Spieler den gegenstand nicht hat soll eine Massagebox kommen die Sagt: "Das Feuer kann jetzt noch nicht aktivirt werden."
Danacht soll man das Feuer ganz normal an und daus Machen können.

Ich hab mir das Ganze so vorgestellt:
Code:
Scn ...

short once.

Begin OnActivate

If once == 0
If IsActionRef player == 1
If ( der Command der abfragt, ob der gegenstand im Inventar ist)

RefId-des-Feuers.enable
Setstage XYZQuest 90
set once to 1

elseif

(command der abfragt ob der Gegenstand [SIZE="4"]NICHT[/SIZE] im Inventar ist)
MessageBox: "Das Feuer knn jetzt noch nicht entzündet werden!"
set once to 1

Endif
Endif 
Endif 
Endif
End

Begin OnActivate

if IsActionRef player == 1
if once == 1
if RefId-des-Feuers.GetDisabled == 0

RefId-des-Feuers.disable
else
RefId-des-Feuers.enable

Endif
Endif
Endif
End

Hoffe jemand kann mir den Command verraten, und mir sagen ob das so geht.

thy im vorraus.

mfg
Shadow-King
 
Zuletzt bearbeitet:
Hmm, also um abzufragen, ob der Spieler den Gegenstand hat, benutzt du "player.getitemcount".

So sollte das klappen, aber keine Garantie.

Code:
Scn ...

short once.

Begin OnActivate

If once == 0 && IsActionRef player == 1
       If player.getitemcount xyz >= 1
       RefId-des-Feuers.enable
       Setstage XYZQuest 90
       set once to 1
       endif

elseif 
       if player.getitemcount xyz == =
       MessageBox: "Das Feuer knn jetzt noch nicht entzündet werden!"
       set once to 1
       endif

Endif
End

Begin OnActivate

if IsActionRef player == 1 && once == 1 RefId-des-Feuers.GetDisabled == 0
      RefId-des-Feuers.disable

else
RefId-des-Feuers.enable

Endif
End
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Shadow-King
hmm, eine frage hätte ich dazu: wieso benutzt ihr 2x einen "begin onactivate" block? kann man das nicht auch in einen einzelnen block packen?
und das elseif benötigt auch wieder eine bedingung, entweder sollte das ein "else + if bedingung" oder "elseif bedingung" sein.
der punkt hinter dem "short once"? macht evtl. auch probleme.
und die bedingung im oberen onactivate-block wird ja auch nur ein einziges mal durchgeführt (durch das set once). wenn das item also noch nicht vorhanden war, und die meldung ausgegeben wird, wars das? das feuer kann danach zwar durch den unteren block ein- und ausgeschaltet werden, aber die queststage kann nie mehr erhöht werden...
shadow-king möchte einen gegenstand entfernt haben, im script taucht das aber nirgendwo auf.

das script müsste wohl komplett umgebaut werden, ich hab aber noch nicht so ganz genau verstanden, wie das überhaupt genau ablaufen soll, kann also leider noch keine lösung anbieten. ich grübel mal weiter... ;)

edit: das könnte klappen:
Code:
Scn ...

short once
[COLOR="DarkRed"];short count[/COLOR]

Begin OnActivate

If once == 0 && IsActionRef player == 1
	if player.getitemcount XYZ >= 1
		RefId-des-Feuers.enable
		Setstage XYZQuest 90
		set once to 1
		;player.UnEquipItem XYZ			; <- kann das item auch ausgerüstet werden? dann sollte es vor dem entfernen abgelegt werden
		[COLOR="DarkGreen"];player.RemoveItem XYZ 1		; <- wenn der spieler eh nur ein item davon hat/haben kann, oder nur eins entfernt werden soll[/COLOR]
		[COLOR="DarkRed"];set count to player.getitemcount XYZ	; <- ansonsten diese zeilen verwenden
		;player.RemoveItem XYZ count		;[/COLOR]
	else
		MessageBox "Das Feuer kann jetzt noch nicht entzündet werden!"
	endif
Endif

if once == 1 && IsActionRef player == 1
	if RefId-des-Feuers.GetDisabled == 0
		RefId-des-Feuers.disable
	else
		RefId-des-Feuers.enable
	Endif
Endif

End
nur von dem roten oder grünen teil das semikolon entfernen, das andere kann gelöscht werden.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Shadow-King
Ja das Item ist eine Fackel, kann somit auch angelegt werden.
Das Item ist eimalig, da besondere Fackel :lol:

Also muss das Script dann so aussehen?

Code:
Scn ...

short once
;short count

Begin OnActivate

If once == 0 && IsActionRef player == 1
	if player.getitemcount XYZ >= 1
		RefId-des-Feuers.enable
		Setstage XYZQuest 90
		set once to 1
		;player.UnEquipItem XYZ	
		;player.RemoveItem XYZ 1		
	else
		MessageBox "Das Feuer kann jetzt noch nicht entzündet werden!"
	endif
Endif

if once == 1 && IsActionRef player == 1
	if RefId-des-Feuers.GetDisabled == 0
		RefId-des-Feuers.disable
	else
		RefId-des-Feuers.enable
	Endif
Endif
End

Jetzt noch eine fragen.

Wozu brauch ich die Variable Count?
Oder brauch ich die jetzt garnicht mehr?

Edit: Stimmt das mit dem .RemoveItem hab ich beim ersten script vergessen. ;)

mfg
Shadow-King
 
Zuletzt bearbeitet:
Hi Leute!
Ist es möglich, dass, wenn der Spieler schleicht und eine bestimmte Waffe anlegt, sich die Waffen verändert, also eine andere Meshes/Textur bekommt.
Beim "Vom-Schleichen-in-den-Normalmodus" soll das dann genau anderherum funktionieren, sodass die Waffe wider normal wird.
 
Theoretisch: Ja.

Allerdings gibt es hier ein Problem. Du kannst das über zwei Wege machen, entweder fügst du dem Spieler beim Wechsel jedesmal eine neue Waffe hinzu, was aber dämlich ist, aufgrund der Messages "Item hinzugefügt.." und dass der Spieler die Waffe nicht mehr in der Hand hat.

Das andere wäre, einen Shader zu erstellen, denn man allerdings nicht auf die Waffe beschränken könnte sondern der sich auf den ganzen Spieler ausweiten würde.
Vondaher müsstest du Weg 1 nehmen.
Der Script wäre:

Code:
scn Blubb

Begin GameMode
If Player.IsSneaking == 1
   Player.RemoveItem IdderWaffeimNormalZustand, 1
   Player.AddItem IdderWaffefürSneak, 1
   Player.EquipItem IdderWaffefürSneak
else
   Player.RemoveItem IdderWaffefürSneak, 1
   Player.AddItem IdderWaffeimNormalZustand, 1
   Player.EquipItem IdderWaffeimnormalZustand
endif
end
 
@ AjAeXx
Er kann doch die Message "Item hinzugefügt" einfach durch eine andere Message, z.B. "Eure Waffe hat sich verwandelt" überdecken.

@ All
Ich bräuchte auch mal wieder ein Script (das Andere weiter oben habe ich erstmal aufgegeben)

Also das Script soll auf einem Gartentor liegen. Beim anklicken eine Messagebox mit "Was wollt ihr tun?", "Das Tor aufschließen!", "Das Tor abschließen!", "Das Tor öffnen!"
Natürlich soll jede der Möglichkeiten auch das entsprechende bewirken.^^
Außerdem hätte ich gerne noch bei der ersten und zweiten Möglichkeit eine Abfrage, ob der Player einen bestimmten Schlüssel im Inventar hat.
 
erstmal sorry, daß ich immer nur an euren scripts rumbessere, aber das liegt mir irgendwie besser... :roll:

Der Script wäre:

Code:
scn Blubb

Begin GameMode
If Player.IsSneaking == 1
   Player.RemoveItem IdderWaffeimNormalZustand, 1
   Player.AddItem IdderWaffefürSneak, 1
   Player.EquipItem IdderWaffefürSneak
else
   Player.RemoveItem IdderWaffefürSneak, 1
   Player.AddItem IdderWaffeimNormalZustand, 1
   Player.EquipItem IdderWaffeimnormalZustand
endif
end

das script ist so leider nicht ausreichend, da man dann leider keine anderen waffen mehr tragen kann, und immer wieder eine der beiden waffen in die hand gedrückt bekommt. es muss also vorher geprüft werden, ob man überhaupt eine der beiden waffen hat/trägt.
außerdem hab ich neulich im cs-wiki gelesen, daß man aus performance-gründen möglichst wenig scripte im gamemode laufen lassen sollte:
http://cs.elderscrolls.com/constwiki/index.php/Minimizing_your_Script

Code:
scn Blubb

Begin GameMode
If Player.GetItemCount IDWaffeNormal == 0 && Player.GetItemCount IDWaffeSneak == 0	; Script vorzeitig verlassen, wenn der spieler die waffen überhaupt nicht hat
	RETURN
EndIf

If Player.GetItemCount IDWaffeNormal && Player.IsSneaking
	Player.AddItem IDWaffeSneak 1
	If Player.GetEquipped IDWaffeNormal		; Waffe nur ablegen/ausrüsten, wenn sie bereits angelegt war
		Player.UnEquipItem IDWaffeNormal
		Player.EquipItem IDWaffeSneak
	EndIf
	Player.RemoveItem IDWaffeNormal 1
ElseIf Player.GetItemCount IDWaffeSneak && Player.IsSneaking == 0
	Player.AddItem IDWaffeNormal 1
	If Player.GetEquipped IDWaffeSneak
		Player.UnEquipItem IDWaffeSneak
		Player.EquipItem IDWaffeNormal
	EndIf
	Player.RemoveItem IDWaffeSneak 1
EndIf
End
 
Danke für die schnelle und gute Antwort!

Muss es nicht heißen:
Code:
scn Blubb

Begin GameMode
If Player.GetItemCount IDWaffeNormal == 0 && Player.GetItemCount IDWaffeSneak == 0
	RETURN
EndIf

If Player.GetItemCount IDWaffeNormal [COLOR="Red"]>= 1[/COLOR] && Player.IsSneaking
	Player.AddItem IDWaffeSneak 1
	If Player.GetEquipped IDWaffeNormal
		Player.UnEquipItem IDWaffeNormal
		Player.EquipItem IDWaffeSneak
	EndIf
	Player.RemoveItem IDWaffeNormal 1
ElseIf Player.GetItemCount IDWaffeSneak [COLOR="Red"]>= 1[/COLOR] && Player.IsSneaking == 0
	Player.AddItem IDWaffeNormal 1
	If Player.GetEquipped IDWaffeSneak
		Player.UnEquipItem IDWaffeSneak
		Player.EquipItem IDWaffeNormal
	EndIf
	Player.RemoveItem IDWaffeSneak 1
EndIf
End
 
Muss es nicht heißen:

müssen muß es nicht ;)

http://cs.elderscrolls.com/constwiki/index.php/If#Comparisons_and_Expressions
If a variable or the result of a function returns 1 or 0, or you're just interested in whether the result is 0 or not you don't need to test on "== 1" or "!=0"

übersetzt: wenn eine variable oder ein ergebnis einer funktion eine 1 oder 0 zurückgibt, oder du nur wissen möchtest, ob das ergebnis 0 ist oder nicht, brauchst du das ergebnis nicht auf "== 1" oder "!= 0" prüfen.

übertragen auf das script: wenn GetItemCount 0 ist, ist das ergebnis FALSCH, und der if-block wird nicht ausgeführt. ist GetItemCount nicht 0, ist das ergebnis WAHR, und der if-block wird ausgeführt. da braucht man also nicht noch extra auf 1 oder 0 prüfen ;)
 
Die eingeblendeten Nachrichten kann man übringens mit
Code:
Message ""
überblenden.
Wenn Du das hinter den Hinzufügen+Ausrüsten-Block machst, wird eine leere Nachricht(also nix!!) angezeigt. Den Sound vom Ausrüsten/Hinzufügen bekomsmt Du allerdings nicht weg.
 
Könnte er nicht einfach einen leeren Soundfile abspielen? Ich weiß nicht wie Oblivion das handhabt, ob dann beide paralell gespielt werden oder nur einer von beiden.
 
Hallo, ich bin's wieder:lol:

Ich hätte da ein kleines Problem mit dieser Script:

Code:
Scn 1Tuerentrigellungsscript

Begin OnActivate

If IstActionRef player == 1

enable.1Tuer
enable.1Blockoben1
enable.1Blockoben2
enable.1Blockoben3
enable.1Blockoben4
enable.1Blockoben5
enable.1Blockoben6
enable.1Blockunten1
enable.1Blockunten2
enable.1Blockunten3
enable.1Blockunten4
enable.1Blockunten5
enable.1Blockunten6
enable.1SchlsselfrTuer

endif

end

Tja, diese Script sollte bewirken, dass wenn der Player den Activator aktiviert :)lol:), sollen die geschriebenen Referenzen enablet werden. Problem ist nur, ich kann die Script nicht wegen 4 Problem-Fenster speichern. Ich habe auf "Anfangs verborgen" und auf "Feste Referenz" einen Hacken gemacht. Die Fehlernachrichten wären diese hier:

Unknown variable or function for "1Tuer"
Syntax Error
enable.1Tuer
Could Not parse this line.
Mismatched begin/end Block starting on Line 3
und
Mismatched Begin/End Block

Wetten, das ist nur wieder ein Noob-Fehler von mir? Kann mir trotzdem jemand helfen:oops:?
 
Code:
Scn 1Tuerentrigellungsscript

Begin OnActivate

If IstActionRef player == 1

enable.1Tuer
enable.1Blockoben1
enable.1Blockoben2
enable.1Blockoben3
enable.1Blockoben4
enable.1Blockoben5
enable.1Blockoben6
enable.1Blockunten1
enable.1Blockunten2
enable.1Blockunten3
enable.1Blockunten4
enable.1Blockunten5
enable.1Blockunten6
enable.1SchlsselfrTuer

endif

end

Tja, diese Script sollte bewirken, dass wenn der Player den Activator aktiviert :)lol:), sollen die geschriebenen Referenzen enablet werden. Problem ist nur, ich kann die Script nicht wegen 4 Problem-Fenster speichern. Ich habe auf "Anfangs verborgen" und auf "Feste Referenz" einen Hacken gemacht. Die Fehlernachrichten wären diese hier:


Unknown variable or function for "1Tuer"
Heist, die Funktion 1Tuer exestiert nicht.

Syntax Error
enable.1Tuer
Could Not parse this line.

Heist,er kann das das nicht ausfüren.

Die beiden Fehlermeldungen bekommst du, da du geschrieben hast
Code:
enable.1tuer
man schreibt aber
Code:
1tuer.enable
, oder kurz, erst die Ref-Id, dann was damit gemacht wird. Zumindest bei den sachen mit (.)
wie XyZ.enable, xyz.disable xyz.unlock usw,


Mismatched begin/end Block starting on Line 3

und

Mismatched Begin/End Block

Heist, er kann das "end" vom Begin Block nicht finden,
woran das liegt, kann ich dir aber jetzt nicht sagen.
Villeicht hast du das end ja einfach nur zuweit vom rest weggesetzt, ich weis es aber nicht.

Ich hoffe ich konnte Helfen.

mfg
Shadow-King
 
  • Like
Reaktionen: Chuck Norris