Construction Set Skriptthread zum Construction Set

Da ihr mir mit meinem Skriptproblem so schön geholfen habt nerve ich euch gleich mit meiner nächsten Skriptanfrage. :p

Ich benötige 2 Skripts: eines das einen Nebel heraufbeschwört (FXMistGroundEffect, allerdings mit neuer ID) und diesen 180 Sekunden bestehen lässt (danach soll der Nebel wieder verschwinden), und eines welches dafür sorgt, dass alle NPCs, die sich in dem Nebel befinden, solange sie sich diese dort aufhalten, von einem Schwächungszauber betroffen sind (beim Schwächungszauber habe ich an eine Eigenschaft gedacht). Verlassen die NPCs den Nebel soll der Schwächungszauber wieder aufgehoben werden.

Liebe Grüße,
Eydis
 
@peecee:
Die Control-Input-Funktionen von OBSE beziehen sich eigentlich auf die Funktion der Taste und nicht auf die Taste selbst. Also wirkt sich z.B. "disableControl 15" immer auf die Inventar-Taste aus. Egal, ob du sie auf Tab, # oder ß liegen hast.

@Azoron:
Der Opening-Sound wird afaik nur abgespielt, wenn der Container auch wirklich geöffnet wird. Deswegen ja auch "playSound3D" und nicht anders. Ich würde eher schätzen, dass du da was falsch eingebunden hast.
 
  • Like
Reaktionen: peecee
Soweit alles klar aber wie schreibe ich das es beim aktivieren das inventar trotzdem schließt? geht das überhaupt weil ja beim schließen vom inv. ja der sound wieder weg ist ?
dann halt als close-sound^^
Script:

Begin OnActivate

return

End

@Eydis:

Skript Eins:

Code:
ref Nebel
float Timer
short doonce

Begin GameMode

if doonce == 0
     set Nebel to player.placeatme FXMistGroundEffect 1
     set doonce to 1
endif

set Timer to Timer + getsecondspass

if Timer >= 180
     Nebel.disable
endif

End

edit: @bjoernret: Sorry ich dachte an Factions, klar das kann immer nur eine sein^^
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Eydis und bjoernret
Dann kommt er erst gar nicht zum schließen (wird ja nicht aufgemacht)
Dann orientier dich lieber an den anderen Ideen

@bjoernret: Stellst du die Variablen nur auf um die Anwesenheit zu prüfen, oder um die Namen nicht ausschreiben zu müssen?

Ich hab auch noch 'ne Frage:

Ist es möglich eine MessagBox mit Scrollbar (also auch mehr als 10 buttons) zu scripten?
 
Danke Kahmul, es klappt. Wobei es eigentlich logisch war, der Script wurde auch ausgeführt als der Npc disabled war . Aber dann kann er ja nicht reden.

Kann mir jemand hier noch eine Queststageabfrage einbauen ?

scn 00Sanuel

short doonce



Begin GameMode
if (getdistance player <= 210)

diener.StartConversation player,Testa

endif
End
 
[...]
@bjoernret: Stellst du die Variablen nur auf um die Anwesenheit zu prüfen, oder um die Namen nicht ausschreiben zu müssen?
[...]

Ich möchte die Wachen ingame in eine andere Zelle/Worldspace verschieben. Da ich nicht den Wachen im CS eine Ref zu weisen muss (wegen Inkompatibilität), teile ich den Wachen per Script eine Ref zu, damit ich sie dann später verschieben kann, Beispiel: guard3.moveto MarkerID
 
Wo ist das doonce im Script hin?

Code:
scn 00Sanuel

short doonce

Begin GameMode
if (getdistance player <= 210) && (getdisabled == 0) && (doonce == 0) && (GetStage [QuestID] == [StageNum])
    
    set doonce to 1
    StartConversation player,Testa

endif
End

Edit: @ bjoenret: Da du eh OBSE benutzt rate ich dir die refs in einem array zu speichern. Hier ein Beispiel wie das aussehen könnte (momentan statisch gehalten):

Code:
scn Scriptname

array_var guardRef
short 

Begin GameMode
If player.GetInWorldspace AnvilWorld == 1
    let guardRef := ar_Construct Array
    set guard to getfirstref 69 2
    while guard
        If guard.GetIsID AnvilGuardCastlePatrolDay01 == 1
            let guardRef[0] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePatrolNight01 == 1
            let guardRef[1] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePostDay01 == 1
            let guardRef[2] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePostDay02 == 1
            let guardRef[3] := guard
        endif
        set guard to getnextref
    loop
endif
end

Somit kannst du dann durch "guardRef[0]" bis "guardRef[3]" auf deine Referenzen zugreifen, ohne dabei viele einzelne Referenzen zu deklarieren. Dies müsstest du dann eben noch erweitern, ich weiß leider nicht, nach welchem Auswahlverfahren du die Referenzen speichern möchtest.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: bjoernret
@Eydis:

Skript Eins:

Code:
ref Nebel
float Timer
short doonce

Begin GameMode

if doonce == 0
     set Nebel to player.placeatme FXMistGroundEffect 1
     set doonce to 1
