MCM Creator

Quad2Core

Abenteurer
Hallo,
wie in der Beschreibung beschrieben handelt es sich beim MCM Creator um ein benutzerfreundliches Tool um schnell und einfach ein MCM Menu zu erstellen.
Bei diesem Projekt werde ich besonders auf die Benutzerfreundlichkeit und Nützlichkeit des Tools achten.
Diesen Thread werde ich fortan für die Dokumentation, des Projektes verwenden.
Feedback und Kritik ist erwünscht!

Update 1 (24.03) - So far so good:

Bisher habe ich folgende Dinge umgesetzt:
  • Erstellen von Header's
  • Erstellen von ToggleOption's
Hier einmal als Beispiel wie der Ablauf des erstellens eines MCM menüs aussehen würde:

StartUpForm.JPG -> MCM Creator.JPG -> AddHeaderOption.JPG -> AddToggleOption.JPG -> Example1.JPG

Beim Klick auf Create MCM wird folgende "Script Name".psc erstellt:
Code:
scriptname MyScript extends SKI_ConfigBase

bool ToggleVariable1 = True
int ToggleVariable1OID
bool ToggleVariable2 = False
int ToggleVariable2OID

event OnConfigInit
    ModName = "My Mod"
endevent

event OnPageReset(string page)
    if page == ""
        AddHeaderOption("Header1")
        AddHeaderOption("Header2")
        ToggleVariable1OID = AddToggleOption("Toggle1", ToggleVariable1)
        ToggleVariable2OID = AddToggleOption("Toggle2", ToggleVariable2)
    endif
endevent

event OnOptionSelect(int Option)
    if (Option == ToggleVariable1OID)
        ToggleVariable1 = !ToggleVariable1
        SetToggleOptionValue(ToggleVariable1OID, ToggleVariable1)
    endif
    if (Option == ToggleVariable2OID)
        ToggleVariable2 = !ToggleVariable2
        SetToggleOptionValue(ToggleVariable2OID, ToggleVariable2)
    endif
endevent

Ich hoffe es gefällt euch bisher :D
 
Zuletzt bearbeitet:
Freut mich, weiter so :good:

Gruß

Das ist zu mindestes mein Ziel haha, aber natürlich wird ein generelles Verständnis von Papyrus vor rausgesetzt.
Denn was bringt es einem ein MCM menü zu erstellen, wenn man nicht weis, was man mit den Einstellungen machen soll^^.

Ich hoffe ich kriege das nächste Update heute noch raus.
Bisher habe ich folgende Features hinzugefügt:
-Page Management
-Erstellen von Elementen, wo es einem gefällt
-Überschreiben von Elementen = z.B aus einem Header wird ein Toggle
-Leere Elemente werden automatisch mit AddEmptyOption() aufgefüllt um die Struktur ingame beizubehalten.
-GlobalVariable Management, um auch von außerhalb, des menüs auf die Variabeln zuzugreifen.
-Call Custome Function, man kann nun direkt im Tool Funktionen schreiben, welche dann bei einem Event(z.B wenn man eine ToggleOption betätigt) aufgerufen werden.

Leider muss ich verkünden, dass vorerst pro Page "nur" 24 Elemente unterstützt werde, das entspricht genau der anzahl im MCM menü, bevor die Scrollbar benutzt werden muss.
Bei Fragen einfach nachfragen ;D
 
  • Like
Reaktionen: Lorneos und bjoernret
:D
Allerdings sind beliebig viele Pages erstellbar daher steht mehr Elemente pro Page hinzufügbar zu machen sehr weit unten auf meiner "ToDo" Liste^^
 
Update 2 (26.03):
Folgende Features wurden hinzugefügt:
  • Page Management
  • Erstellen von Slidern
  • Erstellen von Elementen, wo es einem gefällt
  • Entfernen von Elementen
  • Leere Elemente werden automatisch mit AddEmptyOption() aufgefüllt um die Struktur ingame beizubehalten.
  • GlobalVariable Management, um auch von außerhalb, des menüs auf die Variabeln zuzugreifen.
  • Call Custome Function, man kann nun direkt im Tool Funktionen schreiben, welche dann bei einem Event(z.B wenn man eine ToggleOption betätigt) aufgerufen werden
  • Die Events OnOptionHighlight und OnOptionDefault werden nun unterstützt.
So sieht die veränderte AddToggleOption Form nun aus:
AddToggleOption.JPG

So sieht die neue AddSliderOption Form aus:
AddSliderOption.JPG

