PDA

Просмотр полной версии : Vigor Absorption (обсорб, абсорб)


Marker
22.12.2006, 21:19
как сделать чтоб когда сп <=20% бот спамил абсорб на нужного моба пока сп не будет >=90% ?

4epT
23.12.2006, 16:43
как сделать чтоб когда сп <=20% бот спамил абсорб на нужного моба пока сп не будет >=90% ?

attackSkillSlot Vigor Absorption{
lvl 5
dist 6
sp < 20
maxUses <число> сколько раз использовать
maxAttempts <число> вроде как число неудачных попыток
monsters <имя> указать
}

подсчитай сколько тебе нада раз использовать это скил чтобы восстановить нужное колическво СП и пропиши в maxUses
maxAttempts можно не прописывать
ЗЫ: не проверял, но работать должно..по идее

Marker
23.12.2006, 17:53
не проверял

Раз не проверят, то и ненадо писать... Тут без макроса некак! Вот пока что всё сто смогли придумать, но это не работает, выдаёт :

[macro] automacro refillsp triggered.
[macro] refilluseskill error: error in 3: syntax error in while statement

Сам макрос:

automacro refillsp {
sp < 30%
agressives < 2
monster - укажи монстров..
run-once 1
call refilluseskill
}


macro refilluseskill {
$sp = @eval($::char->{sp})
$msp = @eval($::char->{sp_max})
$perc = @eval(@eval ($msp / 100) * 85)
while ($sp < $perc) 'as sploop
do sm 262 1
$sp = @eval($::char->{sp})
end sploop
release refillsp
}

AmsTaFF
23.12.2006, 18:12
эм.. круто намутил и смысл•••••• когда исправишь покажешь мне... =)

4epT
23.12.2006, 18:17
тут без макроса некак
в падлу заводить монка, но думаю мой вариант тоже можно настроить;)

Marker
23.12.2006, 18:21
смысл вот, что не факт что у монка при 60 инты и сохи в шузах упадёт сп до 30%, помоему лучше один раз обсорб поспамить, чем пытаться обсорбить после каждого монста...

Marker
23.12.2006, 18:23
@ 4epT :
Я пробовал этот вариант, ставил максюзес 5, бот спамил 5 раз обсорб в независимости от результата =\

4epT
23.12.2006, 18:30
ну дак 5 раз юзанул а дальше что?
по идее должен мочить моба дальше

Marker
23.12.2006, 21:30
он использова 5 раз в независимости от результата!!! мне надо чтоб бот 5 раз удачно(!) использовал скилл, а скока на это уйдёт попыток пофигу... максюзез и макс атемпс в данном случае неподходят..

Marker
24.12.2006, 17:48
http://forums.openkore.com/viewtopic.php?t=26403&highlight=monid

Там есть нужный мне вариант :

automacro refillsp {
sp < 85%
agressives < 2
monster - укажи монстров..
run-once 1
call refilluseskill
}


macro refilluseskill {
$sp = @eval($::char->{sp})
$msp = @eval($::char->{sp_max})
$perc = @eval(@eval ($msp / 100) * 85)
while ($sp < $perc) as sploop
do sm 262 1
$sp = @eval($::char->{sp})
end sploop
release refillsp
}

После всего проделанного пишет @monster in not a number =| Может кто-нить помочь?

4epT
22.01.2007, 23:05
Вот чё получилось (подправил):[/COLOR][/SIZE][/FONT]
automacro refillsp {
sp < 85%
aggressives < 2
monster Sleeper# << к примеру
run-once 1
call refilluseskill
}
macro refilluseskill {
$sp = @eval($::char->{sp})
log sp = $sp
$perc = @eval(@eval($::char->{sp_max}) * 0.85)
log 85% ot polnogo SP sostavlaet $perc SP
while ($sp < $perc) as sploop
log SP < 85%
do sm 262 0
$sp = @eval($::char->{sp})
log SP = $sp
pause 5
end sploop
release refillsp
log SP > 85%
}
#©4epT
Этот макрос будет работать, только при соблюдении 3-х условий:
1. у вас меньше 85% СП
2. агрессивных мобов вокруг(скорее всего нападающих) меньше 2-х (т.е либо 1, либо вообще нету)
3. когда в приделах видимости находится моб Sleeper (в данном примере)
Нюансы:
"Нумерация" мобов начинается как только моб попадает в поле зрения бота (начиная с 0), т.е меньшему номеру соответствует моб которого бот увидел раньше. (нумерацию можно посмотреть командой "ml" - Monster List). В макросе прописано, чтобы бот юзал скил на моба под номером 0 (do sm 262 0). Может так получиться, что монк убьёт моба под номером 1, и у него совпадут 3 условия, тогда он будет пытаться "Украсть СП" у несуществующего моба.. Бот будет выдавать ошибку: "Monster %d does not exist." Можно прописать несколько строк:
do sm 262 0
do sm 262 1
или
do sm 262 0
do sm 262 1
do sm 262 2
тогда бот будет "Красть СП" сначала у 0-го моба, потом у 1-го, и т.д.. потом проверять условие (сп < 85%) и либо красть заново (у 0-го, у 1-го, ...), либо закончит. Т.е нет однозначной привязки между "monster Sleeper" и "do sm 262 0"

