Добавил в него кое что смотреть ниже самого скрипта.
Code:
VAR monst= '0x0004'
VAR k, j
sub main()
uo.exec('terminate Reconnector')
wait(3000)
uo.exec('exec Reconnector')
UO.AddObject("Runebook",'0x404E9CCA')
while not uo.dead()
UO.Set('finddistance','7')
UO.FindType('0x0004', '-1', 'ground')
if UO.FindCount() > 0 then
UO.UseType('0x13FA','0x0000')
UO.Warmode(1)
UO.Attack('finditem')
repeat
uo.attack('lastattack')
uo.attack('laststatus')
if UO.LIFE<90 then
poly()
end if
Walker(UO.GetX("finditem"),UO.GetY("finditem"),1)
wait(300)
UO.FindType(monst, '-1', 'ground')
until UO.FindCount() == 0
else
wait(100)
end if
Loot()
bandage()
poly()
uo.findtype('0x0F78','-1','backpack')
if uo.getquantity('finditem')>159 then
sbros()
end if
wait(1000)
hide()
end if
wend
end sub
sub Loot()
var b
dim mobloot[2]
mobloot[0]='0x0EED' # GP
mobloot[1]='0x0F78' # Batwings
mobloot[2]='0x0F0F' # Emerald
mobloot[3]='0x0F11' # Sapphire
mobloot[4]='0x0F12' # Sapphire 2
mobloot[5]='0x0F13' # Ruby
mobloot[6]='0x0F14' # Ruby 2
mobloot[7]='0x0F15' # Citrine
mobloot[8]='0x0F16' # Amethyst
mobloot[9]='0x0F17' # Amethyst2
mobloot[10]='0x0F18' # Tourmaline
mobloot[11]='0x0F19' # Sapphire 3
mobloot[12]='0x0F1A' # Ruby 3
mobloot[13]='0x0F1B' # Star Sapphire 2
mobloot[14]='0x0F1C' # Ruby 4
mobloot[15]='0x0F1D' # Ruby 5
mobloot[16]='0x0F1E' # Tourmaline 2
mobloot[17]='0x0F1F' # Sapphire 4
mobloot[18]='0x0F20' # Tourmaline 3
mobloot[19]='0x0F21' # Star Sapphire 3
mobloot[20]='0x0F22' # Amethyst 3
mobloot[21]='0x0F23' # Citrine 2
mobloot[22]='0x0F24' # Citrine 3
mobloot[23]='0x0F25' # Piece of Amber
mobloot[24]='0x0F26' # Diamond
mobloot[25]='0x0F27' # Diamond 2
mobloot[26]='0x0F28' # Diamond 3
UO.UseObject('lastcorpse')
wait (500)
uo.waittargetobject('lastcorpse')
If NOT UO.ObjAtLayer('Rhand') Then
uo.useobject(uo.ObjAtLayer('Lhand'))
else
uo.useobject(uo.ObjAtLayer('Rhand'))
end if
wait(1000)
for b=0 To 1
uo.findtype(mobloot[b],'-1','lastcontainer')
if uo.findcount() then
uo.grab(0,'finditem')
wait (875)
endif
next
end sub
sub poly()
if UO.Life < 1 then
Ress()
endif
uo.cancelmenu()
uo.automenu('What do you want to polymorph int','Daemon')
if uo.str < 300 then
if UO.Life < 1 then
Ress()
endif
uo.warmode(0)
Walker(5854, 1427, 0)
wait(300)
uo.opendoor()
wait(300)
Walker(5856, 1427, 0)
wait(300)
repeat
uo.opendoor()
wait(300)
Walker(5856, 1427, 0)
wait(300)
Walker(5856, 1426, 0)
wait(300)
until UO.GetX() == 5856 and UO.GetY() == 1426 or uo.dead()
k = 1
while k==1
if uo.mana < 24 then
uo.findtype ('0x0F0E','0x09DF','my')
if uo.findcount()>0 then
uo.useobject ('finditem')
endif
endif
UO.DeleteJournal()
uo.cast('Polymorph')
wait(10000)
if uo.injournal('spell fizzles') OR uo.injournal('You lack') then
uo.print('Try again!')
else
k=0
endif
wend
wait(500)
UO.Count('0x13FA','0x0000')
UO.UseType('0x13FA','0x0000')
uo.warmode(1)
uo.attack('lastattack')
Walker(5856, 1427, 0)
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
if UO.GetX() == 5851 then
uo.opendoor()
end if
repeat
if UO.Life < 1 then
Ress()
endif
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
until UO.GetX() == 5851 or uo.dead()
endif
end sub
sub poly1()
uo.cancelmenu()
uo.automenu('What do you want to polymorph int','Daemon')
if uo.str < 300 then
k = 1
while k==1
if uo.mana < 24 then
uo.findtype ('0x0F0E','0x09DF','my')
if uo.findcount()>0 then
uo.useobject ('finditem')
endif
endif
UO.DeleteJournal()
uo.cast('Polymorph')
wait(10000)
if uo.injournal('spell fizzles') OR uo.injournal('You lack') then
uo.print('Try again!')
else
k=0
endif
wend
wait(500)
UO.Count('0x13FA','0x0000')
UO.UseType('0x13FA','0x0000')
endif
end sub
sub bandage()
uo.findtype('0x0E21','0x000','backpack')
if uo.findcount() and uo.life < uo.str then
if not uo.hidden() then
uo.warmode (0)
uo.useskill ('Hiding')
endif
uo.exec('bandageself')
wait(3300)
if uo.Count('0x0E21')<10 then
uo.Exec("waittargettype 0x1008")
uo.Exec("usetype 0x0E20")
wait(500)
end if
end if
UO.Count('0x13FA','0x0000')
UO.UseType('0x13FA','0x0000')
end sub
sub rhome()
repeat
if UO.Life < 1 then
Ress()
endif
CheckWorldSave()
uo.warmode (0)
uo.useskill ("Hiding")
uo.exec("recall Runebook 21")
wait(9000)
repeat
if UO.Life < 1 then
Ress()
endif
wait(100)
until UO.GetX() == 4093 or uo.injournal('fizzles') or uo.dead()
until UO.GetX() == 4093 or uo.dead()
wait(1000)
CheckWorldSave()
sbros()
end sub
sub sbros()
repeat
if UO.Life < 1 then
Ress()
endif
CheckWorldSave()
uo.warmode (0)
uo.useskill ("Hiding")
uo.exec("recall Runebook 21")
wait(9000)
repeat
if UO.Life < 1 then
Ress()
endif
wait(100)
until UO.GetX() == 4093 or uo.injournal('fizzles') or uo.dead()
until UO.GetX() == 4093 or uo.dead()
CheckWorldSave()
uo.useobject('0x4036EC62')
wait(500)
CheckWorldSave()
uo.useobject('backpack')
wait(500)
VAR a,Exit
VAR UnloadCont='0x4036EC62'
DIM Ore[2]
mobloot[0]='0x0EED' # GP
mobloot[1]='0x0F78' # Batwings
mobloot[2]='0x0F0F' # Emerald
mobloot[3]='0x0F11' # Sapphire
mobloot[4]='0x0F12' # Sapphire 2
mobloot[5]='0x0F13' # Ruby
mobloot[6]='0x0F14' # Ruby 2
mobloot[7]='0x0F15' # Citrine
mobloot[8]='0x0F16' # Amethyst
mobloot[9]='0x0F17' # Amethyst2
mobloot[10]='0x0F18' # Tourmaline
mobloot[11]='0x0F19' # Sapphire 3
mobloot[12]='0x0F1A' # Ruby 3
mobloot[13]='0x0F1B' # Star Sapphire 2
mobloot[14]='0x0F1C' # Ruby 4
mobloot[15]='0x0F1D' # Ruby 5
mobloot[16]='0x0F1E' # Tourmaline 2
mobloot[17]='0x0F1F' # Sapphire 4
mobloot[18]='0x0F20' # Tourmaline 3
mobloot[19]='0x0F21' # Star Sapphire 3
mobloot[20]='0x0F22' # Amethyst 3
mobloot[21]='0x0F23' # Citrine 2
mobloot[22]='0x0F24' # Citrine 3
mobloot[23]='0x0F25' # Piece of Amber
mobloot[24]='0x0F26' # Diamond
mobloot[25]='0x0F27' # Diamond 2
mobloot[26]='0x0F28' # Diamond 3
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 1
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
wait(1000)
CheckWorldSave()
if uo.Count('0x13FA',0x0000,'my')<1 then
uo.findtype('0x13FA',0x0000,'0x4036EC62') ;Axe
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
end if
end if
CheckWorldSave()
uo.findtype('0x09BB',-1,'0x4036EC62') ;Food
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
uo.useobject('finditem')
end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x0631','backpack')<1 then
;uo.findtype('0x0F0E','0x0631','0x401611C2') ;Invis
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x09DF','backpack')<1 then
;uo.findtype('0x0F0E','0x09DF','0x401611C2') ;Total
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
CheckWorldSave()
if uo.Count('0x0F8D','0x000','backpack')<15 then
uo.findtype('0x0F8D','0x000','0x4036EC62') ;Spider Silk
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F7B','0x000','backpack')<15 then
uo.findtype('0x0F7B','0x000','0x4036EC62') ;Blood Moss
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F86','0x000','backpack')<15 then
uo.findtype('0x0F86','0x000','0x4036EC62') ;Mandrake Roots
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0E21','0x000','backpack')<30 then
uo.findtype('0x0E21','0x000','0x4036EC62') ;Bandage
if uo.findcount() then
uo.grab('50','finditem')
wait(1000)
end if
end if
CheckWorldSave()
uo.exec("recall Runebook 33")
wait(9000)
poly1()
bandage()
CheckWorldSave()
uo.exec('exec healandhide')
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
Walker(5786, 1420, 0)
Walker(5792, 1426, 0)
Walker(5792, 1491, 0)
Walker(5802, 1501, 0)
Walker(5824, 1501, 0)
Walker(5835, 1490, 0)
Walker(5835, 1484, 0)
Walker(5863, 1484, 0)
Walker(5863, 1417, 0)
Walker(5856, 1427, 0)
uo.exec('terminate healandhide')
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
if UO.GetX() == 5851 then
uo.opendoor()
end if
repeat
if UO.Life < 1 then
Ress()
endif
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
until UO.GetX() == 5851 or uo.dead()
end sub
sub sbros1()
uo.exec('terminate main')
wait(1000)
repeat
if UO.Life < 1 then
Ress()
endif
CheckWorldSave()
uo.warmode (0)
uo.useskill ("Hiding")
uo.exec("recall Runebook 21")
wait(9000)
repeat
if UO.Life < 1 then
Ress()
endif
wait(100)
until UO.GetX() == 4093 or uo.injournal('fizzles') or uo.dead()
until UO.GetX() == 4093 or uo.dead()
CheckWorldSave()
uo.useobject('0x4036EC62')
wait(500)
CheckWorldSave()
uo.useobject('backpack')
wait(500)
VAR a,Exit
VAR UnloadCont='0x4036EC62'
DIM Ore[2]
mobloot[0]='0x0EED' # GP
mobloot[1]='0x0F78' # Batwings
mobloot[2]='0x0F0F' # Emerald
mobloot[3]='0x0F11' # Sapphire
mobloot[4]='0x0F12' # Sapphire 2
mobloot[5]='0x0F13' # Ruby
mobloot[6]='0x0F14' # Ruby 2
mobloot[7]='0x0F15' # Citrine
mobloot[8]='0x0F16' # Amethyst
mobloot[9]='0x0F17' # Amethyst2
mobloot[10]='0x0F18' # Tourmaline
mobloot[11]='0x0F19' # Sapphire 3
mobloot[12]='0x0F1A' # Ruby 3
mobloot[13]='0x0F1B' # Star Sapphire 2
mobloot[14]='0x0F1C' # Ruby 4
mobloot[15]='0x0F1D' # Ruby 5
mobloot[16]='0x0F1E' # Tourmaline 2
mobloot[17]='0x0F1F' # Sapphire 4
mobloot[18]='0x0F20' # Tourmaline 3
mobloot[19]='0x0F21' # Star Sapphire 3
mobloot[20]='0x0F22' # Amethyst 3
mobloot[21]='0x0F23' # Citrine 2
mobloot[22]='0x0F24' # Citrine 3
mobloot[23]='0x0F25' # Piece of Amber
mobloot[24]='0x0F26' # Diamond
mobloot[25]='0x0F27' # Diamond 2
mobloot[26]='0x0F28' # Diamond 3
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 1
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
wait(150000)
CheckWorldSave()
if uo.Count('0x13FA',0x0000,'my')<1 then
uo.findtype('0x13FA',0x0000,'0x4036EC62') ;Axe
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
end if
end if
CheckWorldSave()
uo.findtype('0x09BB',-1,'0x4036EC62') ;Food
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
uo.useobject('finditem')
end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x0631','backpack')<1 then
;uo.findtype('0x0F0E','0x0631','0x401611C2') ;Invis
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x09DF','backpack')<1 then
;uo.findtype('0x0F0E','0x09DF','0x401611C2') ;Total
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
CheckWorldSave()
if uo.Count('0x0F8D','0x000','backpack')<15 then
uo.findtype('0x0F8D','0x000','0x4036EC62') ;Spider Silk
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F7B','0x000','backpack')<15 then
uo.findtype('0x0F7B','0x000','0x4036EC62') ;Blood Moss
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F86','0x000','backpack')<15 then
uo.findtype('0x0F86','0x000','0x4036EC62') ;Mandrake Roots
if uo.findcount() then
uo.grab('20','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0E21','0x000','backpack')<30 then
uo.findtype('0x0E21','0x000','0x4036EC62') ;Bandage
if uo.findcount() then
uo.grab('50','finditem')
wait(1000)
end if
end if
CheckWorldSave()
uo.exec("recall Runebook 33")
wait(9000)
poly1()
bandage()
CheckWorldSave()
uo.exec('exec healandhide')
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
Walker(5786, 1420, 0)
Walker(5792, 1426, 0)
Walker(5792, 1491, 0)
Walker(5802, 1501, 0)
Walker(5824, 1501, 0)
Walker(5835, 1490, 0)
Walker(5835, 1484, 0)
Walker(5863, 1484, 0)
Walker(5863, 1417, 0)
Walker(5856, 1427, 0)
uo.exec('terminate healandhide')
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
if UO.GetX() == 5851 then
uo.opendoor()
end if
repeat
if UO.Life < 1 then
Ress()
endif
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
until UO.GetX() == 5851 or uo.dead()
uo.exec('exec main')
end sub
sub healandhide()
while not uo.dead()
uo.findtype('0x0E21','0x000','backpack')
if uo.findcount() and uo.life < uo.str then
if not uo.hidden() then
uo.warmode (0)
uo.useskill ('Hiding')
endif
uo.exec('bandageself')
wait(3300)
if uo.Count('0x0E21')<10 then
uo.Exec("waittargettype 0x1008")
uo.Exec("usetype 0x0E20")
wait(500)
endif
endif
wend
end sub
sub hide()
if not uo.hidden() then
uo.warmode(0)
uo.useskill('Hiding')
end if
end sub
sub manach()
if uo.mana < 24 then
uo.count ('0x0F0E','0x09DF')
if uo.findcount()>0 then
uo.useobject ('finditem')
endif
endif
end sub
sub Ress()
var OldX, OldY
while uo.dead()
OldX=uo.GetX()
OldY=uo.GetY()
uo.warmode (0)
uo.Exec('terminate main')
wait(3000)
uo.TextOpen()
uo.TextPrint('- deadbatwings - @ '+MakeTime())
wait(3000)
repeat
Alert()
CheckWorldSave()
uo.lclick(980, 51)
wait(1000)
CheckWorldSave()
uo.lclick(264,306)
wait(1000)
CheckWorldSave()
uo.lclick(333,233)
wait(4000)
CheckWorldSave()
until UO.GetX() == 2706 and UO.GetY() == 2163
Walker(2733, 2163, 0)
Walker(2733, 2160, 0)
wait(1000)
CheckWorldSave()
uo.findtype('0x0004',-1,'ground')
repeat
uo.useobject('finditem')
wait(5000)
until not uo.dead()
wait(10000)
CheckWorldSave()
uo.exec("recall Runebook 21")
wait(9000)
uo.useobject('0x4036EC62')
wait(500)
uo.useobject('backpack')
wait(500)
CheckWorldSave()
if uo.Count('0x13FA',0x0000,'my')<1 then
uo.findtype('0x13FA',0x0000,'0x4036EC62') ;Axe
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
end if
end if
CheckWorldSave()
uo.findtype('0x09BB',-1,'0x4036EC62') ;Food
if uo.findcount() then
uo.grab('1','finditem')
wait(1000)
uo.useobject('finditem')
end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x0631','backpack')<1 then
;uo.findtype('0x0F0E','0x0631','0x401611C2') ;Invis
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
;CheckWorldSave()
;if uo.Count('0x0F0E','0x09DF','backpack')<1 then
;uo.findtype('0x0F0E','0x09DF','0x401611C2') ;Total
;if uo.findcount() then
;uo.grab('3','finditem')
;wait(1000)
;end if
;end if
CheckWorldSave()
if uo.Count('0x0F8D','0x000','backpack')<10 then
uo.findtype('0x0F8D','0x000','0x4036EC62') ;Spider Silk
if uo.findcount() then
uo.grab('15','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F7B','0x000','backpack')<10 then
uo.findtype('0x0F7B','0x000','0x4036EC62') ;Blood Moss
if uo.findcount() then
uo.grab('15','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0F86','0x000','backpack')<10 then
uo.findtype('0x0F86','0x000','0x4036EC62') ;Mandrake Roots
if uo.findcount() then
uo.grab('15','finditem')
wait(1000)
end if
end if
CheckWorldSave()
if uo.Count('0x0E21','0x000','backpack')<15 then
uo.findtype('0x0E21','0x000','0x4036EC62') ;Bandage
if uo.findcount() then
uo.grab('30','finditem')
wait(10000)
end if
end if
CheckWorldSave()
uo.exec("recall Runebook 33")
wait(9000)
poly1()
bandage()
CheckWorldSave()
uo.exec('exec healandhide')
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
wait(400)
uo.press(36)
Walker(5786, 1420, 0)
Walker(5792, 1426, 0)
Walker(5792, 1491, 0)
Walker(5802, 1501, 0)
Walker(5824, 1501, 0)
Walker(5835, 1490, 0)
Walker(5835, 1484, 0)
Walker(5863, 1484, 0)
Walker(5863, 1417, 0)
Walker(5856, 1427, 0)
uo.exec('terminate healandhide')
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
if UO.GetX() == 5851 then
uo.opendoor()
end if
repeat
if UO.Life < 1 then
Ress()
endif
uo.opendoor()
wait(300)
Walker(5851, 1427, 0)
wait(300)
until UO.GetX() == 5851 or uo.dead()
uo.exec('exec main')
end sub
sub Alert()
uo.playwav("C:\UO\music\combat3")
wait(500)
uo.playwav("C:\UO\music\combat3")
wait(500)
uo.playwav("C:\UO\music\combat3")
wait(500)
uo.playwav("C:\UO\music\combat3")
wait(500)
uo.playwav("C:\UO\music\combat3")
wait(500)
end sub
sub Skvoz_chara()
If UO.GetGlobal('GMstepCheck')=='on' Then
UO.SetGlobal('GMstepCheck','off')
UO.Print("GM Step: Off")
UO.Morph('0')
Else
UO.SetGlobal('GMstepCheck','on')
UO.Print("GM Step: On")
UO.Morph('0x03DB'); 0x03DB
End If
end sub
Sub CheckWorldSave()
if uo.injournal('World is saving') then
repeat
wait(500)
until uo.injournal('data saved')
endif
end sub
sub checkplayer()
var player
uo.Set('finddistance','7')
var i
DIM people[2]
people[0]='0x0190' ; Male
people[1]='0x0191' ; Female
uo.Ignore('self')
for i = 0 to 1
uo.FindType(people[i],'-1','ground')
player = uo.GetSerial('finditem')
wait(500)
if uo.FindCount() then
uo.msg('\w Karakyt:Fire Dungeon - Someone are coming!!!')
rhome()
else
end if
next
uo.IgnoreReset()
end sub
sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
Check()
While (uo.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(100000) # WorldSave Protection
uo.Say('')
Wait(5000)
uo.Say('')
Wait(5000)
uo.Say('')
Wait(5000)
uo.LDblClick(357,164)
uo.LClick(616,459)
Wait(5000)
Wend
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
uo.TextOpen()
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
uo.useobject('self')
wait(1000)
uo.useobject('backpack')
wait(1000)
RFlag = 1
ReconnectTime = '0'
wait(1000)
sbros1()
endif
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
EndIf
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
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
Repeat
Wait(100)
Until UO.InJournal("backpack")
end sub
sub Check()
if UO.Life < 1 then
Ress()
endif
if uo.injournal('FLY HOME FLY') then
sbros1()
end if
if uo.injournal('Your large battle axe is destroyed') then
sbros1()
end if
end sub
########################################## ХОДИЛКА 3 ##########################
#var Prec=0 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1.
#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места.
#UO.SetGlobal("Logging","1") # - показывать отладочные сообщения.
#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ.
#В функции IsPass, содержиться список проходимых тайлов.
#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден)
#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата:
#1 - влево вниз
#2 - вниз
#3 - вправо вниз
#4 - вправо
#5 - вправо вверх
#6 - вверх
#7 - влево вверх
#8 - влево
#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).
#####################################################
# WW W WW AA LL Kk KK EE EE RRR #
# WW W WW AA A LL Kk K EEE R R #
# WW W WW AA A LL KKK EEEEE R R #
# WW WW WW AAAA LL KKK EEE RRR #
# WWW WWW AA A LLLL KK Kk EE EE R RR #
####################################################
var MaxTraceDistance=3
var TraceLoopIncrease=3 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=50 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1
var StepTimeOut=400 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping
var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=300 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
Sub Walker(GoX,GoY,Prec)
UO.SetGlobal("Logging","0")
UO.SetGlobal("BlindWalk","0")
var LastDir
var MoveRes
var TracerCnt
UO.SetGlobal("GlobalGoX",str(GoX))
UO.SetGlobal("GlobalGoY",str(GoY))
k = 0
while not IsEnd(GoX,GoY,Prec) OR k < 2
TracerCnt = MaxTraceDistance
repeat
LogInfo('Just walking')
LastDir=GoUntilHit(GoX,GoY,Prec)
if IsEnd(GoX,GoY,Prec) then
return 1
end if
if k == 2 then
return 1
end if
LogInfo('Tracing')
MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt)
if TracerCnt > LimitTrace then
return 0
endif
TracerCnt = TracerCnt + TraceLoopIncrease
k = k+1
until MoveRes == 1
wend
return 1
end sub
Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace)
var LineX=UO.GetX()
var LineY=UO.GetY()
var CurDir=StartDir
var Direction=CountDirection(GoX,GoY,CurDir,Prec)
var StartX,StartY
var MovesDone=0
repeat
StartX=UO.GetX()
StartY=UO.GetY()
CurDir=Tracer(CurDir,Direction,Prec)
if (CurDir==GetDir(GoX,GoY,Prec)) then
return 1
endif
if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then
return 1
end if
MovesDone=MovesDone+1
CurDir=AddToDir(CurDir,-Direction,Prec)
until MovesDone>MaxTrace
return 0
end sub
Sub CountDirection(GoX,GoY,StartDir,Prec)
var GoDir=GetDir(GoX,GoY,Prec)
var MyX=UO.GetX()
var MyY=UO.GetY()
if GoDir<StartDir then
return -1
end if
if GoDir>StartDir then
return 1
end if
if Abs(MyX-GoX)>Abs(MyY-GoY) then
if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
return -1
else
return 1
end if
else
if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
return -1
else
return 1
end if
end if
end sub
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec)
var x3,y3,x4,y4
x3=StartX
y3=StartY
x4=StartX+(XFromDir(Dir)-StartX)*Speed
y4=StartY+(YFromDir(Dir)-StartY)*Speed
return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
end sub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
if x1==x3 and y1==y3 then
return false
end if
var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
if z1*z2>0 then
return false
else
LogInfo('Vector info:')
LogInfo('x1= '+str(x1))
LogInfo('y1= '+str(y1))
LogInfo('x2= '+str(x2))
LogInfo('y2= '+str(y2))
LogInfo('x3= '+str(x3))
LogInfo('y3= '+str(y3))
LogInfo('x4= '+str(x4))
LogInfo('y4= '+str(y4))
return true
end if
end sub
Sub IsDiap(X,X0,X1,Prec)
if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
return true
end if
return false
end sub
Sub GoUntilHit(GoX,GoY,Prec)
var LastDir
LastDir=GetDir(GoX,GoY,Prec)
var CouldMove
repeat
LastDir=GetDir(GoX,GoY,Prec)
if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
CouldMove=TryDir(LastDir,Prec)
end if
until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
return LastDir
end sub
Sub IsEnd(GoX,GoY,Prec)
if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
LogInfo('END FOUND')
return true
else
return false
end if
end sub
Sub GetDir(GoX,GoY,Prec)
var MyX=UO.GetX()
var MyY=UO.GetY()
var DiffX=Abs(UO.GetX()-GoX)
var DiffY=Abs(UO.GetY()-GoY)
var GoDir=0
if (DiffX/(DiffY+0.1))>=2 then
if (MyX>GoX) then
GoDir=7
else
GoDir=3
end if
else
if (DiffY/(DiffX+0.1))>=2 then
if (MyY>GoY) then
GoDir=5
else
GoDir=1
end if
else
if (MyX>GoX) and (MyY>GoY) then
GoDir=6
else
if (MyX>GoX) and (MyY<GoY) then
GoDir=8
else
if (MyX<GoX) and (MyY>GoY) then
GoDir=4
else
if (MyX<GoX) and (MyY<GoY) then
GoDir=2
end if
end if
end if
end if
end if
end if
return GoDir
end sub
Sub Tracer(StartDir,Direction,Prec)
var CurDir=StartDir
var Result
repeat
Result=TryDir(CurDir,Prec)
if not Result then
CurDir=AddToDir(CurDir,Direction,Prec)
end if
until Result
return Result
end sub
Sub AddToDir(Dir,Cnt,Prec)
var NewDir=Dir
NewDir=NewDir+Cnt
while NewDir>8
NewDir=NewDir-8
wend
while NewDir<1
NewDir=NewDir+8
wend
return NewDir
end sub
Sub TryDir(Dir,Prec)
var BegX=UO.GetX() # Ia?aeuiia O
var BegY=UO.GetY() # Ia?aeuiia Y
var Counter=0
var GoX=BegX
var GoY=BegY
GoX=XFromDir(Dir)
GoY=YFromDir(Dir)
if not IsPass(GoX,GoY) then
LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
return false
end if
return TurnAndGoDir(Dir,Prec)
end sub
Sub XFromDir(Dir)
if Dir==2 OR Dir==3 Or Dir==4 then
return (UO.GetX()+1)
end if
if Dir==6 OR Dir==7 Or Dir==8 then
return (UO.GetX()-1)
end if
return (UO.GetX())
end sub
Sub YFromDir(Dir)
if Dir==8 OR Dir==1 Or Dir==2 then
return (UO.GetY()+1)
end if
if Dir==4 OR Dir==5 Or Dir==6 then
return (UO.GetY()-1)
end if
return (UO.GetY())
end sub
Sub TurnAndGoDir(Dir,Prec)
var StartDir=GetDirToDir(UO.GetDir(),Prec)
var StartX=UO.GetX()
var StartY=UO.GetY()
var EndDir
var Counter=0
var TestCounter=CheckCnt
#Direction Test
repeat
Counter = 0
LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter))
PressDir(Dir)
repeat
EndDir=GetDirToDir(UO.GetDir(),Prec)
wait(DynamicPause)
Counter=Counter+1
until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
TestCounter = TestCounter - 1
LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter))
until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
if Counter>=StepTimeOut/DynamicPause then
LogInfo('Direction timeout reached')
return 0
end if
#End direction Test
if StartY<>UO.GetY() or StartX<>UO.GetX() then
return Dir
end if
#Start Primary test
TestCounter=CheckCnt
repeat
GoDir(Dir,Prec)
Counter=0
repeat
wait(DynamicPause)
Counter=Counter+1
until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
TestCounter = TestCounter - 1
until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
#End primary test
if Counter>=StepTimeOut/DynamicPause then
LogInfo('Step timeout reached')
return 0
else
return Dir
end if
end sub
Sub GetDirToDir(GotDir,Prec)
var ChangedDir=-GotDir
ChangedDir=AddToDir(ChangedDir,5,Prec)
return ChangedDir
end sub
Sub DirToInj(Dir)
dim Dirs[9]
Dirs[1]=1
Dirs[2]=2
Dirs[3]=3
Dirs[4]=6
Dirs[5]=9
Dirs[6]=8
Dirs[7]=7
Dirs[8]=4
return (Dirs[Dir])
end sub
Sub PressDir(Dir)
dim Dirs[9]
Dirs[1]=35
Dirs[2]=40
Dirs[3]=34
Dirs[4]=39
Dirs[5]=33
Dirs[6]=38
Dirs[7]=36
Dirs[8]=37
UO.Press(Dirs[Dir],1)
end sub
Sub GoDir(Dir,Prec)
dim Dirs[9]
Dirs[1]=35
Dirs[2]=40
Dirs[3]=34
Dirs[4]=39
Dirs[5]=33
Dirs[6]=38
Dirs[7]=36
Dirs[8]=37
var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
var GoDistance
if (DistanceX-Prec)<Speed then
GoDistance=DistanceX-Prec
else
if (DistanceY-Prec)<Speed then
GoDistance=DistanceY-Prec
else
GoDistance=Speed
endif
endif
UO.Press(Dirs[Dir],GoDistance)
end sub
Sub IsPass(X,Y)
if UO.GetGlobal("BlindWalk") then
return true
endif
dim Types[60]
Types[1]=3
Types[2]=25
Types[3]=51
Types[4]=63
Types[5]=113
Types[6]=140
Types[7]=172
Types[8]=219
Types[9]=232
Types[10]=235
Types[11]=239
Types[12]=243
Types[13]=248
Types[14]=251
Types[15]=264
Types[16]=267
Types[17]=282
Types[18]=289
Types[19]=321
Types[20]=379
Types[21]=420
Types[22]=440
Types[23]=476
Types[24]=499
Types[25]=513
Types[26]=542
Types[27]=578
Types[28]=586
Types[29]=622
Types[30]=700
Types[31]=804
Types[32]=1740
Types[33]=1758
Types[34]=1770
Types[35]=1779
Types[36]=1779
Types[37]=1881
Types[38]=1886
Types[39]=1801
Types[40]=1805
Types[41]=1813
Types[42]=1820
Types[43]=1831
Types[44]=1833
Types[45]=1843
Types[46]=1850
Types[47]=1873
Types[48]=1876
Types[49]=1885
Types[50]=1888
Types[51]=1946
Types[52]=1969
Types[53]=2500
Types[54]=2539
for var i=1 TO 53 STEP 2
if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
return true
end if
next
return false
end sub
Sub LogInfo(Line)
if not UO.GetGlobal("Logging")=="0" then
UO.TextOpen()
UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
end if
end sub
Sub Abs(X)
if X>0 then
return X
else
return (-X)
end if
end sub
########################################## КОНЕЦ ХОДИЛКИ 3 #############
Добавил в него
Code:
mobloot[2]='0x0F0F' # Emerald
mobloot[3]='0x0F11' # Sapphire
mobloot[4]='0x0F12' # Sapphire 2
mobloot[5]='0x0F13' # Ruby
mobloot[6]='0x0F14' # Ruby 2
mobloot[7]='0x0F15' # Citrine
mobloot[8]='0x0F16' # Amethyst
mobloot[9]='0x0F17' # Amethyst2
mobloot[10]='0x0F18' # Tourmaline
mobloot[11]='0x0F19' # Sapphire 3
mobloot[12]='0x0F1A' # Ruby 3
mobloot[13]='0x0F1B' # Star Sapphire 2
mobloot[14]='0x0F1C' # Ruby 4
mobloot[15]='0x0F1D' # Ruby 5
mobloot[16]='0x0F1E' # Tourmaline 2
mobloot[17]='0x0F1F' # Sapphire 4
mobloot[18]='0x0F20' # Tourmaline 3
mobloot[19]='0x0F21' # Star Sapphire 3
mobloot[20]='0x0F22' # Amethyst 3
mobloot[21]='0x0F23' # Citrine 2
mobloot[22]='0x0F24' # Citrine 3
mobloot[23]='0x0F25' # Piece of Amber
mobloot[24]='0x0F26' # Diamond
mobloot[25]='0x0F27' # Diamond 2
mobloot[26]='0x0F28' # Diamond 3
выбивает ошибку
Unhandled exception in parserПомогите буду оч благодарен =)