Hier einmal ein kleines Beispiel, wie man sein MCM Menü aufbauen könnte und wie es dannach ingame aussieht.
ExampleModPage.JPGExamplePage1.JPGIngame1.JPGIngame2.JPG
Code:
scriptname MyScript extends SKI_ConfigBase

bool ToggleVar3 = True
int ToggleVar3OID_B
GlobalVariable Property Global_ToggleVar3 Auto
bool ToggleVar1 = True
int ToggleVar1OID_B
GlobalVariable Property Global_ToggleVar1 Auto
bool ToggleVar2 = False
int ToggleVar2OID_B
GlobalVariable Property Global_ToggleVar2 Auto
float SliderVar1 = 50.00
int SliderVar1OID_S
GlobalVariable Property Global_SliderVar1 Auto


event OnConfigInit()
	ModName = "MyMod"
	Pages = new string[1]
	Pages[0] = "Page1"
endevent


event OnPageReset(string page)
	if page == ""
		AddEmptyOption()
		AddEmptyOption()
		AddHeaderOption("Group1")
		AddHeaderOption("Group2")
		ToggleVar1OID_B = AddToggleOption("Toggle1", ToggleVar1)
		ToggleVar2OID_B = AddToggleOption("Toggle2", ToggleVar2)
		SliderVar1OID_S = AddSliderOption("MySlider", SliderVar1, "{0}")
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
	endif
	if page == "Page1"
		AddEmptyOption()
		AddEmptyOption()
		AddHeaderOption("Group3")
		AddEmptyOption()
		ToggleVar3OID_B = AddToggleOption("Toggle3", ToggleVar3)
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
		AddEmptyOption()
	endif
endevent


event OnOptionSelect(int Option)
	if (Option == ToggleVar3OID_B)
		ToggleVar3 = !ToggleVar3
		Global_ToggleVar3.SetValue(ToggleVar3 as int)
		SetToggleOptionValue(ToggleVar3OID_B, ToggleVar3)
	endif
	if (Option == ToggleVar1OID_B)
		ToggleVar1 = !ToggleVar1
		Global_ToggleVar1.SetValue(ToggleVar1 as int)
		SetToggleOptionValue(ToggleVar1OID_B, ToggleVar1)
	endif
	if (Option == ToggleVar2OID_B)
		ToggleVar2 = !ToggleVar2
		Global_ToggleVar2.SetValue(ToggleVar2 as int)
		SetToggleOptionValue(ToggleVar2OID_B, ToggleVar2)
	endif
endevent


event OnOptionSliderOpen(int option)
	if (option == SliderVar1OID_S)
		SetSliderDialogStartValue(SliderVar1)
		SetSliderDialogDefaultValue(50.00)
		SetSliderDialogRange(0, 100.00)
		SetSliderDialogInterval(1)
	endif
endevent


event OnOptionSliderAccept(int option, float value)
	if (option == SliderVar1OID_S)
		SliderVar1 = value
		Global_SliderVar1.SetValue(value)
		SetSliderOptionValue(SliderVar1OID_S, SliderVar1, "{0}")
	endif
endevent


event OnOptionDefault(int option)
	if (Option == ToggleVar3OID_B)
		ToggleVar3 = True
		Global_ToggleVar3.SetValue(ToggleVar3 as int)
		SetToggleOptionValue(ToggleVar3OID_B, ToggleVar3)
	endif
	if (Option == ToggleVar1OID_B)
		ToggleVar1 = True
		Global_ToggleVar1.SetValue(ToggleVar1 as int)
		SetToggleOptionValue(ToggleVar1OID_B, ToggleVar1)
	endif
	if (Option == ToggleVar2OID_B)
		ToggleVar2 = False
		Global_ToggleVar2.SetValue(ToggleVar2 as int)
		SetToggleOptionValue(ToggleVar2OID_B, ToggleVar2)
	endif
endevent


event OnOptionHighlight(int option)
	if (Option == ToggleVar3OID_B)
		SetInfoText("Toggle No. 3!")
	endif
	if (Option == ToggleVar1OID_B)
		SetInfoText("My First Toggle! Yay")
	endif
	if (Option == ToggleVar2OID_B)
		SetInfoText("Toggle No. 2!")
	endif
	if (option == SliderVar1OID_S)
		SetInfoText("My Slider!")
	endif
endevent
 
Hört sich super an. :good:
Das Tool spornt mich an, mich mehr mit dem CK vertraut zu machen, damit ich es benutzen kann.
 
