Construction Set Skriptthread zum Construction Set

Meinst du, dass dann auch nicht mit Parent Ref oder dass ich es damit noch versuchen soll?

Ich meinte, dass es nicht geht, wenn der Container eine Parent Ref hat.

Nochmal zusammenfassend:
-Du hast eine Truhe mit der Ref-ID "RefContainer" und einem Haken jeweils bei "Initially Disabled" und "Persistance Reference" irgendwo stehen.
-Du hast Das Script geschrieben.
-Du hast einen Zauber erstellt, der dies Script aktiviert.
(Hat der noch andere Effekte?)
-Du hast den Zauber einem NPC gegeben, der diesen spricht.

Soweit alles richtig?
 
Habs hinbekommen. Siehe Edit. Wollte halt nen Doppelpost vermeiden ;)
Ist jetzt zwar etwas umständlicher, aber hauptsache es klappt. Trotzdem Danke für die Hilfe!
 
Hi und Frohe Weihnachten,
ich habe da ein Problem:
Ich will ein Script schreiben, das auf einer Triggerzone liegt.
Durch das hindurchlaufen des Players, soll ein NPC einen andern NPC angreifen...
Mein Problem hierbei ist, dass das CS es nicht annimmt, dass ich den Angreifenden NPC vor startcombat schreibe...

Hier mal das Script:
Code:
[B][SIZE=2]scn Attentatriggerzone[/SIZE][/B]
[B][SIZE=2]begin onTrigger 1zAttentattriggerzone[/SIZE][/B]
[B][SIZE=2]if isActionRef player == 1[/SIZE][/B]
[B][SIZE=2]DisablePlayerControls[/SIZE][/B]
[B][SIZE=2]startcombat 1zAttentaeterOpferRef ; Hiervor soll dann mein NPC, der den anderen angreift...[/SIZE][/B]
[B][SIZE=2]EnablePlayerControls; getdead soll hiervor...[/SIZE][/B]
[B][SIZE=2]setstage 1zAttentatQuest 0[/SIZE][/B]
[B][SIZE=2]endif [/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]end[/SIZE][/B]
ach und ja: das mit demn GetDead geht auch nicht...
Und ja die NPCs sind als Persistent Reference eingetragen...:(

Hat einer ne Idee woran das liegen könnte?
 
Versuchs mal so:

Code:
scn Attentatriggerzone

short once

begin onTrigger 
if isActionRef player == 1
   if once == 0
      DisablePlayerControls
      1zAttentaeterOpferRef.startcombat [Hier das Opfer ohne die Klammern]
      Set once to 1
   endif
endif
end

Begin GameMode 
If once == 1
    If DeinOpferRef.GetDead == 1
       EnablePlayerControls
       setstage 1zAttentatQuest 0        ;Sicher das die Stage 0 ist?
       Set once to 2
    endif
endif
end

BTW. Das mit der Reference hinter OnTrigger geht so nicht, damit wird die Reference bezeichnet, bei der "getriggert" werden soll. Nicht der Trigger der auslösen soll ;).
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Sonea
Also, das "getdead" sollte mit einer if-Klausel klappen.

Das andere müsste auch so gehen, ich weiß nur gerade nicht, über welchen Befehl man den NPC als Actor deklariert.

(Das Script liegt ja wohl auf der Triggerbox?)

Code:
scn Attentatriggerzone

begin onTrigger player
DisablePlayerControls
startcombat 1zAttentaeterOpferRef ; Hiervor soll dann mein NPC, der den anderen angreift...
end

begin GameMode
if [xyz].getdead
EnablePlayerControls
endif
setstage 1zAttentatQuest 0
end

EDIT:
Verdammt, da ist man einen kleinen Augenblick nicht am PC und da drängelt sich einer vor^^

Zu der Zeile mit "startcombat":
Hast du die mit einem . probiert oder ohne?
(Erstere wäre so, wie AjAeXx es geschrieben hat)
Ich hab das jetzt nämlich erstmal so verstanden. (Und dass es so nicht geklappt hat)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Sonea
:eek:Ich habe jetzt mal AjAeXx Script reinkopiert und angepasst, aber das CS schmeißt mir folgende Meldung raus:
[...]Script command "1zAttentaeterRef.startcombat"not found
Ich vermute mal das liegt daran, dass es
-entweder zusammengeschrieben ist
-oder meine Ref ID ja kein "Script command" ist und an erster Stelle steht...
Aber wen man nun es nicht zusammenschreibt, (erster Stichpunkt)geht es auch nicht:cry:


