diff --git a/README.md b/README.md index ff108c8..73a0e88 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,6 @@ Right above your input box, you'll see a bunch of useful information which updat After creating a Mudlet profile to connect to LOTJ, do the following to add the package: -1. Open the Mudlet **Settings**. - 1. On the **General** tab, check **Enable MSDP** - 1. On the **Special Options** tab, check **Force compression off** 1. Download a release of this package (the `.mpackage` file) from the [releases page](https://github.com/rengawm/lotj-mudlet-ui/releases) 1. Open the **Package Manager** 1. If present, uninstall the **generic-mapper** package. It conflicts with the one provided here. diff --git a/mfile b/mfile index 76e523e..e9e7621 100644 --- a/mfile +++ b/mfile @@ -1,4 +1,4 @@ { "package": "lotj-ui", - "version": "1.1" + "version": "2.0" } \ No newline at end of file diff --git a/src/scripts/chat/chat.lua b/src/scripts/chat/chat.lua index 89f9709..2434f0b 100644 --- a/src/scripts/chat/chat.lua +++ b/src/scripts/chat/chat.lua @@ -1,7 +1,7 @@ lotj = lotj or {} lotj.chat = lotj.chat or {} -registerAnonymousEventHandler("lotjUICreated", function() +function lotj.chat.setup() for keyword, contentsContainer in pairs(lotj.layout.lowerRightTabData.contents) do lotj.chat[keyword] = Geyser.MiniConsole:new({ x = "1%", y = "1%", @@ -16,12 +16,12 @@ registerAnonymousEventHandler("lotjUICreated", function() -- Set the wrap at a few characters short of the full width to avoid the scroll bar showing over text local charsPerLine = lotj.chat[keyword]:getColumnCount()-3 lotj.chat[keyword]:setWrap(charsPerLine) - registerAnonymousEventHandler("sysWindowResizeEvent", function() + lotj.setup.registerEventHandler("sysWindowResizeEvent", function() local charsPerLine = lotj.chat[keyword]:getColumnCount()-3 lotj.chat[keyword]:setWrap(charsPerLine) end) end -end) +end function lotj.chat.routeMessage(type) selectCurrentLine() diff --git a/src/scripts/galaxy-map/galaxy-map.lua b/src/scripts/galaxy-map/galaxy-map.lua index f313845..c0ca69f 100644 --- a/src/scripts/galaxy-map/galaxy-map.lua +++ b/src/scripts/galaxy-map/galaxy-map.lua @@ -11,7 +11,7 @@ lotj.galaxyMap = lotj.galaxyMap or { } local dataFileName = getMudletHomeDir().."/galaxyMap" -registerAnonymousEventHandler("lotjUICreated", function() +function lotj.galaxyMap.setup() lotj.galaxyMap.container = Geyser.Label:new({ name = "galaxy", x = 0, y = 0, @@ -41,8 +41,8 @@ registerAnonymousEventHandler("lotjUICreated", function() lotj.galaxyMap.drawSystems() end - registerAnonymousEventHandler("gmcp.Ship.System.y", lotj.galaxyMap.setShipGalCoords) -end) + lotj.setup.registerEventHandler("gmcp.Ship.System", lotj.galaxyMap.setShipGalCoords) +end function lotj.galaxyMap.log(text) @@ -50,6 +50,7 @@ function lotj.galaxyMap.log(text) end function lotj.galaxyMap.setShipGalCoords() + if not gmcp.Ship then return end if gmcp.Ship.System.x ~= nil and gmcp.Ship.System.y ~= nil then lotj.galaxyMap.currentX = gmcp.Ship.System.x lotj.galaxyMap.currentY = gmcp.Ship.System.y diff --git a/src/scripts/info-panel/info-panel.lua b/src/scripts/info-panel/info-panel.lua index fc5b2f9..e1e53f2 100644 --- a/src/scripts/info-panel/info-panel.lua +++ b/src/scripts/info-panel/info-panel.lua @@ -2,7 +2,7 @@ lotj = lotj or {} lotj.infoPanel = lotj.infoPanel or {} -registerAnonymousEventHandler("lotjUICreated", function() +function lotj.infoPanel.setup() local basicStatsContainer = Geyser.Label:new({ h_stretch_factor = 0.9 }, lotj.layout.lowerInfoPanel) @@ -15,12 +15,12 @@ registerAnonymousEventHandler("lotjUICreated", function() local spaceContainer = Geyser.Label:new({ h_stretch_factor = 2.2 }, lotj.layout.lowerInfoPanel) - + lotj.infoPanel.createBasicStats(basicStatsContainer) lotj.infoPanel.createOpponentStats(combatContainer) lotj.infoPanel.createChatInfo(chatContainer) lotj.infoPanel.createSpaceStats(spaceContainer) -end) +end -- Utility functions @@ -66,7 +66,7 @@ end -- Wires up GMCP subscriptions for a gauge. -- statName is the short version of the stat name to show after the value (mv, hp, etc) -local function wireGaugeUpdate(gauge, valueVarName, maxVarName, statName) +local function wireGaugeUpdate(gauge, valueVarName, maxVarName, statName, eventName) local function doUpdate() local current = gmcpVarByPath(valueVarName) or 0 local max = gmcpVarByPath(maxVarName) or 0 @@ -76,8 +76,7 @@ local function wireGaugeUpdate(gauge, valueVarName, maxVarName, statName) gauge:setValue(0, 1, "") end end - registerAnonymousEventHandler("gmcp."..valueVarName, doUpdate) - registerAnonymousEventHandler("gmcp."..maxVarName, doUpdate) + lotj.setup.registerEventHandler(eventName, doUpdate) end @@ -90,7 +89,7 @@ function lotj.infoPanel.createBasicStats(container) healthGauge.front:setStyleSheet(gaugeFrontStyle("#f04141", "#ef2929", "#cc0000", "#a40000", "#cc0000")) healthGauge.back:setStyleSheet(gaugeBackStyle("#3f1111", "#3f0707", "#330000", "#220000", "#330000")) styleGaugeText(healthGauge, 12) - wireGaugeUpdate(healthGauge, "Char.Stats.hp", "Char.Stats.maxHp", "hp") + wireGaugeUpdate(healthGauge, "Char.Vitals.hp", "Char.Vitals.maxHp", "hp", "gmcp.Char.Vitals") local wimpyBar = Geyser.Label:new({ x=0, y=0, @@ -100,10 +99,10 @@ function lotj.infoPanel.createBasicStats(container) background-color: yellow; ]]) - registerAnonymousEventHandler("gmcp.Char.Stats.wimpy", function() - local health = gmcp.Char.Stats.hp - local healthMax = gmcp.Char.Stats.maxHp - local wimpy = gmcp.Char.Stats.wimpy + lotj.setup.registerEventHandler("gmcp.Char.Vitals", function() + local health = gmcp.Char.Vitals.hp + local healthMax = gmcp.Char.Vitals.maxHp + local wimpy = gmcp.Char.Vitals.wimpy if healthMax > 0 then if wimpy > 0 and health > 0 and wimpy < health then wimpyBar:show() @@ -122,7 +121,7 @@ function lotj.infoPanel.createBasicStats(container) movementGauge.front:setStyleSheet(gaugeFrontStyle("#41f041", "#29ef29", "#00cc00", "#00a400", "#00cc00")) movementGauge.back:setStyleSheet(gaugeBackStyle("#113f11", "#073f07", "#003300", "#002200", "#003300")) styleGaugeText(movementGauge, 12) - wireGaugeUpdate(movementGauge, "Char.Stats.move", "Char.Stats.maxMove", "mv") + wireGaugeUpdate(movementGauge, "Char.Vitals.move", "Char.Vitals.maxMove", "mv", "gmcp.Char.Vitals") -- Mana gauge (will be hidden later if we do not have mana) local manaGauge = Geyser.Gauge:new({ @@ -132,10 +131,10 @@ function lotj.infoPanel.createBasicStats(container) manaGauge.front:setStyleSheet(gaugeFrontStyle("#4141f0", "#2929ef", "#0000cc", "#0000a4", "#0000cc")) manaGauge.back:setStyleSheet(gaugeBackStyle("#11113f", "#07073f", "#000033", "#000022", "#000011")) styleGaugeText(manaGauge, 12) - wireGaugeUpdate(manaGauge, "Char.Stats.mana", "Char.stats.maxMana", "mn") + wireGaugeUpdate(manaGauge, "Char.Vitals.mana", "Char.Vitals.maxMana", "mn", "gmcp.Char.Vitals") - registerAnonymousEventHandler("gmcp.Char.Stats.maxMana", function() - local manaMax = gmcp.Char.Stats.maxMana or 0 + lotj.setup.registerEventHandler("gmcp.Char.Vitals", function() + local manaMax = gmcp.Char.Vitals.maxMana or 0 if manaMax > 0 then healthGauge:move(nil, 4) healthGauge:resize(nil, 16) @@ -190,7 +189,7 @@ function lotj.infoPanel.createOpponentStats(container) opponentGauge:setValue(0, 1, "Not fighting") end end - registerAnonymousEventHandler("gmcp.Char.Enemy", update) + lotj.setup.registerEventHandler("gmcp.Char.Enemy", update) end @@ -217,7 +216,7 @@ function lotj.infoPanel.createChatInfo(container) commnetInfo:echo(commChannel, nil, "l13") end end - registerAnonymousEventHandler("gmcp.Char.Chat", updateCommnet) + lotj.setup.registerEventHandler("gmcp.Char.Chat", updateCommnet) -- OOC meter local oocLabel = Geyser.Label:new({ @@ -232,7 +231,7 @@ function lotj.infoPanel.createChatInfo(container) oocGauge.front:setStyleSheet(gaugeFrontStyle("#31d0d0", "#22cfcf", "#00b2b2", "#009494", "#00b2b2")) oocGauge.back:setStyleSheet(gaugeBackStyle("#113f3f", "#073f3f", "#003333", "#002222", "#001111")) - registerAnonymousEventHandler("gmcp.Char.Chat.oocLimit", function() + lotj.setup.registerEventHandler("gmcp.Char.Chat", function() local oocLeft = gmcp.Char.Chat.oocLimit or 0 local oocMax = 6 oocGauge:setValue(oocLeft, oocMax) @@ -248,7 +247,7 @@ function lotj.infoPanel.createSpaceStats(container) energyGauge.front:setStyleSheet(gaugeFrontStyle("#7a7a7a", "#777777", "#656565", "#505050", "#656565")) energyGauge.back:setStyleSheet(gaugeBackStyle("#383838", "#303030", "#222222", "#151515", "#222222")) styleGaugeText(energyGauge, 12) - wireGaugeUpdate(energyGauge, "Ship.Info.energy", "Ship.Info.maxEnergy", "en") + wireGaugeUpdate(energyGauge, "Ship.Info.energy", "Ship.Info.maxEnergy", "en", "gmcp.Ship.Info") local hullGauge = Geyser.Gauge:new({ x="3%", y=23, @@ -257,7 +256,7 @@ function lotj.infoPanel.createSpaceStats(container) hullGauge.front:setStyleSheet(gaugeFrontStyle("#bd7833", "#bd6e20", "#994c00", "#703800", "#994c00")) hullGauge.back:setStyleSheet(gaugeBackStyle("#442511", "#441d08", "#331100", "#200900", "#331100")) styleGaugeText(hullGauge, 12) - wireGaugeUpdate(hullGauge, "Ship.Info.hull", "Ship.Info.maxHull", "hl") + wireGaugeUpdate(hullGauge, "Ship.Info.hull", "Ship.Info.maxHull", "hl", "gmcp.Ship.Info") local shieldGauge = Geyser.Gauge:new({ x="3%", y=42, @@ -266,7 +265,7 @@ function lotj.infoPanel.createSpaceStats(container) shieldGauge.front:setStyleSheet(gaugeFrontStyle("#31d0d0", "#22cfcf", "#00b2b2", "#009494", "#00b2b2")) shieldGauge.back:setStyleSheet(gaugeBackStyle("#113f3f", "#073f3f", "#003333", "#002222", "#001111")) styleGaugeText(shieldGauge, 12) - wireGaugeUpdate(shieldGauge, "Ship.Info.shield", "Ship.Info.maxShield", "sh") + wireGaugeUpdate(shieldGauge, "Ship.Info.shield", "Ship.Info.maxShield", "sh", "gmcp.Ship.Info") -- Piloting indicator @@ -285,8 +284,8 @@ function lotj.infoPanel.createSpaceStats(container) width=16, height=16 }, pilotBoxCont) - registerAnonymousEventHandler("gmcp.Ship.Base.piloting", function() - if gmcp.Ship.Base.piloting then + lotj.setup.registerEventHandler("gmcp.Ship.Info", function() + if gmcp.Ship and gmcp.Ship.Info.piloting then pilotBox:setStyleSheet("background-color: #29efef; border: 2px solid #eeeeee;") else pilotBox:setStyleSheet("background-color: #073f3f; border: 2px solid #eeeeee;") @@ -300,25 +299,33 @@ function lotj.infoPanel.createSpaceStats(container) }, container) local function updateSpeed() - local speed = gmcp.Ship.Base.speed or 0 - local maxSpeed = gmcp.Ship.Base.maxSpeed or 0 - speedGauge:echo("Sp: "..speed.."/"..maxSpeed, nil, "l12") + if not gmcp.Ship or not gmcp.Ship.Info or not gmcp.Ship.Info.maxSpeed then + speedGauge:echo("Sp: N/A", nil, "l12") + else + local speed = gmcp.Ship.Info.speed or 0 + local maxSpeed = gmcp.Ship.Info.maxSpeed or 0 + speedGauge:echo("Sp: "..speed.."/"..maxSpeed, nil, "l12") + end end - registerAnonymousEventHandler("gmcp.Ship.Base", updateSpeed) + lotj.setup.registerEventHandler("gmcp.Ship.Info", updateSpeed) + - local coordsInfo = Geyser.Label:new({ x="35%", y=32, width="40%", height=24, }, container) local function updateCoords() - local shipX = gmcp.Ship.Base.posX or 0 - local shipY = gmcp.Ship.Base.posY or 0 - local shipZ = gmcp.Ship.Base.posZ or 0 - coordsInfo:echo("Coords: "..shipX.." "..shipY.." "..shipZ, nil, "l12") + if not gmcp.Ship or not gmcp.Ship.Info or not gmcp.Ship.Info.posX then + coordsInfo:echo("Coords: N/A", nil, "l12") + else + local shipX = gmcp.Ship.Info.posX or 0 + local shipY = gmcp.Ship.Info.posY or 0 + local shipZ = gmcp.Ship.Info.posZ or 0 + coordsInfo:echo("Coords: "..shipX.." "..shipY.." "..shipZ, nil, "l12") + end end - registerAnonymousEventHandler("gmcp.Ship.Base", updateCoords) + lotj.setup.registerEventHandler("gmcp.Ship.Info", updateCoords) lotj.infoPanel.spaceTickCounter = Geyser.Label:new({ x="77%", y=6, diff --git a/src/scripts/layout/layout.lua b/src/scripts/layout/layout.lua index 7e01a8c..bc71a15 100644 --- a/src/scripts/layout/layout.lua +++ b/src/scripts/layout/layout.lua @@ -35,7 +35,7 @@ local function createTabbedPanel(tabData, container, tabList) }, container) lotj.layout.resizeTabContents(container, tabContainer, contentsContainer) - registerAnonymousEventHandler("sysWindowResizeEvent", function() + lotj.setup.registerEventHandler("sysWindowResizeEvent", function() lotj.layout.resizeTabContents(container, tabContainer, contentsContainer) end) @@ -75,15 +75,16 @@ function lotj.layout.resizeTabContents(parentContainer, tabContainer, contentsCo contentsContainer:resize(nil, newHeight) end +function lotj.layout.setup() + if lotj.layout.drawn then return end -registerAnonymousEventHandler("sysLoadEvent", function() - local rightPanel = Geyser.Container:new({ + lotj.layout.rightPanel = Geyser.Container:new({ width = rightPanelWidthPct.."%", x = (100-rightPanelWidthPct).."%", y = 0, height = "100%", }) - registerAnonymousEventHandler("sysWindowResizeEvent", function() - local newBorder = math.floor(rightPanel:get_width()) + lotj.setup.registerEventHandler("sysWindowResizeEvent", function() + local newBorder = math.floor(lotj.layout.rightPanel:get_width()) if getBorderRight() ~= newBorder then setBorderRight(newBorder) end @@ -91,11 +92,11 @@ registerAnonymousEventHandler("sysLoadEvent", function() -- Upper-right pane, for maps - local upperContainer = Geyser.Container:new({ + lotj.layout.upperContainer = Geyser.Container:new({ x = 0, y = 0, width = "100%", height = upperRightHeightPct.."%", - }, rightPanel) + }, lotj.layout.rightPanel) local upperTabList = {} table.insert(upperTabList, {keyword = "map", label = "Map"}) @@ -103,15 +104,15 @@ registerAnonymousEventHandler("sysLoadEvent", function() table.insert(upperTabList, {keyword = "galaxy", label = "Galaxy"}) lotj.layout.upperRightTabData = {} - createTabbedPanel(lotj.layout.upperRightTabData, upperContainer, upperTabList) + createTabbedPanel(lotj.layout.upperRightTabData, lotj.layout.upperContainer, upperTabList) -- Lower-right panel, for chat history - local lowerContainer = Geyser.Container:new({ + lotj.layout.lowerContainer = Geyser.Container:new({ x = 0, y = upperRightHeightPct.."%", width = "100%", height = (100-upperRightHeightPct).."%", - }, rightPanel) + }, lotj.layout.rightPanel) local lowerTabList = {} table.insert(lowerTabList, {keyword = "all", label = "All"}) @@ -122,7 +123,7 @@ registerAnonymousEventHandler("sysLoadEvent", function() table.insert(lowerTabList, {keyword = "imm", label = "Imm"}) lotj.layout.lowerRightTabData = {} - createTabbedPanel(lotj.layout.lowerRightTabData, lowerContainer, lowerTabList) + createTabbedPanel(lotj.layout.lowerRightTabData, lotj.layout.lowerContainer, lowerTabList) -- Lower info panel, for prompt hp/move gauges and other basic status @@ -132,9 +133,13 @@ registerAnonymousEventHandler("sysLoadEvent", function() height = 60, }) setBorderBottom(60) +end - raiseEvent("lotjUICreated") - - lotj.layout.selectTab(lotj.layout.upperRightTabData, "map") - lotj.layout.selectTab(lotj.layout.lowerRightTabData, "all") -end) +function lotj.layout.teardown() + lotj.layout.rightPanel:hide() + lotj.layout.upperContainer:hide() + lotj.layout.lowerContainer:hide() + lotj.layout.lowerInfoPanel:hide() + setBorderRight(0) + setBorderBottom(0) +end \ No newline at end of file diff --git a/src/scripts/mapper/mapper.lua b/src/scripts/mapper/mapper.lua index 9f6e125..de180b3 100644 --- a/src/scripts/mapper/mapper.lua +++ b/src/scripts/mapper/mapper.lua @@ -257,7 +257,7 @@ end ------------------------------------------------------------------------------ -registerAnonymousEventHandler("lotjUICreated", function() +function lotj.mapper.setup() lotj.mapper.mapperInstance = Geyser.Mapper:new({ x = 0, y = 0, width = "100%", @@ -281,9 +281,9 @@ registerAnonymousEventHandler("lotjUICreated", function() lotj.mapper.noAreasPrompt:echo("No map data.

