Construction Set Skriptthread zum Construction Set

Hi Leute,
ich benötige ein Script das ein Tag (Ingame) nach dem Laden des Spielstandes einen Questbucheintrag auslöst.

QuestScript:
Code:
scn blub

short StartDay

Begin Gamemode
	if ( StartDay )
		if ( StartDay != ( GameDay + 1 ) )
			SetStage [QuestID] [Stage]
			StopQuest [Diese Quest]
		endif
	else
		set StartDay to ( GameDay + 1 )
	endif
End

Frage: Ich möchte das bei einem NPC die Sympathie soweit absinkt, nachdem ich ihn auf ein bestimmtes Thema angesprochen habe, daß er mich angreift. Wird sowas über ein Script oder über die Conditions geregelt?
Ich danke für Antworten.

Ein NPC greift dich an, sobald seine Sympatie dir gegenüber kleiner ist als seine Aggression und diese größer als 5 ist (bei 5 verteidigt er sich, wenn er angegriffen wird; darunter macht er gar nichts).

Der Befehl um die Sympathie zu verändert ist ModDisposition. Einsetzten würde ich das über das Result Script der Antwort. ;)

Alternativ kannst du btw. StartCombat verwenden.
 
  • Like
Reaktionen: Bernd009
Hi Low Post,
zunächst einmal danke für das Script und den Tip. Doch habe ich noch eine Frage zu diessem Script.
Bei der Zeile "StopQuest [Diese Quest], welche Quest soll ich denn da angeben? Es soll durch diesen Eintrag eine Quest gestartet werden. Und ist es erforderlich, daß man die einzelnen Zeilen so versetzt eingibt, oder kann man die einfach von links nach rechts hinschreiben?
 
Hi Low Post,
zunächst einmal danke für das Script und den Tip. Doch habe ich noch eine Frage zu diessem Script.
Bei der Zeile "StopQuest [Diese Quest], welche Quest soll ich denn da angeben? Es soll durch diesen Eintrag eine Quest gestartet werden. Und ist es erforderlich, daß man die einzelnen Zeilen so versetzt eingibt, oder kann man die einfach von links nach rechts hinschreiben?


1. Bei StopQuest sollst du dann die QuestID deiner Quest, die mit dem Tagebucheintrag, eintragen. Aber ich denke StopQuest ist überflüssig, denn du willst ja noch weitere Tagebucheinträge mit neuen Queststages machen oder ?

2. Das dient eigentlich eher der übersicht, du kannst die Skriptzeilen so versetzt schrieben wie du willst.

Mfg Master of Worlds
 
Zuletzt bearbeitet:
hallo,

Gibt es einen befehl der einem NPC sagt das er zu dem Bestimmten X Maker gehen soll?

Mfg yves
 
Ich brauche schon wieder mal Hilfe bei einem Skript.

Es handelt sich um ein Skript auf einem Schalter, sobald dieser Aktiviert wird, kann man sich zwischen 4 Teams wählen, gegen die man Kämpfen will.

Code:
scn dpSEArenaTeamBattleScript

short init
short button
short a

begin onLoad
Set init to 0
end

begin onActivate
	if init == 0
		MessageBox "Gegen welches Team wollt ihr kämpfen ?","Dremora Team","Banditen Team","Totenbeschwörer Team","Kreaturen Team","Abbrechen"
	elseif init == 1
		Message "Ihr habt bereits ein Team zum Kampf herausgefordert!"
	endif
end

begin GameMode
	set button to GetButtonPressed
		if button == 0
		Set init to 1
		Set a to 1
		dpSEDTM1.moveto dpSEDTM1a
		dpSEDTM2.moveto dpSEDTM2a
		dpSEDTM3.moveto dpSEDTM3a
		dpSEDTM4.moveto dpSEDTM4a
		dpSEDTM1.startcombat player
		dpSEDTM2.startcombat player
		dpSEDTM3.startcombat player
		dpSEDTM4.startcombat player

		elseif button == 1
		Set init to 1
		Set a to 1
		dpSEBTM1.moveto dpSEBTM1a
		dpSEBTM2.moveto dpSEBTM2a
		dpSEBTM3.moveto dpSEBTM3a
		dpSEBTM4.moveto dpSEBTM4a
		dpSEBTM1.startcombat player
		dpSEBTM2.startcombat player
		dpSEBTM3.startcombat player
		dpSEBTM4.startcombat player

		elseif button == 2
		Set init to 1
		Set a to 1
		dpSETTM1.moveto dpSETTM1a
		dpSETTM2.moveto dpSETTM2a
		dpSETTM3.moveto dpSETTM3a
		dpSETTM4.moveto dpSETTM4a
		dpSETTM1.startcombat player
		dpSETTM2.startcombat player
		dpSETTM3.startcombat player
		dpSETTM4.startcombat player

		elseif button == 3
		Set init to 1
		Set a to 1
		dpSEKTM1.moveto dpSEKTM1a
		dpSEKTM2.moveto dpSEKTM2a
		dpSEKTM3.moveto dpSEKTM3a
		dpSEKTM4.moveto dpSEKTM4a
		dpSEKTM1.startcombat player
		dpSEKTM2.startcombat player
		dpSEKTM3.startcombat player
		dpSEKTM4.startcombat player

		elseif button == 4
					endif
				endif
			endif
		endif
	endif
