sub sparring()
var oppHpThreshold = 50/100 #порог хп оппонента, при котором отходить
var selfHpThreshold = 50/100 #порог своего хп, при котором отходить
uo.AddObject('opponent')
while uo.targeting()
wait(100)
wend
var done = 0
var oppHpLow = 0
var selfHpLow = 0
var selfX = uo.GetX()
var selfY = uo.GetY()
var oppX = uo.GetX('opponent')
var oppY = uo.GetY('opponent')
var dx = oppX - selfX
var dy = oppY - selfY
var Rhand = uo.GetGraphic(uo.ObjAtLayer('Rhand')) #тип объекта в правой руке (0x0000 если пусто)
var Lhand = uo.GetGraphic(uo.ObjAtLayer('Lhand')) #тип объекта в левой руке (0x0000 если пусто)
uo.WarMode(1)
uo.Attack('opponent')
repeat
if (uo.GetHP('opponent') < uo.GetMaxHP('opponent') * oppHpThreshold) then
oppHpLow = 1
end if
if (uo.Life < uo.str * selfHpThreshold) then
selfHpLow = 1
end if
#если у кого-то мало хп, отходи и лечимся
if (oppHpLow or selfHpLow) then
Step(-dx, -dy)
uo.WarMode(0)
if (oppHpLow) then
HealOpponent()
oppHpLow = 0
end if
if (selfHpLow) then
HealSelf()
selfHpLow = 0
end if
Step(dx, dy)
uo.WarMode(1)
uo.Attack('opponent')
end if
wait(500)
#иногда на сейвах слетает вар
if (not uo.WarMode()) then
uo.WarMode(1)
uo.Attack('opponent')
end if
#если в правой руке не то, что было в самом начале,
#и если в самом начале там что-то было, пытаемся взять тоже самое
#если того-же самого нет, ставим флаг завершения
if (uo.GetGraphic(uo.ObjAtLayer('Rhand')) <> Rhand and Rhand <> '0x0000') then
uo.FindType(Rhand)
if (uo.FindCount()) then
uo.Equipt('Rhand', Rhand)
uo.print('Equip Rhand device')
else
done = 1
uo.print('no more Rhand devices')
end if
end if
#аналогично правой руке
if (uo.GetGraphic(uo.ObjAtLayer('Lhand')) <> Lhand and Lhand <> '0x0000') then
uo.FindType(Lhand)
if (uo.FindCount()) then
uo.Equipt('Lhand', Lhand)
uo.print('Equip Lhand device')
else
done = 1
uo.print('no more Lhand devices')
end if
end if
#проверка на дохлость
if (uo.GetHP('opponent') == 0 or uo.Life == 0) then
done = 1
uo.print('somebody is dead')
end if
#если бинты кончились, заканчиваем
if (uo.B == 0) then
done = 1
uo.print('no more bandages')
end if
until done
Step(-dx, -dy)
uo.WarMode(0)
uo.print('Done traning')
end sub
#---------------------------------------------
#вспомогательные функции
sub HealOpponent()
uo.print('heal opponent')
repeat
uo.waittargetobject('opponent')
uo.usetype('0x0E21') #бинты
wait(5000)
until uo.getHP('opponent') == uo.getMaxHP('opponent')
uo.print('opponent heal complete')
end sub
sub HealSelf()
uo.print('heal self')
repeat
uo.bandageself()
wait(5000)
until uo.Life == uo.STR
uo.print('self heal complete')
end sub
sub Step(dx, dy)
var direction
dim directions[9]
directions[1] = 8
directions[2] = 7
directions[3] = 4
directions[4] = 9
directions[5] = 5
directions[6] = 1
directions[7] = 6
directions[8] = 3
directions[9] = 2
var idx = (sign(dx) + 1) * 3 + (sign(dy) + 1) + 1
uo.AddStep(directions[idx])
end sub
sub sign(n)
if (n < 0) then
n = -1
end if
if (n > 0) then
n = 1
end if
return n
end sub
Честна стыреный скрипт на спаринг с форума йоко.
Во как