Nun habe ich es auch mal mit Knochenkeules Script versucht....
Das ganze funktioniert auch nicht:thunder:!!!
Ich habe auch hier alles ersetzt etc.
er behaubtet aber das ich
zAttentaeterOpferRef.getdead
geschrieben hätte und nicht
1zAttentaeterOpferRef.getdead
wie es auch im Script steht:eek:



@Knochenkeule: Ja das ganze liegt auf einer Triggerbox.:)
Man kann doch dann aber nicht mit startcombat anfangen, sonst müsste doch die Triggerbox, den Spieler angreifen:lol:eek:der ist das ein Denkfehler meinerseits?;)
@AjAeXx: Ja ich bin sicher das die Queststage 0 ist, habe den Quest ja gestern erst "nummeriert";)
 
So, mir ist gerade aus deiner Textpassage eine Lösungmöglichkeit eingefallen:
Ich habe auch hier alles ersetzt etc.
er behaubtet aber das ich

zAttentaeterOpferRef.getdead

geschrieben hätte und nicht

1zAttentaeterOpferRef.getdead

wie es auch im Script steht

Dein Problem liegt eventuell daran, dass die ID mit einer Zahl beginnt.
Damit gibt es zumindest Probleme, wenn es eine 0 ist. Die wird einfach übergangen und somit stimmt dann die ID nicht mehr.
Änder die ID mal dahingehend, dass sie nicht mit einer Zahl anfängt.
 
  • Like
Reaktionen: Sonea
Nun das habe ich nun geändert, und soweit passt auch alles :)oops:Mist, warum habe ich daran nicht gedacht?:oops:)
ABER...
das CS lässt nicht zu das ich vor startcombat die RefID des Angreifers schreibe (ja auch die habe ich geändert).
Geht das Grundsätzlich nicht...?

also:
NPCAngreifer.startcombat NPCOpferRef

EDIT: Es funktioniert! Soll ich das Script hier reinschreiben?
 
Zuletzt bearbeitet:
Mal so allgemein gefragt: Ist scripten mit Syntax-Highlighting (auf TES-Script angepasst) und Codevervollständigung für euch kalter Kaffe oder besteht Interesse daran? Wenn ja stell ich das mal vor mit welchem Editor das ganz leicht aufzusetzen ist.
Ich bin ja angehender Fachinformatiker, daher bin ich es gewöhnt nur mit Syntax-Highlighting zu coden. Weiß ja nicht wie ihr das so handhabt. Die Codevervollständigung spart natürlich auch enorm Zeit.
 
Für den Notepad++ gibt es doch schon so eine Erweiterung.
Hier oder hier.

Aber viel interessanter wäre, wenn man im TES einen externen Editor für Skripte definieren könnte....
 
So hier mein Script:
Code:
[B][SIZE=2]scn zAttentatriggerzone[/SIZE][/B]
 
[B][SIZE=2]short doonce[/SIZE][/B]
[B][SIZE=2]begin onTrigger [/SIZE][/B]
[B][SIZE=2]if (isActionRef player == 1) && (doonce == 0)[/SIZE][/B]
[B][SIZE=2]DisablePlayerControls[/SIZE][/B]
[B][SIZE=2]zAttentaeterRef.startcombat zAttentaeterOpferRef[/SIZE][/B]
[B][SIZE=2]set doonce to 1[/SIZE][/B]
 
[B][SIZE=2]endif [/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]end[/SIZE][/B]
 
[B][SIZE=2]Begin Gamemode [/SIZE][/B]
[B][SIZE=2]if (doonce == 1) && (zAttentaeterOpferRef.GetDead == 1)[/SIZE][/B]
[B][SIZE=2]zAttentaeterRef.kill[/SIZE][/B]
[B][SIZE=2]EnablePlayerControls[/SIZE][/B]
[B][SIZE=2]setstage 1zAttentatQuest 0[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]end[/SIZE][/B]
Gibt es hier vllt. auch eine Script Sammlung? Da könnten wir unsere Scripte sammeln, und falls man ein ähnliches braucht, kann man sich eines aus der Sammlung herauspicken und es umändern...
Über die Suchfunktion habe ich nichts gefunden, deshalb frage ich hier mal nach...
 
  • Like