Use map help to get started.", nil, "c14") end - registerAnonymousEventHandler("sysDataSendRequest", "lotj.mapper.handleSentCommand") - registerAnonymousEventHandler("gmcp.Room.Info.vnum", "lotj.mapper.onEnterRoom") -end) + lotj.setup.registerEventHandler("sysDataSendRequest", lotj.mapper.handleSentCommand) + lotj.setup.registerEventHandler("gmcp.Room.Info", lotj.mapper.onEnterRoom) +end -- Track the most recent movement command so we know which direction we moved when automapping diff --git a/src/scripts/setup/scripts.json b/src/scripts/setup/scripts.json new file mode 100644 index 0000000..ad46a83 --- /dev/null +++ b/src/scripts/setup/scripts.json @@ -0,0 +1,5 @@ +[ + { + "name": "setup" + } +] diff --git a/src/scripts/setup/setup.lua b/src/scripts/setup/setup.lua new file mode 100644 index 0000000..d15e109 --- /dev/null +++ b/src/scripts/setup/setup.lua @@ -0,0 +1,67 @@ +lotj = lotj or {} +lotj.setup = lotj.setup or {} +lotj.setup.eventHandlerKillIds = lotj.setup.eventHandlerKillIds or {} +lotj.setup.gmcpEventHandlerFuncs = lotj.setup.gmcpEventHandlerFuncs or {} + +function lotj.setup.registerEventHandler(eventName, func) + local killId = registerAnonymousEventHandler(eventName, func) + table.insert(lotj.setup.eventHandlerKillIds, killId) + + -- A little bit hacky, but we want to run all GMCP event handlers when we finish + -- doing initial setup to populate the UI. + if eventName:find("gmcp\.") then + table.insert(lotj.setup.gmcpEventHandlerFuncs, func) + end +end + +local function setup() + -- Layout has to be created first + lotj.layout.setup() + + -- Then everything else in no particular order + lotj.chat.setup() + lotj.galaxyMap.setup() + lotj.infoPanel.setup() + lotj.mapper.setup() + lotj.systemMap.setup() + + -- Then set our UI default view + lotj.layout.selectTab(lotj.layout.upperRightTabData, "map") + lotj.layout.selectTab(lotj.layout.lowerRightTabData, "all") + + -- Manually kick off all GMCP event handlers, since GMCP data would not have changed + -- since loading the UI. + for _, func in ipairs(lotj.setup.gmcpEventHandlerFuncs) do + func() + end +end + +local function teardown() + for _, killId in ipairs(lotj.setup.eventHandlerKillIds) do + killAnonymousEventHandler(killId) + end + + lotj.layout.teardown() + lotj = nil +end + +lotj.setup.registerEventHandler("sysLoadEvent", function() + setup() +end) + +lotj.setup.registerEventHandler("sysInstallPackage", function(_, pkgName) + if pkgName ~= "lotj-ui" then return end + sendGMCP("Core.Supports.Set", "[\"Ship 1\"]") + setup() +end) + +lotj.setup.registerEventHandler("sysUninstallPackage", function(_, pkgName) + if pkgName ~= "lotj-ui" then return end + teardown() +end) + +lotj.setup.registerEventHandler("sysProtocolEnabled", function(_, protocol) + if protocol == "GMCP" then + sendGMCP("Core.Supports.Set", "[\"Ship 1\"]") + end +end) diff --git a/src/scripts/system-map/system-map.lua b/src/scripts/system-map/system-map.lua index a20a5ba..cfc52e6 100644 --- a/src/scripts/system-map/system-map.lua +++ b/src/scripts/system-map/system-map.lua @@ -14,7 +14,7 @@ local controlButtonStyle = [[ border: 2px solid white; ]] -registerAnonymousEventHandler("lotjUICreated", function() +function lotj.systemMap.setup() disableTrigger("system-map-radar") local tabContents = lotj.layout.upperRightTabData.contents["system"] @@ -23,7 +23,7 @@ registerAnonymousEventHandler("lotjUICreated", function() background-color: black; ]]) lotj.systemMap.resizeToSquare() - registerAnonymousEventHandler("sysWindowResizeEvent", lotj.systemMap.resizeToSquare) + lotj.setup.registerEventHandler("sysWindowResizeEvent", lotj.systemMap.resizeToSquare) local zoomInButton = Geyser.Label:new({ x = "2%", y = 10, @@ -88,10 +88,10 @@ registerAnonymousEventHandler("lotjUICreated", function() ]]) end positionRangeCircle() - registerAnonymousEventHandler("sysWindowResizeEvent", positionRangeCircle) + lotj.setup.registerEventHandler("sysWindowResizeEvent", positionRangeCircle) - registerAnonymousEventHandler("gmcp.Ship.Base", "lotj.systemMap.drawMap") -end) + lotj.setup.registerEventHandler("gmcp.Ship.Info", lotj.systemMap.drawMap) +end function lotj.systemMap.resetItems() lotj.systemMap.radarItems = {} @@ -113,13 +113,13 @@ function lotj.systemMap.drawMap() end -- We use ship max speed as a proxy for "do we have ship data at all" - if gmcp.Ship.Base.maxSpeed == nil then + if not gmcp.Ship or not gmcp.Ship.Info or gmcp.Ship.Info.maxSpeed == nil then return end - local shipX = gmcp.Ship.Base.posX - local shipY = gmcp.Ship.Base.posY - local shipZ = gmcp.Ship.Base.posZ + local shipX = gmcp.Ship.Info.posX + local shipY = gmcp.Ship.Info.posY + local shipZ = gmcp.Ship.Info.posZ local selfData = {name="You", x=shipX, y=shipY, z=shipZ} local itemsToDraw = {} diff --git a/src/triggers/galaxy-map/planets-line.lua b/src/triggers/galaxy-map/planets-line.lua index 7db4e94..cee6cff 100644 --- a/src/triggers/galaxy-map/planets-line.lua +++ b/src/triggers/galaxy-map/planets-line.lua @@ -13,7 +13,16 @@ end line = line:gsub("%(UFG%)", "") line = line:gsub(" +", ";") -local _, _, planet, system, gov, support = line:find("([^;]+);([^;]+);([^;]+);([^;]+)") +local startIdx, _, planet, system, gov, support = line:find("([^;]+);([^;]+);([^;]+);([^;]+)") +if not startIdx then + gov = "None" + startIdx, _, planet, system, support = line:find("([^;]+);([^;]+);([^;]+)") +end +if not startIdx then + echo("\n") + lotj.galaxyMap.log("Bad planet line: "..matches[2]) + return +end if planet ~= "Planet" then lotj.galaxyMap.recordPlanet({