Тема: zmud cmud mapper
Показать сообщение отдельно
Старый 02.03.2011, 15:53   #4
Tony
Новичок
 
Регистрация: 27.12.2005
Сообщений: 48
По умолчанию

Ну и самое главное это поиск клетки. За основу взят скрипт, который мне давно давно переслал Мичура. И доработан.
Минусы. Не всегда находит клетки. Если есть запертые двери или т.п.(это можно тоже поправить, но пока ломает)

1 папки
у нас будет пара папок. основная папка это wherei . в ней папка mapdirection.
если захотите использовать без редактирования, то придется соблюсти названия.
2 тригеры
а) в папке wherei будет 1 тригер
Код:
#trig {^{^Тоненький ледок вот-вот проломится}%e[1;36m([АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщъЫыьЭэЮюЯz",. -])%e[0m$}  {#var nameroom {%1} _nodef wherei}
и должны стоять галки у тригера
-ANSI Trigger
-Trigger on NEWLINE
-Trigger on Trigger
делается это в окне редактирования тригера (нажать кнопку more снизу, если не нажата)

б)папка mapdirecion
Код:
#trig {^Вверх - (*)} {#var udir {%1} _nodef wherei}
#trig {^Вниз  - (*)} {#var ddir {%1} _nodef wherei}
#trig {^Восток - (*)} {#var edir {%1} _nodef wherei}
#trig {^Запад - (*)} {#var wdir {%1} _nodef wherei}
#trig {^Север - (*)} {#var ndir {%1} _nodef wherei}
#trig {^Юг    - (*)} {#var sdir {%1} _nodef wherei}
у всех тригеров галки
-Trigger on NEWLINE
-Trigger on Trigger

3) Алиас по сути где угодно но проще держать в папке wherei
название тоже какое угодно у алиаса - у меня "гдея"
Код:
#alias {гдея} {
#var sdir "" _nodef wherei
#var ndir "" _nodef wherei
#var wdir "" _nodef wherei
#var udir "" _nodef wherei
#var ddir "" _nodef wherei
#var edir "" _nodef wherei
#t+ mapdirection
look
вых
#waitfor {Видимые выходы} 5500 {
   #wait 400   
   #t- mapdirection
   #win Main {@nameroom  ~(@ndir  @sdir @wdir @edir @udir @ddir~)}
   #if (@nameroom =~ ~") {
   #var searchstr {%concat("[Name] LIKE'",@nameroom,"'")} _nodef wherei
   }
   {
   #var searchstr {%concat("Name='",@nameroom,"'")} _nodef wherei
   }
   #var roomsid {%mapquery(@searchstr)} _nodef wherei
   #win main {ищем в @roomsid}
   #forall @roomsid {
   #if (%roomname( %roomlink( %i, s))=@sdir and %roomname( %roomlink( %i, w))=@wdir and %roomname( %roomlink( %i, e))=@edir and %roomname( %roomlink( %i, n))=@ndir and %roomname( %roomlink( %i, up))=@udir and %roomname( %roomlink( %i, down))=@ddir)
   {
   #win main {%ansi(32)---------------------------}
   #win main {%ansi(32)--GOTIT %i = %roomname( %i)}
   #win main {%ansi(32)---------------------------}
   #te %i
   }
   }
}
{
#ECHO  ЛАГ НЕ ЛАГ НАЙТИ НЕ МОГУ
#t- mapdirection
}
#CALL %mapfilter("")
}
вот теперь введя гдея (или повесив алиас на кнопку маппер находит мою клетку за пол секунды-секунду)
маппер считывает клетки по всем сторонам из мада и сверяет их с клетками в карте. если подходящий вариант найден то он телепортирует туда и выводит соответствующее сообщение. правда если таких клеток не 1 а больше, то он телепортируется по всем ним по очереди и останавливается на последней. ну эту беду пожалуй никак не победить(только если включить отображение виртуальных номер комнат в самом маде - как есть на некоторых серварах, но не в былинах). На идеальный триг не претендую, но с задачей справляется в большинстве случаев.

в алиасе идет вывход доп инфы о переменных. это для того чтобы ловить ошибки. кому надо - уберет

Последний раз редактировалось Tony; 02.03.2011 в 16:03.
Tony вне форума   Ответить с цитированием