Construction Set Skriptthread zum Construction Set

Das Problem wäre hier ja dann, das x rauszubekommen, da es eben nicht um einen bestimmten Dialog geht, sondern das Script nach jedem Dialog funktionieren muss. Deshalb ist das x für jeden Dialog anders. Gibts irgendne möglichkeit, das X rauszubekommen?
 
Wenn es bei jedem Dialog funktionieren muss, fällt das Resultskript an sich ja schon komplett weg. Wenn die Dialoge jedoch von euch gemacht wurden, habt ihr ja die Dialoglänge. Aber es scheint ja eher ersteres der Fall zu sein, oder?
 
Die Dialoge sind zwar von uns gemacht, allerdings muss der Script wirklich für jeden von vielleicht 10.000 Dialogen funktionieren. Jeden Dialog mit einem eigenen Timer zu versehen wäre verdammt aufwendig, in dem Fall würde ich mich wohl für eine zwar unschöne, aber einfache Lösung entscheiden.
Das Problem mit dem Timer ist auch, wenn der Spieler die Dialoge wegklickt. Dann macht der Timer ja keinen Sprung
 
Dann musst du dich wahrscheinlich leider für die Alternative entscheiden. Ich habe in der OBSE-Dokumentation auch keine Dialog-Funktionen gefunden. Scheint dazu also nichts zu geben.
 
  • Like
Reaktionen: Unbekannter
Es ginge, wenn du die Unterhaltung nicht über das klassische Dialogfenster erstellst, sondern mit "sayTo" arbeitest. Dann kannst du auch immer die Länge der Dialogzeile abfragen:
Code:
set timer to <Ref1>.sayTo <Ref2> <TopicID>
 
  • Like
Reaktionen: Unbekannter
Hm... das wird leider auch nicht klappen, da das Dialogmenü benötigt wird (wegen Choices). Alle Dialoge mit Sayto zu scripten deutlich zu aufwendig.

Vielen Dank trotzdem... ich denke ich werde mich mit der unschönen alternativlösung zufrieden geben müssen
 
Das geht leider nicht, weil der Script dann schon während das Topic gesprochen wird läuft.

Wieso denn das? Ein Result wird doch erst dann ausgeführt, wenn die Info zuende ist. Aus diesem Grund gibt es doch das Flag, Run immediately. Wenn man möchte dass das Result nicht erst am Ende ausgeführt wird. Das darf natürlich nicht gesetzt sein.

Wenn ich dich richtig verstanden habe, willst Du in deinen Skript feststellen, welche Info gewählt wurde und wann sie endet. Also nutze das Result des, oder der betreffenden Infos und steuere damit das Skript.

Angenommen dein Skript liegt auf ObjektXYRef. Das Objekt braucht eine persistente Referenz-ID, sonst kann man auf das Skript nicht zugreifen. Geht natürlich auch mit einem Questskript. Im Skript definierst Du eine weitere Variable, ich nenne sie hier mal TopicVar.

Im Skript ist die Bedingung mit der Variable

if TopicVar == 10

Im Result der Info schreibst Du dann: set ObjektXYRef.TopicVar to 10

somit wird nach Beendingung der Info, dein Skript das tun was es eben machen soll.
Somit kann man auf doch einfache Art feststellen, welche Info benutzt wurde und wann sie zuende ist. Ist es nicht das was Du wolltest?
 
Run immediately ist nur bei Conversations, aber nicht bei Topics verfügbar. Soweit ich weiß wird das Result Script immer sofort am Anfang gestartet... vielleicht täusche ich mich ja, das würde das Problem natürlich beheben.

Es geht nicht darum, herauszufinden welche Info gesprochen wurde. Ob der Script überhaupt ausgeführt wird, hängt von anderen Variablen ab. Es geht nur darum, dass er tendenziell nur am Ende einer Info ausgeführt werden darf.

Aber ich probier mal aus, ob results vielleicht doch am Ende laufen.
 
