Construction Set Skriptthread zum Construction Set

EIN Countdown reicht doch?!
Machste halt ne Globale Zählvariable...

Dann wirds auch nicht mehr ruckeln, zumindest auf deinem PC.

Ein Buch ist eine gute Idee. Das mit dem Dietrich halte ich für eine nicht so gute Möglichkeit. (Wenn ich den Skelettschlüssel habe hab ich keine Dietriche mehr dabei!)
Das Buch kannst du den Player ja direkt ins Inventar schmeißen.

Obwohl ich gerne so wenig, wie möglich Items mit mir rumschleppe (wegen der Übersichtlichkeit)...
 
Auch ein Countdown wird nicht nötig sein, wenn du im Skript die Variable "fQuestDelayTime" deklarierst und auf die gewünschte Anzahl Sekunden setzt. Das ist quasi dein Timer (5 ist Standard). Ich habe "pow" zwar noch nie getestet, aber ich denke, das Skript kannst du auch ruhig alle 5 Sekunden laufen lassen.
 
  • Like
Reaktionen: Hansebenger
Jo ich mag eigentlich auch keine unnötigen Items, ein Buch wird aber wohl die beste Möglichkeit sein.
Ich hab aber bis jetzt noch keine Ahnung, wie ich dieses Buch erstelle und ins Inventar schmeiße.

Mein neues Quest-Skript sieht jetzt so aus:
Code:
ScriptName NonLameResistances

float fQuestDelayTime
long x
float y
float Norm
float z
long w
Begin GameMode

set fQuestDelayTime to 5

player.ModActorValueC 52 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 52)/Norm)
set x to -(player.GetActorValueC 52)+100-100*(pow z y)
player.ModActorValueC 52 x
set w to (player.GetActorValueC 52)

player.ModActorValueC 53 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 53)/Norm)
set x to -(player.GetActorValueC 53)+100-100*(pow z y)
player.ModActorValueC 53 x
set w to (player.GetActorValueC 53)

player.ModActorValueC 59 500
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 59)/Norm)
set x to -(player.GetActorValueC 59)+100-100*(pow z y)
player.ModActorValueC 59 x
set w to (player.GetActorValueC 59)

player.ModActorValueC 61 500
set w to (player.GetActorValueC 61)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 61)/Norm)
set x to -(player.GetActorValueC 61)+100-100*(pow z y)
player.ModActorValueC 61 x
set w to (player.GetActorValueC 61)
endif

player.ModActorValueC 62 500
set w to (player.GetActorValueC 62)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 62)/Norm)
set x to -(player.GetActorValueC 62)+100-100*(pow z y)
player.ModActorValueC 62 x
set w to (player.GetActorValueC 62)
endif

player.ModActorValueC 64 500
set w to (player.GetActorValueC 64)
if (w>0)
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 64)/Norm)
set x to -(player.GetActorValueC 64)+100-100*(pow z y)
player.ModActorValueC 64 x
set w to (player.GetActorValueC 64)
Endif

player.ModActorValueC 68 500
set w to (player.GetActorValueC 68)
if (w>0)
set Norm to 40
set z to 1-Norm/100
set y to ((player.GetActorValueC 68)/Norm)
set x to -(player.GetActorValueC 68)+100-100*(pow z y)
player.ModActorValueC 68 x
set w to (player.GetActorValueC 68)
Endif

player.ModActorValueC 65 500
set w to (player.GetActorValueC 65)
if (w>0)
set Norm to 20
set z to 1-Norm/100
set y to ((player.GetActorValueC 65)/Norm)
set x to -(player.GetActorValueC 65)+100-100*(pow z y)
player.ModActorValueC 65 x
set w to (player.GetActorValueC 65)
EndIf

end
Edit: Es funktioniert
 
Zuletzt bearbeitet:
Ich hab da ma ne Frage

Ich will in meiner Worldspace das man nur Schnellreisen kann wenn man Portsteine hat .Das heißt wenn man keine hat geht nix und wenn man einen hat kann man einmal reisen .

Wie geht das
 
Vielleicht disable fasttravel oder so, mal schnell das Kommando nachschauen gehen....

Edit: Ist "disablefasttravel" ;)

Ugf so:

scn bla

Begin (weiß leider den Befehl für "nur in der Worldspace" net, Sorry)

if player. GetItemCount Portsteine.ref =< 1

enablefasttravel

elseif player. GetItemCount Portsteine.ref >1

disablefasttravel

Messagebox "Ihr benötigt einen Portstein um zu reisen"

Endif

End
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anti_Held
Das müsste über ein Quest-Skript gehen:
Code:
scn name

float fQuestDelayTime

Begin MenuMode 1023

if fQuestDelayTime != 0.5
 set fQuestDelayTime to 0.5
endif

if player.getItemCount <ID> == 0
 enableFastTravel 0
else
 enableFastTravel 1
endif

end

Dafür müsstest du beim Betreten des WS die Quest mit "startQuest" starten. Natürlich beim Verlassen "stopQuest". Außerdem solltest du beim Wechseln des WS ebenfalls "enableFastTravel 0/1" benutzen, damit es nur in diesem WS so ist.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anti_Held
Ich hab mal ne Frage zu dem Tutorial, dass Gildur mir empfohlen hat.