Reaktionen: Knochenkeule
Hmm, ne, davon ist mir nichts bekannt. (Von so einer Sammlung)
Man könnte mal Scharesoft fragen, ob wir sowas einrichten können/dürfen/sollen.

Allerdings gibt es natürlich seeeehr viele Scriptmöglichkeiten, deswegen ist es eigentlich kaum möglich, da eine vernünftige Sammlung anzulegen.
 
Hi leute hab ne kleine Frage. Wie kann man eine Variable verwenden die auch durch andere skripts verändert werden können. und kann man irgendwie ingame durch ein skript oder so ein skript auf einen gegenstand legen?? oder kann man irgendwie abfragen ob man schuhe, oder rüstung oder so anhat, und was für nen typ waffe man trägt? also zweihand, einhand und so.
 
Ich habe zwar vom Skripten nicht so viel Ahnung, aber man kann globale Variablen definieren oder eine (Dummy)Quest schreiben mit einem Skript und dann per [QuestName].[Variable] darauf zugreifen.

Mit GetEquipped ObjectID kann man abfragen, ob der Actor ein bestimmtest Item trägt (dort gibt man dann z.B. die ID der Schuhe an). Man kann aber auch GetEquippedObject verwenden. Bei einer 2hand-Waffe werden wahrscheinlich beide Slots (Waffe und Schild) belegt. Man könnte dies vielleicht mit der SlotMask prüfen. Bin mir aber nicht sicher....
 
  • Like
Reaktionen: BlackZero500
Hi leute hab ne kleine Frage. Wie kann man eine Variable verwenden die auch durch andere skripts verändert werden können. und kann man irgendwie ingame durch ein skript oder so ein skript auf einen gegenstand legen?? oder kann man irgendwie abfragen ob man schuhe, oder rüstung oder so anhat, und was für nen typ waffe man trägt? also zweihand, einhand und so.

Oder, noch einfacher und Performance sparen, wenn dieses Script auf einem Objekt liegt, kannst du aus einem anderen Script mit
Code:
ReferenceId.VariabelName
die Variabel abfragen.

Code:
GetWeaponSkillType

Gibt aus, welche Art von Waffe benutzt wird.

0 = No Weapon (Hand-to-Hand) or No Skill (Staff)
1 = Blade
2 = Blunt
3 = Marksman

Außerdem gibt es noch den
Code:
ActorRef.GetEquipped ObjectId
Befehl.
 
Oder muss man alles einzeln abfragen?
Bestimmt. Ich kenne jedenfalls keinen Zusammenrechne-befehl.

Aber ich hab selbst 'ne Frage:

Kann man einstellen, (auch mit OBSE) dass Oblivion auf Doppeldruck einer Taste reagiert? Zum Beispiel soll der Spieler sprinten, wenn man zwei mal schnell auf W drückt. Und es soll derbe Ausdauer kosten. (Ich weiß von "OBSE - Sprinten", aber da geht's anders)

Hm, vielleicht mit ... in etwa:
Code:
scn sprintscript

short erstesw
float timer

Begin Gamemode

if OnKeyDown 17 ; W
set erstesw to 1
set timer to 2
set timer to timer - getsecondspassed
endif

if (onkeydown 17 && erstesw == 1 && timer < 2 && timer > 0)
player.modav speed 120
set erstesw to 2
endif

if ("[spieler ausdauer == 0]" (wie formuliert man das?) || player.isrunning == 0 && erstesw == 2) 
player.modav speed -120
set erstesw to 0
endif

End

Bitte tipp-ieren. Vor allem: geht das so mit "OnKeyDown" und dem timer?

Rakios
 
Zuletzt bearbeitet:
Code:
scn sprintscript

short erstesw
float timer

Begin Gamemode

if OnKeyDown 17 ; W
set erstesw to 1
set timer to 2
endif

if onkeydown 17 && erstesw == 1 && timer >= 0
player.modav speed 120
set erstesw to 2
Set timer to -1
endif

if (Player.GetAv Endurance <= 0 (wie formuliert man das?) || player.isrunning == 0 && erstesw == 2) 
player.modav speed -120
set erstesw to 0
endif

If timer >= 0 && erstesw == 1
Set timer to timer - GetSecondsPassed

End