Construction Set Skriptthread zum Construction Set

Ich denke mal daß, das nicht auf eindeutig referenzierte NPC's zutrifft. Da hier nur der NPC mit genau dieser, im Spiel festgelegten, Referenz betroffen ist sollte das nicht das Basisobjekt beeinflussen.

Deswegen wird ja im Skript nicht nur der Zauber übertragen sondern auch eine Referenz des NPC's auf „target“ gelegt der dann dieser Zauber übertragen wird.
 
Auf den Gegenstand:
Code:
scn name

short doonce

Begin onDrop player

if doonce == 0
 set <Tür-Ref>.target to getSelf
 set doonce to 1
endif
player.moveTo <Marker-Ref>

end
Auf die Tür:
Code:
scn name

ref target

Begin onActivate

if isActionRef player
 player.moveTo target
endif

end


Sry wenn ich das nochmal ausgraben muss. Habe mich, nachdem ich zuerst eine alternative Lösung gefunden hatte doch noch entschieden das hier anzuwenden.

Das erste Sript lässt sich aber nicht speichern, er beschwert sich über die

set <Tür-Ref>.target to getSelf

Zeile:

"Unknown Variable or function target"
"Missing Variable Name in set command"
 
Nimm anstatt GetSelf „this“.

Also
Code:
Set TürRef.target to this
Ist das gleiche und das CS sollte damit zufrieden sein. Das CS mag es nunmal nicht wenn GetSelf auf Sachen angewendet wird. Es weiß ja nicht daß eigentlich der NPC gemeint ist der gerade die Tür benutzt. :D

Du mußt natürlich zuerst das Skript auf die Tür legen. Sonst findet er die Variable tatsächlich nicht.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darknightwalker
Daran sollte es nicht liegen. Du musst nur zuerst eine Tür mit dieser entsprechenden Referenz erstellen, weil sonst nicht klar ist, welche Variable gesetzt werden muss. Du musst natürlich auch das "<Tür-Ref>" durch die Referenz, die du deiner Tür gegeben hast ersetzen.
 
  • Like
Reaktionen: Darknightwalker
Das speichern hat geklappt, jedoch erziele ich ingame nicht ganz das gewünschte Ergebniss.

Das Problem ist hier:

scn name

short doonce

Begin onDrop player

if doonce == 0
set <Tür-Ref>.target to getSelf
set doonce to 1
endif
player.moveTo <Marker-Ref>

end
Ich werde ingame dauerhaft zum Marker teleportiert, sobald ich den Gegenstand drope. Ich habe schon versucht das moveto vor das endif zu machen, aber dann klappt es nur ein mal.

Am sonsten klappt aber alles. Danke schonmal :)
 
Um nochmal auf das Problem mit "addSpell" zurückzukommen...
Ich habe ein wenig rumgespielt und es scheint, als würden nur Zauber in das Zauberinventar des Base-Objects aufgenommen zu werden. Eigenschaften bleiben referenzgebunden.
Wenn man also "<Ref>.addSpell <Zauber>" ausführt, hat auch eine Referenz der gleichen ID diesen Zauber (nachprüfbar mit "hasSpell" (OBSE)). Wenn man aber "<Ref>.addSpell <Eigenschaft>" benutzt, gilt dies nur für die Referenz (zumindest in der Form, wie ich es getestet habe).
 
1. Ich will einen Ring erstellen der einen 33% größer macht.
2. Ich möchte ein Schwert machen das wenn man mit ihm zuschlägt ein Quest erscheint und einen Marker auf das Ziel legt.
 
1: Dafür legst Du folgendes Script auf den Ring:

Code:
SCN ...

Short Scale

Begin OnEquip

set scale to player.getscale
player.setscale (scale + (Scale - 0.77))

end
Man möge mich korrigieren, wenn das mit der Größe nicht stimmt. Ich weis das jetzt nicht so genau. :-D

2: Dafür erstellst Du einen Zauber mit folgendem Script und legst ihn auf das Schwert:

(Außerdem brauchst Du einem Marker in einer Dummy-Cell mit einer Referenz!)

Code:
SCN ...

Ref Target

Begin Scripteffectstart

set target to getself
setstage [quest] [stage]
[MarkerRef].MoveTo target

end
 
Zuletzt bearbeitet:
Ich hab mal eine Frage :roll:
Wenn ich zufälligerweise einen activator-Gegenstand erstellen möchte, der aber nur funktioniert, wenn ich eine var "x" durch einen Zauber, also in einem anderen Script, auf z.B. 1 gebracht habe. Wenn ich dann die Messagebox des
Activator geschlossen habe und das Script seinen Werk nachgeht, die var "x" wieder auf 0 gesetzt wird, wie kann ich die var scriptübergreifend verknüpfen?
(das eine ist also ein object-script und dass andere ist ein script efect).
 
:D Umständlicher kann man das wahrscheinlich nicht beschreiben... Der letzte Satz hätte vollkommen gereicht.
Du kannst eine Variable aus einem anderen Skript setzen oder abfragen indem du "<Ref-ID>.<Variable>" verwendest. Also erst die Referenz des Objektes und dann die Variable, genauso wie bei Quests.
 
Wie wäre es mit einer Verzauberung auf dem Ring? Dafür musst du zum einen ein Skript auf den Ring legen:
Code:
scn name

Begin onEquip player

player.addSpell <Eigenschaft-ID>

end

Begin onUnequip player

player.removeSpell <Eigenschaft-ID>

end
Dann erstellst du noch eine neue :huh:Eigenschaft:huh: mit einem neuen Skript-Effekt, dessen Skript ungefähr so aussieht (OBSE ist auch hier vonnöten):
Code:
scn name

short m
short x

long health
long magicka
long fatigue

long storedHealth
long storedMagicka
long storedFatigue

