From 6cae7ef2e4bb6d6c09305738e5aa4b809c59be3e Mon Sep 17 00:00:00 2001 From: Matt Wagner Date: Fri, 4 Jun 2021 20:21:35 -0700 Subject: [PATCH] Some mapper cleanup, including newbie area maps --- mfile | 2 +- src/resources/starter-map.dat | Bin 0 -> 57772 bytes src/scripts/mapper/mapper.lua | 131 +++++++++++++++++++------------- src/triggers/chat/triggers.json | 4 + 4 files changed, 84 insertions(+), 53 deletions(-) create mode 100644 src/resources/starter-map.dat diff --git a/mfile b/mfile index bdc7287..7ca2919 100644 --- a/mfile +++ b/mfile @@ -1,4 +1,4 @@ { "package": "lotj-ui", - "version": "v2.0-beta.1" + "version": "v2.0" } \ No newline at end of file diff --git a/src/resources/starter-map.dat b/src/resources/starter-map.dat new file mode 100644 index 0000000000000000000000000000000000000000..6fd9ee96a127ca3cc3427ea70ca6cf451b5b1a9f GIT binary patch literal 57772 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 literal 0 HcmV?d00001 diff --git a/src/scripts/mapper/mapper.lua b/src/scripts/mapper/mapper.lua index de180b3..aefc1dd 100644 --- a/src/scripts/mapper/mapper.lua +++ b/src/scripts/mapper/mapper.lua @@ -42,14 +42,46 @@ end -- Configuration of an amenity name to the environment code to use on rooms with it local amenityEnvCodes = { - bacta = 269, - bank = 267, - broadcast = 270, - hotel = 265, - library = 261, - locker = 263, - package = 262, - workshop = 266, + bacta = { + envCode = 269, + symbol = "B" + }, + bank = { + envCode = 267, + symbol = "B" + }, + broadcast = { + envCode = 270, + symbol = "B" + }, + hotel = { + envCode = 265, + symbol = "H" + }, + library = { + envCode = 261, + symbol = "L" + }, + locker = { + envCode = 263, + symbol = "L" + }, + package = { + envCode = 262, + symbol = "P" + }, + workshop = { + envCode = 266, + symbol = "W" + }, + ["turbolift landing"] = { + envCode = 259, + symbol = "L" + }, + ["turbolift"] = { + envCode = 263, + symbol = "T" + }, } local function trim(s) @@ -122,15 +154,13 @@ function lotj.mapper.printHelp() lotj.mapper.log("Mapper Command List") cecho([[ -map start +map start [] Begin mapping. Any new rooms you enter while mapping will be added to this area name, so you -should be sure to stop mapping before entering a ship or moving to a different zone. +should be sure to stop mapping before entering a ship or moving to a different planet. No area +name argument is required if you're on a planet, as we'll default to the planet name. Some tips to remember: - - Move slowly, and wait for the map to reflect your movements before going to the next room. - The MUD sends data about your current room after some delay, so moving too fast will make the - mapper skip rooms or draw exits which aren't there. - Use a light while mapping. Entering a dark room where you can't see will not update the map. - Use map shift to adjust room positioning, especially after going through turbolifts or voice-activated doors. It's faster to click-and-drag with the GUI to move large blocks of @@ -161,8 +191,12 @@ end function lotj.mapper.startMapping(areaName) areaName = trim(areaName) if #areaName == 0 then - lotj.mapper.log("Syntax: map start ") - return + if lotj.mapper.current and lotj.mapper.current.planet then + areaName = lotj.mapper.current.planet + else + lotj.mapper.log("Syntax: map start ") + return + end end if lotj.mapper.mappingArea ~= nil then @@ -272,13 +306,7 @@ function lotj.mapper.setup() end end if not hasAnyAreas then - lotj.mapper.mapperInstance:hide() - lotj.mapper.noAreasPrompt = Geyser.Label:new({ - x = 0, y = 0, - width = "100%", - height = "100%" - }, lotj.layout.upperRightTabData.contents["map"]) - lotj.mapper.noAreasPrompt:echo("No map data.

Use map help to get started.", nil, "c14") + loadMap(getMudletHomeDir().."/@PKGNAME@/starter-map.dat") end lotj.setup.registerEventHandler("sysDataSendRequest", lotj.mapper.handleSentCommand) @@ -419,41 +447,31 @@ function lotj.mapper.processCurrentRoom() end -function lotj.mapper.checkAmenityLine(roomName, amenityName, wasPending) +function lotj.mapper.checkAmenityLine(roomName, amenityName) if lotj.mapper.mappingArea == nil then return end - envCode = amenityEnvCodes[string.lower(amenityName)] - if envCode == nil then + amenityData = amenityEnvCodes[string.lower(amenityName)] + if amenityData == nil then return end + -- Sanity check that the current room matches the name we just saw local addAmenityRoom = nil if lotj.mapper.current.name == roomName then addAmenityRoom = lotj.mapper.current - elseif lotj.mapper.last.name == roomName then - addAmenityRoom = lotj.mapper.last + else + return end - -- If this wasn't stored for later use, we need a newline since this is being invoked on - -- seeing a room name and we don't want it mushed into that line. - if not wasPending then - echo("\n") - end + -- This is being invoked on seeing a room name and we don't want it mushed into that line. + echo("\n") - if addAmenityRoom == nil then - -- The room name we're triggering on might be the room we just entered but we haven't - -- received the GMCP event yet, so we'll store this for the next time we do. - lotj.mapper.pendingAmenity = { - roomName = roomName, - amenityName = amenityName, - } - else - lotj.mapper.log("Set amenity "..amenityName.." on room "..addAmenityRoom.name.."") - setRoomEnv(addAmenityRoom.vnum, envCode) - updateMap() - end + lotj.mapper.log("Set amenity "..amenityName.." on room "..addAmenityRoom.name.."") + setRoomEnv(addAmenityRoom.vnum, amenityData.envCode) + setRoomChar(addAmenityRoom.vnum, amenityData.symbol) + updateMap() end @@ -467,19 +485,26 @@ function lotj.mapper.onEnterRoom() vnum = gmcp.Room.Info.vnum, name = gmcp.Room.Info.name:gsub("&.", ""), exits = gmcp.Room.Info.exits or {}, + planet = gmcp.Room.Info.planet, } + + -- If the new room has has a planet different than the last one and we don't have + -- an area for that planet yet, give a prompt about how to start mapping it. + if lotj.mapper.current.planet then + if lotj.mapper.last and lotj.mapper.last.planet ~= lotj.mapper.current.planet then + if getAreaTable()[lotj.mapper.current.planet] == nil then + lotj.mapper.log("Welcome to "..lotj.mapper.current.planet..". ".. + "To begin mapping this area as you explore, type map start.") + echo("\n") + end + end + end lotj.mapper.processCurrentRoom() -- Since we've handled the move, we don't want the last move command to get -- used by anything else. lotj.mapper.lastMoveDir = nil - - local pendingAmenity = lotj.mapper.pendingAmenity - if pendingAmenity ~= nil then - lotj.mapper.checkAmenityLine(pendingAmenity.roomName, pendingAmenity.amenityName, true) - lotj.mapper.pendingAmenity = nil - end end @@ -518,6 +543,8 @@ function lotj.mapper.getRoomByCoords(areaName, x, y, z) end function doSpeedWalk() - echo("Path we need to take: " .. table.concat(speedWalkDir, ", ") .. "\n") - echo("A future version of the mapper script might actually execute these commands.\n") + lotj.mapper.log("Speedwalking using these directions: " .. table.concat(speedWalkDir, ", ") .. "\n") + for _, dir in ipairs(speedWalkDir) do + send(dir, false) + end end diff --git a/src/triggers/chat/triggers.json b/src/triggers/chat/triggers.json index c8a6281..787a63c 100644 --- a/src/triggers/chat/triggers.json +++ b/src/triggers/chat/triggers.json @@ -56,6 +56,10 @@ "pattern": "^\\( IMM \\| CHAT \\)\\[.*\\]: '.*'$", "type": "regex" }, + { + "pattern": "^\\( IMM \\| CHAT \\) You mortchat to .* '.*'$", + "type": "regex" + }, { "pattern": "^ImmNet\\[.*\\]: .*$", "type": "regex"