Construction Set Morrowind-Scriptkurs - Lektion 1

Dann wird die wiederhol Funktion ausgeschaltet. D.h. da das folgende ignoriert wird, kann ich es nur einmal aktivieren wenn ich entsprechende Felder wähle.
 
@Kallor
schau dir erst nochmal deine ganzen bedingungen an ... da stimmt so einiges nicht - sehr suspekt kommt mir z.B. dein if-else-elseif Konstrukt vor, sowas kann nur funktionieren wenn du das else als letztes prüfst ... und du musst natürlich auch mindestens 3 Antwortmöglichkeiten anbieten, sonst ergibt das keinen Sinn - deshalb nehm ich mal an dass du eigentlich was anderes beabsichtigst ... also erstmal die Struktur überprüfen und richtig einrücken, dann weiß man zumindest was du eigentlich willst
 
Interessant zu lesen und ihr habt Euch wirklich Mühe gegeben. Allerdings ist der Kurs wie ich sehe kann, mehr oder weniger für diejenigen gedacht, die schon gewisse Erfahrungen gemacht haben.

Ich will hier nichts herunterziehen oder schlecht machen, aber für Anfänger ist das hier sicherlich nichts. Und ich bin ein absoluter Noob. Andererseits kann ich das verstehen, dass sich für meine Gruppierung auch niemand wirklich finden lässt.

Es ist sicherlich ermüdend und nervtötend, für Euch einfache Dinge wieder und wieder zu erläutern. Sicherlich gibt es viele Tutorials die auch für Noobs wie mich grob geeignet sind, aber eben nicht so ausführlich wie man es sich wünschen täte. Und mein Englisch hält sich zudem in Grenzen, ich komme einigermassen klar. Aber wie es mit allen Fremdsprachen ist, die sind nicht so, dass sie eins zu eins ins Blut übergehen.

Aber wie gesagt, lasst es Euch nicht vermiesen. Ich gucke hier trotzdem ab und zu rein und versuche dies und das vielleicht doch aufzuschnappen. Hut ab vor den Machern. :)
 
Auch von mir: Bravo :good: Der Kurs ist Klasse und verständlich erklärt... *Ich zieh meinen Hut vor eurem Werk*

mfg
Raven
 
Könntet ihr mir mal Diarroehs oder £exas Lösungsvorschlag erklären? Klar, damit wird die Gamehour durch sechzig Einheiten dividiert, die dann wohl als Minutes angezeigt werden können. Aber wieso deklariert £exa z.B. die Gamehour als Hours? Und was soll das mit dem '( GameHour - hours )' , ich dachte, die Gamehours wären schon als Hours deklariert?

Ich habe mal eine kommentiere Version von meiner Lösung (quasi identisch zu £exas) gemacht:

Code:
begin kf_sk_uhr_script

short hour
short min
float time


if ( OnActivate == 1 )    ;Notiz 1
	
	set time to GameHour    ;Notiz 2
	set hour to time            ;Notiz 3
	set min to ( time - hour ) * 60  ;Notiz 4

	if ( min < 10 )        ;Notiz 5
		MessageBox, "Seid gegrüßt, ^PCName. Es ist %.0f:0%.0f Uhr am %.0f. Tag des %.0f. Monats im %.0f. Jahr der 3. Ära.", hour, min, Day, , Month, Year, "OK"
	else
		MessageBox, "Seid gegrüßt, ^PCName. Es ist %.0f:%.0f Uhr am %.0f. Tag des %.0f. Monats im %.0f. Jahr der 3. Ära.", hour, min, Day, Month, Year, "OK"
	endif

endif

