mapping problems - german mud & GMCP

Post Reply
Entchen
Posts: 5
Joined: Fri Oct 16, 2015 9:43 am

mapping problems - german mud & GMCP

Post by Entchen »

Hello :slight_smile: i am playing a german mud with Mudlet. I was happy to find a client with auto-mapping function but i am unable to adjust the generic mapper to my mud. (Morgengrauen) My Game supports GMCP and room exits and room name are in "gmcp.MG.room.info.exits" / "gmcp.MG.room.info.short"
The area i am into the game is here: gmcp.MG.room.info.domain
How can i make the mapper working with it?

User avatar
Zaphob
Posts: 142
Joined: Wed May 09, 2012 8:07 am
Location: mg.mud.de

Re: mapping problems - german mud & GMCP

Post by Zaphob »

Hello Entchen!
I tried mapping this game as well, but did not succeed yet with the generic mapper. I didn't try very much. Maybe we can gather some help here.
Here is a room description:
Die Kuehle hier im Herrenhaus ist nach der sengenden Hitze draussen gleich
doppelt angenehm. Alles ist pieksauber, und der marmorne Boden spiegelt nur so
unter Deinen dreckigen Fuessen.
Es gibt zwei sichtbare Ausgaenge: osten und norden.
Mwombe.
The second to last line shows the exits. Now earlier, I would have parsed this, but we got gmcp now:

Code: Select all

> lua gmcp.MG.room.info
{
  short = "In einem Herrenhaus.",
  id = "2f58c1bdff36dbf9c120e6703697256a",
  domain = "Dschungel",
  exits = {
    "osten",
    "norden"
  }
}
The short description is not visible when I move around in "long description" mode, but I can switch to "short description" mode. Then the same room is shown like this instead:
In einem Herrenhaus.
Es gibt zwei sichtbare Ausgaenge: osten und norden.
Mwombe.
Now part of getting the generic mapper to work will include understanding the exits shown in gmcp. Unfortunately, they only list the possible directions, and not the id of the adjacent rooms. Not sure how much of a problem this is, but I know some other games do send this info as well.

Also we would need to translate some of the triggers and aliases of the generic mapper from English to German, as movement is done like "o" or "osten" and not "e" or "east" in this game. The same is true for the responses from the game like "Wie bitte?" if you try a direction that isn't possible.

That is about as far as I got when I last looked at this. Granted, this was a few months ago and things may have been improved further since.

Please let me know how it works for you. Looking for more help to make the mapper work for this game as well. Thanks in advance! :)

Entchen
Posts: 5
Joined: Fri Oct 16, 2015 9:43 am

Re: mapping problems - german mud & GMCP

Post by Entchen »

Für mich war ganz klar das ich eine Lösung möchte bei der ich NICHT zwischen Langbeschreibung und Kurzbeschreibung hin und herswitche. Ich möchte nämlich meine Umgebung "sehen" und standardmässig bin ich daher im Langmodus unterwegs.
*gruebel gruebel gruebel*

Nun gibt mir ja GMCP eh alle Infos die ich brauche und es muss ja auch möglich sein dem Client zu sagen was er damit anfangen soll.

(Davon abgesehen: ich lasse mir nun selbst mit:
Code: [show] | [select all] lua
cecho("<royal_blue>"..gmcp.MG.room.info.short..""..string.sub(gmcp.MG.room.info.id, 1, 1))
auch im Langmodus anzeigen wie ein Raum heisst. Nun könntest du dich über die Zahl am Ende wundern...dazu komme ich später :) )


Zum Mapper:

Irgendwie muss ich die GMCP Daten verfügbar machen habe ich leider festgestellt weil automatisch liest Mudlet das nicht raus. Es erhält automatisch nur die GMCP Daten "gmcp.Char" und muss dann quasi die MG Daten verfügbar machen... bei den Skripten habe ich drauf geachtet das Skriptname gleich der entsprechenden Skriptfuntion ist...
Dazu also per Skript:
Skriptname: initGMCP_Anne
Ereignisbehandler: gmcp.Char
Code: [show] | [select all] lua
function initGMCP_Anne() 
    sendGMCP( [[Core.Hello { "client": "Mudlet", "version": "4.6.2." }]])
    sendGMCP( [[Core.Supports.Debug 20 ]])
    sendGMCP( [[Core.Supports.Set [ "MG.char 1", "MG.room 1", "MG.team 1", "comm.channel 1",  ] ]])
    sendGMCP( [[Core.Debug 1 ]])