endif

set Timer to Timer + getsecondspass

if Timer >= 180
     Nebel.disable
endif

End

Super, das hilft mir schonmal weiter! :)
Wie würde nun das Script für den Nebel aussehen? (wenn ich aus dem Nebel eine Triggerbox mache)

Liebe Grüße,
Eydis
 
@Gildur Das muss raus , denn der Npc ist ja erst disabeld ,allerdings wird der Script dann schon ausgeführt. Nur leider kann er mich nicht ansprechen wenn er disabeld ist.
 
verstehe... Habe es oben angepasst, doonce bleibt aber trotzdem drin, damit es funktioniert. Habe eine GetDisabled-Abfrage noch eingebaut.
 
  • Like
Reaktionen: Anti_Held
Achso, sag das doch gleich^^

Code:
ref NPC

Begin OnTrigger

set NPC to actionref
NPC.addspell [ID der Krankheit]

End

Die Krankheit:

Code:
ref NPC

Begin GameMode

if NPC.getdistance [ID der Wolke] [Radius der Wolke]
     NPC.removespell [ID der Krankheit]
endif

Bei beschaffung der NPC-ID bin ich mir nicht so sicher.
Das Krankheitsskript ist nur das Beendigungskriterium, den Schaden selbst machst du dann über einen anderen Effekt.
 
  • Like
Reaktionen: Eydis
Mercy.

So hab schon wieder eine Frage ( Könnten in nächster Zeit noch sehr viel mehr werden...)

Also ich will folgenden Effekt haben.

Nach eine Dialog soll ein Npc verschwinden. Am Besten mit einem coolen Effekt und dabei soll noch ein Sound abgespielt werden ( falls jemand einen passenden Vanilla Sound kennt , bitte sagen ) Außerdem soll in der Zeit wo der Npc verschwindet das Display des Spielers kurz verschwinden ( So das er sich nur umschauen kann )

Mfg
 
[...]
Edit: @ bjoenret: Da du eh OBSE benutzt rate ich dir die refs in einem array zu speichern. Hier ein Beispiel wie das aussehen könnte (momentan statisch gehalten):

Code:
scn Scriptname

array_var guardRef
short 

Begin GameMode
If player.GetInWorldspace AnvilWorld == 1
    let guardRef := ar_Construct Array
    set guard to getfirstref 69 2
    while guard
        If guard.GetIsID AnvilGuardCastlePatrolDay01 == 1
            let guardRef[0] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePatrolNight01 == 1
            let guardRef[1] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePostDay01 == 1
            let guardRef[2] := guard
        ElseIf guard.GetIsID AnvilGuardCastlePostDay02 == 1
            let guardRef[3] := guard
        endif
        set guard to getnextref
    loop
endif
end

Somit kannst du dann durch "guardRef[0]" bis "guardRef[3]" auf deine Referenzen zugreifen, ohne dabei viele einzelne Referenzen zu deklarieren. Dies müsstest du dann eben noch erweitern, ich weiß leider nicht, nach welchem Auswahlverfahren du die Referenzen speichern möchtest.

Danke dir :)
Habe aber noch ein paar Fragen dazu: Wozu steht das short da? Wofür steht := ? Was meinst du mit erweitern und Auswahlverfahren? Mögen zwar dumme Fragen sein, aber ich habe noch nie mit arrays gearbeitet und kenne mich damit nicht aus :oops:
 
Wenn etwas über Arrays lernen möchtest, würde ich auf dieser Seite den Abschnitt "Array Variables" anschauen. ;)

Das ":=" ist das selbe wie "to". Bloß können Arrays nicht mit "set" und "to" arbeiten.
 
  • Like
Reaktionen: bjoernret
Wie wäre es denn mit einem Teleport-zauber?

In den Result Script des letzten Dialogs schreibst du folgendes:
Code:
[NPCRef].cast [Spell] [NPCRef]
disableplayercontrols

NPCRef muss beides der NPC selbst sein, der verschwinden soll. Dann kommt folgender Script-effekt auf den Zauber:

Code:
scn Scritpname

ref myself

Begin ScriptEffectFinish
enableplayercontrols
set myself to getself
myself.moveto [Ref]
End
Zauber auf Selbst, Dauer 1 Sekunde. Einen "Visual Effect" kannst du dir ja dann selbst im Zaubermenu einen schönen aussuchen.


Edit: @ bjoenret: Kahmul hat das Wichtigste schon gesagt. Das "short" ist lediglich ein Scriptfragment, dass ich kurzzeitig zur Überlegung reingeschrieben habe und dann vergessen zu löschen. Zu dem Auswahlverfahren meine ich, ob du verschiedene NPCs in verschiedene "Kategorien" haben möchtest. Um es mal an einem ganz simplen Beispiel zu zeigen:

array nachtWache
array tagWache

Sodass in dem array nachtWache alle Nachtwachen und im array tagWache alle Tagwachen gespeichert werden. Sodass du dann zB. gezielt eine Gruppe von Wachen hin-und her bewegen kannst.
 
Zuletzt bearbeitet: