Construction Set Skriptthread zum Construction Set

Dieses ist das Questskript:


PHP:
scn aaMeineQuestScript

short DoOnce
short Anzahl

begin GameMode
	If DoOnce == 0		
		player.additem aaFlugblatt 1
  		Messagebox "Ein eiliger Bote hat mir ein Flugblatt zugesteckt. Ich sollte mal nachsehen, was darin steht."
		Set DoOnce to 1
	endif

	if GetStage aaMeineQuest == 20
		if Anzahl < 0
			set Anzahl to aaMeineQuest.Anzahl + 1
			setstage aaMeineQuest 30
		endif
	endif
End

Es läuft folgendermaßen ab:
Das Spiel wird gestartet und der Player erhält ein Flugblatt ins Inventar, in dem er von dem NPC erfährt, der Gegenstände sammelt. Das Lesen des Flugblattes setzt die Stage auf 10.
Der Player begibt sich zum NPC, der erteilt ihm den Auftrag, der Player nimmt ihn an. Stage wird auf 15 gesetzt.
Genau in diesem Topic, also in seinem Result, wird die Variable gesetzt:

set aaMeineQuest.Anzahl to 1

Der Player erhält nun eine Schriftrolle, wo alle Gegenstände aufgelistet sind, die er suchen soll, das Lesen dieser Schriftrolle setzt die Stage auf 20.

Nun sucht der Player nach diesen Gegenständen. Wenn er eines davon gefunden hat, kann er es beim NPC abgeben. Dabei ist die Reihenfolge egal. Er kann zuerst den 13. Gegenstand finden und abgeben, dann den 7. Gegenstand, dann den ersten Gegenstand .... es wird immer nur das abgefragt, was der Spieler grad im Inventar hat. Es handelt sich hier um insgesamt 24 Gegenstände, die man finden und abgeben soll.

Mein Ziel ist, das Spiel erkennen zu lassen, dass alle 24 Gegenstände abgegeben wurden, das soll die Stage auf 30 setzen, wpmit die Quest beendet werden soll.
 
Also das erste Problem das ich (weiterhin) sehe ist die "if Anzahl < 0" Bedingung während der Stage 20.

Wenn du bereits bei Stage 15 die Variable Anzahl auf 1 setzt kann die "kleiner als Null" Bedingung nicht mehr erfüllt werden.

Was du willst ist eine Abfrage die überprüft ob "Anzahl" 24 ist. Du musst also jedesmal wenn ein Gegenstand abgegeben wird den Wert für "Anzahl" um +1 erhöhen damit nach dem 24ten Gegenstand der Wert auch bei 24 steht. Das musst du m.E. da ansteuern wo der Gegenstand abgegeben wird, also in diesem Fall wahrscheinlich ein Dialog Topic in dem es darum geht den Gegenstand abzugeben, also in dem jeweiligen Result Script. Solange die jeweiligen Gegenstände einmalig sind und nicht mehrfach im Spiel vorkommen sollte das kein Problem sein. So in der Art:


Code:
if GetStage MeineQueste == 20 && Anzahl == 24
setstage MeineQueste 30
Dann darfst du natürlich nicht bereits vor der ersten Ablieferung den Wert Anzahl um +1 erhöhen, bzw, musst hier statt 24 eine 25 verwenden.

Selbst wenn du die "< 0" Bedingung korrigierst würde dein Script m.E. nur eines bewirken, nämlich bei Stage 20 den Wert von Anzahl um +1 zu erhöhen und dann sofort die Stage 30 schalten. Da fehlt die Überprüfung ob dein Wert für Anzahl tatsächlich ein en bestimmten Wert erreicht hat.
 
Oh je ...... jetzt gaaaanz langsam für Skript-Allergiker wie mich:

Bitte der Reihenfolge nach:

Im Questskript soll was stehen? Das hier?

PHP:
scn aaMeineQuestScript 

short DoOnce 
short Anzahl 

begin GameMode 
    If DoOnce == 0         
        player.additem aaFlugblatt 1 
          Messagebox "Ein eiliger Bote hat mir ein Flugblatt zugesteckt. Ich sollte mal nachsehen, was darin steht." 
        Set DoOnce to 1 
    endif 

    if GetStage MeineQueste == 20 && Anzahl == 24
       setstage MeineQueste 30 
    
    endif 
