PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Skripten



Jounk33
01.06.2006, 20:08
Kurze Frage zum Skript.

Und zwar stellte ich eben fest, dass ein Skript nur maximal 1042 Zeilen haben darf.

Nun erstelle ich aber ein Objekt, ein grosses Multifunktionswerkzueg, dass allerhand Sachen kann.
Momentan habe ich nur mal die Hälfte aller Funktionen drin.
Nun die Frage:
Ist es möglich Skripts miteinander zu verbinden, also durch eine Funktion von einem Skript in das nächste zu wechseln ?
Weil anderfalls müsste ich mehrere Werkzeuge modden um alle Funktionen hinzubekommen.

Lazarus
01.06.2006, 20:16
Man könnte theoretisch in einem Script zB schreiben
objektxyz.activate objektxyz

und dieses Objekt hat dann einen Skript der mit
onActivate anfängt. So könnte man den Skript weiterführen, oder besser gesagt, das ist die beste Möglichkeit die mir als noch recht unerfahrener TES-Modder gerade einfällt ;)

Jounk33
01.06.2006, 20:25
Kann man das auch per Button Press machen ?
Laso wenn man im Menü ein gewisses Feld klickt, dass dann ein anderes Skript aktiviert wird ?

Lazarus
01.06.2006, 20:30
Sicher, ich weiß zwar nicht wie das mit diesen Menüs genau gemacht wird, aber im Prinzip kann man das so überall einsetzen.

Exterminas
01.06.2006, 20:40
ich weiß nicht ob ich das richtig verstanden habe... der geschriebene script ist zu lang als dass er in einmal platz hat... also brauchst du mehrere?

dann solltest du es mal mit startscript xyz versuchen (ging jedenfalls in morrowind so)

weiß auch nicht ob das stimmt was ich sage...

The Flo
01.06.2006, 20:46
eine möglichkeit wäre, dem spieler heimlich items hinzuzufügen. diese tragen dann teile des scripts und werden durch globale variablen freigeschaltet.

d.h. im hauptscript steht z.b.

set scriptVar1 to 1

und in einem nebenscript steht dann ganz am anfang des codes

if ( scriptVar1 == 0 )
return
endif

dann wird sich die wirkung des scripts erst entfallten, wenn er durch den hauptscript und die globale variable das "go" bekommt.
die items, auf denen die scripts sind, müssten dann quest-items sein, damit man sie nicht ablegen kann...

gäbe es noch globale scripts wie in morrowind, die unabhängig von objects oder quests laufen könnten, ginge das ganze soooooo einfach von statten und man könnte das script sauber splitten ohne irgendwelche "schmutzigen tricks". aber na ja, verstehe einer bethsoft...:rolleyes:

edit:
dann solltest du es mal mit startscript xyz versuchenich glaube, dir schon mal erzählt zu haben, das genau DAS nicht mehr möglich ist. siehe letzter absatz

Jounk33
01.06.2006, 21:14
ICh glaube jetzt muss ich mal die Katze aus dem Sack lassen.

Ich arbeite gerade an einer Werkbank, mit der man Waffen und Rüssis schmieden kann.
Anfangen möchte ich mit Pfeilen.
Man braucht für alles was damit hergestellt werden kann Rezepte. Diese Rezepte benötigen eine Menge Zeilen.
Das ist das Problem.

Kann man das Hauptmenü so gestalten, dass wenn man etwas auswählt ein anderes Skript geschaltet wird ?

Beispiel:
Ich aktiviere die Werkbank. Dann soll ein Menü erscheinen:
"Was möchten Sie tun ?"
- Beenden
- Pfeilschäfte herstellen
- Pfeilspitze herstellen
- Pfeilespitzen modifizieren
- Pfeile herstellen

Alleine Pfeilspitzen herstellen benötigen über 1000 Zeilen.
Ist es möglich jede dieser Optionen mit einem neuen Skript zu belegen ?
Mit der Activate Funktion vielleicht ? und wenn ja wie ?

NewRaven
01.06.2006, 21:24
gäbe es noch globale scripts wie in morrowind, die unabhängig von objects oder quests laufen könnten, ginge das ganze soooooo einfach von statten und man könnte das script sauber splitten ohne irgendwelche "schmutzigen tricks". aber na ja, verstehe einer bethsoft...:rolleyes:


Verstehe einer die Modder... ob ich nun StartScript/Stopscript nutze oder in einer "Pseudo-Quest" das Script starte, macht ja nun keinen Unterschied. Doch, mach es... nämlich das es deutlich übersichtlicher ist, ich Dialoge integrieren kann u.s.w. und alles sofort im Blick habe und nicht so ein wüstes Chaos wie in Morrowind... aber Hauptsache erstmal gemeckert... ;)

