Open nerevar opened 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 {}
...
Ну и в простейшем минимальном варианте выглядит типа такого:
По-моему, этот путь приятнее. И больше в духе JMC, как мне кажется.
В принципе, с "нормальными" зонами (с симметричными детерминированными выходами, не очень кривой метрикой и не очень большим (не более 7-10) количеством одинаковых по названию и описанию подряд идущих комнат) без внумов работает без проблем. Указанные сложные случаи, думаю, нет смысла вымучивать, так что остались мелочи типа украшалок-бантиков и генерации спидволков. Вот, например, Эсгарот (без подводного лабиринта). Элендор наполовину не дорисованный (т.к. надоело рестить мувы) (верх-низ диагоналями, это настраивается). Триград тоже норм рисовался, в принципе.
При сохранении с внумами выходит порядка 150 Кб/1000 комнат, думаю это ок. Без внумов сильно зависит от выбора привязки, если брать название комнаты + первая строка описания, то примерно в полтора-два раза больше, тоже, в общем не очень тяжко.
Возможно ли управлять режимом "схлопывания" комнат:
#картограф схлопнул 18 комнат(у/ы) в 9 групп(у/ы)
?
Mudmapper http://jmc.bl.ee/?md=mm