End

Und in den Results der 24 Abgabe-Topics das hier? "set aaMeineQuest.Anzahl to aaMeineQuest.Anzahl + 1" ?
 
Ich bin auch nicht der ganz große Experte, aber ja, m.E. sollte es so funktionieren.

Jedesmal wenn ein Gegenstand abgegeben wird wird in dem Questscript Anzahl um 1 hochgesetzt. Der Wert steht zu Anfang auf 0, erreicht also die 24 wenn der vierundzwanzigste Gegenstand abgeliefert wird. Damit ist die "Anzahl == 24" Bedingung erfüllt und die Quest Stage sollte auf 30 springen. Eigentlich sollte das vom Prinzip her wirklich so einfach sein.

Großer Aufwand ist es auch nicht, denn das Result Script kannst du ja einfach mit Copy-Paste übertragen wenn du die Zeile einmal geschrieben hast. Ich persönlich würde es bei den Gesprächen in denen man die Sachen abgibt überigens ins das jeweilige "Goodbye" Topic packen, und schon an einen früheren Teil der Gespräche, damit dir bei der vierundzwanzigsten Abgabe nicht plötzlich mitten im Gespräch die Stage 30 gesetzt wird. Dann ploppt da womöglich ein Questlog auf solange du noch mitten im Gespräch bist. Bin mir nicht ganz sicher ob das wirklich innerhalb eines Dialogs passieren kann, aber sicher ist sicher.
 
So, mein Questskript sieht jetzt aus wie oben schon beschrieben.
In jedem Abgabetopic befindet sich im Result "set aaMeineQuest.Anzahl to aaMeineQuest.Anzahl + 1" .
Außerdem befindet sich im Topic der Auftragserteilung ein "set aaMeineQuest.Anzahl to 25".

Mission durchgespielt, aber Stage wird nicht hochgesetzt. Da muss wohl noch was korrigiert werden.

Hat irgend jemand noch eine Idee, was da gemacht werden könnte?
 
Warum setzt du denn von Anfang an die Anzahl auf 25 hoch? Dann kann doch die == 24 Bedingung nie erfüllt werden.

Wenn ich dich da mit einer meiner früheren Bemerkungen verwirrt haben sollte tut mir das leid. Vielleicht haben wir uns da an einem Punkt misverstanden.

Nimm das mal bei der Auftragserteilung raus und arbeite nur mit dem +1 bei den Abgabetopics.
 
Hallo zusammen,

ich könnte nochmal eure Hilfe gebrauchen.
Ich möchte eingesperrte Sklaven dazu bringen zu fliehen, sobald der Player die Zellentür öffnet, mit anderen Worten sobald er sie befreit.

Ich haben den Sklaven ein Flee not Combat-Package gegeben mit Condition Getstage der entsprechenden Queststufe und bei Location einen X-Marker in einer extra für die entflohenen Sklaven angelegten Cell. Das funktioniert mit der Condition GetStage aber leider nicht, da die Sklaven trotz verriegelter Zellentür in dieser Stage die Zelle verlassen und wahrscheinlich an ihren Bestimmungsort gehen. Wenn der Player da auftaucht, sind die Zellen schon leer. Die Sklaven sollen aber erst dann die Zelle verlassen, wenn der Player die Zellentür aufgeschlossen hat.

Kann ich evtl. auf das Package verzichten und vielleicht lieber ein auf die Sklaven gelegtes Skript einsetzen?

Ungefähr so mal ganz simpel ausgedrückt: if Player unlock ZellentürRef, Sklave läuft zu X-MarkerRef

Könnte das so funktionieren? Wie müsste das Skript richtig aussehen?
 
Schade, dieser Thread scheint eingeschlafen zu sein.

Ich versuch's trotzdem noch mal. Bitte helft mir bei dem Skript, wenn ihr skriptkundig seid.

Ich möchte, dass nach dem Lesen einer Schriftrolle ein Aktivator, auf dem auch ein Skript liegt, enabled wird.
Der Aktivator ist persistent und initially disabled.

Mein Skript, das auf der Schriftrolle liegt, ist folgendes:

PHP:
scn SchriftrolleSkript