Marker, правильно писать не agressives, а aggressives!

Добавил, поднабравшись опыта..
Чёт мне не нравитс этот макрос совсем, ибо как только у вас будет флудить в консоль

SpLaTt
19.01.2008, 22:26
долго он это делает помоему сидеть ито быстрее ))))) но сёравно пасипки

4epT
19.01.2008, 22:57
да уж.. какоу-то ацтойный макрос :)

SpLaTt
20.01.2008, 13:07
этот макрос нужен чампу с 120 декса(который обычно в лабе бегает)
а так лучше посидеть)))

4epT
26.01.2008, 03:05
Учим макрос понимать "спецальное ключевое слово" @monster:

файл plugins\Macro\Automacro.pm
незнаю зачем, но тут (20 строчка) добавляем getMonsterID, я добавлял по аналогии с "getPlayerID":
use Macro::Utilities qw(between cmpr match getArgs refreshGlobal
getPlayerID getMonsterID getSoldOut getInventoryAmount getCartAmount
getShopAmount getStorageAmount callMacro);


файл plugins\Macro\Data.pm:
"player" . "|" .
+ "monster" . "|" .
"vender" . "|" .


файл plugins\Macro\Parser.pm:
use Macro::Utilities qw(refreshGlobal getnpcID getItemIDs getStorageIDs getInventoryIDs
+ getPlayerID getMonsterID getVenderID getRandom getRandomRange getInventoryAmount
getCartAmount getShopAmount getStorageAmount getConfig getWord q4rx);


elsif ($kw eq 'player') {$ret = getPlayerID($arg)}
+ elsif ($kw eq 'monster') {$ret = getMonsterID($arg)}
elsif ($kw eq 'vender') {$ret = getVenderID($arg)}



файл plugins\Macro\Utilities.pm:
our @EXPORT_OK = qw(ai_isIdle q4rx between cmpr match getArgs refreshGlobal getnpcID getPlayerID
+ getMonsterID getVenderID getItemIDs getInventoryIDs getStorageIDs getSoldOut getInventoryAmount
getCartAmount getShopAmount getStorageAmount getRandom getRandomRange getConfig getWord callMacro);


# get player array index
sub getPlayerID {
foreach my $pl (@{$playersList->getItems()}) {
return $pl->{binID} if $pl->name eq $_[0]
}
return -1
}

+# get monster array index
+sub getMonsterID {
+ foreach my $ml (@{$monstersList->getItems()}) {
+ return $ml->{binID} if $ml->name eq $_[0]
+ }
+ return -1
+}

# get vender array index


я считаю, что это "спец. ключевое слово" должно было существовать с самого начало создания макро-плагина. И посему нада бы за СВНить :twisted: А то получается мы можем АМ реагировать на моба, получаем его имя и координаты а дальше ничего с ним сделать не можем (ну если только eval'ом)

далее в файле mon_control.txt пишем: "Geographer -1"

в макросах пишем:
automacro absorption {
notMonster Sleeper
monster Geographer
sp < 80%
run-once 1
call {
do a @monster ($.lastMonster)
release absorption

}
}

automacro absorpstop {
monster Geographer
sp > 79%
timeout 5
call {
do as
release absorption
}
}

в конфиге пишем:
attackSkillSlot Vigor Absorption {
lvl 1
dist 10
sp < 80%
# aggressives < 2
inLockOnly 0
notWhileSitting 1
notInTown 1
monsters Geographer
}

вроде всё.. теперь мы с гео сосём только СП и ничего более.

-думаю нада как-то ещё учесть агресоров
-пробовал вместо АМ записать докоммандером, нефига не вышло. Тут достоинство АМ в том, что он активируется когда в поле видимости попадает нужный нам моб.

hahatoon
27.01.2008, 14:47
спасибо)