long playerHealth
long playerMagicka
long playerFatigue

long playerBaseHealth
long playerBaseMagicka
long playerBaseFatigue

long newHealth
long newMagicka
long newFatigue

float secondsPassed


Begin ScriptEffectUpdate

if onKeyDown 50
 set m to 1
 set x to 0
 return
endif

if onKeyDown 45
 set x to 1
 set m to 0
 return
endif

if m
 if isKeyPressed3 50
  set secondsPassed to scriptEffectElapsedSeconds
  set health to (20 * secondsPassed)
  set magicka to (20 * secondsPassed)
  set fatigue to (20 * secondsPassed)
  set playerHealth to getAV health
  set playerMagicka to getAV magicka
  set playerFatigue to getAV fatigue
  if playerHealth <= health
   set health to (playerHealth - 1)
  endif
  if playerMagicka <= magicka
   set magicka to (playerMagicka - 1)
  endif
  if playerFatigue <= fatigue
   set fatigue to (playerFatigue - 1)
  endif
  set storedHealth to (storedHealth + health)
  set storedMagicka to (storedMagicka + magicka)
  set storedFatigue to (storedFatigue + fatigue)
  set newHealth to (playerHealth - health)
  set newMagicka to (playerMagicka - magicka)
  set newFatigue to (playerFatigue - fatigue)
  setAV health newHealth
  setAV magicka newMagicka
  setAV fatigue newFatigue
  return
 else
  set m to 0
  return
 endif
endif

if x
 if isKeyPressed3 45
  set secondsPassed to scriptEffectElapsedSeconds
  set health to (20 * secondsPassed)
  set magicka to (20 * secondsPassed)
  set fatigue to (20 * secondsPassed)
  set playerHealth to getAV health
  set playerMagicka to getAV magicka
  set playerFatigue to getAV fatigue
  set playerBaseHealth to getBaseAV health
  set playerBaseMagicka to getBaseAV magicka
  set playerBaseFatigue to getBaseAV fatigue
  if (playerBaseHealth - playerHealth) < 0
   set health to 0
  elseif (playerBaseHealth - playerHealth) < health
   set health to (playerBaseHealth - playerHealth)
  endif
  if (playerBaseMagicka - playerMagicka) < 0
   set magicka to 0
  elseif (playerBaseMagicka - playerMagicka) < magicka
   set magicka to (playerBaseMagicka - playerMagicka)
  endif
  if (playerBaseFatigue - playerFatigue) < 0
   set fatigue to 0
  elseif (playerBaseFatigue - playerFatigue) < fatigue
   set fatigue to (playerBaseFatigue - playerFatigue)
  endif
  if storedHealth < health
   set health to storedHealth
  endif
  if storedMagicka < magicka
   set magicka to storedMagicka
  endif
  if storedFatigue < fatigue
   set fatigue to storedFatigue
  endif
  set storedHealth to (storedHealth - health)
  set storedMagicka to (storedMagicka - magicka)
  set storedFatigue to (storedFatigue - fatigue)
  set newHealth to (playerHealth + health)
  set newMagicka to (playerMagicka + magicka)
  set newFatigue to (playerFatigue + fatigue)
  setAV health newHealth
  setAV magicka newMagicka
  setAV fatigue newFatigue
  return
 else
  set x to 0
  return
 endif
endif

end
Ich hab das Skript jetzt nicht getestet und gebe somit auch keine Garantie auf die Funktionalität.

Was meinst du mit Eigenschaft und wo geht das im CS???
 
:D Umständlicher kann man das wahrscheinlich nicht beschreiben... Der letzte Satz hätte vollkommen gereicht.
Du kannst eine Variable aus einem anderen Skript setzen oder abfragen indem du "<Ref-ID>.<Variable>" verwendest. Also erst die Referenz des Objektes und dann die Variable, genauso wie bei Quests.

kann ich auch anstatt einer Objekt-Referenz eine Spell-Referenz angeben?

Edit: Wie und wo kann ich die Variable aus dem anderen Script setzen?
 
Zuletzt bearbeitet:
Hallo ich suche ein Script für:
Ein Schaf und zwar eine Funktion für Folgen und Warten wenn ich das Schaf mit der Activieren-Taste anklicke das dann eine Box mit Folgen,Warten,Abbrechen
erscheint.
Die Frage wurde bestimmt schon 1000mal gestellt ich hab aber keine Lust 500 Seiten durchzulesen^^
 
@OblivionBee: Eine Eigenschaft erstellst du unter Magic --> Spell. Dort musst du eine neue ID erstellen und kannst dann zwischen Krankheit, Großer Macht, Kleiner Macht, Zauber und Eigenschaft wählen.

@Foxbuild:
1. Nein. Zauber haben keine Referenz. Aber du könntest zusätzlich noch ein Quest-Skript erstellen und dort eine Variable setzen, auf die du in deinem Zauber zurückgreifst.
2. So wie wenn die Variable in diesem Skript deklariert wurde. Du musst nur die Referenz als Zusatz einfügen.

@Irathindur: Dafür benötigst du AI-Packages, die du vorher erstellen solltest. Um dem Schaf welche zuzuweisen kannst du so ein Skript verwenden:
Code:
scn name

short init
short button

Begin onActivate

if isActionRef player
 if init == 0
  set init to 1
  set button to -1
  messagebox "Was soll das Schaf tun?" "Folgen" "Warten" "<Abbrechen>"
 endif
endif

end


Begin GameMode

if init
 set button to getButtonPressed
 if button == -1
  return
 elseif button == 0
  set init to 0
  addScriptPackage <Folgen-Package-ID>
 elseif button == 1
  set init to 0
  addScriptPackage <Warten-Package-ID>
 else
  set init to 0
  return
 endif
endif

end