Construction Set Skriptthread zum Construction Set

Ich habe auch eine Frage.
Ich möcht einen Berührungszauber erstellen mit dem man das gnze inventar von eines Npcs bekommt und seine Kleidung nicht auszeihen kann und ein neuer Npc esrcheint.

( z.B. Wenn ich in an Baurus einsetze bekomme ich sein Inventar ( er verschwindet ) , dann erscheint statt ihn irgendein Npc und wenn ich ihn an den Npc einsetzte der erschienen ist ist er weg und Buarus ist wieder da und das inventar sit auch weg.
 
Zuletzt bearbeitet:
Code:
scn ...

Ref Referenz01
Short DoOnce

Begin ScriptEffectStart

Set Referenz01 to GetSelf

If (DoOnce == 0)
 Referenz01.disable
  ActorRef.enable
  ActorRef.MoveTo player
 Set DoOnce to 1
Elseif (DoOnce == 1)
 Referenz01.enable
  ActorRef.disable
 Set DoOnce to 0
Endif
End

ActorRef ist keine Variable.
Die musst du dem NSC vorher in sein Menü eingeben ;)
 
  • Like
Reaktionen: DragonRider
Äh ja, ich weiss allerdings nicht was eine Variable oder ein NSC ist.
[ darf ja auch erst seit ein paar Monanten Oblivion spielen. ( daraus folgt das ich auch noch nicht so lange mit dem CS rummache und daher nicht die Fachbegriffe so gut kenne) bin ja erst 12:D ]
 
Also eine Variable musst du dir vorstellen, wie eine Kiste, die zahlen enthält.
IN ihr werden Daten gespeichert, und abgefragt

NSC kenne ich nicht, aber ich denke der NPC ist gemeint.
NPC sind nicht spielbare KI-Charaktere...

Hallo. Ich bräuchte Idden/Anregungen für ein Script.

Wie kann ich eine Eisplatte (zzeisplatte) unter STATIC mit einem Script (MagicEffect) belegen, das FOLGENDES kann:
1.) Die Platte soll zuerst NICHT ingame vorhanden sein
2.) bei anwendung des zaubers (also scripteffet start) soll die Eisplatte UNTER den füßen des Players erscheinen
3.) Sie soll für die Dauer des Zaubers IMMER unter den Füßen bleiben (also in jedem Frame unter die Füße Porten
4.) Sie soll nach dem Zauber wieder verschinden
5.) Die Eisplatte soll NUR DANN ERSCHEINEN wenn der Player im Wasser steht
Also abfragen, ob er im wasser steht, dann die Platte holen)

Im prinzip wie der Unterwasserlaufen-Effekt, nur mit ner Platte unter den Füßen.

Wie sollteich das angehen?

Danke & LG

