Construction Set Skriptthread zum Construction Set

Also wie schon mal erwähnt (?!) bräuchte ich ein Skript, welches eine Verzauberung beinhaltet (also wie eine ganz normale Verzauberung auf einer Waffe, nur dass der Effekt auf den Träger der Waffe wirken soll und nicht auf Treffer), also zum Beispiel: "Waffe auflösen 1 Punkt an selbst".

Zauber, die auf den Spieler selbst wirken, können ich ja über ne Verzauberung auf ner Waffe wie gesagt nicht auf den Spieler selbst anwenden, weshalb dieser Zauber in ein Skript müsste, welches man dann der Waffe verpassen kann.
 
mhh so ich hab jetzt auch mal wieder ne frage^^

und zwar bezüglich "additem". Ich hab ja nebenan schon im thread gefragt ob man items einfach in container einfügen kann ohne probleme mit anderen mods zu bekommen, was ja leider nicht geht. Also hab ich mal geschaut ob das irgendwie mithilfe des additem befehls geht.
Problem : Additem braucht eine ReferenceID....man kann also nicht die EditorID verwenden. Dann habe ich aber gesehn, dass man auch ne Reference-Variable nutzen kann. Also gleich ausprobiert:
Code:
scn tbtestscript

ref con

begin gamemode

set con to 0002445B // ist die ID von einer ganz normalen Tonne("BarrelClutterMiddle03")
con.additem test1 1


end
Resulat: Geht nicht....mecker irgendwie rum von wegen 'B' sei non-persistant und dann unknown command.
Also hab ich mir gedacht juti gibste einfach mal die EditorID an
Versuch 2:
Code:
scn tbtestscript

ref con

begin gamemode

set con to BarrelClutterMiddle03
con.additem test1 1


end
supi keine Fehlermeldung, PI gespeichert und rein ins Spiel zum gucken. Und was seh ich? kein test1-Item in der Tonne *grummel*

also habe ich asl ref 'con' mal 'player' genommen woraufhin alles so ging wie gedacht...also alle 5 sekunden ein neues test1-item im inventar.
Meine Frage jetzt...wieso geht das bei dem anderen Container nicht?
 
Noch eine Frage: Gibt es einen Befehl, der die Ansicht automatisch in die 3rd-Person-Ansicht wechseln lässt, wie z.B. bei Lähmung des Spielers? Es gibt zwar einen OBSE-Befehl, "IsThirdPerson", der feststellen kann, OB gerade in der 3rd-Person-Ansicht gespielt wird oder nicht, aber offenbar keinen Befehl, der die Ansicht ändert...

Gibt es vielleicht alternativ einen Befehl, der das Drücken der Ansicht-wechseln-Taste für den Spieler übernimmt (Standard: R)?
 
Hallo.

Ich bräuchte mal wieder ein Script, ich denke, dass es aber nicht so schwer ist:

Also ich habe 3 Türen. Wenn der player durch eine von ihnen geht, sollen die anderen 2 nicht mehr passierbar sein, meinetwegen durch den disable-Befehl oder durch Lock 100, egal.

Kann mir jemand ein solches Script nennen?
 
Zuletzt bearbeitet:
Hallo.

Ich bräuchte mal wieder ein Script, ich denke, dass es aber nicht so schwer ist:

Also ich habe 3 Türen. Wenn der player durch eine von ihnen geht, sollen die anderen 2 nicht mehr passierbar sein, meinetwegen durch den disable-Befehl oder durch Lock 100, egal.

Kann mir jemand ein solches Script nennen?

Ok müsste ja ganz simple sein:
Code:
scn DreiTüren

short activated

Begin onActivate
	if activated == 0
		activate
		set activated to 0
	endif
end

Wichtig ist nur das alle Türen die gleichen sind.
Also die gleiche Editor-ID haben.

EDIT:

Ghost,
es würde ja auch ein ganz normaler Globaler script funktionieren:
Code:
scn OblivionWetter

Begin GameMode
	if palyer.GetItemCount [ID des Items] >= 1
		SetWeater{Es würde auch ForceWeather funktionieren} [Oblivion Wetter ID]
	else
		ReleaseWeatherOverride
	endif
end
Denn Script musst du nirgendwo drauflegen.

Hoffe ich konnte Helfen (Beide jetzt)

mfg,
Trisaster
 
Zuletzt bearbeitet:
mhh ich hab mal ne frage bezüglich des OBSE-Befehls GetFirstRef.

Und muss man da ja die cellDepth angeben... in der CS-Wiki steht nur das bei 1 acht umliegende Zellen und bei 2 25 umliegende Zellen gescannt werden. Mich würde jetzt interessieren, ob man mit diesem Befehl nur die eigene Zelle scannen kann? bzw welche cellDepth möglich sind falls das jemand weiß.

