Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are
spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the
password reset link.
Entire forum
➜ MUSHclient
➜ Plugins
➜ Learning Mapper with MSDP
Learning Mapper with MSDP
|
It is now over 60 days since the last post. This thread is closed.
Refresh page
Pages: 1 2
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Fri 05 Jun 2020 04:44 PM (UTC) Amended on Fri 05 Jun 2020 04:45 PM (UTC) by Xinefus
|
Message
| Good afternoon folks,
I am currently trying to adapt the Learning Mapper (http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=14607) with some of the info that my MUD reports via MSDP. The following is what I can see when using msdpdebug 1 (simple):
msdp[ROOM_NAME]=Central City: Forester Road'
msdp[ROOM_EXITS]=east,south,west
msdp[ROOM_VNUM]=1406
I have added a OnPluginBroadcast to the learning_mapper.lua as seen: https://github.com/DBNU-Braska/DBNU/blob/master/Learning_Mapper.lua#L1248-L1279 .
I am having difficulty in understanding how to push the info from the handler to the mapper. Line 1273 was my attempt at ensuring I get all the right info..
The handler can be found in the same Git: https://github.com/DBNU-Braska/DBNU/blob/master/MSDPHandler.xml
Any nudges in the right direction would be appreciated.
Thank you. | Top |
|
Posted by
| Nick Gammon
Australia (23,120 posts) Bio
Forum Administrator |
Date
| Reply #1 on Sat 06 Jun 2020 06:21 AM (UTC) Amended on Sat 06 Jun 2020 06:29 AM (UTC) by Nick Gammon
|
Message
|
Quote:
mapper.draw(current_room, room_exits, room_name)
You are just inventing the arguments to mapper.draw here.
If you look at http://www.gammon.com.au/forum/?id=12635 you will see that mapper.draw draw takes a single argument, the room number (or room ID) that you want to draw. You can't just pass down exits and the room name, in an undocumented way, and hope for the best.
The mapper needs to know about all rooms (that it finds are linked to this one) and their exits. So what it does is "call back" to find the details about your current room, and then the linked rooms, and the rooms that link to that, and so on.
So, you implement the function get_room along these lines:
-- -----------------------------------------------------------------
-- mapper 'get_room' callback - it wants to know about room uid
-- -----------------------------------------------------------------
function get_room (uid)
local room = { } -- a table of stuff about this room
-- fill out information about room "uid" here
return room
end -- get_room
|
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Nick Gammon
Australia (23,120 posts) Bio
Forum Administrator |
Date
| Reply #2 on Sat 06 Jun 2020 06:28 AM (UTC) |
Message
|
Quote:
I have added a OnPluginBroadcast to the learning_mapper.lua as seen: https://github.com/DBNU-Braska/DBNU/blob/master/Learning_Mapper.lua#L1248-L1279 .
If you want to use the learning mapper then you shouldn't need to play with the Lua code there at all. It is designed to absorb information as you walk around and save it to its internal database.
However the learning mapper is probably not the most appropriate here. You don't need to learn line types, exits and so on if the MUD actually supplies them. So, adapting the mapper in my reply #1 is probably the way you want to go. |
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #3 on Sat 06 Jun 2020 09:58 AM (UTC) |
Message
| Thanks for referencing the link to 'how to use on your own mud'
I will work through this part and it looks like it will help me to learn how all the parts of the mapper work. | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #4 on Sun 07 Jun 2020 11:11 AM (UTC) Amended on Sun 07 Jun 2020 07:09 PM (UTC) by Xinefus
|
Message
| Ref: https://github.com/DBNU-Braska/DBNU/blob/master/Learning_Mapper.xml
So I have followed the mapper up to here. You can find the xml at ref.
I still have the print() on so I can see and this is a few examples of what I get.
>e
>>>msdp[ROOM_EXITS]=north,south,west<<<
Room name: &WCentral City:&Y Gears and Things
the vnum is: 1372
the exits: n,s,w
>>>msdp[ROOM_NAME]=Central City: Broadway<<<
Room name: Central City: Broadway
the vnum is: 1372
the exits: n,s,w
>>>msdp[ROOM_VNUM]=1301<<<
Room name: Central City: Broadway
the vnum is: 1301
the exits: n,s,w
>w
>>>msdp[ROOM_EXITS]=east<<<
Room name: Central City: Broadway
the vnum is: 1301
the exits: e
>>>msdp[ROOM_NAME]=&WCentral City:&Y Gears and Things<<<
Room name: &WCentral City:&Y Gears and Things
the vnum is: 1301
the exits: e
>>>msdp[ROOM_VNUM]=1372<<<
Room name: &WCentral City:&Y Gears and Things
the vnum is: 1372
the exits: e
The first thing that I find interesting is that I do not know how to get the first room name correct. It seems to name/leave it as the vnum.
Second, how do I remove the colour codes from the rooms? Right now, some of the rooms return the colour tags as you can see in the code above.
I was about to add in the area, but I do not want to introduce any more potential errors yet.
Thanks! | Top |
|
Posted by
| Fiendish
USA (2,533 posts) Bio
Global Moderator |
Date
| Reply #5 on Mon 08 Jun 2020 01:06 AM (UTC) Amended on Mon 08 Jun 2020 01:09 AM (UTC) by Fiendish
|
Message
|
Quote:>>>msdp[ROOM_NAME]=Central City: Broadway<<<
Room name: Central City: Broadway
The first thing that I find interesting is that I do not know how to get the first room name correct. It seems to name/leave it as the vnum.
Your shown output disagrees with you.
Quote: how do I remove the colour codes from the rooms?
You look for them and strip them out. That can either be done by the server or by the client. Which are you asking for? |
https://github.com/fiendish/aardwolfclientpackage | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #6 on Mon 08 Jun 2020 09:54 AM (UTC) Amended on Mon 08 Jun 2020 09:55 AM (UTC) by Xinefus
|
Message
|
Fiendish said:
You look for them and strip them out. That can either be done by the server or by the client. Which are you asking for?
I would probably want to do it on the client side. I have yet to get access to the server side to do any changes. I believe there is probably an easier way to do it on the server through the Kavir snippet of MSDP.
Let me explain a little on that output paste as I would like to understand a little of it as well;
Quote:
>e -- I just moved east
>>>msdp[ROOM_EXITS]=north,south,west<<< -- Handler output of new room exits
Room name: &WCentral City:&Y Gears and Things -- mapper output of old room name
the vnum is: 1372 -- mapper output of old room vnum
the exits: n,s,w -- mapper output of new room exits
>>>msdp[ROOM_NAME]=Central City: Broadway<<< -- Handler output of new room name
Room name: Central City: Broadway -- mapper output of new room name
the vnum is: 1372 -- mapper output of old room vnum
the exits: n,s,w -- mapper output of new room exits
>>>msdp[ROOM_VNUM]=1301<<< -- Handler output of new room vnum
Room name: Central City: Broadway -- mapper output of new room name
the vnum is: 1301 -- mapper output of new room vnum
the exits: n,s,w -- mapper output of new room exits
| Top |
|
Posted by
| Fiendish
USA (2,533 posts) Bio
Global Moderator |
Date
| Reply #7 on Mon 08 Jun 2020 04:07 PM (UTC) Amended on Mon 08 Jun 2020 04:09 PM (UTC) by Fiendish
|
Message
|
Quote: I would probably want to do it on the client side.
Assuming that && is how you escape a literal &,
function strip_colors(s)
s = s:gsub("&&", "\0")
s = s:gsub("&.", "")
s = s:gsub("%z", "&")
return s
end
Quote: Let me explain a little on that output paste
Yes. I don't see a problem. |
https://github.com/fiendish/aardwolfclientpackage | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #8 on Thu 11 Jun 2020 01:23 PM (UTC) |
Message
|
Fiendish said:
Assuming that && is how you escape a literal &,
function strip_colors(s)
s = s:gsub("&&", "\0")
s = s:gsub("&.", "")
s = s:gsub("%z", "&")
return s
end
Thank you Fiendish, this is working almost flawlessly. The only issue I have is that room names (and probably descs, later problem) also are not consistent in how they apply colour coding. Many of them are using the method described in strip_colors() however, some are using xterm, or even a mix of both.
msdp[ROOM_NAME]=[38;5;093mMayor's Office[0;00m
That is an example.
Would I be able to add a couple more lines within strip_colors() to remove that as well? After reading https://www.gammon.com.au/forum/?id=7761&reply=6#reply6 I can see what that string is that I would want to remove.
So essentially, I will want to remove everything from [ to m at the start and end of the sequence. I'm having trouble understanding the different pattern matches to make this work correctly.
I'm also wondering about the %z line in your code. What does that do? | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #9 on Thu 11 Jun 2020 02:41 PM (UTC) Amended on Thu 11 Jun 2020 03:19 PM (UTC) by Xinefus
|
Message
| Ok, to show that I'm not a complete incompetent; I have given a good shot at trying to figure this out.
I now have function strip_colors(s)
s = s:gsub("&&", "\0")
s = s:gsub("%p[%d+;]+m", "")
s = s:gsub("&.", "")
s = s:gsub("%z", "&")
return s
end
Now the room shows like this:
Quote: >>>msdp[ROOM_NAME]=[38;5;093mMayor's Office[0;00m<<<
Room name: Mayor's Office
Yet on the mapper, it doesn't quite show up right. It has a white square symbol at the start and end.
I'm not sure how that is getting in there.. | Top |
|
Posted by
| Fiendish
USA (2,533 posts) Bio
Global Moderator |
Date
| Reply #10 on Thu 11 Jun 2020 03:13 PM (UTC) Amended on Thu 11 Jun 2020 03:18 PM (UTC) by Fiendish
|
Message
|
Quote: some are using xterm, or even a mix of both
Lol. Not to worry. We can compensate for that.
Quote: I will want to remove everything from [ to m
It's slightly more complicated, because that [ isn't really where the sequence starts. The sequence actually starts with an invisible ESC (ASCII character 27) right before it. Luckily for you, though, MUSHclient has a built in StripANSI function that you should be able to use. https://www.mushclient.com/scripts/doc.php?function=StripANSI
Quote: I'm also wondering about the %z line in your code. What does that do?
The two lines
and
counterbalance each other. The first one says "If there are any escaped ampersands, meaning that we want a literal ampersand and not a color code, temporarily replace them with a zero byte (\0)." We do that so that removing all other instances of & is easy and safe. Then the latter one says "Now that we've removed all of the & codes, let's undo the temporary zero byte replacement and put the literal ampersands back in." I choose "\0" as the temporary replacement because I know that it won't organically appear anywhere else in the text. It just happens that if you want to match on \0 using gsub in Lua you have to use %z. |
https://github.com/fiendish/aardwolfclientpackage | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #11 on Thu 11 Jun 2020 03:25 PM (UTC) |
Message
| Thank you again!
I have been trying to figure that one out all morning. I kind of figured there must be some other sort of code in there that I wasn't taking into account..
Now onto bigger and better things! I'll be back when I hit another hiccup. | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #12 on Tue 16 Jun 2020 05:00 PM (UTC) |
Message
| Good day folks,
I have been able to find a mapper that someone has already adapted for MSDP and using what my MUD outputs I have been able to make it work. Ref: https://github.com/DBNU-Braska/DBNU/blob/master/DBNU_Mapper.xml
@ #
| |
2 #
| |
#-#-@-@-#-@-A-#-#-@
This room is filled with intricate tools,
In the above clip, it shows the automap (I am 'A'). Is there a way to implement some of these details into the mapper? The ones I am most interested in are "Sector Type" and (probably more difficult) entities in that room. In the above, the '@' and '2' denote there is a mob/pc in that room. I'm not exactly sure how this could be implemented as it also requires the pc to be wearing the proper glasses and they have a certain range on the automap.
However, is there a way that I could implement (I'm guessing through an addition to the msdp code) the sector type and be able to use this to influence the mapper (i.e. background colour, border colour, etc).
Also, I assume that the mapper cannot map more than 1 room at a time? Is it able to do connected rooms? What sort of information does it need to be able to do that? (room exit + exit vnum?) I'm just trying to replicate that automap as much as possible client-side because the server one can get a bit laggy at times. But client-side, once the player has mapped an area, it will be super fast.
Thanks!
Thanks. | Top |
|
Posted by
| Fiendish
USA (2,533 posts) Bio
Global Moderator |
Date
| Reply #13 on Tue 16 Jun 2020 06:15 PM (UTC) |
Message
|
Quote: I have been able to find a mapper that someone has already adapted for MSDP Yikes. Well, they ripped out the ability to set sector type colors, so...
Quote: is there a way that I
Yes
Quote: sector type and be able to use this to influence the mapper (i.e. background colour, border colour, etc).
Send it from the server and use it in the plugin in the right place, of course.
Search for the word "terrain" in Nick's original GMCP mapper. https://github.com/nickgammon/plugins/blob/master/GMCP_Mapper.xml |
https://github.com/fiendish/aardwolfclientpackage | Top |
|
Posted by
| Xinefus
(106 posts) Bio
|
Date
| Reply #14 on Wed 17 Jun 2020 11:52 AM (UTC) Amended on Wed 17 Jun 2020 12:29 PM (UTC) by Xinefus
|
Message
| Ref: a. https://github.com/nickgammon/plugins/blob/master/GMCP_Mapper.xml - GMCP_Mapper
b. https://github.com/DBNU-Braska/DBNU/blob/master/DBNU_Mapper.xml - DBNU_Mapper (MSDP)
Aww, now look what you went and did! I was understanding things relatively well up to now...
And yes, I know can 'x' be done is always possible. Just not possible with my current skill level.
I envision the mapper being able to:
- Automap an area either by walking through it, or maybe it doing some of it by itself dependent on what the pc is able to see (wrt the in-game automap - i.e. radius of 5 rooms).
- Show/hide rooms that are in different areas (usually this is by .are). This will help with a bit of overlapping I currently am getting in some places.
- Auto set the sector (as previously stated) so that a person will know what is coming up.
- Show entities in surrounding rooms (this is enabled by a wearable item in-game).
I know that for a lot of this I am going to need to update some of the code so that I actually can get more info coming from the server. Right now it does not report sectortype or exit vnum. I believe I need this to enable more of what I am asking for here. Can I have a bit of guidance on what I should be doing first?
Right now the mapper works pretty well as per my git. But, because I'm not super great at this, I may have introduced errors without knowing it and am actively looking for someone to help check my progress.
I am up for going back to Nick's GMCP_Mapper and 'porting' it to use MSDP. I would think the most of the changes will need to be done within OnPluginBroadcast to ensure the mapper understands what it is receiving.
Your thoughts and encouragement are very welcomed. Thank you. | Top |
|
The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).
To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.
44,738 views.
This is page 1, subject is 2 pages long: 1 2
It is now over 60 days since the last post. This thread is closed.
Refresh page
top