Begin OnActivate

     	If IsActionRef player == 1 && AktivatorRef.GetDisabled == 1
 		AktivatorRef.enable
		
     	Endif
	
End

Der Aktivator wird leider nicht enabled. Was ist falsch an dem Skript?
 
würde es so versuchen

scn SchriftrolleSkript


Begin OnActivate Player

If AktivatorRef.GetDisabled == 1
enable AktivatorRef
Endif

activate

End
 
Zuletzt bearbeitet:
Ist die Schriftrolle zu diesem Zeitpunkt im Inventar des Spielers? Falls ja liegt das Problem wahrscheinlich am falschen Blocktyp. Wenn man Gegenstände anklickt die im Inventar liegen läuft m.W. nicht der onActivate Block, sondern du wirst wahrscheinlich mit einem onEquip Block arbeiten müssen. (Der onEquip Block hat allerdings ein paar dumme Einschränkungen, siehe CS Wiki: http://cs.elderscrolls.com/index.php?title=OnEquip)

Die Syntax ActivatorRef.enable sollte allerdings m.E. richtig sein. Denke es liegt am Block Type.

Wenn's mit onEquip nicht funktioniert würd ich mal probieren in einem onActivate oder onEquip Block nur eine Variable zu setzen und dann einen GameMode Block anhängen in dem bei gesetzter Variable das Enable läuft. Manches läuft eventuell besser in einem GameMode Block. Der Versuch kann auf jeden Fall nicht schaden.


Brauchst du noch Hilfe bei deinen Sklaven und ihrem Package? Hatte die Frage leider übersehen.
 
Nein, die Sklaven sind erledigt. OMG ... was für ein Wortspiel.... :lol: Ich wollte damit sagen, ich habe das Skript-Problem mit den Sklaven gelöst.

Andy, wärst du denn so nett und würdest mir deine Skript-Variante mal richtig aufschreiben, also im PHP-Code? Im Moment versteh' ich nämlich nur Bahnhof ... könnte aber auch an der aktuellen Uhrzeit liegen. :D
 
Also so wie ich die Sache sehe hast du mehrere Möglichkeiten, je nachdem was wann passieren soll:

Möglichkeit 1: Damit wird dein Aktivator enabled, so bald die Schriftrolle ins Inventar des Spielers hinzugefügt wird, unabhängig davon ob er sie dann auch liest oder nicht.
Code:
scn .....

short triggered

Begin OnAdd Player
if triggered == 0
ActivatorRef.enable
set triggered to 1
endif
end

Möglichkeit 2: Aktiviert die Schriftrolle (zeigt also deren Text an), so bald der Spieler sie irgendwo aufnimmt:
Code:
Scn ......

begin OnActivate
if IsActionRef player == 1
    activate
    ActivatorRef.enable
endif
end

Möglichkeit 3: Wenn die Schriftrolle ins Inventar eingefügt wird soll noch gar nichts passieren, sondern erst wenn der Spieler im Inventar auf die Schriftrolle klickt um sie zu lesen.
Code:
scn .....

short triggered

Begin onEquip
if triggered == 0
ActivatorRef.enable
set triggered to 1
endif
end

Möglichkeit 2 dürfte evtl. unbrauchbar sein wenn sich die Schriftrolle in einem Container befindet und der Spieler einfach mit "alles nehmen" den ganzen Containerinhalt ins Inventar überträgt. Ich habe leicht Zweifel ob ein OnActivate auch dann greift. Aber wenn die Schriftrolle irgendwo in der Gegend herumliegt müsste Möglichkeit 2 eigentlich funktionieren.

EDIT: Als Kombination aus Möglichkeit 1 & 2 könnte auch folgendes funktionieren:
Code:
scn .....

short triggered

Begin OnAdd Player
if triggered == 0
activate
ActivatorRef.enable
set triggered to 1
endif
end
Damit sollte die Schriftrolle eigentlich aktiviert werden (also der Text wirtd angezeigt), sobald die Schriftrolle ins Inventar eingefügt wird. Das müsste auch funktionieren wenn man die Schriftrolle aus einem Container ins Inventar überträgt, sie durch ein anderes Skript mit "add" dem Spieler gegeben wird, oder sonstiges.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Harvald
Hallo,

ich habe zwei Fragen:

1) Wie kann ich ein Skript löschen?
Wenn ich die entsprechende Funktion anklicke, öffnet sich die Skriptliste und ich nehme an, ich soll das zu löschende Skript auswählen.
Das tue ich dann auch, doch es geschieht nichts. Genauso verhält es sich auch, wenn ich das zu löschende Skript vorher öffne.

