Yoko

All sides of Injection
It is currently 2025-12-24 03:54:27

All times are UTC+02:00




Post new topic  Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 2007-06-08 08:54:22 
Offline

Joined: 2004-05-26 16:39:57
Posts: 38
Location: www.myruo.ru
Я играю на шарде, где шахта Kendal является ГЗ. В ней установлены Bank-chest, Плавилка, Наковальня и треш-бочка. Сам бог велел написать скрипт, который бы мог круглосуточно копать, плавить, ковать и сливать накованное в треш.
В целом с задачей я справился, но есть проблема - примерно через час-полтора происходит Unhandled exception и скрипт останавливается, либо вообще крашит клиент. Как можно с этим бороться?
Может, сменить версию инжекта?
Или что-то переделать в скрипте?
Заранее благодарю за помощь.

Вот код скрипта:

Code:
; скрипт на гвардинг. Запускается параллельно с основным.
sub guards()
  var bandageTYPE='0x0E21' ; Тип бинтов
  var hidewithdetect=0 ; 0, если не хотите использовать детект хидден, иначе любое другое значение
  var i, j
  repeat
  if uo.injournal('атакует Вас') or uo.injournal('Elemental') or ((uo.str-1)>uo.life) then
  uo.deleteJournal()
  for i=0 to 5
    uo.waittargetself()
    uo.usetype(bandageTYPE) ; юзаем на себя бинты
    for j=1 to 2
      wait(2000)
      uo.msg('guards')
    next
    uo.warmode(0)
  next
  end if
  wait(500)
  until uo.dead()
end sub

; Главный скрипт.
sub min()
var i,j
var trashX = 2569 ; Координаты треш-бочки - Х
var trashY = 475 ; и У

var trashTYPE='0x0FAE' ; Тип треш-бочки

var bankX=2560 ; Координаты банка - Х
var bankY=490 ; и У

var forgeID="0x40023C3C" ; ID форжи, в которой будете плавить.

var ingTYPE='0x1BEF' ; Тип инготов
var hamTYPE='0x13E3' ; Тип молотка в вашем паке

var ignoreLUX=0 ; Если высставить на 1 или другое значение - игнорим сокровища

var hidewithdetect=0 ; 0, если не хотите использовать детект хидден, иначе любое другое значение

var pickaxeTYPE='0x0E86' ; Тип кирки

var bankPack = '0x4007DB19' ; ID мешка в банке. предметы будут положены именно туда.
var bankObj = '0x4010A2B5' ; ID банковского сундука

