Construction Set Skriptthread zum Construction Set

Hallo Leute,

ich brauche mal ganz dringend ein Skript. Und zwar soll nach der Tötung einiger Creatures ein NPC erscheinen(NPC ist auf initially disabled gesetzt), die Player-Funktionen sollen einfrieren, der NPC soll mit dem Player reden und anschließend angreifen. Player tötet NPC = Queststufenanstieg.

Bis hierhin bin ich schon gekommen, würdet ihr das bitte ergänzen bzw korrigieren?

PHP:
scn name

Begin GameMode

if getStage Quest-ID == aktuelle Stage
 if Creature1Ref.getDead == 1
  if Creature2Ref.getDead == 1
   if Creature3Ref.getDead == 1
      DisablePlayerControls 
      NPCRef.enable
      NPCRef.startconversation Player
      NPCRef.startcombat Player
        if NPCRef.getDead == 1
        setStage Quest-ID Stage
        endif
   endif
  endif
 endif
endif

end

Danke schon mal für eure Hilfe.
 
So kurze Skripte lob ich mir. :D

Aber wo wird abgefragt, ob die Creatures tot sind?
Wo werden die Playerfunktionen eingefroren?
Wo wird die Conversation gestartet?
 
Nirgends.
Hier mal zwei Skripte, die du beide brauchst. Erst mal das normale Objektskript.

Objektskript
Das Skript, was auf einem Objekt liegen muss.
PHP:
scn Skriptname

Short Counter

Begin GameMode
If ( Counter == 0 )
 If ( getStage Quest-ID == aktuelle Stage )
  If ( Creature1Ref.getDead == 1 )
   If ( Creature2Ref.getDead == 1 )
    If ( Creature3Ref.getDead == 1 )
     Set Counter To 1
    Endif
   Endif
  Endif
 Endif
Elseif ( Counter == 1 )
 Set Counter To 2
 DisablePlayerControls
 NPCRef.enable
 NPCRef.startconversation Player
Elseif ( Counter == 2 ) && ( Quest-ID.TalkVar == 1 )
 Set Counter To 3
 NPCRef.SetActorValue Aggression 100
 NPCRef.StartCombat Player
Elseif ( Counter == 3 )
 If ( NPCRef.GetDead == 1 )
  Set Counter To 4
  SetStage QuestID Stage 
 Endif
Endif
End

Questskript
Hier noch ein Questskript, was du an die Quest andocken musst.
PHP:
scn Questskriptname

Short TalkVar
 
  • Like
Reaktionen: Arielle 1000
Hallo DarkRuler, danke für das Skript.

Es funktioniert sehr gut, allerdings nur bis zum Ende des Dialoges zwischen NPC und Player. Anschließend bleiben die Playerfunktionen immer noch eingefroren und der NPC fängt nicht an zu kämpfen. Müssen wir vielleich zwischendurch die Player Controls noch enablen?
 
Ok, bis zum Tod des NPC klappt nun alles. Aber die Stage wird nicht hochgeschaltet. Haben wir evtl. noch was übersehen? Sind die Klammern in deinem Skript relevant?
 
Ja, darauf habe ich natürlich geachtet. Aber ich habe das inzwischen anders gelöst. Ich habe einfach noch einen OnDeath-Block dem Skript hinzugefügt. Jetzt klappt es ohne Probleme.

Aber jetzt habe ich noch eine Frage:

ein weiterer NPC soll mit einem anderen NPC eine Konversation halten. Ich habe dafür den Skriptbefehl "NPC1Ref.startconversation NPC2Ref" gewählt.
Die beiden gehen auch wirklich aufeinander zu und unterhalten sich, aber leider nur übers Wetter.:lol:
NPC1 hat aber Topics zugewiesen bekommen, die er dem NPC 2 sagen soll. Habe ich den falschen Skriptbefehl gewählt?
 
Oh nein, das macht man ganz anders.
StartConversation ist nur für einen Dialog zwischen einem NPC und dem Spieler.

Um zwischen NPCs ein Gespräch zu machen, musst du es so machen.
PHP:
scn Name

Short Once
Float SpeakTimer

Begin onTriggerActor Player
If ( Once == 0 )
    Set Once To 1
Endif
End

Begin GameMode
If ( Once == 0 )
    Return
Elseif ( Once == 1 )
    Set Once To 2
    Set SpeakTimer To Referenz01.SayTo Referenz02 Topic01 1
Elseif ( Once == 2 )
    If ( SpeakTimer > 0 )
        Set SpeakTimer To ( SpeakTimer - GetSecondsPassed )
    Else
        Set Once To 3
    Endif
