Code:
Алгоритм скрипта - прилетает по руне к животному писмейчит таймит убиват лутит все что в трупе летит дальше .проблема - он писмейчит только одни раз( тоесть за то время пока животное находиться в писмейке , если не затаймит то больше не писмейчит) так вот как сделать чтоб еше раз писмейчил( ну пока не затаймит)?
var Kol_run = 15 ; Колчиство рун в цикле по рунбуке
var Nom_run
var Nogik = '0x13FF' ; тип оружия для варки резки
var MaxWeight= ((uo.STR*3.5)+39)
var Obj
var Nojnici = '0x0F9F'
var Skur = '0x1079' ; тип шкур
var Skur2 = '0x1081' ; тип шкур 2
var Meat = '0x09F1 ' ; Мясо, решил не брезговать и им, чтоб потом кукинг прокачать
uo.setreceivingcontainer('Bagpak')
sub Start()
uo.setglobal('Tek_run_tm')
uo.exec('exec Main')
uo.exec('exec Control')
end sub
sub Main()
wait(1000)
uo.Targeting('self')
uo.set('norbcalc','1')
uo.set('norbcheck','1')
uo.set('injectecho','1')
while not uo.dead()
wait(500)
Nom_run = val(uo.getglobal('Tek_run_tm'))
uo.print('Nachali marshrut-' + str(Nom_run ) )
wait(500)
wait(500)
Rec_to_les() ; Перед тем как бежать к точке реколимся в лес
wait(8000)
uo.sayU("go go go")
Warka()
uo.print(str(UO.Count("0x0f7b")))
if uo.weight > MaxWeight -60 or UO.Count("0x0f7b") < 5 then
uo.print('Perepolne, domoi')
Rec_to_home()
wait(5000)
Sbros()
Getregs()
end if
Smena_run() ; меняем руну на новую
wend
EndSub
sub Warka() ; ********************************************************* основной скрипт *****************
var dx,dy, i , z , prizn = 0, kol_ani
DIM Dich[4]
Dich[0] = '0x00D4' ; Бык
Dich[1] = '0x00ea' ; большой олень
Dich[2] = '0x001B' ; гризлик
dich[3] = '0x00e8' ; др бык
dich[4] = '0x0019' ;волк
for i = 0 to 4 ; Цикл по типам животных
UO.Set('finddistance',10) ; дистанция для поиска
UO.FindType(Dich[i], '-1', '1') ; Ищем животное
Kol_ani = UO.FindCount()
wait(200)
If Kol_ani > 0 Then ; если нашли
uo.sayU("Popalsia!!")
obj = UO.GetSerial("finditem") ; запоминаем его
uo.print('Cel - ' + Obj)
wait(500)
Prizn = 1 ; ставим признак что живое
dx=UO.GetX(obj) ; находим координаты
dy=UO.GetY(obj)
uo.print( "begim k Dichi v tochke " + str(dx) + " " + str(dy))
Gotoxy(dx,dy,1) ; подходим поближе
uo.print('Usmirim')
Uo.Exec("warmode 0")
pace() ; усмиряем, не проверяя в принципе, это так для понта чтоб чуть прокачать пейсмакинг
Gotoxy(dx,dy,1) ; ближе подходим
Uo.Exec("warmode 1")
Uo.Exec("warmode 0")
uo.print('tamim')
Taming() ; таймим
wait(1000)
Release() ; и отпускаем
wait(1000)
uo.sayU("all guard")
wait(100)
uo.sayU("all guard")
wait(1000)
repeat
uo.attack(Obj) ; атакуем
wait(200)
dx=UO.GetX(Obj) ; находим координаты
dy=UO.GetY(Obj)
if dx > 0 then ; могли уже успеть убить
gotoxy(dx,dy,1)
end if
UO.FindType('0x2006', '-1', '1') ; Ищем на земле труп
wait(2000)
If UO.FindCount() > 0 or uo.GetDistance(Obj) > 2 Then
if uo.GetDistance(Obj) > 2 then
UO.Cast('Flame Strike',Obj)
wait(7000)
end if
Prizn = 0 ; ставим признак что умерло, либо смоталось
uo.print('Aga, sdohlo ili sbejalo')
wait(1000)
end if
until prizn == 0
Goto_loot() ; бежим лутать
uo.ignore(Obj) ; игнорировать обьект в дальнейшем
end if
uo.print(Dich[i] + "-" + str(Kol_ani) )
next
if uo.life <100 then
HealBand()
end if
end sub
; **************************************************** Скрипт на автолут **********************
sub Goto_loot()
uo.print('Lutaem')
var dx,dy,Obj2
UO.Set('finddistance',10) ; дистанция для поиска
UO.FindType('0x2006', '-1', '1') ; Ищем на земле труп и засовываем его в переменную
if uo.findcount() > 0 then
obj2 = UO.GetSerial("finditem")
dx=UO.GetX(obj2)
dy=UO.GetY(obj2)
if dx > 0 then
uo.print ("begim k trupu v tochke " + str(dx) + " " + str(dy))
Gotoxy(dx,dy,1) ; Бежим к трупу
uo.waittargetobject(Obj2) ; установить прицел на труп
wait(1000)
UO.usetype(Nogik) ; Использовать нож на прицеле
wait(2000)
uo.UseObject(Obj2)
UO.Set( 'finddistance', '2' )
Repeat
UO.FindType( '-1', '-1', obj2)
UO.Grab( 200, 'finditem' ) ; грабим все что есть в трупе
wait(1000)
Until UO.FindCount() == 0
uo.ignore(Obj2) ; игнорировать обьект в дальнейшем
end if
uo.findtype(Skur)
if uo.findcount() > 0 then
obj2 = UO.GetSerial("finditem")
uo.waittargetobject(Obj2) ; установить прицел на шкуры
UO.usetype(Nojnici)
end if
end if
end sub
sub Taming()
dim Mes[6]
Mes[0]="cliloc# 0xAC14" #Already taming
Mes[1]="cliloc# 0xAC0D" #Vspomnila nas zivotina
Mes[2]="cliloc# 0xA2DE" #this a to far away
Mes[3]="cliloc# 0xAC0B" #this a to far away to continue taming
Mes[4]="cliloc# 0xAC0F" #accept
Mes[5]="cliloc# 0xAC0E" #fail to tame
Mes[6]="You can't tame a creature during fight"
repeat
uo.deletejournal()
wait(200)
if uo.getdistance(Obj)>1 then
gotoxy(uo.getx(Obj),uo.gety(Obj),1)
end if
uo.useskill("Taming",Obj)
repeat
wait(400)
until uo.injournal(Mes[0]) or uo.injournal(Mes[1]) or uo.injournal(Mes[2]) or uo.injournal(Mes[3]) or uo.injournal(Mes[4]) or uo.injournal(Mes[5]) or uo.injournal(Mes[6])
until uo.injournal(Mes[0]) or uo.injournal(Mes[1]) or uo.injournal(Mes[4])
uo.deletejournal()
wait(200)
end sub
sub release()
uo.recall("0x84e188f8",2)
wait(1000)
uo.say(uo.getname(Obj)+" release")
wait(500)
uo.recall("0x84e188f8",2)
wait(1500)
end sub
; ********************************************************** Писмакинг *********
sub pace()
uo.print(obj)
uo.waittargetobject(Obj)
uo.useskill("Peacemaking")
wait(15000)
end sub
; ******************************************************** Провокация **********************
Sub Smena_run()
var v = val(uo.getglobal('Tek_run_tm'))
if v < kol_run - 1 then ; Если текущий номер меньше всего количества рун то
uo.setglobal('Tek_run_tm',str(v+1)) ; + 1 к счетчику рунок
else
uo.setglobal('Tek_run_tm','0') ; Иначе начинаем цикл сначала
end if
wait(500)
end sub
sub Rec_to_home()
var Udacha = 0
var Run
var v = val(uo.getglobal('Tek_run_tm'))
uo.set( "norbcheck", "1" )
uo.set( "norbcalc", "1" )
run = v + 9
repeat
UO.FindType('0x0E3C', '-1', '1') ; Ищем сундуки
wait(100)
If UO.FindCount() < 1 Then ; если не находим сундук то значит еще в лесу
uo.cast("Recall",'Runebookid')
wait(8000)
else
Udacha = 1
end if
until Udacha == 1
Udacha = 0
end sub
sub Rec_to_les()
var Run
var v = val(uo.getglobal('Tek_run_tm'))
uo.set( "norbcheck", "1" )
uo.set( "norbcalc", "1" )
Run = v +1
uo.recall( 'Runebookid', 6*Run-1 ) ; тупо реколимся, даже если физл то ничего страшного
end sub
sub Sbros()
repeat
wait(1500)
uo.findtype(Skur2)
uo.moveitem('finditem','0','Box')
wait(1000)
until not uo.count(Skur2)
repeat
wait(1500)
uo.findtype(Meat)
uo.moveitem('finditem','0','Box')
wait(1000)
until not uo.count(Meat)
end sub
sub GetRegs()
Var I
var kolreg = 50
var kol_svit = 3
var kol_mesh
var kol_nado
var kolband = 50
uo.setreceivingcontainer('Bagpak')
uo.useobject('Box')
wait(200)
uo.sayU('Pivo mne blia!')
wait(200)
dim Regs[7]
Regs[0]="0x0f7b" ## Блудмосс ##
Regs[1]="0x0f86" ## Мандра ##
Regs[2]="0x0f7a" ## Блек пирл ##
Regs[3]="0x0f84" ## Гарлик ##
Regs[4]="0x0f85" ## Гинсенг ##
Regs[5]="0x0f88" ## Найт сидж ##
Regs[6]="0x0f8c" ## Сулфориус ##
Regs[7]="0x0f8d" ## Спайдер силк ##
wait(300)
#Выгрузка регов
if uo.getserial("Box")<>"0x00000000" then
for i=0 to 7
Uo.findtype(Regs[i],"-1","-1")
wait(300)
kol_Mesh = uo.count(Regs[i])
wait(200)
if Kol_Mesh < Kolreg then ; Если регов в бакпаке меньше чем положено то грузим недостачу
Uo.findtype(Regs[i],"-1","Box")
wait(300)
Uo.grab(str(Kolreg-Kol_Mesh),"finditem") ; Грузим разницу
wait(700)
end if
if Kol_Mesh > Kolreg then
Uo.moveitem("finditem",str(Kol_Mesh-Kolreg),"Box") ; Если больше то выгружаем разницу
wait(700)
end if
next
end if
; загружаем бинты
wait(300)
UO.FindType('0x0e21', "-1", "Box") ; Загружаем бинты если их мало
wait(300)
kol_mesh = UO.Count('0x0e21') ; смотрим сколько бинтов в бакпаке
uo.print(kol_mesh)
wait(300)
If Kol_Mesh < KolBand Then ; если количество меньше чем положено то берем
Uo.grab(str(KolBand-Kol_Mesh),"finditem") ; Грузим разницу ; загружаем разницу в бинтах
wait( 1000 )
Endif
if Kol_Mesh > KolBand then ; Если больше то выкидываем
Uo.moveitem("finditem",str(Kol_Mesh-KolBand),"Box") ; Если больше то выгружаем разницу
wait(700)
end if
endsub
sub Control()
var Notoriety,IsNPC, Jurn, danger
var v = val(uo.getglobal('tek_run'))
var i
while not uo.dead()
Jurn=UO.Journal(0)
if uo.Life < 100 then
UO.Exec('terminate Main')
UO.Exec('terminate main')
UO.Set('finddistance',10)
repeat
UO.FindType('0x0E3C', '-1', '1') ; Ищем сундуки
wait(100)
If UO.FindCount() < 1 Then ; если не находим то значит не смотались
uo.waittargetobject('0x401CADC3')
wait(100)
UO.Usetype("0x1f4c")
wait(100)
for i= 0 to 30
uo.Press(35) ; Бежим вниз и влево, чтоб враг не успевал атачить, если что упремся в сундук
wait(20)
next
uo.cast("Recall",'0x401CADC3')
for i= 0 to 30
uo.Press(35) ; Бежим вниз и влево, чтоб враг не успевал атачить, если что упремся в сундук
wait(20)
next
else
danger = 1 ; Ставим признак что опасность миновала
end if
wait(500)
until danger > 0
Smena_run() ; меняем руну
uo.sayU('Кто то напал, но мы смотались')
while uo.Life < 120
HealBand()
wait(5000)
wend
Danger = 0
GetRegs() ; добираем бинтов, регов и скролов
uo.print('Iz za napadenia nomer runki - ' + uo.getglobal('Tek_run_tm'))
wait(500)
uo.exec('exec Main') ; продожаем рубить
end if
wait(200)
wend
end sub
sub HealBand()
VAR LH=0,RH=0
if UO.ObjAtLayer("Rhand") then
RH=1
uo.addobject("Wep",UO.ObjAtLayer("Rhand"))
end if
if UO.ObjAtLayer("Lhand")then
LH=1
uo.addobject("Shield",UO.ObjAtLayer("Lhand"))
end if
UO.bandageself()
wait (800)
uo.waittargetlast()
if LH==1 then
uo.useobject("Shield")
wait (800)
end if
if RH==1 then
uo.useobject("Wep")
end if
end sub
; ------------------------------------------ Ходилка --------------------------------------
Sub GotoXY(x,y,prec)
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 Setup()
uo.Exec('addobject Box')
while uo.Targeting()
wait(100)
wend
uo.Exec('addobject Bagpak')
while uo.Targeting()
wait(100)
wend
uo.Exec('addobject Runebookid ')
while uo.Targeting()
wait(100)
wend
end sub :cry: