nerevar / jmc

JMC - Jaba Mud Client
25 stars 15 forks source link

Map integration #33

Open nerevar opened 8 years ago

nerevar commented 8 years ago

Mudmapper http://jmc.bl.ee/?md=mm

konelav commented 8 years ago

А надо ли оно? Из описания я так понял, что: 1) для корректной работы нужны танцы с бубном и множество ручных правок; 2) нет поддержки актуального инструментария для мапперов (MSDP, GMCP); 3) нет поддержки даже смешанных направлений (северо-восток и т.п.) и кастомных флагов на комнаты/выходы.

По-моему, надо пилить своё. У меня есть драфтовый вариант, работает ок при наличии VNUM, но чтобы было юзабельно со старыми кодовыми базами (Арда, Аладон и т.п.) надо ещё допиливать. Ну и красотулек-бантиков (цвета, флаги и т.п.) добавить.

Пример простейший (без флагов, расцветки) для Aardwolf с GMCP (файл подгружается при коннекте #read aard.mapper):

#var DrawMap 1

#mapper clear

#mapper add direction {d} 0 0 -1 {u}
#mapper add direction {e} 1 0 0 {w}
#mapper add direction {n} 0 1 0 {s}
#mapper add direction {s} 0 -1 0 {n}
#mapper add direction {u} 0 0 1 {d}
#mapper add direction {w} -1 0 0 {e}

#unalias onRoom
#alias onRoom
    {
        #if {$DrawMap == 1}
            {
                #mapper add room {$GmcpRoomInfoNum} {$GmcpRoomInfoName} {$GmcpRoomInfoArea} {} {$GmcpRoomInfoTerrain};
                #loop {1, $GmcpRoomInfoExitsLength}
                    {
                        #mapper add exit {$GmcpRoomInfoNum} {$GmcpRoomInfoExitsKey%0} {$GmcpRoomInfoExitsValue%0} {}
                    }
            };
        #mapper print normal w0 maxsize {$GmcpRoomInfoNum}
    }

#unaction {/^#oob GMCP room/}
#action TEXT {/^#oob GMCP room/} {onRoom; #drop}

#telnet GMCP on
#oob GMCP add room

Для MSDP/былины будет вообще почти 1-в-1. Или вот для них же без MSDP (только тригги, соот-но автоотлов скрытых выходов и триггерных переходов, чего нет в MSDP):

#var LastVNum 0
#var DrawMap 1

#mapper clear

#mapper add direction {вниз} 0 0 -1 {вверх}
#mapper add direction {восток} 1 0 0 {запад}
#mapper add direction {север} 0 1 0 {юг}
#mapper add direction {юг} 0 -1 0 {север}
#mapper add direction {вверх} 0 0 1 {вниз}
#mapper add direction {запад} -1 0 0 {восток}

#unalias onRoom
#alias onRoom
    {
        #var NextVNum {%%1};
        #if {$DrawMap == 1}
            {
                #mapper add room {%1} {%2} {} {} {};
                #if {$LastVNum != 0}
                    {
                        #mapper add exit {$LastVNum} {$COMMAND} {$NextVNum}
                    }
            };
        #var LastVNum {$NextVNum};
        #mapper print normal w0 maxsize {$LastVNum}
    }

#unaction {/^&C(.*) \[(\d+)\]/}
#action COLOR {/^&C(.*) \[(\d+)\]/} {onRoom {%%1} {%%0}}

Сохраняется просто в аналог set-файла, т.е. текстовый набор скриптовых команд добавления комнат и переходов: #mapper write my.map, #read my.map; в my.map:

#mapper add room 4002 {Хижина охотника} {} {} {} {}
#mapper add exit 4002 {запад} 4020 {}
#mapper add room 4008 {Базарная улица} {} {} {} {}
#mapper add exit 4008 {юг} 4009 {}
#mapper add room 4009 {Базарная улица} {} {} {} {}
#mapper add exit 4009 {юг} 4010 {}
#mapper add exit 4009 {север} 4008 {}
...

Ну и в простейшем минимальном варианте выглядит типа такого: bylins-school-map

По-моему, этот путь приятнее. И больше в духе JMC, как мне кажется.

konelav commented 8 years ago

В принципе, с "нормальными" зонами (с симметричными детерминированными выходами, не очень кривой метрикой и не очень большим (не более 7-10) количеством одинаковых по названию и описанию подряд идущих комнат) без внумов работает без проблем. Указанные сложные случаи, думаю, нет смысла вымучивать, так что остались мелочи типа украшалок-бантиков и генерации спидволков. Вот, например, Эсгарот (без подводного лабиринта). esgaroth map Элендор наполовину не дорисованный (т.к. надоело рестить мувы) (верх-низ диагоналями, это настраивается). elendor map Триград тоже норм рисовался, в принципе.

При сохранении с внумами выходит порядка 150 Кб/1000 комнат, думаю это ок. Без внумов сильно зависит от выбора привязки, если брать название комнаты + первая строка описания, то примерно в полтора-два раза больше, тоже, в общем не очень тяжко.

Jorier commented 3 years ago

Возможно ли управлять режимом "схлопывания" комнат: #картограф схлопнул 18 комнат(у/ы) в 9 групп(у/ы) ?