Construction Set Skriptthread zum Construction Set

Hallo, ich habe ein Problem mit einen Skript, wo ich nicht weiterkomme:

Das Skript soll es ermöglichen, als Vampir sich an nicht Schlafenden NPC zu ernähren.
Code:
ScriptName AABlooddrinkspell

short Essbar	        ;Ob Lebendiger NPC
short Aussaugen		;Lebenlassen oder Töten

Begin ScriptEffectStart

If ( PCVampire >= 1 )	;Ob PC Blutdurst hat
	if ( GetIsPlayableRace == 1 || GetIsRace Dremora == 1 || GetIsRace DarkSeducer == 1 || GetISRace GoldenSaint == 1  ) && GetDead == 0
		set Essbar to 10			;NPC
	else
		set Essbar to 20			;Creature oder tot
	endif
endif

if ( Essbar >= 20 )				                                ;Tier oder Leiche, schmeckt sch****e
		Player.Cast AAVampblooddrinkingbad Player		;Malus für ungeeignetes Blut
		Message "Das Blut der Kreatur bekommt Euch nicht."
	else
		Set PCVampire to 1 						;wenns Essbar ist Vampirismus auf 1 Setzen
		Player.removespell Vampirism50
		Player.removespell Vampirism50Att
		Player.removespell Vampirism50Skills
		Player.removespell VampireSeduction
		Player.removespell Vampirism75
		Player.removespell Vampirism75Att
		Player.removespell Vampirism75Skills
		Player.removespell VampireReignofTerror
		Player.removespell Vampirism100
		Player.removespell Vampirism100Att
		Player.removespell Vampirism100Skills
		Player.removespell VampireEmbraceofShadows

		Player.addspell Vampirism25
		Player.addspell Vampirism25Att
		Player.addspell Vampirism25Skills
		Messagebox "Euer Blutdurst ist gestillt - für den Augenblick! Was wollt ihr mit dem Opfer tun?", "Nichts weiter", "Aussaugen"

endif
		
end

Begin GameMode
	
	Set Aussaugen to GetButtonPressed

		IF (Aussaugen == 0)				
	                return									;Lebenlassen
		ElseIf (Aussaugen == 1)
			Kill										;Töten
			Player.Cast AAVampblooddrinkinggood Player			;Bonusbuff für den Player
		endif
end

Mein Problem ist, das er Die Auswahl die ich treffe ignoriert -> NPC wird nicht getötet
Was habe ich falsch gemacht?
 
Zuletzt bearbeitet:
Hat leider nicht funktioniert:(, trotzdem danke

wenn ich den Zauber auf eine Kreatur oder eine Leiche anwende bekomme ich die Meldung, daß mir das Blut nicht bekommt, und auch den Malus, aber wenn ich den Zauber auf einen NPC anwende, passiert nicht, unabhängig, was ich wähle...

PS. im Tutoial HIER wird auch mit BeginGameMode gearbeitet
 
Vielleicht hilft ja das, was ich Schmelz bei seinem Problem geraten hatte
mir schrieb:
Ja. Für gewöhnlich benutzt man doch auch eine Ref-Variable in Skripteffekt-Zaubern, die sich auf das angezauberte Objekt/den angezauberten Actor beziehen, oder? Also ich habe immer eine Zeile mit "ref target" und dirket unter dem ScriptEffectStart ein "Set target to getself" stehen ;)

Also einfach mal eine target-Variable einfügen und das "Kill" durch "target.kill" ersetzen
Edit: Und in der If-Abfrage natürlich auch austauschen
 
Zuletzt bearbeitet:
Tschuldigung, wenn ich noch mal nachfrage, wo muss jetzt was stehen?

ref target steht jetzt unter den beiden short variablen

Set target to getself seht direkt unter Begin ScriptEffectStart

target.killhabe ich auch ersetzt,

In welcher If-Abfrage muß ich jetzt noch tauschen?
 
Ich Habs!:hah:

Der Scripteffect muss Laut CS-Wiki länger dauern als 0 Sekunden!

Ich habs auf 2 Sekunden gesetzt, und sie da, es wirkt wie gedacht.
 