end

begin GameMode
if dpSEDTM1.GetInCell dpEnemyHolderCell && dpSEDTM2.GetInCell dpEnemyHolderCell && dpSETTM1.GetInCell dpEnemyHolderCell && dpSETTM2.GetInCell dpEnemyHolderCell && dpSEKTM1.GetInCell dpEnemyHolderCell && dpSEKTM2.GetInCell dpEnemyHolderCell && dpEnemyHolderCell && dpSEBTM1.GetInCell dpEnemyHolderCell && dpSEBTM2.GetInCell dpEnemyHolderCell
	Set a to 0
		if dpSEDTM3.GetInCell dpEnemyHolderCell && dpSEDTM4.GetInCell dpEnemyHolderCell && dpSETTM3.GetInCell dpEnemyHolderCell && dpSETTM4.GetInCell dpEnemyHolderCell && dpSEKTM3.GetInCell dpEnemyHolderCell && dpSEKTM4.GetInCell dpEnemyHolderCell && dpEnemyHolderCell && dpSEBTM3.GetInCell dpEnemyHolderCell && dpSEBTM4.GetInCell dpEnemyHolderCell && a == 1
		Set init to 0
		endif
	endif
end

Leider wird am Ende init nicht wieder auf 0 gestellt. :huh:
Ich habe diese Variante oben genommen, da jedes Teammitglied sofort wieder in die Zelle "dpEnemyHolderCell" gerufen werden.

Weiß jemand vielleicht wie es machbar wäre ?

Mfg Master of Worlds
 
Hi Low Post,
zunächst einmal danke für das Script und den Tip. Doch habe ich noch eine Frage zu diessem Script.
Bei der Zeile "StopQuest [Diese Quest], welche Quest soll ich denn da angeben? Es soll durch diesen Eintrag eine Quest gestartet werden. Und ist es erforderlich, daß man die einzelnen Zeilen so versetzt eingibt, oder kann man die einfach von links nach rechts hinschreiben?

1.) Bei StopQuest kommt die ID der Quest hin, auf der das QuestScript liegt. Danach ist es einfach überflüssig, dass das Script noch läuft also stoppt man das einfach damit. ;)

2.) Einrückungen sind optional, aber ich bin der Meinung so ist es einfacher, da übersichtlicher. ;)

hallo,

Gibt es einen befehl der einem NPC sagt das er zu dem Bestimmten X Maker gehen soll?

Mfg yves

Gibt dem NPC ein Travel-Package mit dem X-Marker als Target. Am besten ganz oben in dessen Liste, damit es auf jeden Fall ausgeführt wird.
Als Condition überprüfst du, ob eine Variable 1 ist (GetScriptVariable/GetQuestVariable/GetGlobalValue) und sobald dein NPC losmarschieren soll setzt du die einfach auf 1. ;)

Außerdem gibst du ihm noch folgendes Script:
Code:
scn NPCScript

Begin OnPackageDone [DeinPackage]
	set [Variable] to 2
End

Damit der nicht ständig da hin läuft. ;)

Ich brauche schon wieder mal Hilfe bei einem Skript.

Es handelt sich um ein Skript auf einem Schalter, sobald dieser Aktiviert wird, kann man sich zwischen 4 Teams wählen, gegen die man Kämpfen will.

Code:
<snip>

begin GameMode
if dpSEDTM1.GetInCell dpEnemyHolderCell && dpSEDTM2.GetInCell dpEnemyHolderCell && dpSETTM1.GetInCell dpEnemyHolderCell && dpSETTM2.GetInCell dpEnemyHolderCell && dpSEKTM1.GetInCell dpEnemyHolderCell && dpSEKTM2.GetInCell dpEnemyHolderCell && dpEnemyHolderCell && dpSEBTM1.GetInCell dpEnemyHolderCell && dpSEBTM2.GetInCell dpEnemyHolderCell
	[B]Set a to 0[/B]
		if <snip2> [B]&& a == 1[/B]
		Set init to 0
		endif
	endif