Code:
begin onActivate
  set Choosing to -1
end

begin GameMode
  if (Choosing == -1)
    messagebox "What would you like to do?" "Button 0" ... "Button 9"
  elseif (Choosing == 1)
    set Choice to GetButtonPressed
...


Bei diesem Script ist mir etwas merkwürdiges aufgefallen. Wie soll die Messagebox funktionieren, wenn als Bedingung für set Choice to GetButtonpressed die Variable Choosing mit 1 definiert sein muss, es aber keine Funktion in dem Script gibt, die Choosing mit 1 definiert?
 
Ich hab mal ne Frage zu dem Tutorial, dass Gildur mir empfohlen hat.

Hallo Almalexian,

du mußt das Tutorial ganz durcharbeiten. Der von dir gepostete Abschnitt soll nur zeigen, wie man es machen könnte und erklärt danach wie man es noch besser machen kann und warum. Dein Beispiel ist kein vollständiges Script und endet mit "...". Was bedeutet, hier kommt noch was für die Erklärung völlig unbedeutendes.

Gruß Peter
 
  • Like
Reaktionen: Almalexian
Kann mir den keiner helfen ?

Es gibt keinen direkten Befehl, mit dem du Abfragen kannst, ob der Spieler die Schnellreisefunktion benutzt. Ich habe auch mit OBSE keinen gefunden. Was du vielleicht machen könntest, wäre, abzufragen, ob der Spieler gerade zufällig die gleichen Koordinaten hat wie der MapMarker. Da man kein Skript auf MapMarker legen kann, wird das ein ziemlich großer Schreibaufwand (Quest-Skript):
Code:
scn name

float fQuestDelayTime
short removed

Begin GameMode

if fQuestDelayTime != 0.001
 set fQuestDelayTime to 0.001
endif

if player.isInInterior == 1
 return
endif

if removed == 0
 if player.getInSameCell <MapMarker-Ref> == 1 && if player.getDistance <MapMarker-Ref> <= 0.001
  player.removeItem <ID> 1
  set removed to 1
 else
  set removed to 0
 endif
endif

end

Die Quest solltest du aus Performancegründen auch erst starten, wenn der Spieler den WS betritt.
Ich habe im Übrigen nochmal das Skript auf der Seite zuvor geändert. Statt "MenuMode 1" steht dort jetzt "MenuMode 1023".
 
  • Like
Reaktionen: Anti_Held
Ich könnte jetzt noch einen Alternativvorschlag vorbringen. Aber dazu müsstest du die Schnellreisefunktion gegen was komplett anderes ersetzen.

Wie wäre es denn, wenn du wie LordKain in Adash Portsteine machst, mit welchen man dann per MessageBox-Abfrage an den gewünschten Ort gebeamt wird. Das wäre a) atmossphärischer und b) auch mit Scripts leichter zu bewerkstelligen.

:bye:
 
  • Like
Reaktionen: Anti_Held
Ja ich glaube ich habe eine Alternative

Es wird Steine geben an denen man sich mit Hilfe einer Messagebox zu bestimmten Orten kann das kann ich sogar noch Skripten ^^

noch was ich würde gerne einen Zauber machen mit dem der Spieler an der Stelle wo er steht einen Marker erstellt . Dann soll er sich mit einem anderen Zauber dort hin Porten und mit wieder einem anderen den Marker löschen .
 
Nun, vielleicht nicht die einfachste Lösung, aber da kann ich dir was schreiben.
Zunächst brauchst du dafür eine Interiorzelle, die man nicht betreten kann. In die setzt du zwei X-Marker. Beiden weist du eine Ref-ID zu (ich nenne sie einfach mal Marker-beweglich und Marker-fest). Dann brauchst du noch eine Global, ich nenne sie hier Markerplaced. Short reicht.

Das Script für den Zauber, der den Marker zum Spieler bewegt, sieht dann so aus:
Code:
scn Markersetzen

begin ScriptEffectStart
if (Markerplaced == 0)
Ref-ID-Marker-beweglich.moveto player
set Markerplaced to 1
endif
end

Das Script, um den Spieler zum Marker zu teleportieren:
Code:
scn SpielerzuMarker

begin ScrtipEffectStart
player.moveto Ref-ID-Marker-beweglich
end

Das Script, um den Marker zu entfernen:
Code:
scn Markerentfernen

begin ScriptEffectStart
if (Markerplaced == 1)
Ref-ID-Marker-beweglich.moveto Ref-ID-Marker-fest
set Markerplaced to 0
endif
end

So muss der Spieler den Marker jedes Mal entfernen, nachdem er ihn das erste Mal gesetzt hat.

Einfach ist es, keinen "Entfernen-Zauber" zu benutzen, dann wird der einmal zum Spieler bewegt und verbleibt dann immer an der Position, an der er das letze Mal war.

Dafür würdest du folgendes benötigen:

Die Interiorzelle mit einem X-Marker (Marker-beweglich).
Diese beiden Scripte:
Code:
scn Markersetzen

begin ScriptEffectStart
Ref-ID-Marker-beweglich.moveto player
end
Code:
scn SpielerzuMarker

begin ScrtipEffectStart
player.moveto Ref-ID-Marker-beweglich
end
 
  • Like
Reaktionen: Anti_Held