Yoko

All sides of Injection
It is currently 2025-11-07 19:19:37

All times are UTC+02:00




Post new topic  Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 2005-01-14 16:37:52 
Offline

Joined: 2004-04-05 11:59:21
Posts: 69
Location: RunUO
-----------------------Введение.
Скрипт написан для RunUO в сентябре 2003г.Ходилка в скрипте использована от Йоко(Спасибо!)
Реколы использует паладинские(Sacred Journey).Соответственно скил чивалри(Chivalry) должен
быть достаточен для этого и в книге(Book of Chivalry) должны быть деньги(Tithing points)
Чар начинает работу у своего дома,где берет из сундука кирки,потом реколится в шахту
и начинает копать в первой точке согласно файлу пути.Если все выкопал-идет в точку 2 ит.д.
Если превышен вес реколится к дому,плавит руду,инги складывает в сундук.Если кирок меньше 2
берет кирки.При создании файла пути следует располагать точки по прямой
(без препятствий между ними).Скрипт закончит работу если чар умрет:) или если закончатся кирки
в сундуке.


------------------------Настройка скрипта
-Требуется ввести значения 3 переменных
-Создать файл точек в которых будет копать чар
Но все не так уж и страшно:)
1.В бекпек чару кладем Runebuk. Набираем в УО ,info далее таргетом на Runebuk
получаем в текстовом окне нечто вида:
Code:
ID=0x4001435E Type=0x22C5 CWBWJMD Name=
Quantity: 1  Colour: 0x084B  Layer: 0  Has: 1
X=66 Y=66 Z=0 C=0x400A2007 F=0x00

Нам нужен ID. Это значение вставляем в скрипт в переменную MyRunebuk
Code:
var MyRunebuk='0x4001435E'

2,3.Рядом с домом(платформой) марчим руну.Таким образом чтобы с этого места чар
мог достать Forge и сундук в который будет выкладывать инги.Эту руну кладем
первой(!!!!! это важно) в Runebuk.
С помощью ,info узнаем ID Forge и сундука.Соответственно изменяем значения
Code:
Var Forg='0x4000898C' 
Var Box='0x40013750'

Приступаем к созданию файла пути.
Зайдите в шахту в которой собираетесь копать.Станете вы на входе в шахту или
посередине ее особого значения не имеет.:) Далее марчим руну в этом месте.Эту руну
кладем второй(!!!!! это важно) в Runebuk.Набираем в УО ,infotile далее таргетом на
пол шахты, делаем по прямой 4-5 шагов -снова ,infotile таргет на пол шахты и т. д.
Так насобирали допустим 6 точек.Открываем текстовое окно Инжекта.Там видим например:
Code:
1343 1198 1417 -95
 
1340 1183 1425 -95 

1351 1179 1424 -95 

1340 1173 1414 -95 

1340 1171 1427 -95


В блокноте создаем файл например с именем Mine1.txt далее копируем туда наши точки,
удаляем пустые строки и сохраняем файл Mine1.txt :) Вот как он выглядит.
Code:
1343 1198 1417 -95
1340 1183 1425 -95 
1351 1179 1424 -95 
1340 1173 1414 -95 
1340 1171 1427 -95


Внимание!Для коректного опознания Инжектом конца файла нужно чтобы курсор находился
в первой позиции последней строки.(хм чтобы стрелками на клавиатуре его можно
было туда опусить... может быть так понятнее?:))

Первая строка скрипта-путь к этому файлу.
Code:
Var FileName='E:\GAMES\Injection\Mine1.txt'

Измените на свой.

Вот собственно и все!Совсем не сложно!Правда?:)
---------------------Возможные проблемы
-Чар реколится к сундуку,берет кирки,реколится в шахту и появляется ошибка Инжекта
Unhandled exeception in parser
Возможные причины- неправильно указан путь к файлу точек копания.Либо неправильное
имя самого файла.Проверьте не имеет ли файл имя например Mine1.txt.txt :))

Удачи!!!

Code:
;***********************************************************************************

Var FileName='E:\GAMES\Injection\Mine1.txt'

