Page 1 of 1
проблемка с резкой\лутом трупов
Posted: 2006-10-13 23:44:38
by comatoza
проблемка такого рода - для резки трупов мобов пишет - too far away
причём переберал разные варианты:
1. такой
Code: Select all
uo.findtype('0x2006',-1,'ground')
uo.waittargetobject('finditem')
uo.usetype('dagger')
2.такой
Code: Select all
uo.waittargetground('0x02006')
uo.usetype('dagger')
да, забыл добавить - стою точно над трупом, да и с +-1 тайла тоже
ручками режет нормально...
какие могут быть ещё варианты?
Posted: 2006-10-14 08:34:11
by Edred
Наверняка ,set finddistance стоит клеток на 14, вот поиск и находит не труп под ногами, а труп на другом конце экрана. Потому и говорит, что далеко.
1. Добавь UO.Set( 'finddistance', '2' ) в начало
либо
1. Убери поиск
2. Вместо 'finditem' поставь 'lastcorpse'
Posted: 2006-10-14 10:32:58
by comatoza
Edred wrote:Наверняка ,set finddistance стоит клеток на 14, вот поиск и находит не труп под ногами, а труп на другом конце экрана. Потому и говорит, что далеко.
1. Добавь UO.Set( 'finddistance', '2' ) в начало
либо
1. Убери поиск
2. Вместо 'finditem' поставь 'lastcorpse'
дело в том что я нахожу труп, подхожу к нему ходилкой.... в клетку входящую в радиус 1 тайл и пытаюсь резать... т.е. finddistance тут непричём....
lastcorpse тоже пробовал - не помогает...
Posted: 2006-10-14 13:01:09
by Edred
TWI включи.
А финдидстанс в первом скрипте очень даже причем, ты же используешь:
uo.findtype('0x2006',-1,'ground')
Posted: 2006-10-14 14:02:29
by comatoza
Edred wrote:TWI включи.
А финдидстанс в первом скрипте очень даже причем, ты же используешь:
uo.findtype('0x2006',-1,'ground')
у меня просто такая фишка сделана...
Code: Select all
sub loot_harpy()
var x, y
uo.findtype('0x2006', -1, 'ground')
if uo.getname('finditem') == 'A corpse of a harpy' then
uo.addobject('harpy_corpse', 'finditem')
uo.info('harpy_corpse')
uo.infotile('lasttile')
x=uo.lasttile(1)
y=uo.lasttile(2)
while gotoXY(x,y)<>1
wait(100)
wend
uo.waittargetobject('harpy_corpse')
uo.usetype('0x0f51')
uo.findtype('0x1bd1', -1, 'harpy_corpse')
uo.grab('finditem')
wait(100)
else
uo.ignore('finditem')
endif
end sub
т.е. тут то финддистанце роли не играет он режет именно тот труп к которому подошёл...
а насчёт ТВИ счас проверю, спасиба...
Posted: 2006-10-14 23:02:48
by comatoza
ТВИ тоже не катит... просто суть скрипта примерна такова - находит гарпию - расстреливает, подходит к трупу, режет лутит, и пока гарпия не спавниться сноваа в хайд...
если ставить ТВИ он всегда находит гарпию пока не исчез труп...
кстати заметил такой момент... если перед запуском скрипта не ткнуть ,info куда-нибудь, хоть в себя... он бежит к какому-то трупу находящемуся непонятно где... в координатах явно за пределами finddistnace и говорит invalid object: finditem
Posted: 2006-10-15 00:47:16
by comatoza
справился...
помогло target XYZ fix
и немного поменял систему

оказывается он всегда пытался бежать к предыдущему трупу...
добавил uo.ignore() и всё пошло как по маслу...
счас дообкатаю и выложу полностью

