Construction Set Skriptthread zum Construction Set

Ich meine, dass ich eine Tür beschwören kann, die einen an einen bestimmten Ort bringt, und bleibt, bis man es neu beschwört; so wie diese Xmarker-Teleport-Geschichte, nur, dass andere mir folgen können.
 
Dann solltest du die Tür am besten verskripten.

Code:
scn ZauberScript

begin scripteffectstart
Tür-REF.moveto player
end
Code:
scn TuerScript
ref target

begin onactivate
set target to getactionref
target.moveto Ziel-Marker-REF
end
Allerdings bin ich mir nicht sicher,ob die NPCs von alleine durch die Tür gehen werden... Sicherheitshalber solltest du sie vllt trotzdem mit Doormarkern verlinken.

Edit: Also du setzt praktisch an den Zielort auch noch eine Tür,die aber irgendwo im Boden ist oder anderso,wo man sie nicht sieht, gibst ihr ggf. noch das "NoActivationScript" und setzt sie als Ziel für dein beschwörbares Portal.

Edit2: @Diarrhoe oder jemand anderen schlaues^^
Ich meien mich erinnern zu können, dass man per Skript auch eine verlinkte Tür erkennen kann, finde aber keinen passenden Befehl:(

Edit3: Wusst ichs doch,dass es "GetLinkedDoor" ist :lol: Also hier eine Alternative:
Code:
scn TuerScript
ref target
ref destination

begin onactivate
set target to getactionref
set aim to GetLinkedDoor
target.moveto destination
end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Drachenfeuer
Zuletzt bearbeitet:
Upps!
Also für Variante 1 solltest du einen XMarker an die Stelle des Ziel-Tür-Doormarkers setzen. Beim zweiten Scripthab ich die Variable erst "aim" genannt und mich dann doch für "destination" entschieden :oops: einfach eins von beidem ins andere umändern;)
 
  • Like
Reaktionen: Drachenfeuer
Mal eine Frage zwischendurch.
Kann ich bestimmte Wesen ab einem bestimmten Questfortschritt in einer Zelle, bzw in einem Interior spawnen lassen, und zwar nur dann, weder früher noch später?
Und nebenbei alle NPC's ausblenden, die normalerweise da stehen?
Das Problem wird dabei, dass ich im Tempel was ändern will, und der ja je nach HQ Fortschritt sich ändert...
 
Jetzt komm ich nochmal.

Für eine ganz billige Quest brauche ich ein Script, dass, wenn der Charactere mindestens 4 Stunden geschlafen hat, das Schlafen abbricht und einen Gegner neben dem Bett erscheinen lässt, der natürlich besiegt werden möchte. Der tote Gegner soll dann aber nach zwei Tagen wieder verschwinden und nicht da ewig im Haus liegenbleiben.

Hier biete sich das Dreckhack-Script an. Wie muss ich das verändern, damit das obige rauskommt?

Gruß

Korbi_789
 
Klar,

Code:
scn HackdirtMoslinsInnBedScript

ref attackRef

begin menumode
	if IsPCSleeping == 1 && RentHackdirtMoslinsInn == 1 && attackRef == 0 && ( gamehour > 18 || gamehour < 6 )
		if HackdirtBrethren01.getdead == 0
			set attackRef to HackdirtBrethren01
		elseif HackdirtBrethren02.getdead == 0
			set attackRef to HackdirtBrethren02
		elseif HackdirtBrethren03.getdead == 0
			set attackRef to HackdirtBrethren03
		endif
		if attackRef > 0
			attackRef.moveto HackdirtMoslinsInnAttackMarker
			attackRef.startcombat player
		endif
		set attackRef to 1
	endif
end
 
Code:
scn name
short once

begin menumode
if once==0
if getpcsleephours >=4
moveto player
startcombat player
set once to 1
endif
endif
end
Damit er verschwindet,darfst du dem NPC einfach kein Häkchen bei "Questitem" machen.

Edit: So wie das Skript momentan ist, passiert es sobald der Spieler zum ersten mal 4 Stunden oder länger schläft. Ich denke aber,du willst noch eine Ortsangabe oder zu erfüllende Queststage reinhaben oder?
 
naja ich würds ungefähr so machen...aber das gelbe vom ei is dasn icht...kann auch ned garantieren obs geht.
Code:
scn name
Begin GameMode
 If GetStage [I]QuestID[/I] == [I]QuestStage[/I]
[I] WesenREF.[/I]enable
  [I]NPCREF[/I].disable
 else
  [I]WesenREF.[/I]Disable
  [I]NPCREF[/I].Enable
 endif
end

