UI modding - support thread
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
UI modding - support thread
Dieser Thread dient als Plattform für Fragen und Probleme rund um das modifizieren des UIs.
Bevor du hier postest wäre es sinnvoll, wenn du zunächst einmal:
- in die UI Modding Dokumentation stöberst (Englisch) ( https://wiki.egosoft.com:1337/X%20Rebir ... 20support/ )
- im X Rebirth Wiki system reinschaust (English) (https://wiki.egosoft.com:1337/X%20Rebirth%20Wiki/)
- im Forum und in diesem Thread suchst ob deine Frage/Problem bereits beantwortet wurde
Falls nichts hiervon zutrifft, trage deinen Bug/Frage einfach in den Bugtracker ein und/oder poste einfach in diesem Thread.
Direkte Links zu einigen Seiten im Wiki system:
UI Modding Changelog (English): https://wiki.egosoft.com:1337/X%20Rebir ... Changelog/
Bevor du hier postest wäre es sinnvoll, wenn du zunächst einmal:
- in die UI Modding Dokumentation stöberst (Englisch) ( https://wiki.egosoft.com:1337/X%20Rebir ... 20support/ )
- im X Rebirth Wiki system reinschaust (English) (https://wiki.egosoft.com:1337/X%20Rebirth%20Wiki/)
- im Forum und in diesem Thread suchst ob deine Frage/Problem bereits beantwortet wurde
Falls nichts hiervon zutrifft, trage deinen Bug/Frage einfach in den Bugtracker ein und/oder poste einfach in diesem Thread.
Direkte Links zu einigen Seiten im Wiki system:
UI Modding Changelog (English): https://wiki.egosoft.com:1337/X%20Rebir ... Changelog/
Last edited by stefanEgo on Fri, 24. Jul 15, 16:58, edited 5 times in total.
Stefan Hett
Detailed UI modding changes in 3.50 Beta 2: http://www.egosoft.com:8282/jira/issues ... ity%20DESC
Stefan Hett
UI Modding Versionsinformationen können jetzt direkt hier eingesehen werden: https://wiki.egosoft.com:1337/X%20Rebir ... Changelog/
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
UI Modding
Hallo,
ich wollte mich einmal hier erkundigen, ob und vor allem wie es möglich ist die UI, also das Menüsystem zu modden. konkret möchte ich für meine Handelsstation in der Preisliste und in der Traderestriction list die Handelswaren hizufügen.
Also eben die Frage, wie ich an die UI rankomme.
Ich hoffe es findet sich jemand der etwas weiß.
Schon mal danke.
Gruß
Findol
ich wollte mich einmal hier erkundigen, ob und vor allem wie es möglich ist die UI, also das Menüsystem zu modden. konkret möchte ich für meine Handelsstation in der Preisliste und in der Traderestriction list die Handelswaren hizufügen.
Also eben die Frage, wie ich an die UI rankomme.
Ich hoffe es findet sich jemand der etwas weiß.
Schon mal danke.
Gruß
Findol
- X2-Illuminatus
- Moderator (Deutsch)
- Posts: 25043
- Joined: Sun, 2. Apr 06, 16:38
***Frage verschoben in UI Modding Support Thread***
stefanEgo hat weiter oben die UI-Modding-Doku verlinkt. Darüber hinaus wird im englischen Supportthema bereits seit einiger Zeit fleißig diskutiert. Vielleicht findest du dort auch bereits Antworten oder Anregungen.
stefanEgo hat weiter oben die UI-Modding-Doku verlinkt. Darüber hinaus wird im englischen Supportthema bereits seit einiger Zeit fleißig diskutiert. Vielleicht findest du dort auch bereits Antworten oder Anregungen.
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten
Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)
Neuauflage der fünf X-Romane als Taschenbuch
The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!
Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)
Neuauflage der fünf X-Romane als Taschenbuch
The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!
@FindolCaleb: Wie schon per PM erwähnt geht das was du vorhast momentan nur über den Umweg via MD. Dieser ist aber etwas kompliziert zu handhaben in deinem Fall. Ich habe für dich ein Feature-Request in unserer issue-DB angelegt ( http://www.egosoft.com:8282/jira/browse/XRUIMOD-38 ).
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Es gibt noch so einige Sachen die wir gerne weitergehend dokumentieren würden (ein Minimalbeispiel wäre auch soetwas). Im englischen Forum hat ein User bereits soetwas gemacht: http://forum.egosoft.com/viewtopic.php?t=377561
Was UI-modding angeht, so läuft das ein wenig anders als die anderen Bereiche. Hier patchst du grundsätzlich keine existierenden Dateien, sondern schreibst deine eigenen scripte und hookst dich ggf. in existierende ein.
Wenn du Interesse hast so eine Dokumentation zu schreiben, melde dich gerne bei mir. Eine derartige Doku in Confluence hinzuzufügen wäre sicherlich für andere Nutzer auch sehr hilfreich.
Was UI-modding angeht, so läuft das ein wenig anders als die anderen Bereiche. Hier patchst du grundsätzlich keine existierenden Dateien, sondern schreibst deine eigenen scripte und hookst dich ggf. in existierende ein.
Wenn du Interesse hast so eine Dokumentation zu schreiben, melde dich gerne bei mir. Eine derartige Doku in Confluence hinzuzufügen wäre sicherlich für andere Nutzer auch sehr hilfreich.
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Interesse durchaus, und es währe auch schnell gemacht, wenn es nur einfach mal funktionieren würde was ich möchte.
Ich habe mich sowohl mit wysiwyg und YorricVander unterhalten und ihre MOD's als Anschauungsobjekte bekommen, leider funktioniert keine der beiden Methoden. Derzeit habe ich folgendes:
ui.xml:
Dies Sagt, dass ich eine lua Datei hinzufüge. (Soweit ich das richtig verstanden habe)
Dann habe cih die entsprechende Datei gechrieben, wobei ich lediglich die bestehende Datei genommen habe und einige Zeilen hinzugefügt habe, welche mit einen -- hinzugefügt makiert sind. Hinzugefügt habe ich innerhalb der GetComponentData() funktion das tradeware. Anschließend habe ich noch die Registereinträge der produkte kopiert und für die Tradeware verwendet.
Dies ist eine Methode welche ich geunden habe, aber leider funktioniert diese nicht. Auch nach dem in dem Link gegebenen Tutorial hat sich bei mir kein Ergebniss gezeigt.
Interessant ist, dass der debuglog nichts anzeigt.
Ich habe mich sowohl mit wysiwyg und YorricVander unterhalten und ihre MOD's als Anschauungsobjekte bekommen, leider funktioniert keine der beiden Methoden. Derzeit habe ich folgendes:
ui.xml:
Code: Select all
<addon name="FC_Traderestriction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Temp\Rebirth\ui\core\addon.xsd">
<environment type="detailmonitor">
<file name="ui/addon/ego_detailmonitor/FC_menu_traderestrictions.lua" />
<dependency name="ego_detailmonitor" />
</environment>
</addon>
Dann habe cih die entsprechende Datei gechrieben, wobei ich lediglich die bestehende Datei genommen habe und einige Zeilen hinzugefügt habe, welche mit einen -- hinzugefügt makiert sind. Hinzugefügt habe ich innerhalb der GetComponentData() funktion das tradeware. Anschließend habe ich noch die Registereinträge der produkte kopiert und für die Tradeware verwendet.
Code: Select all
local menu = {
name = "TradeRestrictionsMenu",
transparent = { r = 0, g = 0, b = 0, a = 0 }
}
local function init()
Menus = Menus or { }
table.insert(Menus, menu)
if Helper then
Helper.registerMenu(menu)
end
return
end -- Aus dem Hauptcode kopiert.
menu.cleanup function()
menu.title = nil
menu.entity = nil
menu.traderestrictions = {}
menu.products = {}
menu.resources = {}
menu.tradeware = {} --hinzugefügt--
menu.infotable = nil
menu.selecttable = nil
return
end
menu.buttonTradeRestriction function()
ToggleFactionTradeRestriction(menu.object)
menu.showMenu()
return
end
menu.buttonWareRestriction function(ware)
ToggleFactionTradeWareOverride(menu.object, ware)
menu.showMenu()
return
end
menu.buttonRestriction function()
local rowdata = menu.rowDataMap[Helper.currentDefaultTableRow]
if rowdata[1] == "global" then
menu.buttonTradeRestriction()
elseif rowdata[1] == "ware" then
menu.buttonWareRestriction(rowdata[2])
end
return
end
menu.onShowMenu function()
menu.entity = menu.param[3]
menu.object = GetContextByClass(menu.entity, "container")
menu.showMenu()
return
end
menu.showMenu function()
Helper.removeAllButtonScripts(menu)
menu.traderestrictions = GetTradeRestrictions(menu.object)
menu.products, menu.resources, menu.tradeware = GetComponentData(menu.object, "products", "resources", "tradeware") --geändert--
local setup = Helper.createTableSetup(menu)
local name, typestring, typeicon, typename, owner, ownericon = GetComponentData(menu.entity, "name", "typestring", "typeicon", "typename", "owner", "ownericon")
menu.typestring = typestring
menu.owner = owner
setup:addTitleRow{
Helper.createIcon(typeicon, false, 255, 255, 255, 100, 0, 0, Helper.headerCharacterIconSize, Helper.headerCharacterIconSize),
Helper.createFontString(typename .. " " .. name, false, "left", 255, 255, 255, 100, Helper.headerRow1Font, Helper.headerRow1FontSize),
Helper.createIcon(ownericon, false, 255, 255, 255, 100, 0, 0, Helper.headerCharacterIconSize, Helper.headerCharacterIconSize) -- text depends on selection
}
setup:addTitleRow({
Helper.getEmptyCellDescriptor()
}, nil, {3})
local infodesc = setup:createCustomWidthTable({ Helper.scaleX(Helper.headerCharacterIconSize), 0, Helper.scaleX(Helper.headerCharacterIconSize) + 37 }, false, true)
setup = Helper.createTableSetup(menu)
setup:addSimpleRow({
ReadText(1001, 4202),
menu.traderestrictions.faction and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"global"}, {2, 1})
setup:addHeaderRow({
ReadText(1001, 41),
ReadText(1001, 4600)
}, nil, {2, 1})
for _, ware in ipairs(menu.resources) do
local restricted
if next(menu.traderestrictions.overrides) and (menu.traderestrictions.overrides[ware] ~= nil) then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
setup:addHeaderRow({
ReadText(1001, 1610)
}, nil, {3})
for _, ware in ipairs(menu.products) do
local restricted
if menu.traderestrictions.overrides[ware] ~= nil then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
--hinzugefügt--
setup:addHeaderRow({
ReadText(90903, 001),
}, nil, {4})--geändert in vier
for _, ware in ipairs(menu.tradeware) do
local restricted
if next(menu.traderestrictions.overrides) and (menu.traderestrictions.overrides[ware] ~= nil) then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
setup:addFillRows(15)
local selectdesc = setup:createCustomWidthTable({Helper.standardButtonWidth, 0, 300}, false, false, true, 1, 0, 0, Helper.tableCharacterOffsety, 463)
-- button table
setup = Helper.createTableSetup(menu)
setup:addSimpleRow({
Helper.getEmptyCellDescriptor(),
Helper.createButton(Helper.createButtonText(ReadText(1001, 2669), "center", Helper.standardFont, 11, 255, 255, 255, 100), nil, false, true, 0, 0, 150, 25, nil, Helper.createButtonHotkey("INPUT_STATE_DETAILMONITOR_B", true)),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.createButton(Helper.createButtonText(ReadText(1001, 3105), "center", Helper.standardFont, 11, 255, 255, 255, 100), nil, false, true, 0, 0, 150, 25, nil, Helper.createButtonHotkey("INPUT_STATE_DETAILMONITOR_X", true)),
Helper.getEmptyCellDescriptor()
}, nil, nil, false, menu.transparent)
local buttondesc = setup:createCustomWidthTable({48, 150, 48, 150, 0, 150, 48, 150, 48}, false, false, true, 2, 1, 0, 555, 0, false)
-- create tableview
menu.infotable, menu.selecttable, menu.buttontable = Helper.displayThreeTableView(menu, infodesc, selectdesc, buttondesc, false)
-- set button scripts
Helper.setButtonScript(menu, nil, menu.buttontable, 1, 2, function () return menu.onCloseElement("back") end)
Helper.setButtonScript(menu, nil, menu.buttontable, 1, 8, menu.buttonRestriction)
-- clear descriptors again
Helper.releaseDescriptors()
return
end
-- Note here that I'm using the onUpdate function so I need to set an update interval - I access this via my local copy of the vanilla menu
emt_menu.updateInterval = 0.5
Funcs.EMT_onUpdate = function()
return
end
menu.onRowChanged function(row, rowdata)
return
end
menu.onSelectElement function()
return
end
menu.onCloseElement function(dueToClose)
if menu.interactive then
if dueToClose == "close" then
Helper.closeMenuAndCancel(menu)
menu.cleanup()
else
Helper.closeMenuAndReturn(menu)
menu.cleanup()
end
else
if dueToClose == "close" then
Helper.closeNonInteractiveMenuAndCancel(menu)
menu.cleanup()
else
Helper.closeNonInteractiveMenuAndReturn(menu)
menu.cleanup()
end
end
return
end
init()
return
Interessant ist, dass der debuglog nichts anzeigt.
@ui.xml: Du solltest keine eigenen Dateien in ego_xxxx addons legen. Ich würde empfehlen, dass du deine FC_menu_traderestrictions.lua in dein eigenes Addon packst (sprich: <file name="ui/FC_menu_traderestrictions.lua" />
Damit sollte die Datei dann bei dir unter extensions/alpha_trade/ui/FC_menu_traderestrionc.lua liegen.
@ersetzen eines gesamten Menüs:
Wenn du, wie in deinem Fall, ein gesamtes Menü ersetzen willst, solltest du das alte menü aus dem Register entfernen. Dazu gibt es die Funktion Helper.unregisterMenu (siehe ego_detailmonitorHelper/helper.lua).
Bei dir also in init():
gefolgt von der Registrierung deines menus.
Darüberhinaus solltest du im ui.xml dann die Abhängigkeit auf ego_detailmonitorHelper setzen, da du das Helper-Modul nutzt.
Als Alternative zum gesamten Ersetzen des Menus, kannst du dich aber genauso in das existierende TradeRestrionsMenu hooken.
Das wäre dann in etwa so (pseudocode):
Damit sollte die Datei dann bei dir unter extensions/alpha_trade/ui/FC_menu_traderestrionc.lua liegen.
@ersetzen eines gesamten Menüs:
Wenn du, wie in deinem Fall, ein gesamtes Menü ersetzen willst, solltest du das alte menü aus dem Register entfernen. Dazu gibt es die Funktion Helper.unregisterMenu (siehe ego_detailmonitorHelper/helper.lua).
Bei dir also in init():
Code: Select all
Menus = Menus or {}
for _, curmenu in Menus do
if curmenu.name == "TradeRestrictionsMenu" then
Helper.unregisterMenu(curmenu)
break
end
end
Darüberhinaus solltest du im ui.xml dann die Abhängigkeit auf ego_detailmonitorHelper setzen, da du das Helper-Modul nutzt.
Als Alternative zum gesamten Ersetzen des Menus, kannst du dich aber genauso in das existierende TradeRestrionsMenu hooken.
Das wäre dann in etwa so (pseudocode):
Code: Select all
local orgfunc = nil
local function init()
Menus = Menus or {}
for _, curmenu in Menus do
if curmenu.name == "TradeRestrictionsMenu" then
orgfunc = curmenu.theorgfunc
curmenu.theorgfunc = myreplacementfunc
end
end
end
local function myreplacementfunc(arg1, arg2, arg3...)
-- call orgfunc (or don't --- depending on what u want to do)
orgfunc(arg1, arg2, arg3,...)
-- do whatever u want to do here...
end
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Ahh super danke dir. Ich werde das mal testen. Sollte das so funktionieren, dann schreibe ich eine gesamte Zusammenfassung des Vorgangs und werde das auch gleich auf das Preismenu mit anwenden. Ich werde das mit dem hooken dann probieren wenn das ersetzen funkioniert und auch dann eine kleine Anleitung schreiben.
Danke stefan das du dir für das ganze Zeit nimmst.
Hier einmal die Version wie ich sie dann verstanden habe:
ui.xml:
und die Hauptdatei
Leider tut sich auch in dieser Konfiguraation nichts.
Weiterhin habe ich auch folgenden Code ausprobiert und somit basierend auf dem hier geposteten Link für das kleine Tutorial von wysiwyg
Auch hier leider kein Ergebniss
Danke stefan das du dir für das ganze Zeit nimmst.
Hier einmal die Version wie ich sie dann verstanden habe:
ui.xml:
Code: Select all
<addon name="FC_Traderestriction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Temp\Rebirth\ui\core\addon.xsd">
<environment type="detailmonitor">
<file name="ui/addon/ego_detailmonitor/FC_menu_traderestrictions.lua" />
<dependency name="ego_detailmonitorHelper" />
</environment>
</addon>
Code: Select all
local function init()
Menus = Menus or {}
for _, curmenu in Menus do
if curmenu.name == "TradeRestrictionsMenu" then
Helper.unregisterMenu(curmenu)
break
end
end
local menu = {
name = "TradeRestrictionsMenu",
transparent = { r = 0, g = 0, b = 0, a = 0 }
}
HIer dann einfach das kopierte und erweiterte Menu
Weiterhin habe ich auch folgenden Code ausprobiert und somit basierend auf dem hier geposteten Link für das kleine Tutorial von wysiwyg
Code: Select all
local FC_menu = {}
local Funcs = {}
local function init()
for _, menu in ipairs(Menus) do
if menu.name == "TradeRestrictionsMenu" then
FC_menu = menu
menu.cleanup = Funcs.FC_cleanup
menu.buttonTradeRestriction = Funcs.FC_buttonTradeRestriction
menu.buttonWareRestriction = Funcs.FC_buttonWareRestriction
menu.buttonRestriction = Funcs.FC_buttonRestriction
menu.onShowMenu = Funcs.FC_onShowMenu
menu.showMenu = Funcs.FC_showMenu
menu.onUpdate = Funcs.FC_onUpdate
menu.onRowChanged = Funcs.FC_onRowChanged
menu.onSelectElement = Funcs.FC_onSelectElement
menu.onCloseElement = Funcs.FC_onCloseElement
break
end
end
end
function Funcs.FC_cleanup()
local menu= FC_menu
menu.title = nil
menu.entity = nil
menu.traderestrictions = {}
menu.products = {}
menu.resources = {}
menu.tradeware = {} --hinzugefügt--
menu.infotable = nil
menu.selecttable = nil
end
function Funcs.FC_buttonTradeRestriction ()
local menu= FC_menu
ToggleFactionTradeRestriction(menu.object)
menu.showMenu()
end
function Funcs.FC_buttonWareRestriction(ware)
local menu= FC_menu
ToggleFactionTradeWareOverride(menu.object, ware)
menu.showMenu()
end
function Funcs.FC_buttonRestriction ()
local menu= FC_menu
local rowdata = menu.rowDataMap[Helper.currentDefaultTableRow]
if rowdata[1] == "global" then
menu.buttonTradeRestriction()
elseif rowdata[1] == "ware" then
menu.buttonWareRestriction(rowdata[2])
end
end
function Funcs.FC_onShowMenu ()
local menu= FC_menu
menu.entity = menu.param[3]
menu.object = GetContextByClass(menu.entity, "container")
menu.showMenu()
end
function Funcs.FC_showMenue ()
local menu= FC_menu
Helper.removeAllButtonScripts(menu)
menu.traderestrictions = GetTradeRestrictions(menu.object)
menu.products, menu.resources, menu.tradeware = GetComponentData(menu.object, "products", "resources", "tradeware") --hhinzugefügt--
local setup = Helper.createTableSetup(menu)
local name, typestring, typeicon, typename, owner, ownericon = GetComponentData(menu.entity, "name", "typestring", "typeicon", "typename", "owner", "ownericon")
menu.typestring = typestring
menu.owner = owner
setup:addTitleRow{
Helper.createIcon(typeicon, false, 255, 255, 255, 100, 0, 0, Helper.headerCharacterIconSize, Helper.headerCharacterIconSize),
Helper.createFontString(typename .. " " .. name, false, "left", 255, 255, 255, 100, Helper.headerRow1Font, Helper.headerRow1FontSize),
Helper.createIcon(ownericon, false, 255, 255, 255, 100, 0, 0, Helper.headerCharacterIconSize, Helper.headerCharacterIconSize) -- text depends on selection
}
setup:addTitleRow({
Helper.getEmptyCellDescriptor()
}, nil, {3})
local infodesc = setup:createCustomWidthTable({ Helper.scaleX(Helper.headerCharacterIconSize), 0, Helper.scaleX(Helper.headerCharacterIconSize) + 37 }, false, true)
setup = Helper.createTableSetup(menu)
setup:addSimpleRow({
ReadText(1001, 4202),
menu.traderestrictions.faction and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"global"}, {2, 1})
setup:addHeaderRow({
ReadText(1001, 41),
ReadText(1001, 4600)
}, nil, {2, 1})
for _, ware in ipairs(menu.resources) do
local restricted
if next(menu.traderestrictions.overrides) and (menu.traderestrictions.overrides[ware] ~= nil) then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
setup:addHeaderRow({
ReadText(1001, 1610)
}, nil, {3})
for _, ware in ipairs(menu.products) do
local restricted
if menu.traderestrictions.overrides[ware] ~= nil then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
--hinzugefügt beginn--
setup:addHeaderRow({
ReadText(90903, 001),
}, nil, {4})--geändert in vier
for _, ware in ipairs(menu.tradeware) do
local restricted
if next(menu.traderestrictions.overrides) and (menu.traderestrictions.overrides[ware] ~= nil) then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
--Hinzugefügt ende--
setup:addFillRows(15)
local selectdesc = setup:createCustomWidthTable({Helper.standardButtonWidth, 0, 300}, false, false, true, 1, 0, 0, Helper.tableCharacterOffsety, 463)
-- button table
setup = Helper.createTableSetup(menu)
setup:addSimpleRow({
Helper.getEmptyCellDescriptor(),
Helper.createButton(Helper.createButtonText(ReadText(1001, 2669), "center", Helper.standardFont, 11, 255, 255, 255, 100), nil, false, true, 0, 0, 150, 25, nil, Helper.createButtonHotkey("INPUT_STATE_DETAILMONITOR_B", true)),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.getEmptyCellDescriptor(),
Helper.createButton(Helper.createButtonText(ReadText(1001, 3105), "center", Helper.standardFont, 11, 255, 255, 255, 100), nil, false, true, 0, 0, 150, 25, nil, Helper.createButtonHotkey("INPUT_STATE_DETAILMONITOR_X", true)),
Helper.getEmptyCellDescriptor()
}, nil, nil, false, menu.transparent)
local buttondesc = setup:createCustomWidthTable({48, 150, 48, 150, 0, 150, 48, 150, 48}, false, false, true, 2, 1, 0, 555, 0, false)
-- create tableview
menu.infotable, menu.selecttable, menu.buttontable = Helper.displayThreeTableView(menu, infodesc, selectdesc, buttondesc, false)
-- set button scripts
Helper.setButtonScript(menu, nil, menu.buttontable, 1, 2, function () return menu.onCloseElement("back") end)
Helper.setButtonScript(menu, nil, menu.buttontable, 1, 8, menu.buttonRestriction)
-- clear descriptors again
Helper.releaseDescriptors()
end
-- Note here that I'm using the onUpdate function so I need to set an update interval - I access this via my local copy of the vanilla menu
FC_menu.updateInterval = 1.0
function menu.onUpdate()
end
function Funcs.FC_onRowChanged (row, rowdata)
end
function Funcs.FC_onSelectElement ()
end
function Funcs.FC_onCloseElement(dueToClose)
local menu= FC_menu
if menu.interactive then
if dueToClose == "close" then
Helper.closeMenuAndCancel(menu)
menu.cleanup()
else
Helper.closeMenuAndReturn(menu)
menu.cleanup()
end
else
if dueToClose == "close" then
Helper.closeNonInteractiveMenuAndCancel(menu)
menu.cleanup()
else
Helper.closeNonInteractiveMenuAndReturn(menu)
menu.cleanup()
end
end
end
init()
Da sind leider noch so einige Fehler drin...
Wie oben geschrieben, würde ich empfehlen das lua-script einfach in ein ui-Unterverzeichnis in deinem addon-verzeichnis zu packen. Es gibt keinen Grund, weswegen du da nochmal ein addon/ego_detailmonitor verzeichnis erstellst.
So könnte das ui.xml-file dann in etwa aussehen:
Wenn du ein Menu ersetzen willst, rufst du Helper.unregisterMenu() mit dem vorhandenen Menu auf, musst dann aber auch dein Menu neu registrieren.
Hier ein Beispiel um das tradeRestrictionsMenu komplett zu ersetzen. Wenn es angezeigt wird, kommt jetzt anstelle des Menus eine Ausgabe im DebugLog:
Wie oben geschrieben, würde ich empfehlen das lua-script einfach in ein ui-Unterverzeichnis in deinem addon-verzeichnis zu packen. Es gibt keinen Grund, weswegen du da nochmal ein addon/ego_detailmonitor verzeichnis erstellst.
So könnte das ui.xml-file dann in etwa aussehen:
Code: Select all
<addon name="FC_Traderestriction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="..\..\core\addon.xsd">
<environment type="detailmonitor">
<file name="ui/FC_menu_traderestrictions.lua" />
<dependency name="ego_detailmonitorHelper" />
</environment>
</addon>
Hier ein Beispiel um das tradeRestrictionsMenu komplett zu ersetzen. Wenn es angezeigt wird, kommt jetzt anstelle des Menus eine Ausgabe im DebugLog:
Code: Select all
local menu = {
name = "TradeRestrictionsMenu"
}
local function init()
for _, curmenu in ipairs(Menus) do
if curmenu.name == "TradeRestrictionsMenu" then
Helper.unregisterMenu(curmenu)
break
end
end
Helper.registerMenu(menu)
end
function menu.onShowMenu()
DebugError("Menu displayed...")
end
init()
Stefan Hett
Wir haben nun auch einen Bereich in unserem Wikisystem angelegt, in dem jeder Content erstellen kann.
https://www.egosoft.com:8444/confluence ... birth+Wiki
@FindolCaleb: Dort kannst du dann gerne deine eigene Dokumentation zum UI-Modding erstellen, falls du möchtest.
https://www.egosoft.com:8444/confluence ... birth+Wiki
@FindolCaleb: Dort kannst du dann gerne deine eigene Dokumentation zum UI-Modding erstellen, falls du möchtest.
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Cool danke, dass werde ich dann gerne tun, sobald der MIst funktioniert
Leider hab ich trotz zu Hilfe Name deiner Tipps und der anderer einfach nichts auf die Reihe bekommen. Es ist faszinierend, dass sich einfach nichts im Spiel tut.
Selbst das löschen des alten menus und das anzeigen im debuglog wie du es oben beschrieben hast funktioniert nicht. Ich habe nun alle Tipps berücksichtigt.
Ich habe sowohl einen eigenen Ordner für die lua Dateien angelegt und das eben in der ui.xml vermerkt.
Ich habe ebenso einfach mal in meiner lua Datei den code den du gepostet hast kopiert.
Dennoch tut sich leider nücht.
EDIT:
Ich habe den Gleichen EIntrag wie bei der Ui.xml noch einmal in der ego_detailmonitorHelper.xml durchgeführt und siehe da, das Menü existiert nicht mehr.
Nun muss ich es nur noch schaffen mein editiertes Menü einzufügen. Ich nehme mal an einfaches kopieren der Daten reicht da nicht aus?
EDIT2:
Ich habe es geschafft auf Basis des von wysiwyg erstellten Minitutorials also mit dem bereits oben geposteten code das Menü zu überschreiben.
Ich hatte auch hier vergessen die Daten in der Ego_detailmonitorHelper.xml zu adden.
Nun zeigt der debuglog folgendes Problem:
da natürlich vorhergehend die Tradewares nicht erkannt werden.
Außerdem gibt es den gleichen Fehler noch mit den Recourcen.
Leider hab ich trotz zu Hilfe Name deiner Tipps und der anderer einfach nichts auf die Reihe bekommen. Es ist faszinierend, dass sich einfach nichts im Spiel tut.
Selbst das löschen des alten menus und das anzeigen im debuglog wie du es oben beschrieben hast funktioniert nicht. Ich habe nun alle Tipps berücksichtigt.
Ich habe sowohl einen eigenen Ordner für die lua Dateien angelegt und das eben in der ui.xml vermerkt.
Ich habe ebenso einfach mal in meiner lua Datei den code den du gepostet hast kopiert.
Dennoch tut sich leider nücht.
EDIT:
Ich habe den Gleichen EIntrag wie bei der Ui.xml noch einmal in der ego_detailmonitorHelper.xml durchgeführt und siehe da, das Menü existiert nicht mehr.
Nun muss ich es nur noch schaffen mein editiertes Menü einzufügen. Ich nehme mal an einfaches kopieren der Daten reicht da nicht aus?
EDIT2:
Ich habe es geschafft auf Basis des von wysiwyg erstellten Minitutorials also mit dem bereits oben geposteten code das Menü zu überschreiben.
Ich hatte auch hier vergessen die Daten in der Ego_detailmonitorHelper.xml zu adden.
Nun zeigt der debuglog folgendes Problem:
und dazugehörig eben noch dieser[gamestart: 77] - [07/16/15 16:17:21]: Error: C:/Program Files (x86)/Steam/steamapps/common/X Rebirth/extensions/trade_alpha/ui/FC_menu_traderestri...(77): GetComponentData(): Invalid argument 3, got unknown key 'tradeware'
Der zweite Fehler bezieht sihc auf folgende Zeile:[=ERROR=] Error while executing onEvent script for event: showTradeRestrictionsMenu.
Errormessage: [string "extensions/trade_alpha/ui/FC_menu_traderestri..."]:124: bad argument #1 to 'ipairs' (table expected, got nil)
Code: Select all
setup:addHeaderRow({
ReadText(1001, 41),
ReadText(1001, 4600)
}, nil, {2, 1})
for _, ware in ipairs(menu.resources) do
local restricted
if next(menu.traderestrictions.overrides) and (menu.traderestrictions.overrides[ware] ~= nil) then
restricted = menu.traderestrictions.overrides[ware]
else
restricted = menu.traderestrictions.faction
end
setup:addSimpleRow({
GetWareData(ware, "name"),
restricted and ReadText(1001, 2617) or ReadText(1001, 2618)
}, {"ware", ware}, {2, 1})
end
Außerdem gibt es den gleichen Fehler noch mit den Recourcen.
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Ich habe das Handesbeschränkungsmenu (traderestrictions menu) endlich zum laufen bekommen.
Ich werde den Code entsprechend in dem Wiki ablegen, damit es nachvollziebar wird.
Bekannte Probleme:
- Nach ändern der Beschräkungen von ja auf nein oder umgekehrt, muss das Menu einmal geschlossen werden, damit dies Angezeigt wird.
- Das MIndesbuget des Handelsmanagers wird nicht gesenkt obwohl alle Waren als Beschränkt eingestellt waren
@stefan
Gilt die Änderung der tradewares auch für das priceoverridesystem ? Ich würde dieses auch sehr gerne mit den Handelswaren ergänzen.
Ich werde den Code entsprechend in dem Wiki ablegen, damit es nachvollziebar wird.
Bekannte Probleme:
- Nach ändern der Beschräkungen von ja auf nein oder umgekehrt, muss das Menu einmal geschlossen werden, damit dies Angezeigt wird.
- Das MIndesbuget des Handelsmanagers wird nicht gesenkt obwohl alle Waren als Beschränkt eingestellt waren
@stefan
Gilt die Änderung der tradewares auch für das priceoverridesystem ? Ich würde dieses auch sehr gerne mit den Handelswaren ergänzen.
@FindolCaleb: Freut mich, dass es bei dir jetzt klappt.
Eine Übersicht der unterstützten Funktionen findest du hier:
https://wiki.egosoft.com:1337/X%20Rebir ... 0overview/
https://wiki.egosoft.com:1337/X%20Rebir ... 0overview/
Schau mal ob du mit dem vorhandenen zurecht kommst um die Änderungen am priceoverridesystem zu machen. Wenn etwas feld, kannst du hier gerne bescheid geben.
Du kannst auch die Anzeige eines Menus aktualisieren, ohne dass die geschlossen und wieder geoeffnet werden muss. Die map (menu_map.lua) macht das z.B. um die Tabelle der gefundenen Objekte zu aktualisieren.
Habe auch gerade dein Tutorial im Wiki system angesehen. Vielen Dank für's Zusammenfassen.
Ich war so frei und habe die Artikel im Wikisystem in Sprachbereiche (Deutsch/Englisch) aufgeteilt und deinen Artikel entsprechend aufgesplittet.
Btw. wenn du in Confluence "{code" (ohne Anführungszeichen) schreibst und das Code-Makro auswählst kannst du einen Code-Bereich erstellen (habe das für deine Code-Beispiele mal gemacht).
Eine Übersicht der unterstützten Funktionen findest du hier:
https://wiki.egosoft.com:1337/X%20Rebir ... 0overview/
https://wiki.egosoft.com:1337/X%20Rebir ... 0overview/
Schau mal ob du mit dem vorhandenen zurecht kommst um die Änderungen am priceoverridesystem zu machen. Wenn etwas feld, kannst du hier gerne bescheid geben.
Du kannst auch die Anzeige eines Menus aktualisieren, ohne dass die geschlossen und wieder geoeffnet werden muss. Die map (menu_map.lua) macht das z.B. um die Tabelle der gefundenen Objekte zu aktualisieren.
Habe auch gerade dein Tutorial im Wiki system angesehen. Vielen Dank für's Zusammenfassen.
Ich war so frei und habe die Artikel im Wikisystem in Sprachbereiche (Deutsch/Englisch) aufgeteilt und deinen Artikel entsprechend aufgesplittet.
Btw. wenn du in Confluence "{code" (ohne Anführungszeichen) schreibst und das Code-Makro auswählst kannst du einen Code-Bereich erstellen (habe das für deine Code-Beispiele mal gemacht).
Stefan Hett
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34
Das priceoverridemenu funktioniert nun auch einwandfrei.
@Stefan:
Danke das du das ganze noch etwas sortiert hast, und danke für die Links. Ich werde mich auch noch weiter mit den Lua beschäftigen, aber jetzt hab ich erstmal probleme mit dem Handel der Abbaufunktion von Schiffen die sich der Station angeschlossen haben.
Hast du vll eine Idee woran es liegen kann, dass das Mindesbuget nicht gesenkt wird ?
@Stefan:
Danke das du das ganze noch etwas sortiert hast, und danke für die Links. Ich werde mich auch noch weiter mit den Lua beschäftigen, aber jetzt hab ich erstmal probleme mit dem Handel der Abbaufunktion von Schiffen die sich der Station angeschlossen haben.
Hast du vll eine Idee woran es liegen kann, dass das Mindesbuget nicht gesenkt wird ?
-
- Posts: 205
- Joined: Sun, 14. Sep 08, 15:34