Страница 1 из 1

HELP Остановка макросов Во время Вылетов

Добавлено: Сб май 30, 2009 10:09 pm
z-0091
Трубуеться сделать автомакрос, преостанавливаюший работу ранее запушеного макроса во время дисконекта, и возобновляюший его. НА форуме нашел какое то подобие. У меня получилось что то типо этого.

Код: Выделить всё

automacro DisconnectedFromMapServerNoob {
	console /Disconnected from Map Server/
	exclusive 1
	call DFMSN
}
macro DFMSN {
	pause 1
	do reload macro
release all
	do reload conf
	#do relog 10#
	pause 20
macro stop
  $ch = @config (macrEro)
call foo$ch
}
automacro TheNpcDidntRespondNoob {
	console /The NPC did not respond/
	exclusive 1
	call TNDR
}
macro TNDR {
	pause 1
	do reload macro
release all
	do reload conf
	do relog 20
	pause 20
  $ch = @config (macrEro)
call foo$ch
}

automacro TheNpcDidntRespondNoo {
	console /Timeout on Account Server/
        console /Timeout on Map Server/
	exclusive 1
	call TNDRN
}
macro TNDRN {
	pause 1
	do reload macro
release all
	do reload conf
	do relog 20
	pause 20
  $ch = @config (macrEro)
call foo$ch
}

automacro TheNpcDidntRespondNo {
	console /Error: The server still recognizes your Last connection/
	exclusive 1
	call TNDR
}
macro TNDR {
	pause 1
	do reload macro
release all
	do reload conf
	do relog 20
	pause 20
  $ch = @config (macrEro)
call foo$ch
}


но работает это криво. Расмотрим ситуацию. Дисконект-> Падает сервер -> не входим в течении 20сек то макрос начинает работу. В итоге лажа. Еше, нужно как то остановить работающий макрос. do macro stop кора не принемает не в какую. Вобшем ХЗ что делать. Какие есть мысли?

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Вс май 31, 2009 12:11 am
EternalHarvest
Может, сделать поддержку этого на уровне макро-плагина? С возможностью задания флага "приостановить выполнение при дисконнекте" для отдельных макросов?

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Вс май 31, 2009 7:26 am
z-0091
EternalHarvest
Я тебя не очень понял, приведи пример

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Пн июн 01, 2009 12:41 pm
EternalHarvest
Предлагаю включить в макро-плагин что-то вроде такого:

Macro::Script::next

Код: Выделить всё

+	if ($self->{pauseOnDc} && $conState != 5) {
+		return ""
+	}
	if (defined $self->{subcall}) {
...
		} elsif ($var eq 'orphan' && $val =~ /^(?:terminate|reregister(?:_safe)?)$/) {
			$self->{orphan} = $val
+		} elsif ($var eq 'pauseOnDc' && $val =~ /^[01]$/) {
+			$self->{pauseOnDc} = $val

Код: Выделить всё

macro test {
	set pauseOnDc 1
	log 1
	log 2
	log 3
	log 4
	log 5
	do relog 10
	log 6
	log 7
	log 8
	log 9
	log 0
}

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Пн июн 01, 2009 5:08 pm
z-0091
обьясни как это работает. и что дает

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Пн июн 01, 2009 5:24 pm
[GM]#05
Он тебе пример привел наглядный, что же может быть непонятного)
Пробуй.

Re: HELP Остановка макросов Во время Вылетов

Добавлено: Пн июн 01, 2009 11:28 pm
EternalHarvest
Добавляем флаг pauseOnDc (пауза при дисконнекте) - для этого редактируем макро-плагин.
Устанавливается командой "set pauseOnDc 1" в (не авто-) макросе.
Если он установлен в 1 - то этот макрос будет исполняться только когда бот в игре, иначе приостанавливаться.