Подробное описание некоторый триггеров и алиасов для 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....
Вот вам и нате. В самом деле, стоит какой-нибудь редиске узнать твой разделитель и то, что ты используешь эти триггера, как она/он сможет сделать большую каку без особых усилий. Половина триггеров летит к чертям из-за нехитрого трюка... разумеется, это нужно было срочно исправить. То, что предложил вместо этого Канила, для меня спорно: конечно, использовать переменные вместо масок во второй части триггера безопасно, но ведь эти переменные надо где-то брать, верно? Не прописывать же заранее их все, в том же ханте просто невозможно предсказать весь арсенал дверей, с которыми придется столкнуться frown Ну, а вписывая туда маску, мы снова возвращаемся к старой теме: #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 триггера (а я их обязательно помечу далее значком JmcImg01.gif ) запасной плана
#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 обезопасить себя таким образом, к сожалению, нереально frown Но и тут можно выкрутиться -- что ни говори, голь на выдумки хитра ;> А именно:
#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 Если вы имеете контакты с авторами - свяжитесь с нами пожалуйста

 

Русский МАД-коннектор
The Russian MUD Connector
www.mudconnector.su

This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.