Var ore = '0x19B9'
Var MaxWeight
Var Pickaxe= '0x0E86'
Var MoveDelay=1000 # Промежуток между шагами
Var MoveNumber=1   # Количество шагов при смене дислокации
Var Ep=0.172 # Значение ширины угла хождения при определении направления.
#Если на пути встречаются сложные и широкие препятствия - увеличить.
#0.172 - сбалансированный.
var XN = 1117
var YN = 1462
var Stoplocation


Var RecToForg = '7'
Var RecToMine = '13'
Var Forg='0x4000898C'
Var Box='0x40013750'
var MyRunebuk='0x4001435E'



MaxWeight= ((uo.STR*3.5)+39)
if MaxWeight >= 410 then
   MaxWeight=410
endif

;---------------------------------------
Sub Main()
uo.set('norbcalc','1')
uo.set('norbcheck','1')
uo.set('injectecho','1')

if uo.count(Pickaxe) < 1 then
   Recaling(RecToForg)   
   GrAxe()
end if
   Mine()
EndSub
;---------------------------------------
Sub Mine()
Var Tl,T,X,Y,Z
Var F
var Tim
var Jurn
 Dim Сli[9]
Сli[0]="cliloc# 0xA867"  ;You can't mine...
Сli[1]="cliloc# 0xAD03"  ;You loosen
Сli[2]="cliloc# 0xAD00"  ;there no metal
Сli[3]="cliloc# 0x6B31"  ;backpack full
Сli[4]="cliloc# 0xEE46"  ;worn out tool!
Сli[5]="cliloc# 0x5DE1"  ;dull cuper
Сli[6]="cliloc# 0x5DE6"  ;agapit
Сli[7]="cliloc# 0xA2DE"  ;is too far away
Сli[8]="cliloc# 0xACF9"   ;where do you wish to dig
Сli[9]="cliloc# 0xA866"  ;You can't mine...
;----------------------------
Begin:
 Recaling(RecToMine)

Stoplocation = 0
F=File(FileName)
F.Open()
Beg:
Tl=safecall F.Readln()
Tl=Trim(Tl)
If Tl=='File read error' Then
  GoTo Ext
EndIf
T=GetNumb(Tl,0)
X=GetNumb(Tl,1)
Y=GetNumb(Tl,2)
Z=GetNumb(Tl,3)

UO.Print('GoTo hext point')
gotoxy(X,Y,1)
if Stoplocation == 1 then   
  Recaling(RecToForg)
  SmOre()
  GrOre()
  GrAxe()
  GoTo Ext
EndIf

REPEAT   
   uo.deletejournal()   
     UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))   
     UO.usetype(Pickaxe)   
   wait(200)
   Tim = UO.Timer()
REPEAT                           
                 wait(150)
                 Jurn=UO.Journal(0)
UNTIL ((UO.Timer()-Tim) > 40 or (not UO.Weight < MaxWeight) or Jurn[10] == "5" or Jurn == Сli[1] or Jurn == Сli[2] or Jurn == Сli[3] or Jurn == Сli[4] or Jurn == Сli[0] or Jurn == Сli[9] or UO.GetHP()==0)

UNTIL  Jurn == Сli[3] or (not UO.Weight < MaxWeight) or Jurn == Сli[2] or uo.count(Pickaxe)==0 or Jurn == Сli[7] or Jurn == Сli[0] or Jurn == Сli[9]
If Jurn == Сli[2] or Jurn == Сli[0] or Jurn == Сli[7] or Jurn == Сli[9] then
  UO.Print('there no metal !!!')
  GoTo Beg
EndIf   
If Jurn == Сli[3] or (not UO.Weight < MaxWeight) or uo.count(Pickaxe)==0 then
  UO.Print('backpack full!!!')
  Recaling(RecToForg)
  SmOre()
  GrOre()
  GrAxe()
EndIf
Ext:
F.Close()
 UO.Print('S T O P!!!')
GoTo Begin
EndSub

Sub GetNumb(C,I)
var J,T,K
J=0
K=1
While K>0
  J=J+1
  If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then
   If I==0 Then
    T=Val(Left(C,J))
   Else
    T=GetNumb(Right(C,Len(C)-J-1),I-1)
   EndIf
   K=0
  EndIf
wend
UO.Print(T)
return T
endsub
;---------------------------------------------
sub SmOre()
var Сli="cliloc# 0xA2DE"  ;is too far away
uo.deletejournal() 
repeat
uo.findtype(ore)
uo.waittargetobject(Forg)
uo.useobject("finditem")                     
                 wait(900)                 