var coordSIZE=13 ; Размер массива вейпоинтов
dim coordsX[13] ; Два массива way-point`ов. Чар ходит по ним поочередно
dim coordsY[13] ; Если накопал предельный вес, идет к форже и плавит, потом кует, потом в треш.
coordsx[0]=
coordsy[0]=
 ..... координаты way-points
coordsx[12]=
coordsy[12]=

var trashSIZE=4 ; Размер массива треш-типов
dim a_trashTYPE[4]
a_trashTYPE[0]='0x13E3' // в треш сливаются накованные молотки и оставшиеся инготы
a_trashTYPE[1]='0x1BEF'
a_trashTYPE[2]='0x1BF5'
a_trashTYPE[3]='0x1BE9'

repeat
  for i=0 to coordSIZE-1
    if ignoreLUX==0 then
      if UO.Weight>UO.Str*4-150 then
        movechar(bankX, bankY)
        unloading(bankPack,bankObj)
        plavka(forgeID)
        bs(ingTYPE,hamTYPE)
        movechar(trashX, trashY)
        for j=0 to trashSIZE-1
          trashit(a_trashTYPE[j],trashTYPE)
        next
      end if
    else
    if UO.Weight>UO.Str*4 then
      movechar(bankx, banky)
      unloading(bankPack,bankObj)
      plavka(forgeID)
      bs(ingTYPE,hamTYPE)
      movechar(trashX, trashY)
      for j=0 to trashSIZE-1
        trashit(a_trashTYPE[j],trashTYPE)
      next
    end if
  end if
  movechar(coordsx[i],coordsy[i])
  hide(hidewithdetect)
  min5x5(ignoreLUX, pickaxeTYPE)
  next
until uo.dead()
end sub

sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(30000) # WorldSave Protection
UO.Say('')
wait(3000)
UO.Say('')
wait(3000)
UO.Say('')
wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
wait(3000)
wend
wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.Exec('terminate main')
UO.Exec('exec main')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub

sub trashit(trtype, trashTYPE)
;сливаем в треш-бочку все предметы с типом trtype.
;Бочка должна быть в пределах видимости
var i
var Trken
uo.findtype(trashTYPE,-1,'ground')
if uo.findcount()==0 then
uo.print("Бочки нет");
return
end if
Trken=uo.GetSerial('finditem')
uo.findtype(trtype,-1,'backpack')
while uo.findcount()>0
uo.waittargetobject('finditem')
uo.useobject(Trken)
i=0
uo.deletejournal()
repeat
wait(200)
i=i+1
until uo.injournal('You have recieved') or i>40
uo.findtype(trtype,-1,'backpack')
Wend
end sub


sub bs(ingTYPE,hamTYPE)
; Куем из айрон-ингов молотки
var i
var ew=500
uo.waittargetself()
uo.usetype(hamTYPE) ; молоток - в руки
uo.set('injectecho','1')
uo.set('soundecho','1')
uo.set('finddistance','1')
Uo.deleteJournal()
repeat
if uo.count(ingTYPE, 0)==0 then
return
end if
uo.findtype(ingTYPE,0)
if uo.getquantity('finditem')<6 then
return
end if
uo.useobject('finditem')
uo.waitmenu('Blacksmithing','Weapons','Weapons','Maces','Maces',"hammer")
Uo.deleteJournal()
i=0
Repeat
wait(200)
i=i+1
Until UO.InJournal("You put the") or UO.InJournal("You have failed") or UO.InJournal("Menu choice not found")or uo.inJournal("Warning")or i>50
if UO.InJournal("Menu choice not found")or uo.inJournal("Warning") then
uo.print("Menu choice not found")
wait(1000)
return
end if
if UO.InJournal("You have failed") then
ew=ew+500
else
ew=500
end if
wait(ew)
until uo.dead()
end sub

;Скрипт на обкопку пространства вокруг себя

sub min5x5(ignoreLUX, pickaxeTYPE)
var x,y,i,skip
dim OreToSkip[7]
OreToSkip[0]="Rose Ore"
OreToSkip[1]="Gold Ore"
OreToskip[2]="Shadow Ore"
OreToSkip[3]="Crystal Ore"
OreToSkip[4]="Oldcopper Ore"
OreToSkip[5]="Silver Ore"
OreToSkip[6]="Snow Ore"

uo.exec('resend')
for x=-2 to 2
for y=-2 to 2
repeat
if ignoreLUX==0 then
if UO.Weight > UO.Str*4-150 then
return
end if
else
if UO.Weight > UO.Str*4 then
return
end if
end if
wait(1000)
uo.exec('waittargettile tilenum '+str(x+uo.getx())+' '+str(y+uo.gety())+' 0')
uo.usetype(pickaxeTYPE)
i=0
uo.deletejournal()
repeat
i=i+1
wait(100)
until (i>=100) or uo.injournal('You put') or uo.injournal('You loosen') or uo.injournal('Здесь больше') or uo.injournal('нельзя копать') or uo.injournal('far away') or uo.injournal("can't reach")
if uo.injournal('find') and ignoreLUX==0 then
putuplux()
end if
skip=0
if uo.injournal('You put') then
for i=0 to 6
if uo.injournal(OreToSkip[i]) then
Skip=1
end if
next
end if
if uo.injournal("can't reach") then
uo.resend()
end if
until uo.injournal('Здесь больше') or uo.injournal('нельзя копать') or uo.injournal('far away') or uo.injournal("can't reach") or (skip==1)
next
next
end sub

; Скрипт на переплавку выкопанной руды. Не проверяет скилы.
; Т.е. если Вы выкопали метеор, он лежит у Вас в паке, но
; Вы не можете его переплавить, то он пропадет
; Скрипт написал Адил :-)
sub plavka(forgeID)
var fX = 2574
var fY = 475
var OT, OC, i
DIM OreColor[8]
OreColor[0] = '0x0000'
OreColor[1] = '0x0944'
OreColor[2] = '0x0770'
OreColor[3] = '0x06A3'
OreColor[4] = '0x0481'
OreColor[5] = '0x0487'
OreColor[6] = '0x0482'
OreColor[7] = '0x0633'

DIM OreType[4]
OreType[0] = '0x19B9'
OreType[1] = '0x19B8'
OreType[2] = '0x19BA'
OreType[3] = '0x19B7'
movechar(fX,fY)
For OC = 0 to 7
For OT = 0 to 3
While Not UO.Dead() And UO.Count( OreType[OT] , OreColor[OC] ) > 0
UO.DeleteJournal()
i = 0
wait(300)
uo.waittargetobject(forgeID)
UO.UseType( OreType[OT] , OreColor[OC] )
Repeat
wait(100)
i = i + 1
Until UO.Dead() or UO.InJournal("You put") or UO.InJournal("You fail") or UO.InJournal("*You smelt") or i > 30
wend
wait(300)
next
next
end sub

; Скрипт на собирание "сокровищ".

sub putuplux()
dim LT[10]
LT[0]='0x1B48'
LT[1]='0x1B47'
LT[2]='0x1B46'
LT[3]='0x1B45'
LT[4]='0x1B44'
LT[5]='0x1B43'
LT[6]='0x1B42'
LT[7]='0x1B41'
LT[8]='0x1B40'
LT[9]='0x1B3F'
var bx=2559
var by=490
var i, j
uo.set('finddistance','3')
for i=0 to 9
uo.findtype(LT[i], -1, 'ground')
if uo.findcount()>0 then
uo.moveitem('finditem',0,'my')
j=0
repeat
wait(10)
j=j+1
until (j==100) or (uo.containerof('finditem')=='backpack')
uo.useobject('finditem')
wait(600)
end if
next
end sub

; Скрипт на переброску предметов с типом type и цветом color в банк.
sub movetobank(type,color,bankPack,bankObj)
uo.useobject(bankObj)
wait(500)
uo.findtype(type, color, 'my')
while uo.findcount()>0
uo.moveitem('finditem', 0, bankPack)
wait(600)
uo.findtype(type, color, 'my')
wend
end if
end sub

; Скрипт на перекладывание "лишних" предметов в банк.
; Я туда складывал все драгоценные камни (типа турмалинов),
; деньги и руду высших металлов.
sub unloading(bankPack,bankObj)
var i,j
dim items[10]
items[0]= '0x0F0F'
items[1]= '0x0F15'
items[2]= '0x0F26'
items[3]= '0x0F13'
items[4]= '0x0EED'
items[5]= '0x0F18'
items[6]= '0x0F16'
items[7]= '0x0F10'
items[8]= '0x0F11'

DIM OreColor[3]
OreColor[0] = '0x04C2' # bloodrock
OreColor[1] = '0x0455' # blackrock
OreColor[2] = '0x0577' # meteor

DIM OreType[4]
OreType[0] = '0x19B9'
OreType[1] = '0x19B8'
OreType[2] = '0x19BA'
OreType[3] = '0x19B7'
for i=0 to 2
for j=0 to 3
if uo.count(OreType[j], OreColor[i])>0 then
movetobank(OreType[j],OreColor[i],bankPack,bankObj)
wait(600)
endif
next
next
for i=0 to 8
if uo.count(items[i])>0 then
movetobank(items[i], '-1',bankPack,bankObj)
wait(600)
end if
next
end sub

sub CheckLag()
UO.DeleteJournal()
uo.exec('resend')
UO.Click('backpack')

repeat
wait(500)
until UO.InJournal('Backpack')
end sub

sub hide(hidewithdetect)
; Встаем в хайд
uo.warmode(0)
while not uo.hidden()
if hidewithdetect<>0 then
uo.useskill('Detect Hidden'); перед тем как встать в хайд, детектим.
wait(4000) ; если это не нужно, стираем эти две строчки
end if
uo.useskill('Hiding')
wait(3000)
wend
end sub

; Скрипт, непосредственно двигающий чара в указанную клетку.
; нормально работает только из-за особенностей Кендаля -
; Там просто негде затрять, если way-point`ы расставлены с умом
sub movechar(xx,yy)
repeat
if yy<uo.gety() then
gon()
else
if yy>uo.gety() then
gos()
end if
end if
if xx<uo.getx() then
gow()
else
if xx>uo.getx() then
goe()
end if
end if
until (xx==uo.getx()) and (yy==uo.gety())
end sub

