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

восстановление сп аколита в заданном городе

Добавлено: Вс дек 24, 2006 6:33 am
Zloten
задача вроде простая а у меня не получается, вот:
хочу чтобы ако после того как после боя телепортнулся к кафре проверил у себя кол-во сп и если мало его то присел с афком и отдохнул
automacro SPrec {
location alberta
sp < 80 %
call SPrecovery
}

macro SPrecovery {
if ($.sp >= 340) goto end2
do sit
do chat create "afk"
:begin
if ($.sp >= 340) goto end1
pause 10
goto begin
:end1
do chat leave
do stand
:end2
}

менял оператор location на map и на mapchange - ничего не происходит
может надо юзать операторы run once и release? но где их ставить?

Добавлено: Вс дек 24, 2006 8:03 am
¤Seii¤
можно так

if ($town == "alberta") goto

Добавлено: Вс дек 24, 2006 11:00 am
Sauron
офф-топ.. не совсем понял, к чему все это? пока бот доберется из города до локации у него и так сп будет достаточно.. для меня по крайней мере, это не актуально.. я просто в конфиге заглушил проверку хп..

# sitAuto_hp_lower 50
# sitAuto_hp_upper 80
sitAuto_sp_lower 20
sitAuto_sp_upper 85

и в скилах надо добавить notWhileSitting 1

Добавлено: Вс дек 24, 2006 1:03 pm
Sauron
Так попробуй..

automacro SPrec {
location alberta
sp < 80 %
call SPrecovery
run-once 1
}

macro SPrecovery {

do sit
do chat create "afk"

$sp = @eval($::char->{sp})
$msp = @eval($::char->{sp_max})

while ($sp < $msp) as sploop
pause 5
$sp = @eval($::char->{sp})
end sploop

do chat leave
do stand
release SPrec
}

Добавлено: Вс дек 24, 2006 2:10 pm
Zloten
выше перечисленное не заработало, а заработало вот что-
automacro SPrec {
location pay_fild03
sp < 360
call SPrecovery
timeout 20
run-once 1
}

macro SPrecovery {
if ($.sp >= 360) goto end2
do sit
do chat create "afk"
:begin
if ($.sp >= 360) goto end1
pause 10
goto begin
:end1
do chat leave
do stand
:end2
release SPrec
}

спасибо всем, и заодно не скинете ссылочку где расписана работа команды macro_debug в конфиге, в мануале все слишком кратко

Добавлено: Вс дек 24, 2006 2:36 pm
Sauron
зачем обманываешь и не краснеешь? только что проверил - все работает как часики... может локацию не вписал нужную?

automacro SPrec {
location alberta
sp < 100%
call SPrecovery
run-once 1
}

macro SPrecovery {
do sit
do chat create "afk"

$sp = @eval($::char->{sp})
$msp = @eval($::char->{sp_max})

while ($sp < $msp) as sploop
pause 5
$sp = @eval($::char->{sp})
end sploop

do chat leave
do stand
release SPrec
}

кстати что у тебя такое - 360 ???

Добавлено: Вс дек 24, 2006 9:27 pm
Zloten
360 - это количество сп, почему то у меня не срабатывают проценты в данном автомакро :(
локацию вписал , просто выдало ошибку синтаксиса, я не стал разбираться может сам чтото кудато не правильно скопировал, вобчем содрал у тебя тока расстановку run-once 1 release SPrec и все получилось, да и сложно у тебя все и непонятно для меня- нуба :shock: но спасибо - на будущее пригодиться

Добавлено: Пн дек 25, 2006 9:33 am
Sauron
я могу пояснить...

automacro SPrec { - это начало триггера.. то есть здесь нельзя делать никаких действий, кроме как определить условия, при которых вызывать макрос, который собственно и должен разруливать ситуацию..
location alberta - первое условие: локация
sp < 100% - ещё условие: СП
run-once 1 - блокировка автомакро
call SPrecovery - вызов именованного макроса
}

macro SPrecovery {
do sit - сесть
do chat create "afk" - создать чат

$sp = @eval($::char->{sp}) - получить текущее значение СП ($sp - это просто наша переменная, которой присваиваем значение)
$msp = @eval($::char->{sp_max}) - получить максимально возможное значение СП

while ($sp < $msp) as sploop - организуем цикл по условию, если тек СП меньше макс СП продолжаем выполнение цикла
pause 5 - небольшая задержка исполнения макроса
$sp = @eval($::char->{sp}) - обновим значение переменной
end sploop - прекратить если условие "ложь"или вернуться к метке sploop

do chat leave - закрыть чат
do stand - встать
release SPrec - разблокировать
}

Добавлено: Вт дек 26, 2006 1:42 am
Zloten
большое спасибо, как раз кстати, а то с опреторами я тока начал разбираться, тему мона закрыть