Zum Problem: du setzt einfach für jede Option ein Queststage mit dem du dann das jeweilige Script bzw. wiederum ein "Pseudo-Quest" startest... Beenden ist dann eben 10 - da passiert nix... Pfeilschäfte herstellen ist 20 - und du startest Pseudo-Quest 1, Pfeilspitze herstellen ist 30 und startet Pseudo-Quest 2 u.s.w. - du darfst halt nur nicht vergessen, die Queststage des "Initialisierungsquests" wieder am Ende eines jeden Scriptes zurückzusetzen und die anderen Scripte/Quests immer vernünftig zu beenden, wenn sie abgearbeitet wurden.

Jounk33
01.06.2006, 21:47
Kann man es folgendermassen anlegen:

Begin MenuMode
if DoOnce == 1
Messagebox "Was möchten Sie herstellen ?","Beenden","Schäfte","Spitzen"
set DoOnce to 12
endif

if DoOnce == 12
set Button to GetButtonPressed
if Button > -1
if Button <= 0
set DoOnce to 0
elseif Button == 1
SetStage to xyz1 10
elseif Button == 2
SetStage to xyz2 20
endif
endif
endif


Und wie beginn ich dann die anderen Questskripts ?

NewRaven
01.06.2006, 22:12
Machs dir doch einfach einfach... hab ich mir grad überlegt ;)
anstatt

SetStage to xyz1 10
elseif Button == 2
SetStage to xyz2 20

einfach

StartQuest Irgendwas1
elseif Button == 2
Startquest Irgendwas2

Die jeweiligen Scripte definierst du einfach direkt in der Questerstellung (Questdate -> Scripts), somit entfällt der Teil mit den Stages völlig. Ist zwar etwas unübersichtlicher, aber speicherschonender. Und nicht vergessen, den Kram dann mittels StopQuest wieder zu beenden :)

Jounk33
01.06.2006, 23:07
Interessant, das könnte funktionieren.
Ich werd es morgen mal testen.

Herzlichen Dank

The Flo
01.06.2006, 23:39
Verstehe einer die Modder... ob ich nun StartScript/Stopscript nutze oder in einer "Pseudo-Quest" das Script starte, macht ja nun keinen Unterschied. Doch, mach es... nämlich das es deutlich übersichtlicher ist, ich Dialoge integrieren kann u.s.w. und alles sofort im Blick habe und nicht so ein wüstes Chaos wie in Morrowind... aber Hauptsache erstmal gemeckert... ;)na ja, aber dort habe ich dann das problem, dass ich den neuen tagebucheintrag, der bei questbegin eintritt und nicht zu übersehen ist, immer rechtfertigen muss. ich werde also zu einer "pseudo-quest" gezwungen, auch wenn dann im tagebucheintrag nur etwas banales steht wie "ich habe so eben ein seltsames gerät gefunden ... bla bla blubb"

oder verstehe ich da etwas falsch? kann ich das aufscheinen eines neuen tagebucheintrags in irgendeiner weise verhindern? für den spieler also quasi unsichtbar machen?

NewRaven
01.06.2006, 23:46
Öhm... nee? Wenn du das Textfeld komplett leer läßt (bzw. das ;empty als Kommentar wie bei den CharGen-Scripts einfügst), gibt es auch keinen Tagebucheintrag... das wäre bei meinem Oblivion Improved Initialisierungsscript ja eine Katastrophe... :)

Also nein, es gibt nur Tagebucheinträge bei den Queststages, wenn du es auch willst. Sieh dir als Beispiel mal die ganze Charaktergenerierung an... da kommt nur bei jedem 3 oder 4 Schritt/Stage mal ein Eintrag, alles andere wird nur genutzt, um Scriptbefehle auszuführen, Variablen zu setzen u.s.w. Ganz ohne Tagebucheinträge stellt ebenfalls kein Problem dar :)

Jounk33
02.06.2006, 00:41
Ganz nebenbei habe ich eine überraschende Entdeckung gemacht (wenn sie nicht schon entdeckt wurde).
Nähmlich man kann statische Gegenstände aktivieren.
Einfach ein neuer Gegenstand unter Misc. Items generieren, diesen mit einer Nif belgen, die normalerweise statisch ist (z. B. Möbel: Tisch, oder Regal., oder Schmiede).
Dann ein entsprechendes Skript zuweisen und schon hat man eine Werkbank :D
Wenn man sie aktiviert passiert noch nichts. Erst wenn man ins Invetarmenü geht, dann erscheint das Dialogmenü.
Das ist eigentlich genau das was ich wollte.
Eine Werkstatt, die man nicht mitnehmen kann, also erst zuhause in aller Ruhe seine Sachen reparieren, oder neue Sachen schmieden, schneidern, zubereiten kann.
Mir hat es nie gefallen, dass man mitten im Kampf sich schnell mal 20 Heiltränke brauen kann usw.

