Construction Set Setzen der QuestStage

Fellan

Freund des Hauses
Ich weiß mittlerweile, wie ich durch das Lesen eines Zettels die QuestStage verändere, nämlich per Script:

Code:
scn [B]ScriptName[/B]

short DoOnce

begin OnActivate

if ( IsActionRef Player == 1 ) && ( Doonce == 0 )
	SetStage [B]QuestID[/B] 10
	set Doonce to 1
endif

Activate

end



Das steht hier im Portal ja sogar im Tutorial. Auch das verändern der QuestStage per Dialog ist kein Problem. Einfach in den ResultScript:

Code:
SetStage [B]QuestID[/B] 10



Wie kann ich aber die QuestStage per Script erhöhen, wenn...
  1. Der Spieler in bestimmten Abstand zu einem Objekt kommt
  2. Der Spieler in eine bestimmte Cell kommt
  3. Der Spieler in einer bestimmten Cell eine oder mehrere bestimmte Person(en) getötet hat
  4. Der Spier einen Gegenstand vom Boden oder aus einem Container nimmt, der kein Buch ist
  5. Der Spieler durch eine bestimmte Tür geht
  6. Der Spieler einen bestimmten Activator aktiviert
Ist wahrscheinlich alles relativ einfach, aber ich habe vom Scripten nunmal sehr, sehr wenig Ahnung und auch durch die Tutorials steige ich nicht wirklich durch.
 
1:
begin GameMode

if getdistance player > 100
setstage QuestID 10
endif

end

2: Begin Onload
3: ?
4: Begin OnAdd player
5: Auch Activate
6: Natürlich Activate

Hoffe das konnte helfen.;)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Fellan
Wie vielen Metern entsprechen deine "100" denn in etwa?

Und wie sieht der Script bei 2, 4-6 aus? So:

Code:
scn [B]ScriptName[/B]

Begin OnAdd.Player

SetStage [B]QuestID[/B] 10

...das ganze dann halt ausgetauscht mit "Begin OnActivate" und "Begin OnLoad"?

Und hat jemand eine Ahnung wie das mit den 3 getöteten NPCs aussieht?
 
Wie vielen Metern entsprechen deine "100" denn in etwa?

Und wie sieht der Script bei 2, 4-6 aus? So:

Code:
scn [B]ScriptName[/B]

Begin OnAdd.Player

SetStage [B]QuestID[/B] 10

...das ganze dann halt ausgetauscht mit "Begin OnActivate" und "Begin OnLoad"?

Du taucht bei denen ersten Scriptz einfach immer das Wort aus, das nach begin steht;) wie dus oben schon gemacht hast.

Das mit der Begrenzung weiß ich selber nicht, musste halt mal ausprobieren.

Guck für die toten NPCs ambesten mal Hier
 
Zuletzt bearbeitet:
@Dark: Gut, bis jetzt hat auch alles nach dem Muster funktioniert. Wegen dem toten NPC: Wenn ich "kill" einsetze, dann fällt der NPC ja an Ort und Stelle um, ich will ihn ja am Besten sachte auf den Boden legen. Das aber in den zugehörigen Thread, da wurde mir schon geholfen und die Methode gefällt mir besser. ;)
 
Hat denn niemand eine Ahnung, wie ich nach dem Tod von drei bestimmten NPC-References die Stage erhöhen lasse, ohne dass der Spieler dabei ein Objekt oder dergleichen aufheben muss?
 
Hallo Fellan,

ich bin zwar ein lausiger Skripter, aber vielleicht könntest Du jedem der drei NPC einen "OnDeath" Block verpassen, der eine Questvariable hochzählt. Im Questskript kannst Du die Variable dann auswerten.

Gruß, Gert
 
Genau! So habe ich das bei meinen NWN-Scripts auch gemacht.

VarX=0

1. Ondeath VarX=VarX+1
2. etc.

If VarX=3 Then...

___________________

Aber eigentlich hab' ich sowas von keine Ahnung... ;)
 
Hat denn niemand eine Ahnung, wie ich nach dem Tod von drei bestimmten NPC-References die Stage erhöhen lasse, ohne dass der Spieler dabei ein Objekt oder dergleichen aufheben muss?

Versuchs mit Folgendem:

Code:
scn die

begin gamemode

if npcref.getdead == 1 && npcref2.getdead == 1 && npcref3.getdead == 1
setstage meinquest 20
endif

end

Npcref bedeutet, die Objekt-Referenz, die du im RenderWindow einstellen kannst, wenn du einen Doppelklick auf einen NPC machst, dann sich ein kleines Fenster öffnet und du dort dann ganz oben etwas eingeben kannst. Das ist die Ref des NPC's, die musst du bestimmen und dann 1:1 im script übernehmen.

Ich hoffe, ich konnte dir helfen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Sandro
So, ich habe mir jetzt folgende Script erstellt, funktioniert alles wunderbar. Man muss zwar trotzdem einen Gegenstand aufnehmen, aber das wollte ich ja so. Ich wollte nur vermeiden, dass man nur einen der drei Personen tötet, den Gegenstand aufnimmt und fertig. Der Script liegt weiterhin auf dem Gegenstand, den man aufnehmen soll, checkt nur, ob die drei Personen eben wirklich tot sind:

Code:
scn WGTSetStageWGTQuest90

short done

begin OnAdd Player


if ( WGTArgAssassine01Ref.getdead == 1 ) && ( WGTKhaAssassine01Ref.getdead == 1 ) && ( WGTDEAssassine01Ref.getdead == 1 ) && ( done == 0 )
SetStage WGTQuest 90
set done to 1
endif

end

Der zweite Script ist Objekt-unabhängig:

Code:
scn WGTSetStageWGTQuest110

short done

begin GameMode

if ( WGTWEAssassine01Ref.getdead == 1 ) && ( WGTDEAssassine02Ref.getdead == 1 ) && ( WGTRGAssassine01Ref.getdead == 1 ) && ( done == 0 )
SetStage WGTQuest 110
set done to 1
endif

end



Es könnte jetzt natürlich sein, dass es Spieler gibt, die (bezogen auf den ersten Script) den einen NPC töten und den Gegenstand aufnehmen (if-Statement wird nicht erfüllt, Stage also nicht erhöht), dann die zwei anderen töten. Wird ein "OnAdd Player" dauerhaft ausgeführt, wenn der Spieler das Item im Inventar hat oder müsste er in einem solchen Fall den Gegenstand wieder fallen lassen und erneut aufheben?
 
Ein OnAdd Block wird nur einmal ausgeführt, wenn der Gegenstand eben geaddet wird. Es gibt noch die Möglichkeit, eine einfache Variable im Questscript zu haben, die dann über einen OnDeath Block von den NPCs erhöht wird
Code:
scn blabla

Begin OnDeath
if (Questvar < 2)
set Questvar to (Questvar + 1)
elseif (Questvar == 2)
setstage QuestD Stage
endif
end
wenn der Gegenstand noch dabei sein soll, einfach das selbe Script auf den Gegenstand legen, nur mit einem OnAdd-Block, sodass dann alle Scripts so aussehen:
Code:
scn blabla

Begin OnAdd
if (Questvar < 3)
set Questvar to (Questvar + 1)
elseif (Questvar == 3)
setstage QuestD Stage
endif
end
 
Hihi, meine Rede... :roll:

Übrigens braucht man die 'done-Variable' nicht extra...
 
Zuletzt bearbeitet:
Wie genau funktioniert das mit dem "getdistance player" und dem SetStage? Wenn ich einfach den oben genannten Script verwende und auf ein Objekt lege (in dem Fall ein NPC), dann funktioniert es nicht, die Stage erhöht sich einfach nicht.
 
Ich rate mal einfach.:lol:

Code:
begin GameMode

if getdistance player > 100 Ref-Name des Objektes
setstage QuestID 10
endif

end

Möglicherweise klappt das ja.
 
Wie genau funktioniert das mit dem "getdistance player" und dem SetStage?

So sollte es gehen:
Code:
if (GetStage QuestID < 10) && (GetDistance Player < 500)
   SetStage QuestID 10
endif

Zu beachten ist, dass die Entfernungsabfrage natürlich mit "kleiner als" erfolgen muss und nicht, wie zweimal schon in diesem Thread falsch geschrieben, mit "größer als".

Zu Deiner früheren Frage der Einheiten-Umrechnung, hier ein Link ins CS-Wiki:
http://cs.elderscrolls.com/constwiki/index.php/Oblivion_Units

70 Einheiten entsprechen ungefähr 1 Meter.