WIe gesagt, sicher nicht perfekt und warscheinlich gehts auch viel weniger aufwenidg, vorallem wenn du mehrere NPCs en/disablen musst...aber immerhin schon ein ANfang.
LG
Dacri

EDIT: Cool, Diarrhoe ist meiner meinung! *stolz^^
 
Code:
scn name
short once

begin menumode
if once==0
if getpcsleephours >=4
moveto player
startcombat player
set once to 1
endif
endif
end
Damit er verschwindet,darfst du dem NPC einfach kein Häkchen bei "Questitem" machen.

Edit: So wie das Skript momentan ist, passiert es sobald der Spieler zum ersten mal 4 Stunden oder länger schläft. Ich denke aber,du willst noch eine Ortsangabe oder zu erfüllende Queststage reinhaben oder?

Ja, genau.

Also:

Spieler liest --> Star der "Quest" --> Schläft, Gegener im Raum, greift ihn an --> Gegner tot, Quest erfüllt.
 
Dann ersetzen wir das "once" doch einfach durch die Queststsge;)
Code:
scn name

begin menumode
if getstage Quest-ID== X
  if getpcsleephours >=4
  moveto player
  startcombat player
  setstage Quest-ID Y
  endif
endif
end
Für den Quest-eintrag bei "Y" empfehle ich dir,einfach eine leere Queststage zu benutzen.
 
Dafür brauchst du ein paar mehr Skripts. Einmal auf dem Buch:
Code:
scn name

short doonce

Begin onActivate

activate
if isActionRef player
 if doonce == 0
  set doonce to 1
  setStage <Quest> <Stage1>
  set <Quest>.fQuestDelayTime to 0.01
 endif
endif

end


Begin onEquip player

if doonce == 0
 set doonce to 1
 setStage <Quest> <Stage1>
 set <Quest>.fQuestDelayTime to 0.01
endif

end

Auf der Quest:
Code:
scn name

float fQuestDelayTime
float hours

Begin MenuMode 1012

if getStage <Quest> == <Stage1>
 if isPCSleeping
  if getPCMiscStat 20 >= (hours + 4)
   <Gegner-Ref>.moveTo player
   <Gegner-Ref>.startCombat player
   wakeUpPC
   setStage <Quest> <Stage2>
  endif
  return
 endif
 set hours to getPCMiscStat 20
endif

end

Und auf dem Gegner:
Code:
scn name

Begin onDeath player

if getStage <Quest> == <Stage2>
 setStage <Quest> <Stage3>  ;die Stage hat einen Haken bei "Complete Quest"
endif

end
 
  • Like
Reaktionen: Korbi_789
Abend, ich brauche ein Script, das etwas dierekt vor dem Player enablet wenn man einen Zauber benutzt. beim Zweiten mal soll es aber nicht weggehen, sondern ein zweites soll erscheinen unendlich oft. Nur mit einem anderen Zauber kann man dann alle Objekte auf einmal "löschen"

g Käse:)
 
Das solltest du mit "placeAtMe" realisieren können. Allerdings solltest du von intensiver Nutzung des Befehls absehen, da die erzeugten Objekte das Savegame vergrößern, was zu Problemen beim Spielen und Laden führen kann. Deswegen sollte "moveTo" immer die erste Wahl sein, auch wenn man dann eventuell vorher ein paar Objekte erstellen muss.
Die mit "placeAtMe" erzeugten Objekte wirst du nämlich nicht so leicht los. Bei Items kannst du dich mit "removeMe" oder "removeAllItems" behelfen, bei einem Actor musst du den Zellreset ausnutzen, aber bei einem Activator hilft beides nicht.
Ein weiteres Problem ist, dass du nicht eine beliebige Anzahl an Referenzen speichern kannst (bin mir gerade nicht sicher, ob es nicht doch mit OBSE-Arrays und Pluggy geht).

Ungeachtet der Savegame-Probleme könntest du das ganze so schreiben: Zum einen ein Questskript (dient nur als Quelle für eine Variable, du könntest auch eine Global verwenden):
Code:
scn name

short init

Der Scripteffect für das Erschaffen des Objekts:
Code:
scn name

Begin ScriptEffectStart

placeAtMe <Objekt> 1, 250, 0

end

Der Scripteffect für das Löschen der Objekte:
Code:
scn name

Begin ScriptEffectStart

set <Quest>.init to (<Quest>.init + 1)

end

Und ein Skript auf dem Objekt:
Code:
scn name

short state
short init

Begin GameMode

if state == 0
 set state to 1
 set init to <Quest>.init
elseif state == 1
 if init != <Quest>.init
  set state to 2
  disable
 endif
endif

end
 
  • Like
Reaktionen: Käsekuchen