end
Dein Beispiel als Veranschaulichung:

> lua gmcp.MG.room.info
{
short = "In einem Herrenhaus.",
id = "2f58c1bdff36dbf9c120e6703697256a",
domain = "Dschungel",
exits = {
"osten",
"norden"
}
}

Ich habe mir nun einen Trigger und ein Skript gebastelt welche die Ausgaenge der GMCP Daten in den Generic Mapper (GM) schicken.
Dann habe ich mir die Trigger des GM angeschaut für die englische/ chinesische Sprache und eine dazu passende Triggergruppe für das Deutsche erstellt.
also:
Deutsch triggergroup
Deutsch exits -> triggert Ausgangszeilen (muss wahrscheinlich noch vervollstaendigt werden)
Code: [show] | [select all] lua
(Es gibt .+ sichtbare Ausgaenge:) .+
(Es gibt keinen sichtbaren Ausgang.)
(Es gibt einen sichtbaren Ausgang:) .+
Es gibt zwei sichtbare Ausgaenge:  .+ (und) .+
macht folgendes:
Code: [show] | [select all] lua
raiseEvent("onNewRoom", table.concat(gmcp.MG.room.info.exits, ", "))
map.prompt.exits = ""..gmcp.MG.room.info.exits
map.prompt.room = ""..gmcp.MG.room.info.short..""..string.sub(gmcp.MG.room.info.id, 1, 1)
Da ich mir nicht sicher bin ob das reicht / "schön" ist habe ich ausserdem ein Skriptevent erstellt bzw. damit rumgespielt.

Skriptname: Raumerkennung
Ereignisbehandler: gmcp.MG.room
Code: [show] | [select all] lua
function Raumerkennung()
raiseEvent("onNewRoom", table.concat(gmcp.MG.room.info.exits, ", "))
map.prompt.exits = ""..gmcp.MG.room.info.exits
end
Nun braucht der Mapper noch einen Raumnamen:
Dazu
Skriptname: A_Raumname
Ereignisbehandler: gmcp.MG.room
Code: [show] | [select all] lua
function A_Raumname()
cecho("<royal_blue>"..gmcp.MG.room.info.short..""..string.sub(gmcp.MG.room.info.id, 1, 1))
map.prompt.room = ""..gmcp.MG.room.info.short..""..string.sub(gmcp.MG.room.info.id, 1, 1)

end
Nun muss man dem Mapper laut der englischen Triggergroup ja noch sagen wann eine Bewegung gescheitert ist, es dunkel ist etc. Dazu die vorhandenen englischen trigger einfach anpassen-->
Beispiel falsche Richtung: Wie bitte? --> raiseEvent("onMoveFail")
Beispiel Vision fail: Finsternis. --> raiseEvent("onVisionFail")
Da es hier im Mud je nach Region unterschiedliche Meldungen kann ist hier staendig nachzubessern. Für das Event raiseEvent("onForcedMove") habe ich noch nix gemacht...

Da manche der Raumnamen gleich lauten und für den mapper damit auch gleich sind wollte ich einen möglichst einzigartigen Namen haben der aber trotzdem gut zu merken ist. Daher habe ich den Anfang der Raum-ID drangehängt. Habe festgestellt das hier noch mehr Nummern/Zahlen dranzuhaengen eindeutiger wäre dann wird es aber irgendwie unschön. Einen Weg dem Mapper die Raum-ID einzufloessen habe ich leider noch nicht gefunden :/

Da der Mapper die Funktion hat einem den Weg zu einem Bekannten Ort zu "sagen" sollte der name so einfach wie möglich für mich sein.

map path Auf einer Wiese.3
--> (mapper): Path to Auf einer Wiese.3: nw;w;w;

Hier siehst du mein Problem - um einen Weg angezeigt zu bekommen muss man nicht nur den Namen exakt wissen sondern dann auch die Nummer dazu. Etwas besseres ist mir aber bisher nicht eingefallen.

Damit bei der Ausgabe ; statt , steht habe ich im Originalskript den entsprechenden Eintrag verändert. Sowieso habe ich da einiges verändert, was ich grade nicht so ganz replizieren kann, unter anderem habe ich die Stelle wie der Mapper normalerweise den Raumnamen bildet erstmal mit -- als Text gesetzt und damit deaktiviert ....

Wichtig ist natuerlich das man die Richtungen für den Mapper per map translate uebersetzt hat, dürfte aber klar sein.

Post Reply