Elseif ( Once == 3 )
    Set Once To 4
    Set SpeakTimer To Referenz02.SayTo Referenz01 Topic02 1
Elseif ( Once == 4 )
    If ( SpeakTimer > 0 )
        Set SpeakTimer To ( SpeakTimer - GetSecondsPassed )
    Else
        Set Once To 5
    Endif
Elseif ( Once == 5 )
    Set Once To 6
    Set SpeakTimer To Referenz01.SayTo Referenz02 Topic03 1
Elseif ( Once == 6 )
    If ( SpeakTimer > 0 )
        Set SpeakTimer To ( SpeakTimer - GetSecondsPassed )
    Else
        Set Once To 7
    Endif
Elseif ( Once == 7 )
    Set Once To 8
    Set SpeakTimer To Referenz01.SayTo Player Topic04 1
Elseif ( Once == 8 )
    If ( SpeakTimer > 0 )
        Set SpeakTimer To ( SpeakTimer - GetSecondsPassed )
    Else
        Set Once To 9
    Endif
Endif
End
 
  • Like
Reaktionen: Arielle 1000
Oh, da war ich ja ganz auf dem Holzweg.:D
ich muss aber doch etwas dazu fragen.

"Begin onTriggerActor Player" - muss ich hier einen Trigger setzen, den der Player betreten soll?
Das geht leider in der Quest nicht, da die Player Controls disabled werden sobald der NPC1 erscheint.
 
Hallo, ich habe auch mal wieder eine Frage:

Ich möchte das der Player (also NPC oder Avatar), wenn er einen Trigger betritt zu einem bestimmten Punkt transpotiert wird.

Danke
 
Hallo, ich habe auch mal wieder eine Frage:

Ich möchte das der Player (also NPC oder Avatar), wenn er einen Trigger betritt zu einem bestimmten Punkt transpotiert wird.

Danke

PHP:
scn MeclatonsTriggerPortScript

short once

Begin onTriggerActor Player
	If(once == 0)
		set once to 1
		Player.moveto <MeclatonsXMarker>
	Endif
End

Anstatt <MeclatonsXMarker> musst du lediglich den entsprechenden Referenznamen des Zielmarkers eintragen. Der Trigger lässt sich dann genau einmal nutzen. ;)

MfG Master of Worlds
 
  • Like
Reaktionen: Meclaton
Danke und wenn es immer funktionieren sol, wenn man es betritt?

PHP:
scn MeclatonsTriggerPortScript

short once

Begin onTriggerActor Player
	If(once == 0)
		set once to 1
		Player.moveto <MeclatonsXMarker>
	Endif
End

Begin GameMode
	If (once == 1)
		set once to 0
	EndIf
End

Dann würde ich es einfach so probieren.
Wenn sich der Trigger erst nach einem Zellenreset wieder nutzen lassen soll, könntest du auch anstatt GameMode einen OnReset-Block.

PHP:
Begin OnReset
	If (once == 1)
		set once to 0
	EndIf
End

MfG Master of Worlds
 
  • Like
Reaktionen: Meclaton
Arielle 1000 schrieb:
Oh, da war ich ja ganz auf dem Holzweg.

Bei einer wechselseitigen Unterhaltung zwischen zwei NPC kannst Du auch einfach die Conversation-Topics im CS verlinken. Dann braucht dein Skript nur noch NPC1Ref.SayTo NPC2Ref ErstesTopic um das Gespräch zu starten, der Rest funktioniert automatisch.
 
  • Like
Reaktionen: TheDarkRuler
PHP:
scn MeclatonsTriggerPortScript

short once

Begin onTriggerActor Player
    If(once == 0)
        set once to 1
        Player.moveto <MeclatonsXMarker>
    Endif
End

Begin GameMode
    If (once == 1)
        set once to 0
    EndIf
End

Dann würde ich es einfach so probieren.
Wenn sich der Trigger erst nach einem Zellenreset wieder nutzen lassen soll, könntest du auch anstatt GameMode einen OnReset-Block.

PHP:
Begin OnReset
    If (once == 1)
        set once to 0
    EndIf
End

MfG Master of Worlds

Eine Frage noch: ich möchte gerne, dass ein Sond abgespielt wird, wenn die Person in den Trigger läuft und zwar bei jedem erneuten betreten, oder (als Option für mich zur Info) nur einmalig.

Ist dies so möglich? Ich habe im Moment das Problem, dass der Sound erst beim zweiten Durchgang abgespielt wird.