Ich habs sogar als Einrichtung ausgelagt. Also dass man es als Mobilar kaufen muss.

Jetzt muss nur noch das skripten klappen.

Escalbryt
02.06.2006, 09:08
das mit den stages funkrioniert nicht... das musste ich schon vor langer zeit feststellen als ich das assassin's light armor extended 0.5 pi gemacht hab... konnte alles auf ne globale variable umschreiben...(hat fast genauso lang gedauert wie die vorherige arbeit). Afaik das problem: man kann in den queststages nicht zurückgehn.. d.h. nicht von 20 auf 10 sondern nur 20 auf 20 oder höher. Damit fällt der Queststage weg... zum Thema Pfeile erstellen: mit retros Fletching Mod gibt es da schon ein sehr ausgereiftes plugin auch für die deutsche version.Das soll dich jetzt nicht von deinem Projekt abhalten sondern lediglich als info dienen... er hat das script erst auf mehrere gegenstände aufgeteilt.

einfacher geht es natürlich das ganze im dialog zu machen, aber ich fürchte das kommt bei dir nicht in frage...

@newraven: wenn man stop Quest benutzt kann man die quest wieder von vorne benutzen?

MfG Fetter Hobbit

Jounk33
02.06.2006, 12:12
mit retros Fletching Mod gibt es da schon ein sehr ausgereiftes plugin auch für die deutsche version.Das soll dich jetzt nicht von deinem Projekt abhalten sondern lediglich als info dienen
Das weiss ich.
Und eigentlich wollte ich meine Arbeit erst hier vorstellen wenn sie fertig ist.
Retros PI hat den Nachteil, dass man quasi während des Kampfes sich schnell mal Pfeile machen kann, so wie die Tränke.
Ausserdem ist es mehr ein Cheat als eine ernste Mod.
Das Prinzip aus 2 mach etwas besseres mochte iich schon in Diablo 2 nicht.

Mein PI soll sehr realistisch sein.
Man muss erst mal Schäfte und Spitzen herstellen um dann funktionsfähige Pfeile machen zu können und ausserdem kann man das nur zuhause.
Ausserdem sollen die Pfeile und Bögen nur mal der Anfang sein.
Meine Idde reicht noch viel weiter, nähmlich in eigene Waffen und Rüstungsproduktion, eigene Schneiderei, eigene Schmuckschmiede,, Magische Aufladestation ect, ect...

NewRaven
02.06.2006, 14:23
@Fetter Hobbit

Nein, soviel ich weiß, stopt StopQuest die Quest nur (sie wird also nicht weiter abgearbeitet, zugeordnete Dialoge verschwinden, noch laufende Scripts werden gestopt) aber der Queststage wird nicht zurückgesetzt... ich bin mir sicher, das das irgendwie gehen muss... :)

Escalbryt
02.06.2006, 18:26
ich glaube oblivion sperrt sich generell dagegen rückwärts zu stagen daher bleibt nur der griff zur globalen variable

MfG Fetter Hobbit

The Flo
03.06.2006, 23:44
ha! es ist scheinbar doch nicht so ohne, ein quest-script als globales script zu missbrauchen.
grund: es wird nur alle paar frames ausgeführt. in manchen fällen kann das ziemlich problematisch sein, besonders wenn man timer einsetzen muss.:(

NewRaven
03.06.2006, 23:54
Du hast mittels der verschiedenen diversen "Begin" - Statements ausreichend Möglichkeiten, das Script anzupassen... für den Rest gibt es Bedingungen, Timer u.s.w. - was glaubst du, wie ein globales Script in Morrowind ausgeführt wurde? Natürlich in den selben Abständen... Und da hatte man diese Einflussmöglichkeiten in dem Umfang nicht...

The Flo
04.06.2006, 00:18
ich hatte das mit diesem script getestet:

scn asdf

begin gamemode

message "asdf"

enddoch die message tauchte nur alle 2 sekunden auf.
der quest hatte eine priorität von 100 und wurde gleich bei spielstart aktiviert. habe ich da was falsch gemacht?:confused:

NewRaven
04.06.2006, 00:28
Nicht falsch, aber Begin Gamemode ist eben dafür da, das das Script immer läuft... andere Möglichkeiten findest du hier: http://cs.elderscrolls.com/constwiki/index.php/Begin
Alle 2 Sekunden deshalb, weil das Spiel Zeit braucht, um es abzuarbeiten... sinngemäß ist es aber durchgehend

Wie gesagt, auch bei Morrowind ist ein globales Script immer gelaufen - dagegen was zu tun bzw. es einzuschränken ist Aufgabe des Modders und das geht in Oblivion deutlich besser als damals noch in Morrowind