If uo.InJournal(Сli) > 0 then 
  Recaling(RecToForg) 
EndIf
until not uo.count(ore)
end sub
;---------------------------------------------
sub GrOre()
repeat
  uo.findtype('0x1BF2') #ingots   
  uo.moveitem('finditem','0',Box)
  wait(700)
until not uo.count('0x1BF2')
end sub
;---------------------------------------------
sub GrAxe()
var Mes='Contains'
var Tim
uo.deletejournal()

if uo.count(Pickaxe) < 2 then
   uo.useobject(Box)
   Tim = UO.Timer()
     repeat
       Wait(100) 
     until uo.InJournal(Mes) or (UO.Timer()-Tim) > 30
   Wait(200)
   uo.findtype(Pickaxe,'-1',Box)
    Wait(200)
   if uo.findCount()>2 then   
   repeat   
      uo.findtype(Pickaxe,'-1',Box)
      UO.grab('1','finditem')
      Wait(1200)
   until uo.count(Pickaxe)==2 
     else
     UO.print("--NET KIROK!!!!----")     
     UO.Exec('terminate all')     
   end if
end if
end sub

;**************************************************************************
Sub Recaling(Num)
var myx, myy,Tim
var Cli="cliloc# 0xA8B6"
var Cli2="cliloc# 0xAA57"
var recOk = false

if uo.Waiting() then
   uo.canceltarget()
   wait(200)
end if

 wait(800)
myx=uo.getx()
myy=uo.gety()
uo.deletejournal()
REPEAT
              uo.recall(MyRunebuk,Num) 
              Tim = UO.Timer()
  repeat                       
     wait(100)                 
  until (UO.Timer()-Tim) > 50 or myx<>uo.getx() or myy<>uo.gety() or uo.InJournal(Cli)
If myx<>uo.getx() or myy<>uo.gety() or uo.InJournal(Cli) Then
recOk = True
else
  if uo.InJournal(Cli2) then
     uo.findtype(ore)
     uo.moveitem('finditem','1','ground')
     wait(500)
  end if
EndIf
UNTIL recOk
End Sub

;---------------------------------
sub gotoxy(x,y,prec)
var ld=0,ldc=0
var dx,dy
var mx,my
var ox,oy,mk,k
#uo.print(">")
#uo.track("1",str(x),str(y))
start:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if not ldc then
;uo.print(STR(dx))
end if
if dx<3 then
mk=70
else
mk=15
end if

ox=mx
oy=my
for k=1 to mk
mx=UO.GetX()
my=UO.GetY()
if mx<>ox or my<>oy then
goto sdidapl
end if
wait(10)
next
sdidapl:

mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if

if dx<=prec then
return
end if
if ld==dx then
ldc=ldc+1
if ldc>100 then
  uo.print("Can not reach location!")
  Stoplocation = 1   
  return
end if
else
ld=dx
end if

if mx==x then
if my==y then
return
endif
if my>y then
#UO.Print("UR")
UO.Press(33)
goto start
endif
#UO.Print("DL")
UO.Press(35)
goto start
end if
if mx<x then
if my>y then
#UO.Print("R")
UO.Press(39)
goto start
endif
if my==y then
#UO.Print("DR")
UO.Press(34)
goto start
endif
#UO.Print("D")
UO.Press(40)
goto start
end if
if my<y then
#UO.Print("L")
UO.Press(37)
goto start
endif
if my==y then
#UO.Print("LU")
UO.Press(36)
goto start
endif
#UO.Print("U")
UO.Press(38)
goto start
end sub


Top
   
 Post subject:
PostPosted: 2005-01-15 08:18:26 
Offline

Joined: 2004-12-27 17:03:45
Posts: 28
Location: Kyiv. UA.
на аосе я так понимаю это работать не будет..

_________________
Благодарю, Вы мне очень помогли =)


Top
   
 Post subject:
PostPosted: 2005-01-15 13:27:54 
Offline

Joined: 2004-04-05 11:59:21
Posts: 69
Location: RunUO
скрипт тестировался на:
Ultima Online: Age of Shadows.
Сервер RunUO v1.0 RC0


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 2 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