Habn heftiges Problem.
Folgender Skript bringt zu 100% das Spiel von mir zum Einfrieren.
Jemand eine Idee, was denn daran so falsch ist?

PHP:
scn aaDRCyraHQ07RuinenportalSKRIPT

short init

Begin onTrigger player

If ( Init == 0 ) ;Video abspielen
	Set Init To 1
	PlayBink "DRsCyraliaStargate.bik"
Elseif ( Init == 1 ) ;Variable hochsetzen & QuestItem removen
	Set aaDRCyra007.BinImLichtstrahl To 1
	Set Init To 2
	Player.RemoveItemNS aaDRCyra0GizViciousHeart2H 1
Elseif ( Init == 2 ) ;Nicht Questitems in die Truhe tun
	Set Init To 3
	Player.RemoveAllItems DRCyra0HQ09TryskaiTruheREF
Elseif ( Init == 3 ) ;Teleport in nächste Zelle
	Set Init To 4
	Player.MoveTo DRCyra0HQ08PruefungAnkunftMarkerREF
Endif
End

(EDIT)
Durch das Entfernen ( ; hinzufügen) von RemoveAllItems ) ging der Skript plötzlich.
Aber das muss passieren! Gibts nen Grund?

(EDIT 2)
Ich habe wahrscheinlich das Problem entdeckt.
Ich habe Gegenstände vorher über Player.EquipItemNS dem Spieler angezogen.
Die lassen sich nicht mehr ablegen, "entrüsten" und so weiter.
Kann man die irgendwie wieder "ablegbar" machen?
Das Problem wird auch hier beschrieben, aber leider keine Lösung angeboten. :(

(EDIT 3)
Habs doch hinbekommen.... hatte Begin onEquipItem ID 1.
Die 1 muss weg. :D
 
Zuletzt bearbeitet:
Erneut habe ich ein Problem:
Code:
scn aaDRCyraHQ14MynorcsAmulettSCRIPT

Short AnzahlRunensteineLeer

Begin onEquip Player
Set AnzahlRunensteineLeer To Player.GetItemCount aaDRCyra0HQ06Runenstein00Leer
Player.RemoveItemNS aaDRCyra0HQ06Runenstein00Leer AnzahlRunensteineLeer
Player.AddItemNS aaDRCyraLLHQ08Runensteine AnzahlRunensteineLeer
Message "X Runensteine aufgeladen..."
End

Dieser Skript soll alle im Besitz des Spielers befindlichen, leeren Runensteine entfernen und die gleiche Menge an aufgeladenen Runensteine aus einer LeveledList hinzufügt.

Problem ist, dass dann bspw. bei 10 leeren Runenstein 10 mal der gleiche Runensteintyp hinzugefügt wird.
Gibt es eine Möglichkeit, innerhalb diese 10 Steine weiterhin den Zufall entscheiden zu lassen, ohne die Zahl der hinzugefügten Objekte strikt festzulegen.

Außerdem die Frage: Wie mach ichs noch mal dass eine Variable in der Message angezeigt wird? Also dass statt X die Zahl da steht. :(
 
Ich nehme an, du meinst damit, dass es ähnlich wie bei den Seelensteinen verschiedene Größen gibt...
Dann könntest du doch einfach die Steine in einem bestimmten Verhältnis (das ist einfacher) hinzufügen, also beispielsweise:
Code:
short temp

set temp to ( 0.45 * AnzahlRunensteineLeer )
player.addItemNS aaDRCyraLLHQ08Runensteine01 temp
set temp to ( 0.25 * AnzahlRunensteineLeer )
player.addItemNS aaDRCyraLLHQ08Runensteine02 temp
set temp to ( 0.3 * AnzahlRunensteineLeer )
player.addItemNS aaDRCyraLLHQ08Runensteine03 temp
Probleme bekommst du eventuell, wenn bei Nachkommastellen diese abgeschnitten werden, sodass effektiv weniger Steine hinzugefügt werden als sollten.
Wenn du auch noch eine Zufallsvariable drin haben willst, wird es wie gesagt komplizierter.
Eventuell solltest du auch noch eine Abfrage einfügen, dass die Anzahl auch wirklich größer als 0 ist, sonst wird der Code umsonst ausgeführt.

Variablen kannst du so in Messages einfügen:
Code:
message "Der Wert ist: %.0f!" Variable
 
Problem ist, dass dann bspw. bei 10 leeren Runenstein 10 mal der gleiche Runensteintyp hinzugefügt wird.
Gibt es eine Möglichkeit, innerhalb diese 10 Steine weiterhin den Zufall entscheiden zu lassen, ohne die Zahl der hinzugefügten Objekte strikt festzulegen.

Probiers doch mal mit einer Schleife:

Code:
scn aaDRCyraHQ14MynorcsAmulettSCRIPT

Short AnzahlRunensteineLeer
Short AnzahlRunensteineVoll

Begin onEquip Player
Set AnzahlRunensteineLeer To Player.GetItemCount aaDRCyra0HQ06Runenstein00Leer

If AnzahlRunensteineLeer < 1
  Message "Keine Runensteine vorhanden..."
  return
EndIf

Set AnzahlRunensteineVoll To 0
Player.RemoveItemNS aaDRCyra0HQ06Runenstein00Leer AnzahlRunensteineLeer

Label RSCountdown
Player.AddItemNS aaDRCyraLLHQ08Runensteine 1
Set AnzahlRunensteineVoll To AnzahlRunensteineVoll + 1
If AnzahlRunensteineVoll < AnzahlRunensteineLeer
  GoTo RSCountdown
EndIf

Message "%.0f Runensteine aufgeladen..." AnzahlRunensteineVoll
End

Wenn das Script allerdings mehrere tausend Runensteine durchlaufen muss, könnte es ein Weilchen dauern. ;)
 
  • Like
Reaktionen: TheDarkRuler
Ist das denn so, dass bei mehrmaligem Hinzufügen der gleichen Leveled List immer das gleiche darin enthaltene Objekt gewählt wird? Ich dachte, dass wäre standardmäßig nur bei Leveled Lists in einer Leveled List der Fall... :huh:
Du könntest aber mal versuchen, ob es klappt, wenn du bei der Liste einen Haken bei "calculate for each item in count" machst.
 
  • Like
Reaktionen: TheDarkRuler
Hab erneut ein Problem:
Wieso läuft mein Rotationsskript nicht?
Ich habe zwei Ringe aus je 8 Objekten, welche um ihre Z-Achse rotiert werden müssen. Dabei soll der eine Ring in die eine und der andere in die andere Richtung gedreht werden. Ingame passiert aber nichts.:huh:

PHP:
scn aaDRCyraNQ06RunenplatteRotation01SKRIPT

Short RotAussen01
Short RotAussen02
Short RotAussen03
Short RotAussen04
Short RotAussen05
Short RotAussen06
Short RotAussen07
Short RotAussen08
Short RotInnen01
Short RotInnen02
Short RotInnen03
Short RotInnen04
Short RotInnen05
Short RotInnen06
Short RotInnen07
Short RotInnen08

Begin GameMode
Set RotAussen01 To ( DRCyraNQ06ArvainRingAussen01.GetAngle Z + 1)
Set RotAussen02 To ( DRCyraNQ06ArvainRingAussen02.GetAngle Z + 1)
Set RotAussen03 To ( DRCyraNQ06ArvainRingAussen03.GetAngle Z + 1)
Set RotAussen04 To ( DRCyraNQ06ArvainRingAussen04.GetAngle Z + 1)
Set RotAussen05 To ( DRCyraNQ06ArvainRingAussen05.GetAngle Z + 1)
Set RotAussen06 To ( DRCyraNQ06ArvainRingAussen06.GetAngle Z + 1)
Set RotAussen07 To ( DRCyraNQ06ArvainRingAussen07.GetAngle Z + 1)
Set RotAussen08 To ( DRCyraNQ06ArvainRingAussen08.GetAngle Z + 1)	
	
Set RotInnen01 To ( DRCyraNQ06ArvainRingInnen01.GetAngle Z - 1)
Set RotInnen02 To ( DRCyraNQ06ArvainRingInnen02.GetAngle Z - 1)
Set RotInnen03 To ( DRCyraNQ06ArvainRingInnen03.GetAngle Z - 1)
Set RotInnen04 To ( DRCyraNQ06ArvainRingInnen04.GetAngle Z - 1)
Set RotInnen05 To ( DRCyraNQ06ArvainRingInnen05.GetAngle Z - 1)
Set RotInnen06 To ( DRCyraNQ06ArvainRingInnen06.GetAngle Z - 1)
Set RotInnen07 To ( DRCyraNQ06ArvainRingInnen07.GetAngle Z - 1)
Set RotInnen08 To ( DRCyraNQ06ArvainRingInnen08.GetAngle Z - 1)
	
DRCyraNQ06ArvainRingAussen01.SetAngle Z RotAussen01
DRCyraNQ06ArvainRingAussen02.SetAngle Z RotAussen02
DRCyraNQ06ArvainRingAussen03.SetAngle Z RotAussen03
DRCyraNQ06ArvainRingAussen04.SetAngle Z RotAussen04
DRCyraNQ06ArvainRingAussen05.SetAngle Z RotAussen05
DRCyraNQ06ArvainRingAussen06.SetAngle Z RotAussen06
DRCyraNQ06ArvainRingAussen07.SetAngle Z RotAussen07
DRCyraNQ06ArvainRingAussen08.SetAngle Z RotAussen08
	
DRCyraNQ06ArvainRingInnen01.SetAngle Z RotInnen01
DRCyraNQ06ArvainRingInnen02.SetAngle Z RotInnen02
DRCyraNQ06ArvainRingInnen03.SetAngle Z RotInnen03
DRCyraNQ06ArvainRingInnen04.SetAngle Z RotInnen04
DRCyraNQ06ArvainRingInnen05.SetAngle Z RotInnen05
DRCyraNQ06ArvainRingInnen06.SetAngle Z RotInnen06
DRCyraNQ06ArvainRingInnen07.SetAngle Z RotInnen07
DRCyraNQ06ArvainRingInnen08.SetAngle Z RotInnen08
End
 
Mehrere Punkte kommen mir da in den Sinn:
- Set RotAussen01 To ( DRCyraNQ06ArvainRingAussen01.GetAngle Z + 1)
Funktioniert das so richtig? Vielleicht mal testweise auf 2 Zeilen aufteilen?
Set RotAussen01 To DRCyraNQ06ArvainRingAussen01.GetAngle Z
Set RotAussen01 To ( RotAussen01 + 1)


- Wie oft wird das Script überhaupt ausgeführt? Evtl. bräuchtest du noch irgend eine Zeitverzögerung, damit sich die Ringe nur x-mal pro Sekunde weiterdrehen.

- Z kann einen Wert von 0 bis 360 annehmen. Was passiert, wenn z bereits auf 360 ist und du addierst noch 1 hinzu?

Möglicherweise rast das Script schnell auf 360 Grad hoch und bleibt dort dann stehen, weil der Wert nicht höher werden kann.

Bei den positiven Werten könntest du mit dem Modulo arbeiten:
Set RotAussen01 To DRCyraNQ06ArvainRingAussen01.GetAngle Z
Set RotAussen01 To ( RotAussen01 + 1 ) % 360

Damit wird sozusagen alles, was über 360 ist, um 360 verringert.
Ob das auch bei negativen Werten funktioniert (-1 Grad wird zu 359 Grad), weiß ich allerdings nicht, das müsstest du mal ausprobieren.

Edit: achja, grad gefunden:

SetAngle axis, degrees
z.B. SetAngle x, 100

Da fehlt bei dir noch ein Komma ;)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TheDarkRuler
Wie stell ich das an, das wenn der Spieler einen Mod installiert hat, eine Person zu ihm aus einer anderen Zelle teleportiert wird die ihn anspricht?

mfg
Raven
 
Hi, ich brauche zwei Skripts.

1. Um einen Sound abzuspielen, eventuell auch mit Timer .

2. Was muss ich machen um folgendes zu erreichen.

- Dialog beendet
- Npc mit dem man vorher versprochen hat verschwindet
- neuer Npc erscheint