end

  • Notiz 1: Hier warte ich darauf, dass der Spieler den Gegenstand aktiviert.
  • Notiz 2: Nachdem der Gegenstand aktiviert wurde, setze ich meine lokale float-Variable time auf den Wert der globalen float-Variablen GameHour. In der wird dann zum Beispiel der Wert 16.123456 gespeichert.
  • Notiz 3: Ich weise meiner lokalen short-Variable den Wert meiner float-Variable zu. Dabei werden einfach die Nachkommastellen abgeschnitten. Die Variabel hat dann also den Inhalt 16.
  • Notiz 4: Hier berechne ich die Minuten. Die Nachkommastellen geben den Bruchteil einer ganzen Stunde an, die bereits vergangen ist, also nehme ich den mit 60 mal, damit ich den Wert der Minuten bekomme. Dazu muss ich natürlich ersteinmal die Nachkommastellen herausbekommen. Dazu ziehe ich die vollen Stunden von der aktuellen Zeit ab:

    set min to ( time - hour ) * 60
    set min to ( 16.123456 - 16 ) * 60
    set min to 0.123456 * 60
    set min to 7.40736

    Da min wieder einer short-Variable ist, werden die Nachkommastellen wieder abgeschnitten und die Zahl 7 in min gespeichert.
  • Notiz 5: Hier prüfe ich, ob die Minuten einstellig sind. In dem Fall muss ich noch eine führende Null in der MessageBox einfügen, sonst würde die Zeit nicht als 16:07 sondern als 16:7 dargestellt.

Eine Frage zu Aufgabe 3:
Könnt man das abfragen des Geschlechtes nicht auch ohne MessageBox machen? Also so wie ^PcName, bloß als ^PcSex (oder ähnliches)? Oder gibt es so eine Funktion nicht?

Wie bereits IvanDaVile gesagt hat, gibt es keine solche Funktion. Das erste Beispiel für viele Funktionen, die man manchmal gerne hätte ;)

Eine Lösung für vier:
Code:
begin kl_uebung2_script
 
[SIZE=2]short minutes[/SIZE]
[SIZE=2]short state[/SIZE]
[SIZE=2]short button[/SIZE]
 
[SIZE=2]if ( state == 0 )[/SIZE]
   if ( OnActivate == 1 )
      set state to 1
      MessageBox, "Hallo ^PcName.", " Hallo, wie spät ist es? Und welchen Tag haben wir eigentlich?", "Ich werde jetzt gehen."
   endif
else
   set button to GetButtonPressed
   if ( button == 0 )
      set minutes to GameHour
      set minutes to ( ( GameHour ) *60 )
      set state to 0 [COLOR=red]; Könnte man das im Falle einer Erweiterung weglassen?[/COLOR]
      MessageBox, "Es ist ^Gamehour. Der Tag? Es ist der ^Day. ^Month des Jahres ^Year.", [COLOR=black]"Danke. Dann habe ich ja noch etwas Zeit.", "Danke. Ich sollte gehen."[/COLOR]