Posted: 2006-10-17 00:14:15
by comatoza
переделал целиком и получилась такая штука:
Code: Select all
sub feather_bot()
while not uo.dead()
while uo.Count('0x1bd1')<=2000
if find_harpy()==1 then
kill_harpy()
loot_harpy()
else
waiting_for_respawn()
wait(10000)
endif
wend
toHome()
atHome()
tofeather()
wend
end sub
sub find_harpy()
uo.set('finddistance', '30')
uo.findtype('0x001E', -1, 'ground') ##Находим Гарпию
if uo.findcount()>0 then
uo.print('Есть контакт!')
return 1
else
uo.print('Нэту никто!')
return 0
endif
end sub
sub kill_harpy()
var x, y
uo.addobject('harpy', 'finditem')
x = uo.getx('harpy')
y = uo.gety('harpy')
gotoXY(x,y,20)
uo.deletejournal()
uo.arm(2)
uo.attack('harpy')
uo.press(37)
while not uo.injournal('You gain')
wait(100)
wend
uo.print('Сдохли сЦуки!')
wait(1000)
end sub
sub loot_harpy()
var x, y, i
uo.addobject('harpy_corpse', 'lastcorpse')
if uo.getname('harpy_corpse') == 'A corpse of a harpy' then
x=uo.getX('harpy_corpse')
y=uo.getY('harpy_corpse')
gotoXY(x,y,1)
uo.deletejournal()
while not uo.injournal('You place the items on the corpse.')
uo.waittargetobject('harpy_corpse')
uo.usetype('0x0f51') ## режем труп гарпии
wait(5000)
wend
for i=1 to 10
uo.emptycontainer('100', 'harpy_corpse') ## лутим начисто
wait(500)
next
else
uo.ignore('harpy_corpse')
endif
wait(1000)
end sub
sub toHome()
var last_x, last_y
last_x = uo.getx()
last_y = uo.gety()
uo.disarm()
uo.recall('0x603D144C', '601') ## здесь прописываем серийник рунбуки с руной домой и номер руны от 601 - 1ая до 621 - 20ая
while uo.getx()==last_x and uo.gety()==last_y
wait(100)
wend
end sub
sub atHome()
var i, j
dim DropItem[4]
DropItem[1] = '0x1bd1' ## Feather
DropItem[2] = '0x09F1' ## Cuts of raw ribs
DropItem[3] = '0x0F09' ## NotID potion
DropItem[4] = '0x0E20' ## Bloody bandage
dim RuneBooks[2]
RuneBooks[1] = '0x603D144C' ## ToHome
RuneBooks[2] = '0x6091468E' ## ToFeather
for i=1 to 4
uo.findtype(dropitem[i], -1, 'my')
while uo.findcount()>0
uo.findtype(dropitem[i], -1, 'my')
uo.moveitem('finditem', 0, '0x6043FEDE') ## здесь вставляем серийник контейнера в который будут сыпаться перья и прочий мусор
wait(100)
wend
next
uo.useobject('0x6043FEDE') ## Открываем контейнер, тоже необходимо вставить нужный, кстати в нём должна быть хавка, рекаллы, бинты и стрелы
uo.findtype('0x1F4C', -1, 'lastcontainer') ## Находим рекаллы
for j=1 to 2
uo.waittargetobject('finditem')
uo.recall(RuneBooks[j], '800') ## Перезарядка рунбуки
wait(10000)
next
uo.findtype('0x097B',-1,'lastcontainer') ## Находим рыбку и кушаем пока не наелись
uo.deletejournal()
while not uo.injournal('You are full')
uo.useobject('finditem')
wait(1000)
wend
uo.findtype('0x0F3F', -1, 'lastcontainer') ## Находим и добавляем стрелы
if uo.count('0x0F3F')<300 then
uo.grab(200-uo.count('0x0F3F'), 'finditem')
endif
uo.findtype('0x0E21', -1, 'lastcontainer') ## Находим и добавляем бинты
if uo.count('0x0E21')<180 then
uo.grab(100-uo.count('0x0E21'), 'finditem')
endif
end sub
sub toFeather()
var last_x, last_y
last_x = uo.getx()
last_y = uo.gety()
uo.disarm()
uo.recall('0x6091468E', '603') ## А здесь прописываем серийник рунбуки к перьям и номерок рунки
while uo.getx()==last_x and uo.gety()==last_y
wait(100)
wend
end sub
sub waiting_for_respawn()
uo.warmode(0)
while not uo.Hidden()
uo.useskill('Hiding')
wait(1000)
wend
end sub
sub abs(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub
sub autoheal() ## Этот макрос необходимо запускать параллельно, если жить охота :)
while not uo.dead()
wait(1000)
if uo.life<uo.str-10 then
while uo.life<uo.str
uo.exec("bandageself")
wait(3000)
wend
endif
wait(1000)
wend
end sub
sub gotoxy(x,y,prec)
var ld=0,ldc=0
var dx,dy
var mx,my
var ox,oy,mk,k
#uo.print(">")
#uo.track("1",str(x),str(y))
start:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if not ldc then
uo.print(STR(dx))
end if
if dx<3 then
mk=70
else
mk=15
end if
ox=mx
oy=my
for k=1 to mk
mx=UO.GetX()
my=UO.GetY()
if mx<>ox or my<>oy then
goto sdidapl
end if
wait(10)
next
sdidapl:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if ld==dx then
ldc=ldc+1
if ldc>100 then
uo.print("Can not reach location!")
return
end if
else
ld=dx
end if
if mx==x then
if my==y then
return
endif
if my>y then
#UO.Print("UR")
UO.Press(33)
goto start
endif
#UO.Print("DL")
UO.Press(35)
goto start
end if
if mx<x then
if my>y then
#UO.Print("R")
UO.Press(39)
goto start
endif
if my==y then
#UO.Print("DR")
UO.Press(34)
goto start
endif
#UO.Print("D")
UO.Press(40)
goto start
end if
if my<y then
#UO.Print("L")
UO.Press(37)
goto start
endif
if my==y then
#UO.Print("LU")
UO.Press(36)
goto start
endif
#UO.Print("U")
UO.Press(38)
goto start
end sub
маленькое уточнение... скрипт заточен по шард Destiny of Middle Earth
не судите слишом строго

Posted: 2006-10-19 12:32:09
by Sfairet
а вот такой еще вопрос назрел, вообщем я хочу лутать все трупы с одной кнопки в радиусе двух тайлов, скрипт на лут одного трупа у меня работает отлично, а вот если трупа два или больше у меня возникает проблема:
суть в следующем , мне просто надо открывать трупы на земле поочереди, команда usefromgraund не позволяет игнорировать объект, тоесть открываеться все время один и тот же труп, а вот findtype норм в этом плане но не могу открыть ни как труп по finditem, скажи те плз как можно открыть труп по finditem или сделать игнор в usefromgraund?
Posted: 2006-10-20 08:54:25
by slonopotam
Труп монстра это контейнер, а значит береш обычную выгребалку и немного изменяеш. Просто вписываеш типы трупов монстров из которых что выгребать. Но тут 1 проблем, такой скрипт уходит в цикл. Значит нужно не открывать контейнеры на уже известных координатах или уже известного типа.
Posted: 2006-10-20 10:17:27
by SLAK
slonopotam wrote:Значит нужно не открывать контейнеры на уже известных координатах или уже известного типа.
Posted: 2006-10-20 16:06:44
by Sfairet
для функции usefromgraund uo.ignore не работает, для функции findtype работает отлично но я не знаю как через укозатель finditem использовать обект с ЗЕМЛИ, как искать трупы и как открыть первый найденный и собрать все от туда я прекрасно знаю, как подсчитать кол во трупов в радиусе я тоже знаю, а вот как открывать их по очереди в этом то и проблема, я выжу её решение в двух вариантах, либо вы мне подскажите какигнорировать объект для функции usefromgraund или как просто использовать объект с земли через укозатель finditem
Posted: 2006-10-20 16:31:17
by Edred
useobject('finditem'), по фиг где объект, в паке или на земле. Команда одна.
Posted: 2006-10-20 18:20:50
by Scripts Writer
Edred wrote:useobject('finditem'), по фиг где объект, в паке или на земле. Команда одна.
?
Posted: 2006-10-20 19:46:58
by Edred
С каких пор usefromground стала получать параметром сериал? Всегда был тип...
Posted: 2006-10-20 19:55:47
by Scripts Writer
Edred wrote:С каких пор usefromground стала получать параметром сериал? Всегда был тип...
Значит по типу.
Posted: 2008-11-01 20:07:14
by mont
если убивает сразу 2 гарпий, то идет к трупу первой и становиться в хайд, а остальных не режет.
Posted: 2008-11-02 21:19:07
by ADEPT_ABP
А у меня тоже возникал такой вопрос. Я в нубданжене и килял, и резал, и лутал, и труп изучал. Но вот с uo.ignore намучался. Потом сделал просто перед тем как атаковать, игнорил все найденные трупы. Даже если в радиусе uo.set('finddistance',2) лежало 7 трупов. Соответственно при поиске uo.findtype('0x2006','-1','ground') он находил свежий трупак. Правда в моём случае мои жертвы меня первыми не атаковали.
А если сначала килл-всех-нах, то как-то так...
Code: Select all
var a, body ; Резервируем переменные а и body
a=0 ;задаём переменной "а" значение "0"
Dim IDbody[100] ; Массив с возможность 101 переменной
repeat ;
Uo.findtype(body,-1,'ground') ; ищем труп любого цвета на земле
IDbody[a]=uo.getserial('finditem') ;Т. к. ( "а"=0) задаём IDbody[0] серийник трупа
wait(200) ;
a=a+1 ; вследующий раз "а" будет больше на 1
uo.ignore('finditem') ; игнорируем найденный объект
Until uo.findcount()<1 ; Пока условие "ложно" оно будет выполняться
Вот наваял будет-ли работать? Теоритически - да, но как показывает практика - возможны варианты.

Posted: 2008-11-06 09:35:17
by Destruction
Тов.. тьфу, ув. некрофилы - кончайте уже!