Um das Menü im Spiel hinzuzufügen brauch man eigentlich gar nicht viele Kenntnisse mit dem CK.
Man muss nur eine Quest erstellen -> im Alias Tab das Alias PlayerAlias erstellen -> unter Specific Reference cell = any und Ref = PlayerRef auswählen -> dem Alias den Script SKI_PlayerLoadGameAlias hinzufügen und letztendlich der Quest den erstellten Script zuweisen.
Dafür muss nichtmals die Skyrim.esm geladen werden.
Nur damit das Menü einen Sinn hat muss es natürlich an eine Mod gekoppelt sein haha

Hier nochmal die MCM Quickstart seite von schlangster
 
Wie du schon sagtest, das MCM Menü sollte an eine Mod gekoppelt sein, dafür muss ich mich erstmal weiter mit dem CK vertraut machen ;)
 
Ich habe mich dazu entschlossen den kompletten Code noch einmal umzubauen um ein besseres Daten Management zu erhalten.
Dadurch wird es später möglich sein sein menü als xml datei zu speichern um es später laden und weiter bearbeiten zu können.
Auch ein Drag and Drop feature sollte dadurch umsetzbar werden. Nur das nächste Update wird vermutlich erstmal noch eine Weile dauern deshalb.
 
Hi,
Das hört sich echt cool an. Wird 100% ein riesen Erfolg :good:

Eine frage die mich gerade als Übersetzer interessieren würde, ist es denn möglich somit ein englisches MCM zu übersetzen?
 
Nein zum Übersetzen bräuchte man von dem Autoren immer noch die Source Files des MCM menüs und müsste dann die Strings übersetzen.
Es wäre allerdings auch möglich die vom MCM Creator erstellte XML direkt zu übersetzen und dann mit dem Tool ein neues Script zu erstellen.
Das würde allerdings keinen wirklichen unterschied machen, arbeitet halt lieber mit XML Dateien als mit den Papyrus Source Scripts.
 
  • Like
Reaktionen: Stevrocks
Hi,
Eine frage die mich gerade als Übersetzer interessieren würde, ist es denn möglich somit ein englisches MCM zu übersetzen?

Hi Stevrocks,

aber ein MCM kannst doch mit dem TESVTranslator übersetzen (sowohl Skripte als als auch die Translations files) oder meintest, damit man gleich sehen kann, ob die Wortlängen passen?
 
Ich habe einfach mal eine frühe Alpha Version hochgeladen Download: HIER
Ich brauch einfach mal Leute die ein wenig herumtesten, da ich nun die Umstellung auf das neue Datenmanagement System vollendet habe.
Beim Klick auf den Button Create MCM, wird der erstellte Script und die XML, welche beim erneuten öffnen des Tools geladen werden kann,
unter "\My Menus\{Mod Name}\" gespeichert.
Für Verbesserungsvorschläge und Kritik bin ich wie immer offen.
Bei Fragen einfach hier schreiben :)

Das nächste Update werde ich vermutlich heute nicht mehr schaffen zu schreiben, da ich erst noch einige kleinere Features dem Tool hinzufügen will.
 
Zuletzt bearbeitet:
@Quad2Core: Dank für die schnelle Antwort


Hi Stevrocks,

aber ein MCM kannst doch mit dem TESVTranslator übersetzen (sowohl Skripte als als auch die Translations files) oder meintest, damit man gleich sehen kann, ob die Wortlängen passen?

Ich weiß, du hast mir sogar erklärt wie es geht xD (klicken)
Ja zum Beispiel wegen den Wortlängen, es sieht es sehr benutzerfreundlich aus gerade für solche Übersetzungen :)
 
Zuletzt bearbeitet:
Kurzes Update:
Update 3:
  • Der gesamte Code wurde neu geschrieben.
  • XML import/export des menüs wird nun unterstützt.
  • ToggleOption wurde gefixt.
  • Edit Element wurde hinzugefügt - erlaubt das bearbeiten erstellter Elemente.
  • Edit Functions wurde hinzugefügt - erlaubt das bearbeiten aller Costume Funktionen die im Menü benutzt werden.
Da, dass erstellen einer Drag&Drop Funktion leider unerwartete Probleme bereitet, wird dies nun erstmal weiter hinten auf meiner ToDo-Liste angeordnet.

Was noch getan werden muss vor dem ersten release:
  • TextOption
  • MenuOption
  • ColorOption
  • KeyMapOption
  • Intensives Testen
  • ------Optional------
  • Drag&Drop funktion
  • LoadCustomeContent
Also die Key Funktionen des Tools stehen schon mal jetzt muss ich nur noch die einzelnen Optionen adden..
 
Zuletzt bearbeitet:
  • Like
Reaktionen: bjoernret