Außerdem habe ich zum testen mal das Beispiel aus der Wiki übernommen mit einer kleinen änderung(die aber für meine Frage eigtl nicht von belang ist^^)

Code:
ref npc
...
set npc to Apple
set npc to (GetFirstRef 35 1)
Label 1
if npc
  npc.additem blubb 1
  set npc to Apple
  set npc to GetNextRef
  Goto 1
endif

und zwar bin ich davon ausgegangen, dass GetNextRef sich aushebelt nachdem die letzte Referenz gefunden wurde....also dass danach sozusagen schluss wäre und mit meinem Beispiel jeder NPC nur einmal das item 'blubb' erhält. Bei meinem Test mit Alba war es jedoch so, dass sie nach kurzer Zeit ne ganze Menge in ihrem Inventar hatte...dazu muss ich zwar sagen, dass ich beim testen auch ein paar cellwechsel hatte; diese standen aber nicht im vergleich zu der Menge an Items die Alba dann im Inventar hatte...deswegen meine Vermutung und Frage: Wenn diese Funktion in einem Questscript verwendet wird, werden alle Referencen erneut abgefragt alle 5-sekunden?


so und zu guter letzt noch eine frage die eigtl nicht direkt mit scripting zu tun hat: Kann man Leveled Lists auch wieder entfernen? also wenn ich zB nem Actor ne leveledlist hinzufüge die ihm zufällig eins von mehreren items gibt, wäre es möglich diese leveledlist zu entfernen,sodass durch das entfernen alle im inventar befindlichen objekte, welche die leveled list enthält auch entfernt werden?
Bsp:
Leveledlist blubb enthält item1,item2 und item3.
Diese Leveled List wird einem Container/Actor hinzugefügt, sodass dieser jetzt eines der 3 Items enthält.
Die leveledlist wird entfernt (ref.removeitem blubb 1) und unabhängig davon, welches item vorher hinzugefügt wurde, wird dieses jetzt auch wieder entfernt?
 
@ Tabkir.

Vesuch es doch, indem du für jede Leveled Liste eine Abfrage maschst, ob ein Item dieser List dabei ist, und das dann entfernt.

@ Trsitaser bzw. Chuck
Code:
scn DreiTüren

short activated

Begin onActivate Player
	if activated == 0
		activate
		set activated to [COLOR="Red"]1[/COLOR]
	endif
end
 
  • Like
Reaktionen: Trisaster
@ Trsitaser bzw. Chuck
Code:
scn DreiTüren

short activated

Begin onActivate Player
    if activated == 0
        activate
        set activated to [COLOR=Red]1[/COLOR]
    endif
end

Und selbst dann werden sich alle Türen öffnen lassen. Auch wenn die IDs gleich sind, so werden die Refs immer noch unterschiedlich sein. Und die Variablen werden in der Ref gespeichert und nicht in der zu Grunde liegenden Object-ID.
 
Ok die Zeile:
Code:
set activated to 0
bei mir war ein reiner Tippfehler. (Sry)
Und es sollen sich alle Türen öffnen lassen, aber eben nur einmal.
Darum war mein Scriptvorschlag auch (fast) richtig.

mfg,
Trisaster
 
ich habe jetzt anstatt einem Static das KvatchProtcullis genommen. Den Script des zugehörigen Hebels, habe ich entsprechend angepasst.
Jetzt habe ich folgendes Problem:
Sobald ich das Tor wieder schliesse, wird die Schliessanimation unendlich abgespielt.

Hier der Script:
Code:
scriptName OGMKvatchGateOpenerScript

short opened
short path

;Controls raising and lowering of Kvatch Castle Gates


begin onActivate

if IsActionRef player == 1

if opened == 0

	OGMTorhebel001.playgroup forward, 1
	OGMFallgatter001.playgroup forward, 1
	set opened to 1

;if lever is being used for the first time, update the quest stage
;Have NPCs Evaluate Packages


elseif opened == 1
	OGMTorhebel001.playgroup backward, 1
	OGMFallgatter001.playgroup backward, 1
	set opened to 0

endif

endif

end

mhh gibts dafür ne lösung? hab dasselbe prob^^

@ Tabkir.

Vesuch es doch, indem du für jede Leveled Liste eine Abfrage maschst, ob ein Item dieser List dabei ist, und das dann entfernt.

mhh naja so mach ichs im moment... wobei ich mir die abfrage spare...ich entferne einfach automatisch alle items, die die leveledlist enthält...wenn der npc das item nicht besitzt is ja auch egal (hatte damit zumindest bis jetzt noch keine probleme). Abfrage wäre ein bisschen umständlich, da die Liste 11 items enthält und aus dem grund hatte ich halt auch gehofft, dass man diese items auch mittels der leveledlist wieder entfernen kann^^
wäre halt platzsparender als alles per hand zu entfernen^^
 
