ZeroDX wrote: Паузу нужно врезать в скрипт. Выкладывай скрипт. Нужно в два скрипта,вот на мининг:
Code: ######################################################### ### Mining Mountains / Копание скалл v5.1.7 Full ### ######################################################### ### Шард Dragon World / www.drw.ru ### ######################################################### ################## ### Переменные ### ################## ################################################################################ ################### var f=file('D:\ore.dat') ## - Путь к файлу в котором будут хранится ### координаты где копать. ### var TryHiding=0 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд, ### 0 - не будет . ### var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться ### реколиться домой, ### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip ### должно быть 0) ### var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 - ### собиратся из клиента ### (сначала соберите а потом считывайте из файла). ### var OreQty=550 ## - Максимальный вес, добыв который надо реколиться домой. ### (сейчас 600 стоунов) ### var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 - ### отключить рекол. ### var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол). ### var DangerousTime=70000 ## - Время в секундах которое чар будет ждать(после ### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд) ### var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 - ### отключаетсяи закрывает UO. ### var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить ### реконнект. ### var DisturbingSound=('C:\ding.wav') ## - Звук которы будет пригран при атаке. ### (замените на свой) ### var RecallDrop=1 ## 1 - Включить рекол после побега от ента домой и выложить логи, 0 -выключить. ### var DropY=566 ## - Координата перед сундуком по Y. ### var oldX,oldY,time ## - Для рекола. ### var Pickaxe='0x0E85' ################################################################################ ################### ### ### После настройки: ### Идите в место где будем копать. ### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится ### прицел, прицелом на неё), ### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук ### для логов. ### После этого чар пойдет по координатам и будет копать руду. ########### ### Код ### ########### sub GoMining()
if Reconnect==1 then uo.Exec('exec Reconnect') end if
if ControlOfDanger==1 then uo.Exec('exec ControlOfDanger') end if
uo.Exec('exec Mining') end sub
sub Mining() var i=0,j=0,k=0,r=0,q=0,ii,jj var TopX=324,TopY=65 dim OreX[5000],OreY[5000],OreT[5000] dim OreTile[27] var flag=0,OreCount=0,clicks=0,flag2=0 #################### ### Графика руды ### #################### OreTile[0]=1339 OreTile[1]=1355 OreTile[2]=1354 OreTile[3]=1359 OreTile[4]=1358 OreTile[5]=1357 OreTile[6]=1352 OreTile[7]=1341 OreTile[8]=1363 OreTile[9]=1359 OreTile[10]=1339 OreTile[11]=1354 OreTile[12]=1386 OreTile[13]=1353 OreTile[14]=2278 OreTile[15]=2282 OreTile[16]=2281 OreTile[17]=2277 OreTile[18]=2278 OreTile[19]=2275 OreTile[20]=1351 OreTile[21]=6007 OreTile[22]=6012 OreTile[23]=6004 OreTile[24]=6011 OreTile[25]=6008 OreTile[26]=6003
uo.FilterSpeech('on') uo.FilterSpeech('add', 'Where do you want to use ')
##################################### ### Загружаем координаты из файла ### ##################################### if GetFromFile==1 then uo.Print('Загружаем координаты из файла...') f.Open() OreCount=safe call f.ReadNumber() for i=1 to OreCount OreT[i]=safe call f.ReadNumber() OreX[i]=safe call f.ReadNumber() OreY[i]=safe call f.ReadNumber() next f.Close() else ###################################### ### Собираем координаты из клиента ### ###################################### uo.Print('Собираем координаты руды в округе...') repeat clicks=0 flag=0 uo.DeleteJournal() ####################### ### Кликаем на тайл ### ####################### uo.UseType( Pickaxe ) wait(500) uo.DeleteJournal() while uo.Targeting() wait(100) wend ########################### ### Проверяем то ли это ### ########################### flag=0 for k=0 to 27 if uo.LastTile(0)==OreTile[k]+1 then flag=2 end if next if flag==0 then for k=0 to 27 if uo.LastTile(0)==OreTile[k] then flag=1 end if next end if if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.Gety() then flag=3 end if ######################## ### Кликнули на тайл ### ######################## if flag==1 then flag2=0 if OreCount>0 then for ii=1 to OreCount if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then flag2=1 end if next end if if flag2==0 then OreCount=OreCount+1 OreX[OreCount]=uo.LastTile(1) OreY[OreCount]=uo.LastTile(2) OreT[OreCount]=uo.LastTile(0) uo.Print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) end if end if ##################### ### Кликнули выше ### ##################### if flag==2 then flag2=0 if OreCount>0 then for ii=1 to OreCount if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then flag2=1 end if next end if if flag2==0 then OreCount=OreCount+1 OreX[OreCount]=uo.LastTile(1) OreY[OreCount]=uo.LastTile(2) OreT[OreCount]=uo.LastTile(0)-1 uo.print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) end if end if until (Flag==3) or (OreCount==5000) uo.FilterSpeech('off') uo.Print('Анализ закончен, координаты руды записаны в файл C:\ore.dat') SaveToFile(OreCount,OreX,OreY,OreT) end if uo.Print('Координат найдено: '+str(OreCount)) wait(2000) ###################################### ### Ходим по собранным координатам ### ###################################### while 1==1 if OreCount>0 then for i=1 to OreCount if TryRecall==1 and uo.Weight>OreQty then ToRecall() end if uo.Print('Идём к координате руды номер '+str(i)+': x='+str(OreX[i])+' y='+str (OreY[i])) InfoOre() flag=GotoXY(OreX[i],OreY[i]) if flag==1 then if TryHiding==1 then ToHide() end if GetOre(str(OreT[i]),str(OreX[i]),str(OreY[i]),str(uo.GetZ())) end if next end if wend end sub
sub GetOre(Type,X,Y,Z) var i uo.Print('Начинаем копать...') for i=1 to 20 if uo.Warmode()==1 then return 0 end if wait(200) uo.DeleteJournal() CheckLag() wait(100) uo.WaitTargetTile(Type,X,Y,Z) uo.UseType(Pickaxe) wait(500) if WaitForChange()==1 then return 1 end if next return 0 end sub
sub ToRecall() RecallToHome() DropOre() InfoOre() RecallToOre() end sub
sub RecallToHome() var i uo.print('Реколимся домой...') for i=1 to 10 uo.deletejournal() uo.waittargetobject(0x400B1682) uo.cast('Recall') if WaitForRecall()==1 then return 1 end if next return 0 end sub
sub RecallToOre() var i uo.print('Реколимся обратно...') for i=1 to 10 uo.deletejournal() uo.waittargetobject(0x40395726) uo.cast('Recall') if waitForRecall()==1 then return 1 end if next return 0 end sub
sub ToHide() while not uo.Hidden() uo.Print('Пытаемся уйти в хайд...') uo.DeleteJournal() uo.UseSkill('Stealth') wait(6000) wend wait(100) end sub
sub WaitForRecall() var Text1=uo.GetName()+": The spell fizzles." var mess='',lastX=uo.getX(),lastY=uo.getY() for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text1 then return 0 end if if uo.getX()<>lastX or uo.getY()<>LastY then return 1 end if wait(50) next return 0 end sub
sub WaitForHide() var Text1=uo.GetName()+": You have hidden yourself well" var Text2=uo.GetName()+": You can't seem to hide here." var mess for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text1 then return 1 end if if uo.Journal(0)==Text2 then return 0 end if wait(50) next return 0 end sub
sub WaitForChange() var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable ore.' var Text2='There is no ore here to mine.' var Text3="You can't reach this." var Text4="That is too far away." var Text5="You can't do much in your current state." var Text6="You have no line of sight to that location" var Text7="You can't see the target" var Text8="Try mining in rock." var mess for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 then return 1 end if if uo.Journal(0)==Text1 then wait(500) return 0 end if if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5]=='u' and mess[6]=='t' then return 0 end if wait(50) next return 0 end sub
sub WaitForTarget() for var i=0 to 50 if uo.Targeting()==1 then return 1 end if wait(200) next return 0 end sub
sub WaitForChangeXY(myX,myY,lastX,lastY) for var i=1 to 50 if lastX<>myX or lastY<>myY then return 1 end if wait(200) next return 0 end sub
sub GotoXY(x,y) var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0 for i=1 to 60 myX=uo.getX(); myY=uo.getY(); if LastX==myX and LastY==myY then halt=halt+1 else halt=0 end if if halt>=10 then if uo.GetDir()==1 then for z=0 to 8 uo.Press(40) next end if if uo.GetDir()==3 then for z=0 to 8 uo.Press(37) next end if if uo.GetDir()==5 then for z=0 to 8 uo.Press(38) next end if if uo.GetDir()==7 then for z=0 to 8 uo.Press(39) next end if halt=15 end if if Numb(x-myX)<=1 and Numb(y-myY)<=2 then return 1 end if if x<=myX then if y<=myY then for z=0 to 3 uo.Press(38) next else for z=0 to 3 uo.Press(37) next end if else if y<=myY then for z=0 to 3 uo.Press(39) next else for z=0 to 3 uo.Press(40) next end if end if lastX=myX lastY=myY wait(200) next return 0 end sub
sub Numb(num) if num>=0 then return num else return num*(-1) end if end sub
sub SaveToFile(OreCount,OreX,OreY,OreT) var s=0,i=0 var f=file("C:\ore.dat") f.Open() f.Create() s=safe call f.Writeln(OreCount) for i=1 to OreCount s=safe call f.Writeln(str(OreT[i])+' '+str(OreX[i])+' '+str(OreY[i])) next f.Close() end sub
sub DropOre() ToHide() if uo.Waiting() then uo.CancelTarget() end if var a,Exit dim Ore[14] Ore[0]=0x19B9 Ore[1]=0x19B7 Ore[2]=0x19BA Ore[3]=0x19B8 Ore[4]=0x0F11 Ore[5]=0x0F16 Ore[6]=0x0F18 Ore[7]=0x0F15 Ore[8]=0x0F10 Ore[9]=0x0F0F Ore[10]=0x0F26 Ore[11]=0x0F4C Ore[12]=0x0EED Ore[13]=0x0F20 uo.Print('Выкладываем руду.') uo.SetReceivingContainer(0x400C5D57) wait(500) for a=0 to 13 Exit=0 repeat uo.FindType(Ore[a]) if uo.GetQuantity('finditem')>0 then uo.Grab('0','finditem') wait(1500) else Exit=1 end if until Exit==1 next uo.UnSetReceivingContainer(0x400C5D57) uo.Print('Руда выложена.') end sub
sub InfoOre() uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA'))+' руды в сумке') uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет') end sub
sub Open(Container) uo.DeleteJournal() uo.UseObject(Container) repeat wait(500) until uo.InJournal('Contains') end sub
sub ControlOfDanger() var danger var RecallPhysicalDanger=1 var RecallSeenDanger=0 var RecallBluePlayer=0 while 1 uo.DeleteJournal() while not uo.InJournal(':') wait(100) wend danger=uo.GetNotoriety(uo.JournalSerial(0)) if uo.InJournal('Guardian') then if ElementalKill==0 then uo.Exec('exec RecallRune') end if end if if RecallPhysicalDanger==1 then if uo.InJournal('attacking you') or uo.InJournal('An Mani') or uo.InJournal('Por Ort Grav') or uo.InJournal('In Por ') or uo.InJournal('An Ex Por') or uo.InJournal('ppN') or uo.InJournal('Adios') or uo.InJournal('MAKC') or uo.InJournal('Man') then uo.Exec('exec RecallRune') end if end if if RecallSeenDanger==1 then if danger==6 and uo.JournalSerial(0)<>uo.GetSerial() then uo.Exec('exec RecallRune') end if if danger==4 and uo.JournalSerial(0)<>uo.GetSerial() then uo.Exec('exec RecallRune') end if end if if RecallBluePlayer==1 then if danger==1 and uo.JournalSerial(0)<>uo.GetSerial() then uo.Exec('exec RecallRune') end if end if wend end sub
sub RecallRune() var MX=uo.GetX('self') var MY=uo.GetY('self') uo.UseType('0x0F08') wait(100) Recall: uo.DeleteJournal() if uo.Waiting() then uo.CancelTarget() end if uo.WaittargetObject('0x40014354') wait(100) uo.UseType('0x1F4C') wait(3000) if not uo.GetX('self')<>MX and not uo.GetY('self')<>MY then goto Recall end if if uo.Life<uo.STR then LifeUp('Bottle') wait(100) end if if CycleScript==1 then wait(DangerousTime) DropOre() RecallToOre() end if if CycleScript==0 then uo.Exec('exec ExitUO') end if end sub
sub Reconnect() var ReconnectTime,rFlag ReconnectTime='0' rFlag=1 repeat while (uo.ObjAtLayer('Bpack')=='') if rFlag then ReconnectTime=MakeTime() rFlag=0 end if wait(20000) uo.Say('') wait(3000) uo.Say('') wait(3000) uo.Say('') wait(3000) uo.LDblClick(357,164) uo.LClick(616,459) wait(3000) wend wait(3000) if (rFlag==0) and (ReconnectTime<>'0') then uo.TextOpen() uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) rFlag=1 ReconnectTime='0' end if until false end sub
sub MakeTime() var d,t,ret,i ret=str(uo.Time()) t="" for i=0 to Len(ret) t=ret[Len(ret)-i]+t if (i==2) or (i==4) then t=":"+t end if next ret=str(uo.Date()) d="" for i=0 to Len(ret) d=ret[Len(ret)-i] + d if (i==2) or (i==4) then d="."+d end if next ret=t+" @ "+d return ret end sub
sub Terminate() uo.Print('Все функции скрипта отключены!') uo.DeleteJournal() uo.Exec('terminate all') wait(100) uo.Exec('terminate all') wait(100) uo.Exec('terminate all') wait(100) end sub
sub CheckLag() if uo.Waiting()>0 then uo.Exec('canceltarget') end if uo.DeleteJournal() uo.Click('backpack') repeat wait(50) until uo.InJournal('backpack') #BETEP™# end sub
sub aams() var gumpid=0 var buttonid=0 var buttontext var i=18,j,rand
dim reindex[8] reindex[0]=11 reindex[1]=12 reindex[2]=13 reindex[3]=10 reindex[4]=16 reindex[5]=14 reindex[6]=17 reindex[7]=15
for j=1 to 2 rand=uo.random(10)*100 wait(100) wait(500+rand) if uo.LastGump('text',4)<>"0" then i=19 endif GumpID =val(Mid(uo.LastGump('command',i),16,4)) ButtonID=reindex[GumpID-2225] ButtonText=uo.LastGump('command', ButtonID) uo.LClick(Val(Mid(ButtonText,7,3)),Val(Mid(ButtonText,11,3))) next wait(500) endsub
sub AntiMacro() while not uo.Dead() if not uo.LastGump('replyed') then if uo.LastGump('text', 0) == 'Antimacros System' then aams() end if endif wait(500) wend
end sub
sub OneClick()
dim reindex[8] reindex[0] = 11 reindex[1] = 12 reindex[2] = 13 reindex[3] = 10 reindex[4] = 16 reindex[5] = 14 reindex[6] = 17 reindex[7] = 15 var GumpID = 0 var ButtonID = 0 var ButtonText var i = 18
if uo.LastGump('text', 4) <> "0" then i = 19 end if GumpID = val(Mid(uo.LastGump('command', i), 16, 4)) ButtonID = reindex[GumpID-2225] ButtonText = uo.LastGump('command', ButtonID) uo.LClick(Val(Mid(ButtonText, 7, 3)), Val(Mid(ButtonText, 11, 3))) wait(300)
end sub
sub AntiMacro()
while not uo.Dead() if not uo.LastGump('replyed') then if uo.LastGump('text', 0) == 'Antimacros System' then OneClick() end if endif wait(500) wend
end sub
sub ExtrimalRecall() var rune='0x400BCA62' uo.Usetype('0x07F2','0x0F08') ; Invisibility wait(100) uo.waittargetobject(Rune) uo.Cast('Recall') end sub
sub recall() var recx = '1423', recy = '5422', used#x, y - ?????????? ???? ??????????. UO.Cast('Recall','0x400BCA62') used = 0 repeat if uo.getx('self')==recx && uo.gety('self')==recy then UO.UseType('0x0F08') #???? ???????, ????, ??????? ?????, ?????? ????? used=1 endif wait(300) until used==1 end sub
sub Gong(times) ; play wav-file VAR i for i=1 to times UO.Exec("playwav d:\Alert") wait(1200) ; time to play sample at once next end sub
sub Alarm() VAR CharHP=150 while 1==1 wait(1000) if UO.Life<136 then gong(1) endif wend end sub
Вот на ламбер:Code: ############################################ ### Lumberjacking / Рубка деревьев v3.7 ### ############################################ ### Шард Dragon World / www.drw.ru ############################################ ### Реавтор этого скрипта: BETEP [WOD] or BETEPAH ### ############################################ ############################################ ### Оформление дополнений cOoler [Sw!Ne$]### ############################################ ### ############################# ### Описание и настройка ### ############################# ### ### Чар бегает от дерева к дереву(координаты деревьев берет из файла). ### Вырубит, бежит к следующему,при логах 700 штук в паке порталится домой скидывает логи в сундук, ### после реколится обратно бежит к последнему дереву и продолжает рубить. ### Пример: В файле 100 деревьев, вы вырубив 74 дошли до придела в 700 логов сработала система рекола ### и вы "порталитесь" домой и складываете логи в сундук,после вы реколитесь обратно в лес и бежите к 75 дереву. ### Дойдя до 100 дерева (тоесть последнего в списке) чар перейдет к 1ому дереву.(Цикличность) ### ### Для тех то кто им пользуется сообщаю, переделал, доработал, отредактировал.! ### ### Нововведения: ### 1 )Логи складываются не на пол а в сундук. (BETEPAH) ### 2 )Рекол в лес и домой по РУНБУКЕ (а не по рункам). (BETEPAH) ### ВНИМАНИЕ!!! В СКРИПТЕ РУНБУКИ НАСТРОЕНЫ ПОД DRW (шард) ### 3 )Система Автомарка Убрана ,и переделана в сомостоятельное маркирование деревьев ### (раньше чар сам бегал по лесу и очень долго марчил деревья)теперь бегаем сами и просто прицелом по деревам ### (марчим также,как и раньше в руках кирка). (BETEPAH) ### 4 )Увеличен придел замаркированых деревьев да 500 шт. (BЕТЕРАН) ### 5 )Улучшна система Хайда (ходим, не бегаем). (BЕТЕРАН) ### 6 )Добавлена система InfoLogs. (Mguai, доработана BETEPAH) ### 7 )Добавлен выбор кирки.(cOoler,доработана BETEPAH) ### 8 )Система реконекта (выложаная сверху),хорошо сочетается с скриптом лумбер. (Fox M) ### ### !!! Чтобы скрипт заработал ВНИМАТЕЛЬНО прочтите настройки.!!!! ### ### Работает в 2ух режимах: ### 1)Маркировка ### 2)Рубка ### ################################### ### Режимы работы скрипта ### ################################### ### Режим первый - "Маркировка".### ################################### ### ### Этот режим отвечает за Маркирование(записывание координат) деревьев. ### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента. ### То есть если GetFromFile=0 координаты деревьев собиратся из клиента. ### ### Маркировка происходит так. ### Поставте переменную GetFromFile равную 0 (GetFromFile=0 ). Положите в суммку к себе Топор,Рунбук(с Рунами домой и в лес) и !!Кирку!!. ### Идите в лес в котором вы хотите рубить.Запустите Скрипт main(),Инжект попросит вас указать Топор ### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него). ### Инжект сообщит вам что ('Собираем координаты деревьев в округе...'). Чар автоматом возмет в руки кирку и появится прицел. ### Теперь вы должны в любом порядке САМИ прицелом указать координаты (достаточно просто нажать прицелом на дерево). ### Если вы не промахнулись и "нажали" на дерево то инжект сообщит вам об этом (Найдено дерево "координаты дерева"). ### Причем что если даже вы нажмете два раза на одно дерево то он не "запомнит" его повторно. ### Ходите по лесу и марчите деревья,после того как вы "наберете" достаточное количество деревьев. ### Инжект напишет вам сообщение ('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat') и создаст файл на диске С:\ куда запишет ### координаты деревьев.Система марка зависит от Времени и переменной Area.При Area = 1, ###марк продлится примерно 20-25 мин.Остоновить марк нельзя, можно только дождатся его конца. ###500 .Это ПРИДЕЛ (можно хоть 10,хоть 499),но если вы замарчите 501 дерево то скрипт повиснет. ### После этого чар пойдет по координатам и будет вырубать деревья. ### ############################## ### Режим Второй - "Рубка".### ############################## ### ### Этот режим соответственоо отвечает за рубку. ### Включается переменной var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента ### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла. И вам не надо будет сново марчить деревья. ### ### Рубка происходит так,Поставте переменную GetFromFile равную 1 ( GetFromFile=1 ). ### Положите в суммку к себе Топор и Рунбук(с Рунами домой и в лес). ### Внимание!!! В РУНБУКЕ РУНА В 1ом слоте ДОМОЙ,в 9ом В лес.После установок рун в РУНБУК. ### ВНИМАНИЕ!!! В СКРИПТЕ НОМЕРА РУН В РУНБУКЕ НАСТРОЕНЫ ПОД DRW (шард). ### ### Настройте скрипт под себя при помощи переменных. ################### ### Переменные: ### ################### ### 1)var TryHiding=1 ## 1 - перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет ### 2)var LogsQty=700 ## Количество логов, добыв которое надо реколиться домой. ### 3)var TryRecall=1 ## 1 - после того как соберет LogsQty логов, будет пытаться реколиться домой,складывать логи в сундук и реколиться обратно ### (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет реколится домой и выключит скрипт. ### 4)VAR Meshok='0x401C1142'## - Айди сундука в который должен складывать Логи.(айди сундука можно узнать написав ,info и прицелом на сундук ### (в данном случие этот Айди 0x401C1142).Переменная находится ниже в скрипте (примерно в районе 327 строки). ### ### После настройки: ### ### Идите в лес в котором вы хотите рубить.Запустите Скрипт Lumberjacking(),Инжект попросит вас указать Топор ### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него). ### После этого чар пойдет по координатам и будет вырубать деревья. ########### ### Код ### ########### sub Lumberjacking() var i=0,j=0,k=0,r=0,q=0,ii,jj var TopX=324,TopY=65 dim TreeX[500], TreeY[500],TreeT[500] dim TreeTile[10] var flag=0,treeCount=0,clicks=0,flag2=0 ###################### ### Меню / Options ### ###################### ############################################################################################ var f=file("D:\trees.dat") ## - Путь к файлу в котором будут хранится координаты Деревьев. ### var Area=1 ## Размер обрабатываемой территории, можно менять от 1 до 4. ### var TryHiding=0 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет . ### var TryRecall=0 ## 1 - После того как соберет LogsQty логов, будет пытаться реколиться домой, # складывать логи в сундук и реколиться обратно (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет. ### var LogsQty=2000 ## Количество логов, добыв которое надо реколиться домой. ### var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента #(сначала соберите а потом считывайте из файла). ### uo.exec("set norbcheck 1")# Для рекола. ### uo.exec("set norbcalc 1") # Для рекола . ### ############################################################################################ ######################## ### Графика деревьев ### ######################## TreeTile[0]=3283 TreeTile[1]=3277 TreeTile[2]=3293 TreeTile[3]=3296 TreeTile[4]=3302 TreeTile[5]=3299 TreeTile[6]=3290 TreeTile[7]=3288 TreeTile[8]=3286 TreeTile[9]=3280
uo.exec("filterspeech on") uo.exec("filterspeech add 'Where do you want to use the pickaxe?'")
uo.print('Выбери топор: ') uo.exec('addobject axe') while uo.targeting() wait(100) wend
if TryRecall==1 then uo.print('Выбери PунБук: ') uo.exec('addobject Runebook') while uo.targeting() wait(100) wend end if ##################################### ### Загружаем координаты из файла ### ##################################### if GetFromFile==1 then uo.print('Загружаем координаты из файла...') f.open() TreeCount=safe call f.readNumber() for i=1 to TreeCount TreeT[i]=safe call f.ReadNumber() TreeX[i]=safe call f.ReadNumber() TreeY[i]=safe call f.ReadNumber() next f.close() else ###################################### ### Собираем координаты из клиента ### ###################################### uo.print('Выбери Кирку: ') uo.exec('addobject Pickaxe') while uo.targeting() wait(100) wend uo.print('Собираем координаты деревьев в округе...') for q=1 to Area if q==2 then gotoxy(uo.getx()+20,uo.gety()-10) end if if q==3 then gotoxy(uo.getx(),uo.gety()+20) end if if q==4 then gotoxy(uo.getx()-20,uo.gety()) end if for r=0 to 3 if r==1 then gotoxy(uo.getx()+10,uo.gety()) end if if r==2 then gotoxy(uo.getx(),uo.gety()+10) end if if r==3 then gotoxy(uo.getx()-10,uo.gety()) end if for j=0 to 8 for i=0 to 8 clicks=0 flag=0 uo.DeleteJournal() ####################### ### Кликаем на тайл ### ####################### uo.useobject('Pickaxe') waitForTarget() uo.DeleteJournal()
WaitForTryRock()
############################### ### Проверяем дерево ли это ### ############################### flag=0 for k=0 to 9 if uo.LastTile(0)==TreeTile[k]+1 then flag=2 end if next if flag==0 then for k=0 to 9 if uo.LastTile(0)==TreeTile[k] then flag=1 end if next end if ######################### ### Кликнули на ствол ### ######################### if flag==1 then flag2=0 if treeCount>0 then for ii=1 to treeCount if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then flag2=1 end if next end if if flag2==0 then treeCount=treeCount+1 TreeX[treeCount]=uo.LastTile(1) treeY[treeCount]=uo.lastTile(2) TreeT[treeCount]=uo.LastTile(0) uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2))) end if end if ########################## ### Кликнули по листве ### ########################## if flag==2 then flag2=0 if treeCount>0 then for ii=1 to treeCount if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then flag2=1 end if next end if if flag2==0 then treeCount=treeCount+1 TreeX[treeCount]=uo.LastTile(1) treeY[treeCount]=uo.LastTile(2) TreeT[treeCount]=uo.LastTile(0)-1 uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2))) end if end if next next next next uo.exec("filterspeech off") uo.print('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat') SaveToFile(treeCount,TreeX,TreeY,TreeT) end if uo.print('Деревьев найдено: '+str(treeCount)) wait(2000) ###################################### ### Ходим по собранным координатам ### ###################################### while 1==1 if treeCount>0 then for i=1 to treeCount if TryRecall==1 AND uo.Count('ZLK')>=LogsQty then ToRecall() end if uo.print('Идем к дереву '+str(i)+': x='+str(treex[i])+' y='+str(treey[i])) infologs() flag=gotoxy(treex[i],treey[i]) if flag==1 then if TryHiding==1 then ToHide() end if GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz())) end if next end if wend end sub
sub GetTree(type,x,y,z) var i uo.print('Начинаем рубку дерева...') for i=0 to 3 if uo.warmode()==1 then return 0 end if wait(200) uo.deletejournal() uo.WaitTargetTile(Type,X,Y,Z) uo.UseType(0x0F43) if WaitForChange()==1 then return 1 end if next return 0
end sub
sub ToRecall() VAR Meshok='0x401C1142' ## - ID сундука в который чар должен складывать логи RecallToHome() wait(500) uo.press(36) wait(500) uo.press(36) wait(500) repeat wait(500) repeat wait(500) repeat wait(500) repeat wait(600) UO.SetReceivingContainer(Meshok) uo.findtype('ZLK') wait(500) UO.Grab('all','finditem') infologs() wait(500) until uo.GetQuantity('finditem')==0 UO.UnSetReceivingContainer() UO.SetReceivingContainer(Meshok) uo.findtype('ZLK') wait(500) UO.Grab('all','finditem') infologs() wait(500) until uo.GetQuantity('finditem')==0 UO.UnSetReceivingContainer() UO.SetReceivingContainer(Meshok) uo.findtype('ZLK') wait(500) UO.Grab('all','finditem') infologs() wait(500) until uo.GetQuantity('finditem')==0 UO.UnSetReceivingContainer() RecallToLumber() end sub
sub RecallToHome() UO.Print("!!Прыгаем ДоМОЙ!!") uo.exec("recall Runebook 21") wait(10000) end sub
sub RecallToLumber() UO.Print("!!Прыгаем в ЛЕС!!") uo.exec("recall Runebook 1025") wait(10000) end sub
sub ToHide() while not UO.Hidden() uo.print('Пытаемся уйти в хайд...') uo.deletejournal() UO.UseSkill("Stealth") wait(4100) wend wait(100) end sub
sub WaitForRecall() var Text1=uo.getname()+": The spell fizzles." var mess='',lastX=uo.getX(),lastY=uo.getY() for var i=0 to 200 mess=uo.journal(0) if uo.Journal(0)==Text1 then return 0 end if if uo.getX()<>lastX OR uo.getY()<>LastY then return 1 end if wait(50) next return 0 end sub
sub WaitForHide() var Text1=uo.getname()+": You have hidden yourself well" var Text2=uo.getname()+": You can't seem to hide here." var mess for var i=0 to 200 mess=uo.journal(0) if uo.Journal(0)==Text1 then return 1 end if if uo.Journal(0)==Text2 then return 0 end if wait(50) next return 0 end sub
sub WaitForChange() var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.' var Text2='There are no logs left here to chop.' var Text3="You can't reach this." var mess for var i=0 to 200 mess=uo.journal(0) if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 then return 1 end if if uo.Journal(0)==Text1 then return 0 end if if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then return 0 end if wait(50) next return 0 end sub
sub WaitForTryRock() var Text1="That is too far away." var Text2="Try mining in rock." var Text3="There is no ore here to mine." var Text4="You have no line of sight to that location" var Text5="You can't see the target" for var i=0 to 50 if uo.Journal(0)==Text1 OR uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 OR uo.Journal(0)==Text5 then return 1 end if wait(200) next return 0 end sub
sub WaitForTarget() for var i=0 to 50 if uo.Targeting()==1 then return 1 end if wait(200) next return 0 end sub
sub WaitForChangeXY(myX,myY,lastX,lastY) for var i=1 to 50 if lastX<>myX OR lastY<>myY then return 1 end if wait(200) next return 0 end sub
sub gotoXY(x,y) var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0 for i=1 to 60 MyX=uo.getX(); MyY=uo.getY(); if LastX==MyX AND LastY==MyY then halt=halt+1 else halt=0 end if if halt>=10 then if uo.GetDir()==1 then for z=0 to 8 uo.press(40) next end if if uo.GetDir()==3 then for z=0 to 8 uo.press(37) next end if if uo.GetDir()==5 then for z=0 to 8 uo.press( 38 ) next end if if uo.GetDir()==7 then for z=0 to 8 uo.press(39) next end if halt=15 end if if abs(x-myX)<=1 AND abs(y-myY)<=2 then return 1 end if if x<=MyX then if y<=MyY then for z=0 to 3 uo.press( 38 ) next else for z=0 to 3 uo.press(37) next end if else if y<=MyY then for z=0 to 3 uo.press(39) next else for z=0 to 3 uo.press(40) next end if end if lastX=myX lastY=myY wait(200) next return 0 end sub
sub abs(num) if num>=0 then return num else return num*(-1) end if end sub
sub SaveToFile(TreeCount,TreeX,TreeY,TreeT) var f=file("D:\trees2.dat") var s=0,i=0 f.open() f.create() s=safe call f.writeln(TreeCount) for i=1 to TreeCount s=safe call f.writeln(str(TreeT[i])+' '+str(treeX[i])+' '+str(TreeY[i])) next f.close() end sub
sub infologs() UO.Print('У вас всего '+Str(UO.Count('0x1BDD'))+' логов в сумке') UO.Print('Из них '+Str(UO.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.count('0x1BDD')-uo.count('0x1BDD','0x0000'))+' цветных') end sub
sub OneClick()
dim reindex[8] reindex[0] = 11 reindex[1] = 12 reindex[2] = 13 reindex[3] = 10 reindex[4] = 16 reindex[5] = 14 reindex[6] = 17 reindex[7] = 15 var GumpID = 0 var ButtonID = 0 var ButtonText var i = 18
if uo.LastGump('text', 4) <> "0" then i = 19 end if GumpID = val(Mid(uo.LastGump('command', i), 16, 4)) ButtonID = reindex[GumpID-2225] ButtonText = uo.LastGump('command', ButtonID) uo.LClick(Val(Mid(ButtonText, 7, 3)), Val(Mid(ButtonText, 11, 3))) wait(300)
end sub
sub AntiMacro()
while not uo.Dead() if not uo.LastGump('replyed') then if uo.LastGump('text', 0) == 'Antimacros System' then OneClick() end if endif wait(500) wend
end sub
sub ExtrimalRecall() var rune='0x400C5998' uo.Usetype('0x0F08','0x07F2') ; Invisibility wait(100) uo.waittargetobject(Rune) uo.Usetype('0x1F4C','0x0000') ;Recall end sub
sub Gong(times) ; play wav-file VAR i for i=1 to times UO.Exec("playwav d:\Alert") wait(1200) ; time to play sample at once next end sub
sub Alarm() VAR CharHP=150 while 1==1 wait(1000) if UO.Life<136 then gong(1) endif wend end sub
|