Yoko

All sides of Injection
It is currently 2024-05-12 15:32:22

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2008-01-24 11:44:36 
Offline

Joined: 2008-01-24 03:35:02
Posts: 1
Очень хороший скрипт на мининг,сам копает сам убивает эльменталей,тока 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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited