| Yoko http://forum.yoko.com.ua/ |
|
| Помогите доделать скрипт плизз (мининг) http://forum.yoko.com.ua/viewtopic.php?f=20&t=13118 |
Page 1 of 1 |
| Author: | Vort2008 [ 2008-01-24 11:44:36 ] |
| Post subject: | Помогите доделать скрипт плизз (мининг) |
Очень хороший скрипт на мининг,сам копает сам убивает эльменталей,тока 2 но,как зделать так чтоб после убиства эльменталя он из эльменталя лутал всю руду?И ещё чтоб он эльменталя убивал не киркой а например магма клавой,потом брал кирку и шёл дальше копать?Взарание спасибо. ################## ### Переменные ### ################## var FileName = 'E:\Shmi†\Vortex\mining_minoc3darkcmo.dat' ## - Путь к файлу в котором будут хранится координаты деревьев. var RuneToHome = '0x405CF143' var RuneToMine = '0x41495F1F' var GetFromFile = 1 ## 1 - Координаты будут считыватся из файла, 0 - собиратся из клиента var Chest = 0x4059AD2E ## - ID сундука куда будут выгружаться инги var AddObject = 1 ## 1 - Если надо добавить обьекты, 0 - не надо. var SmeltBeforeDrop = 0 ## 0 - если надо переплавить руду перед выкладыванием var WaitForPK = 3 ## Сколько минут ждмем, пока уйдут PK var KillElementales = 1 ## Убивать элементалей, когда они появляются. var DressSpeed = 2100 ## Время надевания вещей, мс. var HomeGateID = 0x4164290C var GoHomePoint1X = 1478 var GoHomePoint1Y = 970 var GoHomePoint2X = 1478 var GoHomePoint2Y = 967 var HomeDoorID = 0x416451D8 var GoHomePoint3X = 1478 var GoHomePoint3Y = 965 var GoHomePoint4X = 1476 var GoHomePoint4Y = 960 var KeyDown = 40 var KeyRight = 39 var KeyLeft = 37 var KeyUp = 38 var KeyPageDown = 34 var KeyHome = 36 var KeyEnd = 35 var KeyPageUp = 33 var OreType = 0x19B9 var OreTypeFew = 0x19B8 var OreTypeLess = 0x19BA var OreTypeSingle = 0x19B7 var DiamondType = 0x0F26 var IngotTypeFrom = 0x1BE3 var IngotTypeTo = 0x1BFA var CrystalType = 0x0F8E var RefreshKegColor = 0x0000 var RefreshType = 0x0F0B var KegType = 0x1940 var HealType = 0x0F0C var EmptyBottleType = 0x0F0E var PKTypeFrom = 0x0190 var PKTypeTo = 0x0191 var ElementalType = 0x000E var InvisType = 0x0F09 var InvisColor = 0x0060 var MineSpotI = -3 var MineSpotJ = -3 ########### ### Код ### ########### sub main() var i=0 var j=0 var k=0 var r=0 var q=0 var ii var jj var f dim MineX[5000] dim MineY[5000] dim MineT[5000] var SelfClicked=0 var MineCount=0 if AddObject==1 then UO.FilterSpeech('on') UO.FilterSpeech('add', 'Where do you want to use the pickaxe?') UO.Print('Choose a pickaxe') UO.Exec('addobject Pickaxe') while UO.Targeting() Wait(100) wend if GetFromFile==1 then ##################################### ### Загружаем координаты из файла ### ##################################### UO.Print('Loading spots from file') f=file(FileName) f.Open() MineCount = safe call f.ReadNumber() for i=1 to MineCount MineT[i] = safe call f.ReadNumber() MineX[i] = safe call f.ReadNumber() MineY[i] = safe call f.ReadNumber() next f.Close() else ###################################### ### Собираем координаты из клиента ### ###################################### UO.Print('Selecting spots for digging') repeat UO.DeleteJournal() ####################### ### Кликаем на тайл ### ####################### UO.DeleteJournal() UO.UseObject('Pickaxe') waitForTarget() while UO.Targeting() wait(100) wend UO.Exec('warmode 1') UO.Exec('warmode 0') if UO.LastTile(1) == UO.GetX() and UO.LastTile(2) == UO.GetY() then SelfClicked = 1 endif if SelfClicked == 0 then MineCount = MineCount+1 MineX[MineCount] = UO.LastTile(1) MineY[MineCount] = UO.LastTile(2) MineT[MineCount] = UO.LastTile(0)-1 UO.Print('Recorded position '+str(MineCount)+' : x='+str(UO.Lasttile(1))+' y='+str(UO.LastTile(2))) endif until (SelfClicked==1) or (MineCount==5000) UO.FilterSpeech('off') UO.Print('Saving spots to file ' + FileName) SaveToFile(MineCount,MineX,MineY,MineT) end if UO.Print('Total spots: '+str(MineCount)) wait(2000) ###################################### ### Ходим по собранным координатам ### ###################################### UO.SetArm('MyArm') UO.DeleteJournal() #UO.SetGlobal('WaitingForPK', '0') UO.SetGlobal('CheckDanger', '0') UO.SetGlobal('GoHome', '0') UO.SetGlobal('HealFull', '0') UO.SetGlobal('WaitingForPK', '0') UO.SetGlobal('TryingToHide', '0') UO.Click('self') CheckLag() UO.Click('self') CheckLag() while MineCount > 0 for i = 1 to MineCount CheckWeight() UO.Print('Going to spot '+str(i)+': x='+str(MineX[i])+' y='+str(MineY[i])) if WalkToXY(MineX[i], MineY[i]) == 1 then if MineSpot(MineT[i],MineX[i],MineY[i],UO.GetZ()) then i = i - 1 endif end if next wend end sub sub CheckWeight() if UO.Weight > UO.STR*4+29 - 10 then DropTrashOre() ToRecall() return 1 end if return 0 end sub sub CheckDanger() var status = 0 if UO.GetGlobal('CheckDanger') == '1' then return status endif UO.SetGlobal('CheckDanger', '1') status = status + CheckPK() status = status + CheckNPC() UO.SetGlobal('CheckDanger', '0') return status end sub sub CheckNPC() var Danger var OldX, OldY if not KillElementales then return 0 endif repeat UO.FindType(ElementalType, -1, 'ground') if UO.FindCount() > 0 then Danger = UO.GetSerial('finditem') UO.Ignore('finditem') OldX = UO.GetX() OldY = UO.GetY() KillUnit(Danger) WalkToXY(OldX, OldY) endif until UO.FindCount() == 0 UO.IgnoreReset() return 0 end sub sub KillUnitAttack(Target) UO.Print('Attacking!') UO.Attack(Target) while UO.Life > 110 and not UO.Dead(Target) and UO.GetX(Target) <> 0 UO.Print('Going to taget...') WalkToXY_plain(UO.GetX(Target), UO.GetY(Target)) Wait(500) wend end sub sub KillUnitHealing(Target) var DX, DY var D UO.SetGlobal('HealFull', '1') UO.Exec('exec HealFull') repeat # Убегаем, пока хилимся UO.Print('Run away from target.') DX = UO.GetX() - UO.GetX(Target) DY = UO.GetY() - UO.GetY(Target) D = sqrt(DX*DX + DY*DY) DX = UO.Random(20) - 10 DY = UO.Random(20) - 10 if DX < 0 then DX = DX - 10 else DX = DX + 10 endif if DY < 0 then DY = DY - 10 else DY = DY + 10 endif if D < 4 and not UO.Dead(Target) and UO.GetX(Target) > 0 then WalkToXY_plain(UO.GetX(Target) + DX, UO.GetY(Target) + DY) endif Wait(500) until UO.GetGlobal('HealFull') <> '1' end sub sub KillUnit(Target) if not Target then return endif UO.SetDressSpeed(DressSpeed) while not UO.Dead() and not UO.Dead(Target) and UO.GetX(Target) > 0 # Бьем UO.Exec('warmode 1') Wait(200) KillUnitAttack(Target) # Хилимся UO.Exec('warmode 0') KillUnitHealing(Target) # Отхилились. Вооружаемся UO.Arm('MyArm') wend while UO.Dead() UO.Exec('warmode 1') Wait(10000) wend end sub sub CheckPK() var i, n var char var name var flag var NNames = 14 dim Names[15] Names[ 1] = UO.GetName('self') Names[ 2] = 'CTALB [SWARM]' Names[ 3] = 'CTALB' Names[ 4] = 'Berkut' Names[ 5] = 'Alventer' Names[ 6] = 'Lord Alventer' Names[ 7] = 'Rufin [Jewel Knights Crusaders]' Names[ 8] = 'Revival' Names[ 9] = 'Samson [The Beautiful People]' Names[10] = 'Flesh' Names[11] = 'Jocks' Names[12] = 'Lady Jocks' Names[13] = 'Kitero' Names[14] = 'CTALb' UO.TextClear() UO.IgnoreReset() for i = PKTypeFrom to PKTypeTo repeat UO.FindType(i, '-1', 'ground') if UO.FindCount() > 0 then char = UO.GetSerial('finditem') UO.Forget(char) flag = 0 repeat name = UO.GetName(char) if name == '' then UO.Click(char) CheckLag() UO.Info(char) endif if name == 'Uus Jux ' or name == 'In Mani Ylem ' or name == 'Rel Wis ' or name == 'In Mani ' or name == 'In Por Ylem ' or name == 'In Lor ' or name == 'Flam Sanct ' or name == 'Des Mani ' or name == 'Ex Uus ' or name == 'Uus Wis ' or name == 'An Nox ' or name == 'An Mani ' or name == 'In Jux ' or name == 'An Jux ' or name == 'Uus Sanct ' or name == 'Uus Mani ' or name == 'Rel Sanet ' or name == 'Vas Flam ' or name == 'An Por ' or name == 'In Nox ' or name == 'Ort Por Ylem ' or name == 'Rel Por ' or name == 'Ex Por ' or name == 'In Sanet Ylem ' or name == 'Vas An Nox ' or name == 'Vas Uus Sanct ' or name == 'Des Sanct ' or name == 'In Flam Grav ' or name == 'In Vas Mani ' or name == 'Por Ort Grav ' or name == 'Ort Rel ' or name == 'Kal Ort Por ' or name == 'In Jux Hur Ylem ' or name == 'An Grav ' or name == 'Kal In Ex ' or name == 'In Jux Sanct ' or name == 'Por Corp Wis ' or name == 'An Ex Por ' or name == 'In Nox Grav ' or name == 'Kal Xen ' or name == 'An Ort' or name == 'Corp Por ' or name == 'Vas Ort Flam ' or name == 'An Lor Xen ' or name == 'Kal Por Ylem ' or name == 'Vas Des Sanct ' or name == 'In Ex Grav ' or name == 'Wis Quas ' or name == 'Vas Ort Grav ' or name == 'In Sanct Grav ' or name == 'Kal Vas Flam ' or name == 'Vas Rel Por ' or name == 'Ort Sanct ' or name == 'Vas An Ort ' or name == 'Flam Kal Des Ylem ' or name == 'Vas Ylem Rel ' or name == 'In Vas Por ' or name == 'Vas Corp Por ' or name == 'An Corp ' or name == 'Kal Vas Xen Hur ' or name == 'Kal Vas Xen Corp ' or name == 'Kal Vas Xen Ylem ' or name == 'Kal Vas Xen Flam ' or name == 'Kal Vas Xen An Flam ' then UO.Forget(char) UO.Click(char) CheckLag() UO.Info(char) UO.Click(char) CheckLag() UO.Info(char) endif name = UO.GetName(char) if name == '' then wait(200) name = UO.GetName(char) endif flag = flag + 1 until name <> '' or flag > 5 flag = 1 if not UO.InJournal(name+' is attacking you') then for n = 1 to NNames if name == Names[n] then flag = 0 endif next endif if flag then UO.Print('I have seen PK!!! - ' + name) DrinkInvisibility() UO.SetGlobal('WaitingForPK', '1') ToRecall() UO.SetGlobal('WaitingForPK', '0') UO.IgnoreReset() return 1 endif UO.Ignore(char) endif until UO.FindCount() <= 0 next UO.SetGlobal('WaitingForPK', '0') UO.IgnoreReset() return 0 end sub sub CheckStamina() if UO.Stamina < 3 then DrinkRefresh() endif end sub sub DrinkRefresh() var Tries = 3 var WaitTimes while Tries > 0 and UO.Count(RefreshType) < 1 UO.Exec('warmode 1') UO.Exec('warmode 0') Tries = Tries - 1 Wait(50) UO.WaitTargetType(EmptyBottleType) Wait(100) UO.FindType(KegType, RefreshKegColor) UO.DeleteJournal() UO.UseObject('finditem') WaitTimes = 0 while WaitTimes < 10 and UO.Waiting() WaitTimes = WaitTimes + 1 Wait(100) wend if UO.InJournal("You can't think") then UO.DeleteJournal() UO.Click('finditem') repeat Wait(50) until UO.InJournal('keg') if UO.InJournal('empty') then UO.DropHere('finditem') Wait(300) endif end if wend UO.UseType(RefreshType) end sub sub SaveToFile(MineCount, MineX, MineY, MineT) var s=0,i=0,f f = file(FileName) f.Open() f.Create() s = safe call f.Writeln(MineCount) for i=1 to MineCount s = safe call f.Writeln(str(MineT[i])+' '+str(MineX[i])+' '+str(MineY[i])) next f.Close() end sub sub MineSpot(Type,X,Y,Z) var i, j var f = 0 for i = -3 to 3 for j = -3 to 3 if f == 0 then i = MineSpotI j = MineSpotJ MineSpotI = -3 MineSpotJ = -3 f = 1 endif if MineSimplex(Type, X + i, Y + j, Z) then MineSpotI = i MineSpotJ = j return 1 endif next next return 0 end sub sub MineSimplex(Type, X, Y, Z) var i UO.Print('Digging...') while 1 while UO.Dead() UO.Exec('warmode 1') Wait(10000) wend UO.Exec('warmode 0') if CheckWeight() or CheckDanger() then return 1 endif CheckStamina() wait(200) ToHide() Wait(50) UO.WaitTargetTile(str(Type), str(X), str(Y), str(Z)) Wait(100) UO.UseObject('Pickaxe') if WaitForChange()==1 then DropTrashOre() return 0 end if DropTrashOre() wend end sub sub DropTrashOre() var i var TrashCount = 3 dim TrashColor[2] TrashColor[1] = 0x077B # Tin TrashColor[2] = 0x0642 # Copper #TrashColor[3] = 0x0000 # Iron i = 1 while i < TrashCount UO.FindType(OreType, TrashColor[i]) UO.DropHere('finditem') UO.FindType(OreTypeFew, TrashColor[i]) UO.DropHere('finditem') UO.FindType(OreTypeLess, TrashColor[i]) UO.DropHere('finditem') UO.FindType(OreTypeSingle, TrashColor[i]) UO.DropHere('finditem') i = i + 1 wend UO.FindType(DiamondType) UO.DropHere('finditem') end sub sub WaitForChange() var TextA1='Попробуйте добывать руду из валунов или в шахте!' var TextB1='Тут не осталось руды.' var TextB2='Это слишком далеко отсюда.' var TextB3='Попробуйте добывать руду из валунов или в шахте!' var TextB4='До туда Вам не дотянуться' var mess UO.DeleteJournal() for var i=0 to 200 mess=UO.Journal(0) if UO.Journal(0)==TextB1 or UO.Journal(0)==TextB2 or UO.Journal(0)==TextB3 or UO.Journal(0)==TextB4 then return 1 end if if UO.Journal(0)==TextA1 or 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 MovingItems(tItem,cItem,qItem,FromBackPack) var idResivCont,idSendCont UO.UseObject('backpack') if FromBackPack <> 1 and UO.Count(tItem) == 0 then return endif UO.UseObject('backpack') Open(Chest) if FromBackPack==1 then idResivCont=UO.GetSerial('backpack') idSendCont=Chest else idSendCont=UO.GetSerial('backpack') idResivCont=Chest end if UO.Findtype(tItem,cItem,idSendCont) while UO.GetQuantity('finditem')>0 UO.MoveItem('finditem',str(qItem),idResivCont) wait(1000) CheckLag() if qItem>0 then return end if UO.FindType(tItem,cItem,idSendCont) wend end sub sub Open(Container) UO.DeleteJournal() UO.UseObject(Container) repeat wait(500) until UO.InJournal('Contains') end sub sub Numb(num) if num>=0 then return num else return num*(-1) end if end sub sub ToHide() if UO.GetGlobal('TryingToHide') == '1' then return endif UO.SetGlobal('TryingToHide', '1') while not UO.Hidden() UO.Print('Trying to hide...') UO.DeleteJournal() UO.Exec('warmode 0') UO.UseSkill('Hiding') wait(4100) wend UO.SetGlobal('TryingToHide', '0') end sub sub ToRecall() UO.SetGlobal('GoHome', '1') RecallToHome() DropOre() Meditation() if UO.GetGlobal('WaitingForPK') == '1' then Wait(WaitForPK*60*1000) # Ждем, пока уйдут PK. UO.SetGlobal('WaitingForPK', '0') endif RecallToMine() UO.SetGlobal('GoHome', '0') end sub sub Meditation() var WaitCount repeat UO.DeleteJournal() UO.UseSkill('Meditation') WaitCount = 240 repeat Wait(500) WaitCount = WaitCount - 1 until WaitCount <= 0 or UO.InJournal('You are at peace') or UO.InJournal('You lose your concentration') or UO.InJournal('Trance is out') until UO.InJournal('You are at peace') end sub sub RecallToHome() UO.Print('Recall to home') DoRecall(RuneToHome) end sub sub RecallToMine() UO.Print('Recall to mine') DoRecall(RuneToMine) end sub sub DoRecall(RuneID) var OldX=UO.GetX() var OldY=UO.GetY() var Time UO.Exec('warmode 0') repeat if UO.GetGlobal('CheckDanger') <> '1' and UO.GetGlobal('GoHome') <> '1' then CheckDanger() endif if UO.Warmode() then DrinkInvisibility() endif while UO.Dead() UO.Exec('warmode 1') Wait(10000) wend UO.Exec('warmode 0') UO.Cast('Recall', RuneID) Time=UO.Timer() repeat wait(500) until OldX<>UO.GetX() or OldY<>UO.GetY() or UO.Dead() or UO.InJournal('needs') or UO.InJournal('fizzles') or Time+200<UO.Timer() UO.DeleteJournal() until OldX<>UO.GetX() or OldY<>UO.GetY() or UO.InJournal('needs') end sub sub DrinkInvisibility() UO.UseType(InvisType, InvisColor) Wait(200) end sub sub DropOre() var Tries = 0 var IngotType UO.Print('Dropping ore...') Wait(1000) while SmeltBeforeDrop and Tries < 10 and (UO.Count(OreType) > 0 or UO.Count(OreTypeFew) > 0 or UO.Count(OreTypeLess) > 0 or UO.Count(OreTypeSingle) > 0) Tries = Tries + 1 if UO.Count(OreType) > 0 then UO.UseType(OreType) Wait(1000) endif if UO.Count(OreTypeFew) > 0 then UO.UseType(OreTypeFew) Wait(1000) endif if UO.Count(OreTypeLess) > 0 then UO.UseType(OreTypeLess) Wait(1000) endif if UO.Count(OreTypeSingle) > 0 then UO.UseType(OreTypeSingle) Wait(1000) endif Wait(1000) wend if SmeltBeforeDrop then CheckLag() MovingItems(CrystalType,'-1',-1,0) for IngotType = IngotTypeFrom to IngotTypeTo MovingItems(IngotType,'-1',-1,0) Wait(100) next endif while UO.Count(OreType) > 0 or UO.Count(OreTypeFew) > 0 or UO.Count(OreTypeLess) > 0 or UO.Count(OreTypeSingle) > 0 MovingItems(OreType,'-1',-1,0) MovingItems(OreTypeFew,'-1',-1,0) MovingItems(OreTypeLess,'-1',-1,0) MovingItems(OreTypeSingle,'-1',-1,0) Wait(500) wend UO.Print('Ore droped') 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') end sub sub ExecToHide() if UO.GetGlobal('CheckDanger') == '1' then return endif if UO.GetGlobal('TryingToHide') <> '1' then wait(300) endif if UO.Hidden() or UO.GetGlobal('TryingToHide') == '1' then return endif UO.Exec('exec ToHide') end sub sub TermToHide() if UO.GetGlobal('TryingToHide') <> '1' then wait(300) endif if UO.GetGlobal('TryingToHide') == '1' then UO.Exec('terminate ToHide') UO.SetGlobal('TryingToHide', '0') endif end sub sub WaitToHide() while UO.GetGlobal('TryingToHide') == '1' wait(200) endif end sub sub WalkToXYGoAround1() var z var d = UO.GetDir() if d == 0 then # N for z = 1 to 4 UO.Press(KeyUp) next endif if d == 1 then # NE for z = 1 to 4 UO.Press(KeyUp) next endif if d == 2 then # E for z = 1 to 4 UO.Press(KeyRight) next endif if d == 3 then # SE for z = 1 to 4 UO.Press(KeyRight) next endif if d == 4 then # S for z = 1 to 4 UO.Press(KeyDown) next endif if d == 5 then # SW for z = 1 to 4 UO.Press(KeyDown) next endif if d == 6 then # W for z = 1 to 4 UO.Press(KeyLeft) next endif if d == 7 then # NW for z = 1 to 4 UO.Press(KeyLeft) next endif end sub sub WalkToXYGoAround2() var z var d = UO.GetDir() if d == 0 then # N for z = 1 to 4 UO.Press(KeyRight) next endif if d == 1 then # NE for z = 1 to 4 UO.Press(KeyDown) next endif if d == 2 then # E for z = 1 to 4 UO.Press(KeyDown) next endif if d == 3 then # SE for z = 1 to 4 UO.Press(KeyLeft) next endif if d == 4 then # S for z = 1 to 4 UO.Press(KeyLeft) next endif if d == 5 then # SW for z = 1 to 4 UO.Press(KeyUp) next endif if d == 6 then # W for z = 1 to 4 UO.Press(KeyUp) next endif if d == 7 then # NW for z = 1 to 4 UO.Press(KeyRight) next endif end sub sub WalkToXYGoAround3(a) var z var d = UO.GetDir() if d == 0 then # N for z = 1 to 4*a UO.Press(KeyEnd) next for z = 1 to 6*a UO.Press(KeyUp) next endif if d == 1 then # NE for z = 1 to 4*a UO.Press(KeyLeft) next for z = 1 to 6*a UO.Press(KeyPageUp) next endif if d == 2 then # E for z = 1 to 4*a UO.Press(KeyHome) next for z = 1 to 6*a UO.Press(KeyRight) next endif if d == 3 then # SE for z = 1 to 4*a UO.Press(KeyUp) next for z = 1 to 6*a UO.Press(KeyPageDown) next endif if d == 4 then # S for z = 1 to 4*a UO.Press(KeyPageUp) next for z = 1 to 6*a UO.Press(KeyDown) next endif if d == 5 then # SW for z = 1 to 4*a UO.Press(KeyRight) next for z = 1 to 6*a UO.Press(KeyEnd) next endif if d == 6 then # W for z = 1 to 4*a UO.Press(KeyPageDown) next for z = 1 to 6*a UO.Press(KeyLeft) next endif if d == 7 then # NW for z = 1 to 4*a UO.Press(KeyDown) next for z = 1 to 6*a UO.Press(KeyHome) next endif end sub sub WalkToXYGoAround4(a) var z var d = UO.GetDir() if d == 0 then # N for z = 1 to 4*a UO.Press(KeyEnd) next for z = 1 to 6*a UO.Press(KeyRight) next endif if d == 1 then # NE for z = 1 to 4*a UO.Press(KeyLeft) next for z = 1 to 6*a UO.Press(KeyPageDown) next endif if d == 2 then # E for z = 1 to 4*a UO.Press(KeyHome) next for z = 1 to 6*a UO.Press(KeyDown) next endif if d == 3 then # SE for z = 1 to 4*a UO.Press(KeyUp) next for z = 1 to 6*a UO.Press(KeyEnd) next endif if d == 4 then # S for z = 1 to 4*a UO.Press(KeyPageUp) next for z = 1 to 6*a UO.Press(KeyLeft) next endif if d == 5 then # SW for z = 1 to 4*a UO.Press(KeyRight) next for z = 1 to 6*a UO.Press(KeyHome) next endif if d == 6 then # W for z = 1 to 4*a UO.Press(KeyPageDown) next for z = 1 to 6*a UO.Press(KeyUp) next endif if d == 7 then # NW for z = 1 to 4*a UO.Press(KeyDown) next for z = 1 to 6*a UO.Press(KeyPageUp) next endif end sub sub WalkToXYGoAround(a) if a == 1 then # Пытаемся обойти объект слева WalkToXYGoAround1() return 1 endif if a == 2 then # Пытаемся обойти объект справа WalkToXYGoAround2() return 1 endif if a == 3 or a == 5 or a == 7 then # Пытаемся отойти назад и обойти объект слева WalkToXYGoAround3(a-2) return 1 endif if a == 4 or a == 6 or a == 8 then # Пытаемся отойти назад и обойти объект справа WalkToXYGoAround4(a-3) return 1 endif return 0 end sub sub WalkToXY(x,y) var halts = 0, halt, z dim HaltX[6144], HaltY[4096], HaltA[100] var status repeat WalkToXY_plain(x,y) if Numb(x-UO.GetX())<=1 and Numb(y-UO.GetY())<=2 then TermToHide() return 1 endif # Застряли. # Использовать один из алгоритмов обхода препятствия. # Если застряли в одной из точек, в которой уже застревали, # то используем новый алгоритм обхода. # Если все алгоритмы кончились, то считаем, что цель недосягаема. halt = halts for z = 0 to halts if HaltX[z] == UO.GetX() and HaltY[z] == UO.GetY() then halt = z z = halts halts = halts - 1 endif next halts = halts + 1 if not HaltA[halt] then HaltX[halt] = UO.GetX() HaltY[halt] = UO.GetY() HaltA[halt] = 0 endif HaltA[halt] = HaltA[halt] + 1 ExecToHide() status = WalkToXYGoAround(HaltA[halt]) until status == 0 TermToHide() return 0 end sub sub WalkToXY_plain(x,y) var i, dx, dy, dist, distMin = -1, z, far = 40 var NStock if UO.GetGlobal('CheckDanger') <> '1' then NStock = 8 else NStock = 4 endif for i = 1 to NStock if UO.GetGlobal('GoHome') <> '1' then CheckDanger() endif while UO.Dead() UO.Exec('warmode 1') Wait(10000) wend ExecToHide() dx = x - UO.GetX() dy = y - UO.GetY() dist = sqrt(dx*dx + dy*dy) if distMin < 0 or dist < distMin then distMin = dist i = 1 endif if dist < 0.8 then TermToHide() return 1 endif if dx > 0 and dy > 0 then UO.Press(KeyDown) endif if dx > 0 and dy < 0 then UO.Press(KeyRight) endif if dx < 0 and dy > 0 then UO.Press(KeyLeft) endif if dx < 0 and dy < 0 then UO.Press(KeyUp) endif if dx > 0 and dy == 0 then if dist < far or UO.Random(5) == 0 then if dist > far then for z = 1 to 12 UO.Press(KeyPageDown) next else UO.Press(KeyPageDown) endif else if UO.Random(2) == 0 then for z = 1 to 12 UO.Press(KeyRight) next else for z = 1 to 12 UO.Press(KeyDown) next endif endif endif if dx < 0 and dy == 0 then if dist < far or UO.Random(5) == 0 then if dist > far then for z = 1 to 12 UO.Press(KeyHome) next else UO.Press(KeyHome) endif else if UO.Random(2) == 0 then for z = 1 to 12 UO.Press(KeyUp) next else for z = 1 to 12 UO.Press(KeyLeft) next endif endif endif if dx == 0 and dy > 0 then if dist < far or UO.Random(5) == 0 then if dist > far then for z = 1 to 12 UO.Press(KeyEnd) next else UO.Press(KeyEnd) endif else if UO.Random(2) == 0 then for z = 1 to 12 UO.Press(KeyDown) next else for z = 1 to 12 UO.Press(KeyLeft) next endif endif endif if dx == 0 and dy < 0 then if dist < far or UO.Random(5) == 0 then if dist > far then for z = 1 to 12 UO.Press(KeyPageUp) next else UO.Press(KeyPageUp) endif else if UO.Random(2) == 0 then for z = 1 to 8 UO.Press(KeyUp) next else for z = 1 to 8 UO.Press(KeyRight) next endif endif endif next TermToHide() return 0 end sub sub sqrt(n) var a = 0 var b = n var s = 0.01 var c if n == 0 then return 0 end if if n < 0 then UO.Print('Error in SQRT argument!!!!!!!!!') return -1 end if if b < 1 then b = 1 end if while b - a > s c = 0.5 * (a + b) if c*c < n then a = c else b = c end if wend return 0.5 * (a + b) end sub sub HealFull() var Trys UO.SetGlobal('HealFull', '1') while UO.GetHP() < UO.GetMaxHP() if UO.Life > 110 then ToHide() endif if UO.Life < 50 then UO.UseType(HealType) end if if UO.Stamina < 60 or (UO.Life < 70 and UO.Stamina < 80) then DrinkRefresh() end if UO.DeleteJournal() UO.BandageSelf() Trys = 0 repeat wait(500) Trys = Trys + 1 until Trys > 10 or UO.InJournal('You put bloody bandage') or UO.InJournal('You apply bandages but') or UO.InJournal('Do you wanna make a mummy') or UO.InJournal('You apply bandages but') or UO.InJournal('You must wait to perform') wend UO.SetGlobal('HealFull', '0') end sub |
|
| Page 1 of 1 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|