end

Leider wird am Ende init nicht wieder auf 0 gestellt. :huh:
Ich habe diese Variante oben genommen, da jedes Teammitglied sofort wieder in die Zelle "dpEnemyHolderCell" gerufen werden.

Weiß jemand vielleicht wie es machbar wäre ?

Mfg Master of Worlds

Du setzt a erst auf 0, fragst dann ab ob es 1 ist und wunderst dich dann, wenn die Abfrage negativ ausfällt?
 
Zuletzt bearbeitet:
Ja der soll das aber erst machen wenn es soweit ist nicht imma!
Sondern nur nach dem Script.


Mfg yves
 
Zuletzt bearbeitet:
@Low Post,
ich danke dir. Das werde ich gleich mal testen.

@Achim,
ich danke auch dir.


EDIT:
@Low Post,
habe es ausprobiert und hat wunderbar geklappt. Danke nochmal
 
Zuletzt bearbeitet:
Namen von Magic Effects in einer MessageBox[Ex] bzw. eines GameSettings

Hey,

Wie kann ich den Namen eines MagicEffects darstellen, der ein Effekt eines Spruches hat?

Meistens würde %c funktionieren, nur leider funktioniert das nicht bei Scripteffekten und Effekten mit Actor Values :(

Mittels GetNthEffectItemCode komme ich an den Magiceffectcode, nur weiß ich nicht wie ich dadurch den Namen anzeigen lassen kann.
Die variante mit dem eingeben in eine Faction und dann abrufen will ich nich nutzen, da auch andere PlugIns die Namen verändern könnten...

Und wie bekomme ich den Inhalt eines String-GameSetting in eine MessageBoxEX

Bitte um Hilfe.
Liebe Grüße
 
Ja der soll das aber erst machen wenn es soweit ist nicht imma!
Sondern nur nach dem Script.


Mfg yves

Der läuft erst los, wenn du die Variable auf 1 setzt.
Das o.g. Script dient nur dazu, damit der nachdem der da ist nicht weiterhin da hin läuft. ;)



SirTroy schrieb:
[ME mit AV darstellen]
%c wurde in OBSE v0017 gefixt und funktioniert auch mit ME mit AVs. ;)

Ansonsten kannst du um einen ActorValue darzustellen %v verwenden.

Oder du verwendest die OBSE v0017-Funktionen GetNthEffectItemName / ActorValueToString.


[GameSetting in einer MessageBoxEx]

Verwende eine String_var mittels %z und GetStringGameSetting.
 
  • Like
Reaktionen: Yves und SirTroy
Danke :)
hab das aber per Conditions eingeschränkt nicht per Variable!
Doch eine Frage bleibt noch:
Wie kann man machen wenn man einen gegenstand Aktiviert eine MessagesBox kommt und mein eine Antwort möglichkeit hat und wenn man dann einen bestimmten Tagebuch eintragt hat eine weitere Antwort möglichkeit hinzu kommt.


Mfg yves
 
Dazu machst du zwei Messageboxen. Etwa so:

Code:
scn ...

short once
short button
short level

begin OnActivate
if (once == 0) && (player.GetStage [Quest-ID] < [Stage])
    Messagebox "Text", "Antwort 1"
    set level to 1
    set once to 1
elseif (once == 0) && (player.GetStage [Quest-ID >= [Stage])
    Messagebox "Text", "Antwort 1", "Antwort 2"
    set level to 2
    set once to 1
endif
end

begin GameMode
set button to GetButtonPressed
if (once == 1) && (level == 1) && (button == 0)
    [COLOR="lime"];Das, was bei dieser Anwort passieren soll[/COLOR]
    set once to 0 [COLOR="Lime"];damit man das nochmal aktiveren kann, weil man die Stage ja noch nicht erreicht hat[/COLOR]
elseif (once == 1) && (level == 2) && (button == 0)
    [COLOR="lime"];Das, was bei dieser Antwort passieren soll[/COLOR]
    [COLOR="lime"];eventuell noch ein "set once to 0", musst du wissen[/COLOR]
elseif (once == 1) && (level == 2) && (button == 1)
    [COLOR="lime"];Das, was bei dieser Antwort passieren soll[/COLOR]
endif
end
 
Bei mir Müsste es dann so aussehen: (Es soll bei der Ertsen(Nichts sagen und weg legen) antwort wieder schliessen und bei der 2. Antwort(necromanti) aktivieren.)

Code:
scn ...

short once
short button
short level
short Exit

begin OnActivate
if (once == 0) && (player.GetStage FNHQ02 < 45)
    Messagebox "Nichts eingeben und weg legen."
    set level to 1
    set once to 1
elseif (once == 0) && (player.GetStage FNHQ02 >= 50)
    Messagebox "Nichts eingeben und weg legen.", "Necromanti"
    set level to 2
    set once to 1
endif
end

begin GameMode
set button to GetButtonPressed
if (once == 1) && (level == 1) && (button == 0)
     Exit
    set once to 0 
elseif (once == 1) && (level == 2) && (button == 0)
Nichts eingeben und weg legen
elseif (once == 1) && (level == 2) && (button == 1)
      Necromanti
endif
end


Mfg yves
 
Hmm, das exit brauchst du nicht.

Soll "Nichts eingeben und weglegen" die Anwort sein oder der Text der Messagebox?

Eine Messagebox ist so aufgebaut:

Messagebox "Text", "Antwort 1 (=erster Knopf)", "Antwort 2 (=zweiter Knopf)" ...
Wenn du so nur Messagebox "Nichts eingeben und weglegen" schreibst, hast du ingame eine Messagebox mit dem Text "Nichts eingeben und weglegen" und einem Knopf "OK".
Für das schließen benutzt du einfach "return".

Bei der ersten Abfrage solltest du außerdem nicht < 45 sondern < 50 schreiben oder <= 45.

Zu dem anderen, was dann passieren soll:
Da musst du befehle eingeben. Wenn du da "Necromanti" schreibst, wird das vermutlich nicht mehr bringen, als eine Fehlermeldung im CS.
 
elseif (once == 1) && (level == 2) && (button == 1)
Necromanti

diese Passage kommt mir ein bisschen komisch vor. was soll die bewirken?

edit: zu langsam
 
Also der Text soll sein: Verschlüsslung
Antwort eins: Nichts eingeben und weg legen
Antwort zwei: Necromanti


mfg yves
 
Gut, dann würde die Zeile für Messagebox einmal
Messagebox "Verschlüsselung", "Nichts eingeben und weglegen"
heißen und die andere so
Messagebox "Verschlüsselung", "Nichts eingeben und weglegen", "Necromanti"

Im GameMode-Block des Scripts musst du dann noch bei den einzelnen buttons schreiben, was passieren soll.

Bei nichts eingeben und Weglegen kannst du in beiden Fällen

return
set once to 0
set level to 0

schreiben, dann passiert nichts und man kann den Gegenstand erneut aktivieren.

Bei der Antwort Necromanti muss du schreiben, was passieren soll, wenn man das wählt.
Wenn man das nochmal machen können soll, dann fügst du da auch noch wieder
set once to 0
set level to 0
an.
 
Alos beim Necromanti soll der gegenstand aktivier werden

Code:
scn ...

short once
short button
short level
short Exit

begin OnActivate
if (once == 0) && (player.GetStage FNHQ02 < 45)
Messagebox "Verschlüsselung", "Nichts eingeben und weglegen"
    set level to 1
    set once to 1
elseif (once == 0) && (player.GetStage FNHQ02 >= 50)
Messagebox "Verschlüsselung", "Nichts eingeben und weglegen", "Necromanti"
    set level to 2
    set once to 1
endif
end

begin GameMode
set button to GetButtonPressed
if (once == 1) && (level == 1) && (button == 0)
    return
    set once to 0
    set once to 0 
elseif (once == 1) && (level == 2) && (button == 0)
 return
    set once to 0
    set once to 0 
elseif (once == 1) && (level == 2) && (button == 1)
     activate player 1
endif
end


Mfg yves
 
Das verstehe ich jetzt nicht ganz. Das Script liegt auf dem Gegenstand, der Spieler muss den Gegenstand aktivieren, damit das Script startet und dann soll im Script der Gegenstand erneut aktiviert werden? Oder hat der noch eine andere Funktion?

So wie du das "activate player 1" jetzt drin hast, würde es jedenfalls passieren, wenn der Spieler die richtige Stage hat und auf "Nichts eingeben und weglegen" klickt.

EDIT:
sehe gerade, dass du das noch geändert hast mit dem activate player 1.