2) Oft werden in den Textboxen Ä Ö Ü nicht richtig dargestellt, meist als hochgestelltes Komma `, warum ist das so?
Hierzu ist zusagen, dass ich die Skripte immer extern schreibe und dann rein kopiere, vielleicht mag es daran liegen?

Würde mich freuen, wenn jemand eine Idee hat, woran es liegen könnte...

Danke für eure Mühen!
 
Zu 1: Bist du sicher, daß dein Script nicht gelöscht wird? Entweder im Skript Fenster auf das rote X klicken, oder im Menü unter Script "Delete" wählen und dann jeweils Doppelklick auf das Script in der Liste hast du probiert, denk ich mal?

Ich hab's grade mal bei mir getestet und es tut sich auch nix, aber wenn ich meine ESP speichere und dann wieder neu lade ist das Script weg. Die "wollen Sie löschen Ja/Nein" Abfrage bekomme ich witzigerweise nur angezeigt solange ich die ESP noch nicht gespeichert habe, aber das löschen funktioniert bei mir trotzdem später auch.
 
Hallo,

Ok, jetzt ist es weg. Danke :)
Ich nahm an, es käme irgendeine Abfrage, so wie du sagst "wollen Sie löschen Ja/Nein" oder das sich allgemein was tut.
Was aber nicht der Fall war.
Ich hatte es mit einem einfachen Klick aktiviert, das reichte wohl nicht.

Danke, ist schon mal die Frage erledigt :)
 
Ich grüße dich :),

Zu deiner zweiten Frage, da das Construction Set englischsprachige Software ist und diese Buchstaben im Englischen nicht vorkommen, können sie folglich auch nicht angezeigt werden. Leider kann man das meines Wissens nach nicht austricksen, jedenfalls habe ich es noch nicht geschafft und meine Suche gerade im Netz ergab, dass ich da wohl nicht der Einzige bin. Du musst wohl mit ae, oe und ue vorlieb nehmen oder Wörter ohne die Umlaute verwenden. :(

Trotzdem alles Gute,

Brom
 
Hallo Brom,

Nö, das muss ich nicht. Manchmal geht es ohne Probleme und es wird alles richtig angezeigt.
Und in den Fällen, wo dem nicht so ist kann ich das im Skript verbessern und dann passt es auch.
Ist halt nervend weil ich jede Textbox extra prüfen muss und ich mir sicher bin bei über 50 Fällen werd ich am Ende irgendwo was übersehen,
was dann im Spiel ******e aussieht....
 
Ich grüße euch,

Zur Zeit plagt mich ein Skript, dass ich gefühlte hundert Male umgeschrieben habe. Dieses soll das Geschlecht des Spielers "lesen" und daraufhin, je nach dem, ob der Charakter männlich oder weiblich ist, eine MassageBox öffnen. Mein Problem ist, dass ich nicht weiss, welchen Befehl ich für ersteres benutzen soll. "SameSex" schien mir recht passend zu wirken, jedoch habe ich mehrere Parameter mit diesem Befehl ausprobiert, doch es wurde nur ein Fenster eingeblendet, dass mich darauf hinwieß, dass jene Parameter nicht zugelassen sein. Ich hoffe, jemand hat eine Idee. :)

Brom

P.s.:So, ich habe es selbst hinbekommen. Der Befehl dafür war:"GetPcIsSex". :)
 
Zuletzt bearbeitet:
Gibt es eine Möglichkeit den Waffenschaden zu erhöhen, ohne den Skill Schwertkampf zu buffen?
Oder den Schaden gegen Untoten zu erhöhen? Die Abfrage ob die Kreatur ein Untoter ist könnte man über die Faction regeln, oder gibt's einen anderen Befehl?


Edit: Bitte Löschen, Doppelpost war nicht beabsichtigt.
 
Zuletzt bearbeitet: