Подробное описание некоторый триггеров и алиасов для JMC
[NEW] - Triggers Security =-
Тут действительно начинались сами триггера, пока не произошла одна интересная вещь. Впрочем, если вы впервые знакомитесь с документом, это место лучше проскипать и вернуться к нему, немножко въехав в триггера. Так вот, не все на самом деле так просто, как казалось вначале. На днях получаю от Канилы мессагу следующего содержания:
primer:
eto u tebya v triggerah napisano:
#action {The %1 seems to be closed.} {open %1; #if {$hunting=1} ht}
teper' ya govoryu:
Kanila says ' The door;rem gimlet;give gimlet kanila; seems to be closed.'
i tot kto ispol'zuet eti triggeri sam otdaet mne gimlet....
i takih mest ochen' mnogo....
Вот вам и нате. В самом деле, стоит какой-нибудь редиске узнать твой разделитель и то, что ты используешь эти триггера, как она/он сможет сделать большую каку без особых усилий. Половина триггеров летит к чертям из-за нехитрого трюка... разумеется, это нужно было срочно исправить. То, что предложил вместо этого Канила, для меня спорно: конечно, использовать переменные вместо масок во второй части триггера безопасно, но ведь эти переменные надо где-то брать, верно? Не прописывать же заранее их все, в том же ханте просто невозможно предсказать весь арсенал дверей, с которыми придется столкнуться
Ну, а вписывая туда маску, мы снова возвращаемся к старой теме: #var {door} {door;rem gimlet;give gimlet kanila} Разве не то же самое? Используем переменную $door, и отдаем гимлет. Может, я чего-то не догоняю, и Канилина технология работает по-другому, но для того, чтобы въехать, мне нужно увидеть рабочий триггер.
Покамест предложу несколько собственных выходов из создавшейся ситуации.
1) Многие триггера можно исправить, добавив одну незначительную деталь - знак начала новой строки.
Например, переделав
#act {The %1 seems to be closed.} {....} на
#act {^The %1 seems to be closed.} {....}
Однако, это возможно в единичных случаях, где у нас почти не встречается вариант
<342hp 290ma 85mv>The door seems to be closed,
а если и встречается, то от него зависит не очень много.
2) Писать для каждого insecure триггера (а я их обязательно помечу далее значком
) запасной плана
#act {The %1;%2 seems to be closed.} {#nop} {0}
Тут недостаток заключается в непомерно раздувающемся в итоге профайле. P.S. Замечу, что в таком случае в процессе игры #multiactions должны быть обязательно отключены.
3) Пойти в лоб и полностью обезопасить свой разделитель следующим триггером:
#act {;} {#nop} {0} //#multiactions OFF
Однако, тут тоже есть свои проблемы. Если, например, у лидера в префиксе окажется ваш
разделитель, то реагировать на команды лидера вы не будете (см.
Хождение в группе).
Начало строки в таких триггерах использовать нельзя. Да и не только такой вариант
возможен. Конечно, можно поступить следующим образом:
#act {;} {#nop} {1}
#act {$leader -- ' $leadpref all up'} {ws} {0} // См.
Regen
#act {$leader -- ' $leadpref target %1'} {target %1} {0} // См.
Targetting
#act {$leader ......
но тогда какой-нибудь редиске ничего не стоит посмотреть gwho, и если она/он в курсе,
какой у лидера префикс, и знает, что мы используем такой триггер, то вполне может улучить
момент и сказать нам:
Rediska tells you: 'Sarge -- ' target smth;reci recall;st;e3n4en;#999 send 100000 rediska' '
^^^^^^ Path to the bank in BH :>
И если можно написать триггера вида
#act {tells you: %1;} {#nop} {0}
#act {says: %1;} {#nop} {0}
и так далее, то от emote обезопасить себя таким образом, к сожалению, нереально
Но и тут можно выкрутиться -- что ни говори, голь на выдумки хитра ;> А именно:
#act {$leader -- '$leadpref target %1 %2} {target %1} {4} //Приоритет выше стандартного
#act {$leader -- '$leadpref target %1'} {target %1} //Стандартный приоритет (5)
Таким образом, если после слова target лидер дает в группу несколько слов, использоваться
будет только первое из них, ну а если одно, то использоваться будет именно оно, без апострофа.
Например, на указанный выше пример с переводом денег мы отреагируем командой
target smth;reci,
которая сама по себе никакой неприятной нагрузки уже не несет за исключением сбитого таргета.
Единственная гадость, которую теперь можно устроить - уложить вас спать во время runa.
Этот же метод можно перенести на все остальные триггера. Напишем
#act {The %1 %2 to be closed.}
вместо
#act {The %1 seems to be closed}, и в итоге вмeсто того, чтоб отдать Каниле гимлет, мы
будем лицезреть фразу
Remove what? (или что-то в этом духе)
Словом, так я их и переделаю, ну а значки будут предупреждать вас о возможности заставить
вас выполнить односложную команду в результате чьих-то происков.
Информация взята из connect.mud.ru Если вы имеете контакты с авторами - свяжитесь с нами пожалуйста