[COLOR=#ff0000] else[/COLOR]
[COLOR=#ff0000]    set button to GetButtonPressed[/COLOR]
[COLOR=#ff0000]    if ( button == 0 )[/COLOR]
[COLOR=#ff0000]       set state to 0[/COLOR]
[COLOR=#ff0000]       MessageBox, "Schön. Wollt ihr noch etwas zu trinken?"[/COLOR]
[COLOR=#ff0000]    elseif ( button == 1 )[/COLOR]
[COLOR=#ff0000]       set state to 0[/COLOR]
[COLOR=#ff0000]       MessageBox, "Das ist schade. Auf wiedersehen."[/COLOR]
[COLOR=#ff0000] endif[/COLOR]
[COLOR=black]elseif ( button == 1 )[/COLOR]
      set state to 0
      MessageBox, "Schönen Tag noch."
   endif
endif
 
end
Das in rot geschriebene ist etwas, das ich ausprobiert habe. Nur leider wird es nicht beachtet. Kann man soetwas einbauen? Wenn ja wie?

Ich nehme an, dein Script soll bewirken, dass man zunächst gefragt wird, ob man die Uhrzeit kennen möchte oder nicht. Wenn nicht, soll das Gespräch beendet werden. Ansonsten soll die Uhrzeit angezeigt werden und man soll sich auf zwei verschiedene Arten "bedanken" können?

Wenn ja, liegt da einiges im Argen. Wenn du eine zweite MessageBox öffnen willst, musst du die erste erst abarbeiten. In diesem Fall brauchst du die state-Variable wirklich. Ich habe dein Script mal etwas kürzer nur mit dem Tag für dich neu geschrieben:

Code:
begin kl_uebung2_script
 
short state
short button
 
if ( state == 0 )
	if ( OnActivate == 1 )
		set state to 1
		MessageBox, "Hallo ^PCName.", " Welchen Tag haben wir eigentlich?", "Ich werde jetzt gehen."
	endif
elseif ( state == 1 )

	set button to GetButtonPressed     ;hier wird die Antwort auf die erste MessageBox ermittelt

	if ( button == 0 )       ;Das ist die Antwort auf die erste Antwortmöglichkeit der ersten Messagebox
		set state to 2           ;im state 2 wird die zweite Messagebox behandelt
		MessageBox, "Es ist der ^Day.", "Dann habe ich ja noch etwas Zeit.", "Dann muss ich mich mit meinem Referat aber sputen."
	elseif ( button == 1 )    ;Das ist die Antwort auf die zweite Antwortmöglichkeit der ersten Messagebox
		set state to 0          ;hier wird das Script in den Ausgangszustand zurückgesetzt
		MessageBox, "Warum stört Ihr mich dann?"
	endif
else

	set button to GetButtonPressed         ;hier wird die antwort auf die zweite Messagebox ermittelt

	if ( button == 0 )		 ;Das ist die Antwort auf die erste Antwortmöglichkeit der zweiten Messagebox
		set state to 0
		MessageBox, "Schön, unterhalten wir uns."
	elseif ( button == 1 )		 ;Das ist die Antwort auf die zweite Antwortmöglichkeit der zweiten Messagebox
		set state to 0
		MessageBox, "Dann sputet Euch."
	endif
endif

end

Zur Abfrage der Zeit, des Datums etc.: Muss man das mit %.Of machen wie die anderen es gemacht haben? Denn ehrlich gesagt verstehe ich nicht was man da macht, oder wie man das macht.
Geht das auch mit ^Gamehour, ^Day, ^Month, ^Year?

Okay, da muss ich ein wenig weiter ausholen:

Mit dem Zirkumflex kannst du bestimmte Stringkonstanten anzeigen lassen. Strings sind in der Informatik Zeichenketten (also Buchstaben, Sonderzeichen und Zahlen). Diese werden anders gespeichert als Zahlen. Eine Liste alle Stringkonstanten in Morrowind kannst du in meiner Liste im Anhang 4.1 finden.

Mit dem %.0f oder %.2f kann man Variablen in einen String (also die MessageBox) einbinden. Die Zahl gibt damit die Zahl der Nachkommastellen an, die angezeigt wird. Bei %.0f wird die Variable also auf die Einerstelle gerundet. Bei %.2f wird die Variable auf die 2. Nachkommastelle gerundet. Welche Variable Morrowind für diesen Platzhalter einsetzen soll, gibst du mit Kommas hinter der MessageBox an. Der Wert der ersten dort angegebenen Variable ersetzt den ersten %-Platzhalter, die zweite Variable den zweiten, usw.

Jetzt kommt die Ausnahme: Globale Variablen (also Day, Month, Year oder GameHour) kannst du auch mit einem Zirkumflex einbinden. Diese Zahlen werden aber nicht gerundet. Das heißt, dass die ganzen Variablentypen (short und long, in dem Fall also Day, Month und Year) korrekt dargestellt werden. Kommazahlen (also float-Variablen, hier GameHour) werden aber mit 6 Nachkommastellen angezeigt und das willst du in dem Fall ja gar nicht.

Noch mal einige Beispiele:

MessageBox, "^Day" ist das gleiche wie MessageBox, "%.0f", Day und liefert dir in der MessageBox zum Beispiel 13 zurück.

MessageBox, "^GameHour" würde zum Beispiel 16.654321 liefern. MessageBox, "%.3f", GameHour liefert dann 16.654 und MessageBox, "%.0f", GameHour 17.

In deinem Script hast du die lokale Variable minutes definiert. MessageBox, "^minutes" liefert dir dann ^minutes zurück, weil minutes keine globale Variable ist.

Ach und gibt es eine Möglichkeit die Antwort-Felder zu vergrößern? Denn so kann man gar keine tolle Diskussion führen... Das sprengt immer alles den Rahmen.;)

Ja, über den Smileys gibt es drei Schaltflächen. Mit den beiden linken (dem Doppelpfeil nach oben und nach unten) kannst du die Länge des Textfensters verändern.
 
Wie bereits IvanDaVile gesagt hat, gibt es keine solche Funktion. Das erste Beispiel für viele Funktionen, die man manchmal gerne hätte ;)
Es sei noch ergänzend gesagt, dass es PCSex als Funktion sehr wohl gibt, nur nicht in normalen Scripts. Wie in Killfetzers Einführung erwähnt, gibt es neben dem Editor noch weitere Orte, wo Scripts bzw. entsprechende Befehle eingesetzt werden können - die Console und Dialogresults.

Dialog ist hierbei das Stichwort - es gibt nämlich eine zum Steuern von Dialogen einsetzbare Funktion "PCSex". Sie ist nur in Dialogparametern benutzbar - welchen Grund diese Limitierung hat, ist mir ein völliges Rätsel (man könnte die Game Entwickler für sowas mit 'nem Stock schlagen).

Wichtig ist, dass Dialogsteuerung auch für "Hello" genutzt werden kann und das ist sehr schön - denn für ein Hello muß der Spieler den NPC nicht ansprechen. Das passiert im Hintergrund, ohne das der Spieler es merkt. Man könnte so quasi über eine Hello Condition MW prüfen lassen, ob der Spielerchar männlich oder weiblich ist und im Dialogresult, den es auch für "Hello" gibt, die so gewonnene Erkenntnis für eigene Zwecke weiterverarbeiten -> sie in eine Globale Variable auslagern, die man wiederum in eigenen Scripts abfragen und auswerten kann. Sowas ist zwar nicht 100% cheatsicher, aber immerhin ließe sich die Funktion "PCSex" über den Umweg realisieren. Ähnlich arbeitet übrigens auch die globale "PCRace"...

Darauf gehen wir noch näher ein, wenn Dialogresults und ihre nützlichen Eigenheiten behandelt werden.
 
Danke, Killfetzer. Bemerkungen zu den einzelnen Scriptvorgängen helfen sehr. Jetzt habe ich zumindest diese Aufgabe verstanden und irgendwie ist es auch logisch. Aber ich selbst wäre darauf wohl nicht so einfach gekommen.

Ich stimme Weltengänger zu, es wird schwierig alle Teilnehmer unter einen Hut zu bekommen, da jeder auf einem anderen Stand ist.
 
Da muss ich Teridan Recht geben. Hatte mich ebenfalls nochmal an Aufgabe 4 versucht, aber auf so eine Lösung bin ich aber nicht gekommen. Zuminest durch deine und £exas Erklärungen kommt für mich Licht ins Dunkle.
 
Ja Killfetzer, genau das war es.
Danke für die ausführliche Erklärung, jetzt habe ich das mit den Stringkonsonanten (etc.) verstanden.

So hier ist 4 noch einmal überarbeitet. Ich hoffe das ist jetzt alles richtig.
Code:
begin kl_uebung2_script
 
short minutes
short state
short button
 
if ( state == 0 )
      if ( OnActivate == 1 )
            set state to 1
            MessageBox, "Hallo ^PcName.", "Hallo, wie spät ist es? Und welchen Tag haben wir eigentlich?", "Ich werde jetzt gahen."
[SIZE=2]     endif[/SIZE]
[SIZE=2]elseif ( state == 1 )[/SIZE]
[SIZE=2]     set button to GetButtonPressed[/SIZE]
[SIZE=2]     if ( button == 0 )[/SIZE]
[SIZE=2]           set minutes to GameHour[/SIZE]
[SIZE=2]           set minutes to ( ( GameHour - minutes ) * 60 )[/SIZE]
[SIZE=2]           set state to 2[/SIZE]
[SIZE=2]           MessageBox, "Es ist %.0f Uhr. Der Tag? Es ist der ^Day. ^Month. des Jahres ^Year.", GameHour, "Danke. Dann habe ich ja noch etwas Zeit.", "Danke. Ich sollte gehen.",[/SIZE]
[SIZE=2]     elseif ( button == 1 )[/SIZE]
[SIZE=2]           set state to 0[/SIZE]
[SIZE=2]           MessageBox, "Schönen Tag noch."[/SIZE]
[SIZE=2]     endif[/SIZE]
[SIZE=2]else[/SIZE]
[SIZE=2]     set button to GetButtonPressed[/SIZE]
[SIZE=2]     if ( button == 0 )[/SIZE]
[SIZE=2]           set state to 0[/SIZE]
[SIZE=2]           MessageBox, "Schön. Wollt ihr noch etwas zu trinken?"[/SIZE]
[SIZE=2]     elseif ( button == 1 )[/SIZE]
[SIZE=2]           set state to 0[/SIZE]
[SIZE=2]           MessageBox, "Das ist schade. Auf wiedersehen."[/SIZE]
[SIZE=2]     endif[/SIZE]
[SIZE=2]endif[/SIZE]
 
[SIZE=2]end[/SIZE]
Wenn ich das jetzt richtig verstanden habe, kann ich ^Year, ^Month, ^Day so lassen und muss nur bei GameHour %.Of verwenden, oder?
Und war Diarrhoe's Lösung auch richtig Oder muss man es so machen, wie du und £exa?

£exa schrieb:
Es sei noch ergänzend gesagt, dass es PCSex als Funktion sehr wohl gibt, nur nicht in normalen Scripts. Wie in Killfetzers Einführung erwähnt, gibt es neben dem Editor noch weitere Orte, wo Scripts bzw. entsprechende Befehle eingesetzt werden können - die Console und Dialogresults.
Jetzt weiß ich wo ich das herhabe. Mir war doch so, als wäre da was gewesen.;)

Und meine Aufgabe 5:
Code:
[SIZE=2]begin kl_uebung3_doorquest_script[/SIZE]
 
[SIZE=2]short journal[/SIZE]
 
[SIZE=2]if ( OnActivate == 1 )[/SIZE]
[SIZE=2]  if ( GetJournalIndex, Journal "Kl_scriptkurs1" < 50 )[/SIZE]
[SIZE=2]     PlaySound, "LockedDoor"[/SIZE]
[SIZE=2]     MessageBox, "Ihr müsst die Säule berühren, bevor ihr diese Tür durchschreiten könnt."[/SIZE]
[SIZE=2]  elseif ( GetJournalIndex, Journal "Kl_scriptkurs1" >= 50 )[/SIZE]
[SIZE=2]     PlaySound, "Open Lock"[/SIZE]
[SIZE=2]     activate[/SIZE]
[SIZE=2]     unlock[/SIZE]
[SIZE=2]        if ( GetJournalIndex, Journal "Kl_scriptkurs1" < 100 )[/SIZE]
[SIZE=2]           Journal, "Kl_scriptkurs1", 100[/SIZE]
[SIZE=2]        endif[/SIZE]
[SIZE=2]  endif[/SIZE]
[SIZE=2]endif[/SIZE]
 
[SIZE=2]end[/SIZE]

Nur was ich jetzt irgendwie noch nicht verstehe ist was short, long oder float bewirkt?

Weltengänger schrieb:
Interessant zu lesen und ihr habt Euch wirklich Mühe gegeben. Allerdings ist der Kurs wie ich sehe kann, mehr oder weniger für diejenigen gedacht, die schon gewisse Erfahrungen gemacht haben.
Ja, Mühe gegeben hat ihr euch. Hier nochmal ein ganz großes Danke.

Aber was dass mit den Erfahrungen betrifft:
In Sachen Scripts waren meine zu Beginn gleich null. Als ich hier gelesen habe, habe ich eigentlich immer alles verstanden, aber sobald es an die erste eigenständige Aufgabe ging hatte ich keine Ahnung mehr.
Ich gebe zu, ich habe recht viel bei den anderern geluschert - aber dadurch habe ich das Theoretische auch erst anzuwenden gelernt. Also auch Danke an all die anderen die mir ihre Lösungen zur Verfügung gestellt haben.:p (Nein, ich habe nicht abgeschrieben, nur drauf aufgebaut.;))
 
Wenn ich das jetzt richtig verstanden habe, kann ich ^Year, ^Month, ^Day so lassen und muss nur bei GameHour %.Of verwenden, oder?
Und war Diarrhoe's Lösung auch richtig Oder muss man es so machen, wie du und £exa?

Du kannst Day, Month und Year so lassen. In deinem Fall gibst du aber mit %.of auf GameHour nur die gerundeten vollen Stunden an. Also ab 16:30 Uhr gibt dir ein Script 17 Uhr aus und das bis 17:29 Uhr. Danach springt es auf 18 Uhr. Außerdem berechnest du doch extra die Minuten, warum gibst du sie dann nicht aus?

Diarrhoe berechnet die Minuten korrekt, aber auch er hat das Problem, dass seine Stunden gerundet angezeigt werden. Bei ihm wird um 16:29 Uhr auch tatsächlich 16:29 ausgegeben, aber um 16:30 Uhr wird 17:30 ausgegeben. Eben weil wieder auf die ganze Stunde gerundet wurde.

Und meine Aufgabe 5:

Die sollte funktionieren. Allerdings benötigst du das Unlock nicht (die Tür ist ja bereits durch das Script verschlossen, das Unlock bräuchtest du nur, wenn die Tür noch zusätzlich ein normales Schloss hat).

Nur was ich jetzt irgendwie noch nicht verstehe ist was short, long oder float bewirkt?

Was diese Befehle genau machen, kann ich dir nicht sagen, aber rein prinzipiell werden sie einen entsprechend großen Bereich im Arbeitsspeicher reservieren in dem der Wert der Variable gespeichert wird, diesen Bereich löschen und danach einen Wert 0 reinschreiben (wie auch immer der dann codiert ist) und den Variablennamen als Pointer auf diesesn Speicherbereich registrieren ;)

Okay, das hast du jetzt wahrscheinlich nicht verstanden, also noch mal ohne theoretische Informatik :D

Alle drei Befehle erzeugen eine Variable mit dem Namen der hinter dem Befehl angegeben wird. Diese Variablen können diese Werte annehmen:

short - eine ganze Zahl von -32.768 bis 32.767
long - eine ganze Zahl von -2.147.483.648 bis 2.147.483.647
float - eine Gleitkommazahl bis maximal ±3.4*exp(±38). Also eine Bruchzahl vereinfacht gesagt. In Morrowind hat so eine immer 6 Nachkommastellen.

Außerdem wird der Wert jeder Variablen automatisch mit ihrer Definition (so heißt es, wenn man den Befehl aufruft) auf 0 (bzw. 0,000000 für float) gesetzt.
 
  • Like
Reaktionen: 1 Person
Gut zu wissen, dass in Messageboxen korrekt und im Skript abgerundet wird...

Allerdings solltest du deine Befehlsliste nochmal in diesem Punkt verändern:
Float-Werte gemeint sind beliebige Zahlenwerte mit maximal 3 Nachkommastellen (0; 1.234; -17.09; …). Hierbei ist zu beachten, dass bei englischen Zahlen statt eines Kommas ein Punkt verwendet wird!
Es sind ja neuerdings sechs Nachkommastellen.

Ich muss auch sagen, dass ich selbst etwas überrascht war, was das Level der ersten Lektionen angeht. Ich hatte eher damit gerechnet, dass die Syntax erstmal extrem erschöpfend erklärt wird. Deswegen kann ich auch verstehen, dass so mancher da nicht mitkommt. Ich weiß noch, wie lange für mich das Skripten in Oblivion eine kryptische Folge von Zeichen war. Auch als ich mich schon ein bisschen damit beschäftigt hatte.
 
Gut zu wissen, dass in Messageboxen korrekt und im Skript abgerundet wird...

Im Script wird ja nicht gerundet, sondern Nachkommastellen abgeschnitten.

Allerdings solltest du deine Befehlsliste nochmal in diesem Punkt verändern:

Es sind ja neuerdings sechs Nachkommastellen.

Das steht da korrekt drin. Du musst nur meinem Link folgen. Das von dir zitierte ist aus dem Jahr 2006. Die neue Version wurde da der Stelle anscheinend vergessen hochzuladen.
Und die Nachkommastellen gab es schon damals, das war halt einfach falsch.

Ich muss auch sagen, dass ich selbst etwas überrascht war, was das Level der ersten Lektionen angeht. Ich hatte eher damit gerechnet, dass die Syntax erstmal extrem erschöpfend erklärt wird. Deswegen kann ich auch verstehen, dass so mancher da nicht mitkommt. Ich weiß noch, wie lange für mich das Skripten in Oblivion eine kryptische Folge von Zeichen war. Auch als ich mich schon ein bisschen damit beschäftigt hatte.

Ich bin wirklich ein wenig überrascht, dass viele diese Lektion so schwer finden. Bisher sind die Scripte wirklich nicht schwer. Bis auf die Anzeige der Uhrzeit ist alles eine direkte Wiederholung der von mir vorgestellten Funktionen. Für die Uhrzeit musste man ein wenig spielen Ich bin davon ausgegangen, dass es einfacher ist eine Sprache zu lernen, wenn man sie anwenden kann. Weil ich kann mir nicht vorstellen, dass ihr eine "extrem erschöpfende", formale Einführung ins Programmieren wollt (abgesehen davon, dass ich dafür nicht unbedingt geeignet bin, da ich kein Informatiker bin).

Wenn ihr das wollt, kann ich gerne die Befehle (begin, if, endif, end, ...) von Morrowind Script unabhängig von Funktionen (MessageBox, OnActivate, ...) einführen, ich glaube aber nicht, dass es dadurch verständlicher wird. So oder so, werde ich einmal einen Beitrag einschieben, in dem alle 14 Befehle aus Morrowind Script separat von irgendwelchen Funktionen erklärt werden.

Ich sehe eigentlich nur zwei Möglichkeiten. Entweder bin ich unfähig euch etwas zu erklären, dann kann ich es auch lassen oder ihr habt das Konzept von Programmieren nicht verstanden. Das ist meiner Ansicht nach das Einzige, das ich vorausgesetzt habe. Also probiere ich mich mal am zweiten.
 
Also ich fand die bisherigen Sachen nicht so schwer...
Außer der Uhr-Aufgabe obwohl wenn man das Prinzip dahinter versteht war diese eigentlich auch machbar.Das schwierige dran war nur das ich halt nicht gewusst habe
wie das CS "arbeitet".
Aber ich denke deine bisherige Lehrmethode gut ist.Ich bin ehrlich gesagt froh,das du
das Scripten auf diesen Weg erklärst,weil die "trockene" Methode nicht funktioniert
bei so einem Thema.
 
Bislang war es fordernd, aber nicht zu sehr. Genau so soll das Lehren ja auch sein.

Aber die Uhrenaufgabe überforderte mich sehr. Wie man Werte abrundet, multipliziert, etc. war zwar erwähnt, doch nicht groß beschrieben und auch nicht an Beispielen dargelegt.

Du musst bedenken, dass das Scripten für dich eine vollkommen logische und selbstverständliche Arbeit ist, für mich und ein paar andere aber eine sehr komplexe und neue Sache. Wie du ja vielleicht bemerkt hast, hakt es selbst an einfachen Begriffen, bzw. es sitzt einfach noch nicht so richtig. Da hilft wohl nur üben, üben, üben. Und deshalb hoffe ich, dass das Tempo nicht so stark anzieht und du auch ruhig Wiederholungsaufgaben aus den vorigen Lektionen einfließen lässt.
 
Scripting ist für jeden am Anfang komplex, Teridan. Wichtig ist, erstmal die paar Grundlagen zu verstehen.

Was sind Scripts und wie funktionieren sie?
Wo gibt man sie ein und wie sorgt man dafür, dass sie ausgeführt werden?
Wie scriptet man formal ordentlich (Lesbarkeit).
Was sind die absolut notwendigen Grundwerkzeuge für ein Script:

1. begin & end
2. short, long & float (-> was sind Variablen, welche Variablentypen gibt es)
3. IF / ElseIF / Else .. EndIF bzw. While / EndWhile
4. Der "set ... to ..."-Befehl
5. return

Und natürlich ein Grundstock der meiner Meinung nach wichtigsten Funktionen und Befehle:

MenuMode
OnActivate & Activate
MessageBox & GetButtonPressed
GetItemCount, AddItem & RemoveItem
GetSecondsPassed
GetPos & SetPos
Move & Rotate, MoveWorld & RotateWorld
GetPCCell und PositionCell
Journal & GetJournalIndex
AddTopic
OnEquip/OnPCEquip & der Equip-Befehl
AddSpell, RemoveSpell und dergleichen Befehle für Zauber...
GetStat/ModStat/SetStat (Eigenschaften oder Statuserte abfragen & ändern)

Wer das beherrscht - und dorthin wollen wir Euch bringen - der kann wirklich eine ganze Menge machen. Es gibt noch viel mehr Befehle und mögliche Scriptings... aber das da sind meiner Meinung nach Grundlagen.

...und seid sicher, ihr werdet die vorangegangenen Lektionen später immer wieder mal brauchen, um bestimmte Dinge zu lösen :-D
 
Ich finde eigentlich, dass ihr gut erklärt. Vielleicht ist es manchmal für den einen oder anderen zu viel auf einen Schlag, aber es ist verständlich.

Ich selber habe bloß immer eine Hemmung, was praktische Anwendung angeht. Das war auch bei Mathe immer so - da musste ich immer erstmal gucken, was andere machen, um die Anwendung zu verstehen. (Ich werde wohl nie verstehen, was Lehrer da gegen haben.) Hier ist es genauso. Sprich ich kann es, mach es aber trotzdem falsch. (Das selbe bei Strategiespielen - ich habe die besten Strategien, kann sie aber nicht umsetzen, aber egal.)

Und noch was, was ich letztes Mal vergessen habe:
Killfetzer schrieb:
Kallor schrieb:
Ach, und gibt es eine Möglichkeit die Antwort-Felder zu vergrößern? Denn so kann man gar keine tolle Diskussion führen... Das sprengt immer alles den Rahmen.;)
Ja, über den Smileys gibt es drei Schaltflächen. Mit den beiden linken (dem Doppelpfeil nach oben und nach unten) kannst du die Länge des Textfensters verändern.
Eigentlich meinte ich ingame. Aber ich bezweifle, dass das möglich ist. Der Nerevarine ist eben nicht sehr gesprächig.
 
Eigentlich meinte ich ingame. Aber ich bezweifle, dass das möglich ist. Der Nerevarine ist eben nicht sehr gesprächig.

Eigentlich sollten die automatisch skalieren. Keine Ahnung, wie lange sie maximal werden können. Ich probiers mal aus.

Ansonsten kann man das sicherlich in der ini verstellen, allerdings tüftele ich seit 2 Jahren immer mal wieder daran rum , die Menüoptionen in der ini zu verstehen und ich bin noch nicht wirklich weiter ;)
 
  • Like
Reaktionen: 1 Person
Mit den MenuStates in der ini konnte ich bisher auch nicht viel anfangen ... irgendwas haben die sicher damit zu tun, nur hab ich noch nicht rausgefunden welcher Eintrag für die MessageBoxen genutzt wird bzw. welche Werte was genau bewirken - scheinbar gibts da auch nirgendwo im Netz eine Dokumentation dazu.
Darüber hinaus ist wahrscheinlich der Morrowind Code Patch als Alternative noch die beste Chance etwas an der Größe der MessageBoxen zu ändern. In den letzten Versionen wurden schon einige Menu-Fenster vergrößert ... eventuell nimmt man sich da ja auch der MessageBoxen an.