| 
	|||||||
| Клиенты для игры Все что связано с клиентами для игры. Jmc, MMC, ZMud etc... | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Опции просмотра | 
| 
			
			 | 
		#1 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			Срабатывает триггерт на строку, и печатает сообщение через echo(). Так вот сообщения всегда выводятся ДО строки, на которую сработал триггер. А можно ли как-то умудриться напечатать их после?
		 
		
		
		
		
		
		
		
	 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#2 | 
| 
			
			 Старший Мадер 
			![]() Регистрация: 06.03.2004 
				Адрес: Москва 
				
				
					Сообщений: 239
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			Насколько мне известно, есть два способа: 
		
		
		
		
		
		
		
	1) Обрабатывать в триггере raw-текст строки, вызвавшей срабатывание триггера и находящийся в переменных $_ и $; и менять этот текст, добавляя после свой. Документация http://mmc.mud.ru/mmc.txt, описание MMC API, функция trig. 2) Возможно более простой - при срабатывании триггера создавать ещё один триггер на любую строку (^.*$), который выведет необходимый текст а затем удалится. Возможная проблема - задержка вывода текста до получения следующей строки (без "реж сж" почти невозможно, в "реж сж" вполне возможно). Также вопрос производительности, если таких систем будет довольно много - может начать тормозить. От вопросов производительности, кстати, не надо отмахиваться - я видел конфиг, который начинал тормозить на спаме из принца (какой там спам - фигня одна), не говоря уже о каких-нибудь рипеях (1,2,3).  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#3 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			не выходит. не дает писать на другой строке. =( 
		
		
		
		
		
		
		
	рисует квадратики вместо каретки и все.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#4 | 
| 
			
			 Отличник форума 
			![]() Регистрация: 24.08.2004 
				
				
				
					Сообщений: 1,026
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			почему у меня такое чувство что глубоко законспирированный раххаль все таки поигрывает в мад))
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	а тоже точно зарегился))  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#5 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			не. я не он.
		 
		
		
		
		
		
		
		
	 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#6 | |
| 
			
			 Знакомый Мадера 
			![]() Регистрация: 03.12.2004 
				
				
				
					Сообщений: 82
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			Развивая тему $_ 
		
		
		
		
		
		
		
	Код: 
	P::trig
{
	$buf = $_;
	$: = '';
	P::echo "\003I".$buf;
	P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись.$';
Код: 
	P::trig
{
	P::timeout
	{
		P::echo("тыщ-пыщ");
	} 1, 1;
} '^Вы улыбнулись.$';
Цитата: 
	
  | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#7 | |
| 
			
			 Знакомый Мадера 
			![]() Регистрация: 09.11.2006 
				
				
				
					Сообщений: 54
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 Цитата: 
	
 Код: 
	P::trig {
	$: = '';
	P::echo CL::unparse_colors($;);
	P::echo "Итить колотить твоя строка!";
} '^Вы улыбнулись\.$';
 | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#8 | 
| 
			
			 Знакомый Мадера 
			![]() Регистрация: 03.12.2004 
				
				
				
					Сообщений: 82
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			ну, во-первых, после $: = '' будет '' и в $; и в $_, но это не суть) 
		
		
		
		
		
		
		
		
			по сути - спасибо) ништяк) Последний раз редактировалось zallexx; 23.05.2008 в 17:45.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#9 | 
| 
			
			 Знакомый Мадера 
			![]() Регистрация: 03.12.2004 
				
				
				
					Сообщений: 82
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			2 diver: 
		
		
		
		
		
		
		
	Самый имхо нормальный вариант в итоге: Код: 
	P::trig
{
	P::echo CL::unparse_colors($;);
	P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись\.$', 'g';
 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#10 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#11 | |
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 Цитата: 
	
 '-' - disable - запретить применение этого триггера (по умолчанию все триггеры создаются активными) 'g' - gag - клиент не должен печатать совпавшую строку 'm' - multiple - ищутся все вхождения <regexp> в строке, а не только первое <число> - priority - приоритет, определяющий порядок применения триггеров. Триггеры применяются в порядке уменьшения приоритетов. По умолчанию у всех триггеров приоритет равен 1000. 's'|'n' - save|nosave - сохранять ли триггер в файл конфигурации при выходе 'f' - fall-through - обычно клиент прекращает поиск триггеров, после первого совпадения. Если необходимо применять другие триггеры после этого, при его определении необходимо указать флаг 'f'. 'x<число>' - максимальное число срабатываний, после которого триггер автоматически отключатся, по умолчанию не ограничено, счетчик сбрасывается по команде /enable Пример простого триггера: action {^You are hungry\.$} {get bread $container;eat bread} 1000gs:CORE пользуюсь я этим так: Код: 
	
P::trig {
  if (CheckLore ("$1") > 0) {
    Lenor::debug ("Предмет -$1- уже известен.");
  } else {
    Lenor::debug ("Новый предмет -$1-.");
    $strItemName = "$1";
    P::enable ("ITEMDESCRIPTION");
  };
} '^Предмет "(.+)", тип : (\S+)', f1;
P::trig {
  P::disable ("ITEMDESCRIPTION");
  Lenor::debug ("Добавляем новый предмет -$strItemName-.");
  AddToShortLore ($strItemName . "," . $AC . $strItemDesc . $Mat);
} '^$', 'f1:ITEMDESCRIPTION';
P::trig {$AC .= "$1/";} '^защита \\(AC\\) : (\d+)', 'f1:ITEMDESCRIPTION';
и так далее
доку к ммц от автора можно взять тут: http://mmc.mud.ru/mmc.txt и тут: Последний раз редактировалось diver; 24.05.2008 в 20:08.  | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#12 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#13 | 
| 
			
			 Знакомый Мадера 
			![]() Регистрация: 09.11.2006 
				
				
				
					Сообщений: 54
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			Я тут подумал - $:=''; убивает дальнейшие триги, которые могут хотеть сработать на эту строчку. 
		
		
		
		
		
		
		
	Короче, вот что работает (проверил) : Код: 
	my $str="";
P::trig {
	return if not $str;
	P::echo $str;
	$str = '';
} '^.*$', 'f1000';
P::trig {
	$str = "YO! Работает!!!";
} '^Вы улыбнулись\.', 'f1000';
 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#14 | 
| 
			
			 Новичок 
			
			
			
			Регистрация: 10.07.2004 
				
				
				
					Сообщений: 40
				 
				
				
				
				
				 | 
	
	
	
		
		
			
			 
			
			Тролль 
		
		
		
		
		
		
		
		
			опробовал. круто. хотят тут есть один косячек на мой взгляд, тем не менее в маде работает великолепно. перешел на эту систему =) только изменил под свои нужды. Код: 
	our $strAfterTrig="";
P::trig {
	return if not $strAfterTrig;
	P::echo $strAfterTrig;
        P::disable ("PRINTAFTERTRIG");
	$strAfterTrig = '';
} '^.*$', 'f10100:PRINTAFTERTRIG';
sub PrintAfter($) {
  $strAfterTrig = $strAfterTrig . shift;
  P::enable ("PRINTAFTERTRIG");
};
Последний раз редактировалось diver; 25.05.2008 в 19:33.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 |