Ok die Zeile:
Code:
set activated to 0
bei mir war ein reiner Tippfehler. (Sry)
Und es sollen sich alle Türen öffnen lassen, aber eben nur einmal.
Darum war mein Scriptvorschlag auch (fast) richtig.

mfg,
Trisaster

Stand da nicht "Also ich habe 3 Türen. Wenn der player durch eine von ihnen geht, sollen die anderen 2 nicht mehr passierbar sein"?
 
mhh schade...ich hätte das gerne verwendet, da ich auch das kvatch-torhaus verwende...
hoffentlich finde ich ein passendes^^

bleibt jetzt ja nur noch die frage mit der cellDepth bei GetFirstRef
 
Stand da nicht "Also ich habe 3 Türen. Wenn der player durch eine von ihnen geht, sollen die anderen 2 nicht mehr passierbar sein"?

Weiß ich nicht^^ Ich hab das nur überflogen^^

@ Chuck nur für den Fall:

Code:
scn Blubb

short Activated

Begin OnActivate Player
         If Activated == 0
              Activate
              RefIDTür1.Set Activated to 1 
              RefIDTür2.Set Activated to 1
              RefIDTür3.Set Activated to 1 
          endif
end
 
  • Like
Reaktionen: Chuck Norris
Das Activate besser unter die drei Variablenzuweisungen setzen, da es unter bestimmten Umständen sein kann, das alles unter dem Activate nicht mehr bearbeitet wird.
 
mhh ich hab mal ne frage bezüglich des OBSE-Befehls GetFirstRef.

Und muss man da ja die cellDepth angeben... in der CS-Wiki steht nur das bei 1 acht umliegende Zellen und bei 2 25 umliegende Zellen gescannt werden. Mich würde jetzt interessieren, ob man mit diesem Befehl nur die eigene Zelle scannen kann? bzw welche cellDepth möglich sind falls das jemand weiß.

Außerdem habe ich zum testen mal das Beispiel aus der Wiki übernommen mit einer kleinen änderung(die aber für meine Frage eigtl nicht von belang ist^^)

Code:
ref npc
...
set npc to Apple
set npc to (GetFirstRef 35 1)
Label 1
if npc
  npc.additem blubb 1
  set npc to Apple
  set npc to GetNextRef
  Goto 1
endif

und zwar bin ich davon ausgegangen, dass GetNextRef sich aushebelt nachdem die letzte Referenz gefunden wurde....also dass danach sozusagen schluss wäre und mit meinem Beispiel jeder NPC nur einmal das item 'blubb' erhält. Bei meinem Test mit Alba war es jedoch so, dass sie nach kurzer Zeit ne ganze Menge in ihrem Inventar hatte...dazu muss ich zwar sagen, dass ich beim testen auch ein paar cellwechsel hatte; diese standen aber nicht im vergleich zu der Menge an Items die Alba dann im Inventar hatte...deswegen meine Vermutung und Frage: Wenn diese Funktion in einem Questscript verwendet wird, werden alle Referencen erneut abgefragt alle 5-sekunden

In einem QuestScript wird dass alle fQuestDelayTime Sekunden abgefragt (falls nicht näher bestimmt alle 5 Sekunden), bei einem ObjectScript/MagicEffectScript im ScriptEffectUpdate-Block so ziemlich jeden Frame, sofern das Objekt gerendert wurde/der Effekt aktiv ist.


Falls du ein QuestScript verwendest setze einfach nach das letzte endif noch ein
Code:
StopQuest [QuestID]
oder verwende eine Variable damit das ganze nur einmal abläuft falls du die Quest noch brauchst.




CellDepth:
Du kannst ganze Zahlen als CellDepth angeben, bei 0 wird nur die eigene Zelle geprüft, bei 1 alle Umliegenden dazu, etc.
Wenn du dich in einer Interiour-Zelle befindest wird der Wert ignoriert und nur die Zelle überprüft.
 
  • Like
Reaktionen: takbir
@ Chuck nur für den Fall:

Code:
scn Blubb

short Activated

Begin OnActivate Player
If Activated == 0
Activate
RefIDTür1.Set Activated to 1
RefIDTür2.Set Activated to 1
RefIDTür3.Set Activated to 1
endif
end
Da funktioniert was nicht:

Script "<Scriptname>", line 9
Script command "020045e5.set" not found
Wobei die 020045e5 die RefID ist (Das ist doch die oberste im Reference Menü, oder? Die neben der obersten Zeile?).