; следующие 4 саба взяты из какого-то скрипта с форума yoko.
; их цель - сделать шаг на соседнюю клетку
sub GoW()
VAR walkwait=300
VAR x,y,dir=6
VAR key=36 ; Home key
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)

wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif

If UO.GetX()+1==x Then
return -1
Else
return 1
Endif
end sub


sub GoN()
VAR walkwait=300
VAR x,y,dir=0
VAR key=33 ; PgUp
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)

wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif

If UO.GetY()+1==y Then
return -1
Else
return 1
Endif
end sub


sub GoE()
VAR walkwait=300
VAR x,y,dir=2
VAR key=34 ; PgDown
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)

wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif

If UO.GetX()-1==x Then
return -1
Else
return 1
Endif
end sub

sub GoS()
VAR walkwait=300
VAR x,y,dir=4
VAR key=35 ; End
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)

wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif

If UO.GetY()-1==y Then
return -1
Else
return 1
Endif
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 main()

end sub


Top
   
 Post subject:
PostPosted: 2007-06-13 08:20:49 
Offline

Joined: 2004-05-26 16:39:57
Posts: 38
Location: www.myruo.ru
жду. Очень терпеливо :)

Скажите хотя бы, какая версия Инжекта самая стабильная?..


Top
   
 Post subject:
PostPosted: 2007-07-06 15:03:01 
Offline
User avatar

Joined: 2006-05-12 08:03:45
Posts: 223
Везёт людям - в шахте полный соцпакет. :D
Кстати копает только на 2 клетки? Просто на ДРВ.РУ можно на 4 клетки копать. Так мне хватает один раз перейти на 8 клеток в любую сторону. Я не парился и через UO.PRESS() "нарисовал" путь куда перейти если всё выкопал. Правда я в случае перегруза кричу Kal Or Por, и ближе к дому - руду скинул, и в шахту. Моих скромных знаний на это хватило. А по поводу краша. У меня 2 компа на одном нормально, а на другом не очень. А в связи с ухудшением интернет-связи(ADSL), даже несбойные скрипты вылетать начали.
Инжект - 505.18 VeNd0r - меня устраивает.


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

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


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