Ich hab das schon zigfach verwendet um das Ende eines Dialogs auszuwerten. Kann natürlich gut sein, dass ich mich da jetzt irre. Bei den normalen Topics ist es ja unerheblich, ob das Result zu Beginn oder am Ende ausgegeben wird, weil der GameMode erst nach schließen des Menüs weiterläuft. Wenn das Result sofort beim Start des Topics läuft, geht das mit Conversations natürlich nicht.

Müsste gerade mal suchen, ob ich eine ähnliche Konstellation bei mir habe. Aber sag mir Bescheid, mich würde es interessieren, wie das mit den Results nun wirklich ist. :)
 
Waffe Verzaubern

Abend Com.

Ich möchte einen Zauber Scripten der die derzeitig ausgerüstete waffe des spielers mit einer Verzauberung belegt (Verzauberung is bereits erstellt) und einen Effect der waffe hinzufügt.

Ich weiß allerdings nicht wie ich gezielt die Waffen ID der gerade vom Spieler Ausgerüsteten Waffe abfragen kann.
Genau so weiß ich nich wie ich der waffe dann die Verzauberung verpassen kann!

Habe die stellen mal im Script Rot markiert.
Bei denn grünen stellen bin ich mir unsicher ob das so korrekt ist.

Hoffe einer kann helfen.

Code:
scn BMHotWeaponScript

ref Weapon

Begin GameMode