Creamy
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: DragonRider
Soso meine Beschreibung war dir also niht präzise genug xD Ich kenne nur die Abfrage "IsInDangerousWater"....Ob es das auch einfach für "IsInWater" gibt,weiß ich nicht:( Bei OBSE aber bestimmt...

Code:
scn NAME

begin scripteffectstart
if player.isinwater==1
eisplatte01.enable
else
player.dispel ZAUBER-ID
message"Ihr befindet Euch nicht im Wasser"
endif
end

begin scripteffectupdate
eisplatte01.moveto player X Y Z
end

begin scripteffectfinish
eisplatte01.disable
end
Das mit dem x,y,z musst du dir von jmd anderem erklären lassen oder ausprobieren. Ich glaube 2 dieser Werte müssen bei 0 bleiben und eine auf ca. 20 damit das Port-Ziel unter den Füßen ist...Kenne mich mit den Maßeinheiten aber nicht so gut aus

Edit: Falls das mit dem in jedem Frame porten nicht klappt lösche den Scripteffectupdate-Teil und lege stattdessen folgendes Script auf die Eisplatte:
Code:
scn NAME
float fquestdelaytime

begin gamemode
set fquestdelaytime to 0.01
if getdisabled==0
moveto player
else
return
endif
end
 
Zuletzt bearbeitet:
@ DragonRider:
100%-ig kann das, was du willst nur mit OBSE realisiert werden. Alerdings nur mit ellenlangen Reference-Walking-Funktionen. Die Mühe erspare ich mir jetzt lieber und schreibs in einer einfachen Variante ohne OBSE.
Zuerst brauchst du eine Quest mit so einem Skript:
Code:
scn name

ref target
short state

Dann kommt das Skript für den Zauber:
Code:
scn name

ref target
float pos_x
float pos_y
float pos_z
float ang_x
float ang_z

Begin ScriptEffectStart

if <Quest-ID>.state
 if getIsReference <Actor-Ref>
  set <Quest-ID>.state to 0
  disable
  set pos_x to getPos x
  set pos_y to getPos y
  set pos_z to getPos z
  set ang_x to getAngle x
  set ang_z to getAngle z
  set target to <Quest-ID>.target
  target.moveTo <Actor-Ref>
  target.setPos x pos_x
  target.setPos y pos_y
  target.setPos z pos_z
  target.setAngle x ang_x
  target.setAngle z ang_z
  target.enable
 else
  messagebox "Ihr könnt den Zauber jetzt nicht auf diesen Charakter legen!"
 endif
else
 set target to getSelf
 set <Quest-ID>.target to target
 set <Quest-ID>.state to 1
 duplicateAllItems player
 set pos_x to getPos x
 set pos_y to getPos y
 set pos_z to getPos z
 set ang_x to getAngle x
 set ang_z to getAngle z
 disable
 <Actor-Ref>.moveTo target
 <Actor-Ref>.setPos x pos_x
 <Actor-Ref>.setPos y pos_y
 <Actor-Ref>.setPos z pos_z
 <Actor-Ref>.setAngle x ang_x
 <Actor-Ref>.setAngle z ang_z
 <Actor-Ref>.enable
endif

end

Das birgt jetzt natürlich mehrere Probleme, zum Beispiel, wenn der Zauber auf einen questrelevanten NPC gewirkt wird oder der Ziel-NPC Questgegenstände im Inventar hat. Außerdem wird die Ausrüstung des NPC nicht automatisch vom Spieler ausgerüstet (dafür müsste OBSE benutzt werden) und die Ausrüstung wird auch nicht wieder vom Spieler entfernt (auch dafür wäre OBSE vonnöten, falls es überhaupt möglich ist).

Im unteren Skript trägst du bei "<Quest-ID>" die ID der Quest ein, der du das obere Skript zugewiesen hast, bei "<Actor-Ref>" fügst du die Referenz des Actors ein, der immer erscheinen soll. Dafür klickst du diesen NPC, wenn er im CS platziert ist, doppelt an und gibst im aufpoppenden Fenster in der obigen Zeile die Referenz ein, die du dann kopierst.


@ CreamyCewie:
Ich würde dir ja raten, einfach einen Wasserlauf-Effekt zu benutzen, aber der ist ja auch aktiv, wenn der Spieler nicht im Wasser ist. Eine Alternative, die mir einfällt, könntest du afaik mit OBSE realisieren:
Code:
scn name

ref target
short enabled

ref cell
float water_height
float pos_z

float pos_x
float old_pos_x
float pos_y
float old_pos_y


Begin ScriptEffectStart

set target to getSelf
set cell to getParentCell
set water_height to getParentCellWaterHeight
<Platte1-Ref>.moveTo target
<Platte2-Ref>.moveTo target

end


Begin ScriptEffectUpdate

if cell != getParentCell
 set cell to getParentCell
 set water_height to getParentCellWaterHeight
 <Platte1-Ref>.moveTo target
 <Platte2-Ref>.moveTo target
endif
if water_height >= getPos z
 set pos_x to getPos x
 set pos_y to getPos y
 if pos_x != old_pos_x && pos_y != old_pos_y
  if enabled == 1
   set enabled to 2
   <Platte1-Ref>.disable
   <Platte2-Ref>.setPos x pos_x
   <Platte2-Ref>.setPos y pos_y
   <Platte2-Ref>.setPos z pos_z
   <Platte2-Ref>.enable
  else
   set enabled to 1
   <Platte1-Ref>.setPos x pos_x
   <Platte1-Ref>.setPos y pos_y
   <Platte1-Ref>.setPos z pos_z
   <Platte1-Ref>.enable
   <Platte2-Ref>.disable
  endif
 endif
 set old_pos_x to pos_x
 set old_pos_y to pos_y
 return
elseif enabled == 1
 <Platte1-Ref>.disable
elseif enabled == 2
 <Platte2-Ref>.disable
endif
set enabled to 0

end
 
  • Like
Reaktionen: DragonRider
Also zumindest bei dem oberen Skript sollte man doch den ganzen SetPos-Kram mit einem Moveto-Befehl lösen können,oder? Der setzt ja schließlich alle Koordinaten udn Angles auf den Wert der Ziel-Referenz...:?
 
Nicht unbedingt. Bei "moveTo <Ref>" wird die Referenz zum Ziel teleportiert, aber nicht unbedingt an die gleichen Koordinaten, sondern an eine freie Fläche.
 
Ok. Also sollte ich einfach einen Wasserlaufen-Effekt mit der platte kombinieren?

UNd die platte einfach mit dem Script von Diarrhoe zum player porten?

und das soll eben nur im wasser funktionieren...

Danke & LG
CC
 
Ich will, dass eine Rasse nicht von einer Fraktion angegriffen wird.
Ausserdem weiss ich, dass das I-Wie mit Eigenschaften gemacht wird.
Aber was für eine Eigenschaft? Ich weiss, dass es mit ScriptEffect ist, aber wie muss der Script lauten?
 
Du könntest alle Angehörige dieser Rasse in eine Fraktion stecken und dann das Verhältnis zwischen den beiden Personen positiv einstellen.
 
Dann erstellst du dafür ein Quest-Skript, das ungefähr so aussieht:
Code:
scn name

Begin GameMode

if getStageDone MQ01 90
 player.setFactionRank <Faction-ID> 0
 stopQuest <Quest-ID>
endif

end
 
  • Like
Reaktionen: Drachenfeuer
Ups hatte ich ganz vergessen...
Dann muss das Skript noch ein wenig geändert werden:
Code:
scn name

Begin GameMode

if getStageDone MQ01 90
 if getIsRace <Race-ID>
  player.setFactionRank <Faction-ID> 0
  stopQuest <Quest-ID>
 endif
endif

end
 
  • Like
Reaktionen: Drachenfeuer
Ich bekomme beim Speichern die Meldung
"Script AAAGeistFraction (ja, ich will zahme Geister machen :p), line 6:
Reference function 'getIsRace' requires expicit reference in Quest Script."
Mein Script:
scn AAAGeistFraction
Begin GameMode
if getStageDone MQ01 90
if getIsRace DarkElf
player.setFactionRank UndeadFaction 0
stopQuest AAAGeistFraction
endif
endif
end