EnglishGermanFrenchRussianItalianSpanish
Log inRegister
 
UI modding - support thread
Post new topic Reply to topic Goto page 1, 2  Next
View previous topic :: View next topic
Author Message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
modified
PostPosted: Fri, 20. Feb 15, 02:26    Post subject: UI modding - support thread Reply with quote Print

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://www.egosoft.com:8444/confluence/display/XRMOD/X+Rebirth+Modding+Home )
- im X Rebirth Wiki system reinschaust ( https://www.egosoft.com:8444/confluence/display/XRWIKI/X+Rebirth+Wiki )
- im Bugtracker schaust, ob dein Problem schon bekannt ist ( https://www.egosoft.com:8443/jira/browse/XRUIMOD )
- 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.

Hier noch einige shortcuts für den Bugtracker:
UI Modding changelog: https://www.egosoft.com:8443/jira/browse/XRUIMOD#selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel
geplante Änderungen in einer späteren Version (Achtung!!! Diese fixes-changes wurden noch nicht bestätigt - Einträge die hier stehen können unter Umständen auch wieder entfallen!): https://www.egosoft.com:8443/jira/browse/XRUIMOD#selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel
Direkter Link zur Übersicht über noch nicht gefixte/gelöste Issues/Feature Requests bzw. Fixes/Feature requests in einer Version die noch nicht erschienen ist: https://www.egosoft.com:8443/jira/issues/?jql=project%20%3D%20XRUIMOD%20AND%20%28fixVersion%20in%20unreleasedVersions%28%29%20OR%20fixVersion%20is%20EMPTY%29%20ORDER%20BY%20priority%20DESC

Direkte Links zu einigen Seiten im Wiki system:
UI Modding Changelog: https://www.egosoft.com:8444/confluence/display/XRMOD/Changelog


_________________
Stefan Hett, UI Engine Architect


Last edited by stefanEgo on Fri, 24. Jul 15, 16:58; edited 5 times in total
Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Fri, 27. Feb 15, 23:43    Post subject: Reply with quote Print

Detailed UI modding changes in 3.50 Beta 2: http://www.egosoft.com:8282/jira/issues/?jql=project%20%3D%20XRUIMOD%20AND%20fixVersion%20%3D%20%223.50%20-%20Beta%202%22%20AND%20status%20%3D%20Closed%20ORDER%20BY%20priority%20DESC


_________________
Stefan Hett, UI Engine Architect
Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Tue, 3. Mar 15, 14:40    Post subject: Reply with quote Print

UI Modding Versionsinformationen können jetzt direkt hier eingesehen werden: https://www.egosoft.com:8444/confluence/display/XRMOD/Changelog


_________________
Stefan Hett, UI Engine Architect
Back to top
View user's profile Send private message
FindolCaleb





Joined: 14 Sep 2008
Posts: 205 on topic

Thank you for registering your game
PostPosted: Sun, 5. Jul 15, 17:17    Post subject: UI Modding Reply with quote Print

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

Back to top
View user's profile Send private message
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)

MEDALMEDALMEDAL

Joined: 02 Apr 2006
Posts: 20558 on topic

Thank you for registering your game
PostPosted: Sun, 5. Jul 15, 17:33    Post subject: Reply with quote Print

***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.


_________________
Besteht Interesse an einem Nopileos-Hörbuch?

Farnhams Legende und Nopileos als E-Books!

"People who think they know everything are a great annoyance to those of us who do." - Isaac Asimov

"If it's not impossible, there must be a way to do it." - Sir Nicholas Winton
Back to top
View user's profile Send private message Visit poster's website
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Mon, 6. Jul 15, 15:26    Post subject: Reply with quote Print

@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, UI Engine Architect
Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Fri, 10. Jul 15, 17:02    Post subject: Reply with quote Print

@FindolCaleb: With the latest beta (3.60 Beta 3) we've added means so you can access that data directly from Lua. Pls let me know whether this suites ur needs.


_________________
Stefan Hett, UI Engine Architect
Back to top
View user's profile Send private message
FindolCaleb





Joined: 14 Sep 2008
Posts: 205 on topic

Thank you for registering your game
PostPosted: Sun, 12. Jul 15, 12:05    Post subject: Reply with quote Print

Super danke, ich werde dann mal versuchen ob das ganze jetzt klappt.
Kannst du vll noch ein Minimalbeispiel posten (gerne auch im Supportforum) um zb. in eine bestehende lua neue inhalte einzufügen.
Bisher habe ich nur gefunden, wie man neue Dateien erstellt.

Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Tue, 14. Jul 15, 16:27    Post subject: Reply with quote Print

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.


_________________
Stefan Hett, UI Engine Architect
Back to top
View user's profile Send private message
FindolCaleb





Joined: 14 Sep 2008
Posts: 205 on topic

Thank you for registering your game
PostPosted: Tue, 14. Jul 15, 22:13    Post subject: Reply with quote Print

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:

Code:
<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>


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.

Code:
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


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.

Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Wed, 15. Jul 15, 10:30    Post subject: Reply with quote Print

@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():
Code:

Menus = Menus or {}
for _, curmenu in Menus do
   if curmenu.name == "TradeRestrictionsMenu" then
      Helper.unregisterMenu(curmenu)
      break
   end
end

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):
Code:

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, UI Engine Architect
Back to top
View user's profile Send private message
FindolCaleb





Joined: 14 Sep 2008
Posts: 205 on topic

Thank you for registering your game
PostPosted: Wed, 15. Jul 15, 11:14    Post subject: Reply with quote Print

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:



Code:
<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>


und die Hauptdatei





Code:


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


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

Code:
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()


Auch hier leider kein Ergebniss

Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Wed, 15. Jul 15, 18:32    Post subject: Reply with quote Print

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:
Code:

<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>


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:

Code:

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, UI Engine Architect
Back to top
View user's profile Send private message
stefanEgo
EGOSOFT
EGOSOFT



Joined: 11 Apr 2013
Posts: 438 on topic

Thank you for registering your game
PostPosted: Wed, 15. Jul 15, 19:13    Post subject: Reply with quote Print

Wir haben nun auch einen Bereich in unserem Wikisystem angelegt, in dem jeder Content erstellen kann.

https://www.egosoft.com:8444/confluence/display/XRWIKI/X+Rebirth+Wiki

@FindolCaleb: Dort kannst du dann gerne deine eigene Dokumentation zum UI-Modding erstellen, falls du möchtest.


_________________
Stefan Hett, UI Engine Architect
Back to top
View user's profile Send private message
FindolCaleb





Joined: 14 Sep 2008
Posts: 205 on topic

Thank you for registering your game
PostPosted: Thu, 16. Jul 15, 08:39    Post subject: Reply with quote Print

Cool danke, dass werde ich dann gerne tun, sobald der MIst funktioniert Wink
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:
Quote:

[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'


und dazugehörig eben noch dieser

Quote:
[=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)


Der zweite Fehler bezieht sihc auf folgende Zeile:

Code:
 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


da natürlich vorhergehend die Tradewares nicht erkannt werden.
Außerdem gibt es den gleichen Fehler noch mit den Recourcen.

Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic Reply to topic Goto page 1, 2  Next
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
Control Panel
Login Data
The time now is Sat, 24. Feb 18, 19:54

All times are GMT + 2 Hours


Board Security

Copyright © EGOSOFT 1989-2018
Powered by phpBB © 2001, 2005 phpBB Group
Template created by Avatar & BurnIt!
Debug: page generation = 0.17248 seconds, sql queries = 29