Weapon = [COLOR=#ff0000]GetEquipedWeaponID[/COLOR]

end

Begin ScriptEffectStart

     if (player.IsWeaponOut != 1);
        massage "Du musst deine Waffe ziehen!"
        return
     endif

     if (player.IsWeaponOut == 1);
        Weapon.[COLOR=#ff0000]GetEntchantment[/COLOR] BMHotWeapon
        Weapon.StartMagicEffectVisual effectAstronachFlame
    endif
end

Begin ScriptEffectFinish

     [COLOR=#008000]Weapon.Disable BMHotWeapon[/COLOR]
     Weapon.StopMagicEffectVisual effectAstronachFlame

end
 
Hallo Scharesoft-Community!

Ich brauche einen Script, der einen Activator unter Einsatz eines bestimmten Zaubers aktiviert.

Konkret heißt das, dass ich eine Tür dadurch öffnen will, dass ich einen speziellen (einzigartigen) Feuerzauber auf einen Schwarzen Welkynd-Stein (diese Fallensteine aus Ayleid-Ruinen) schieße, dieser dann rot wird und dann eine Tür (in Form eines Activators, nicht einer Door) öffnet.

Wenn mir jemand helfen kann, indem er mir sagt, welche Variablen ich brauch, um den Zauber auf den Welkynd-Stein zu programmieren, oder indem er mir gleich einen Beispielscript vorschlagen kann, wäre ich überaus dankbar :D

mfg Malcador
 
Zuletzt bearbeitet:
Du kannst entweder (bei irgendeinem Feuerzauber) auf dem Welkynd-Stein als Activator ein Skript legen, in dem du mit "Begin onMagicEffectHit FIDG" arbeitest oder du fügst dem Zauber einen Skript-Effekt hinzu, indem du "getIsReference <Welkynd-Stein-Ref>" benutzt. Der Rest ist dann einfach nur ein neuer Shader und ein "activate 1".
 
  • Like
Reaktionen: Malcador
Ich bin leider nicht sehr versiert im Scripting, wohl auch, weil ich mir bisher fast alles selbst beigebracht habe bzw. durch abgucken im Vanilla Oblivion.

Was meinst du mit:"Der Rest ist dann einfach nur ein neuer Shader und ein "activate 1". " :p


mfg Malcador
 
Nun, man kann die Farbe eines Objektes nicht Ingame ändern. Was man machen kann, ist, einen Effekt-Shader auf das Objekt zu legen. Das sieht man zum Beispiel, wenn NPCs Tränke zu sich nehmen oder wenn ein Item verzaubert ist. Du suchst dir dann einfach einen rötlichen Effekt aus und benutzt "playMagicShaderVisuals":
Code:
<Welkynd-Stein-REF>.pms <Shader-ID>

"Activate 1" benutzt du, um die Activator-Tür zu öffnen. Diese benötigt halt noch ein Skript mit einem entsprechenden "onActivate"-Block.
 
  • Like
Reaktionen: Malcador
Ich weiß, was du meinst, aber das ist nicht was ich meinte.

Normalerweise ist der Schwarze Welkynd-Stein eine Falle. Wenn die ausgelöst wird, nimmt der Schwarze Stein eine rote Farbe an und schießt dann einen Zauber. Wenn das passiert ist, wird der Stein wieder schwarz. Ich will das so machen, dass ich den Welkynd-Stein mit nem Feuerzauberartigen Zauber beschieße, dieser dann scheinbar durch die Hitze rot wird und dadurch auf magische Weise ein Tor entriegelt. Dieses Tor würde ich dann nach 10 Sek. wieder schließen wollen, der Welkynd-Stein wird in dieser Zeit wieder Schwarz und der Zauber kann erneut gewirkt werden um die Tür zu öffnen.


Ich merke schon, dass ich mir da mit meinen beschränkten Kenntnissen im Scripting sehr viel vorgenommen habe ^.^
 
Ahh... mein Fehler. Jetzt weiß ich was du meinst. Meine letzten Stunden in Oblivion sind wohl schon etwas zu lange her, um mich daran zu erinnern... ;)

Dafür gibt es ja diese extra Steine und es sollte ungefähr so ein Skript reichen:
Code:
scn name

float timer


Begin onMagicEffectHit FIDG

if timer <= 0
  set timer to 10
  playGroup forward 0
  <Tür-Ref>.activate 1
endif

end


Begin GameMode

if timer > 0
  set timer to timer - getSecondsPassed
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Malcador
Hallo Leute,

gibt es eigentlich eine Möglichkeit, das Spiel erkennen zu lassen, welches Item der Spieler gerade im Inventar hat, und zwar in derselben Stage?
Ich möchte nämlich gerne eine Mission erstellen ähnlich diesem Muster:

Ein NPC möchte z.B. eine Gemüsesuppe kochen und beauftragt den Spieler, 1 Kartoffel, 1 Zwiebel, 1 Tomate, 1 Knoblauch, 1 Kürbis ..... usw. zu besorgen. Er händigt ihm dafür eine Liste aus mit allen erforderlichen Früchten. Es sollen, wenn es technisch möglich ist, mehrere Gemüsesorten/Früchte beschafft werden, 10 bis 20 verschiedene vielleicht, hab mich noch nicht festgelegt.
Solche Quests habe ich schon mehrfach erstellt, ich weiß also, dass es über GetItemCount im Dialogmenü gemacht wird, allerdings würde das betreffende Greeting "Oh, Ihr habt mir die Früchte gebracht!" nur dann erscheinen, wenn der Player alle!!! Früchte im Inventar hat.

Und hier meine Frage: kann der Spieler das Gemüse nach und nach besorgen, immer in derselben Stage, und der NPC erkennt, was er gerade im Inventar hat? Ich stelle mir das folgendermaßen vor: Der Player hat nachdem er die Quest angenommen hat 1 Tomate im Inventar. Er kehrt zum NPC zurück, dieser hat verschiedene Greetings, für jede Frucht ein eigenes. Er erkennt, dass er die Tomate im Inventar hat und sein Greeting: "Oh, Ihr habt mir eine Tomate gebracht!" wird geschaltet. Bein nächsten mal hat er einen Kürbis im Inventar und der NPC sagt sein Greeting: "Oh, Ihr habt mir einen Kürbis gebracht!".
Ist das skripttechnisch umsetzbar?
Ich würde das auch über OBSE machen, wenn nötig.

LG
Arielle