Code: Select all
; Скрипт на вип шахту с хождением
; by WOLVERINE!!!!
;
; это первый мой крупный скрипт поэтому может он не слишком крутой
; Но я старался...
; by WOLVERINE!!!
; Скрипт делает следующее: чар копает всё вокруг себя, потом переходит к сле-
; дующему месту и т.д. Если набирёт указанный вес (по умолчанию 700) то пойдёт
; разгрузит руду в сундук, затем вернётся и продолжит с того места, на котором
; остановился. Копание происходит стоя в хайде.
;
; В случае выкапывания элементали, если включенно убийство элей
; (переменная KillElemental равна 1) чар будет пить инвизку, морфиться
; в демона, брать в руки щит, одевать горжетку,лечиться и килять элю,
; потом лутать руду и продолжать копать (чтобы всё это работало желательно,
; чтобы у чара были прокачены Wrestling, Parrying, Tactics, в бекпеке должны
; быть инвизки (чар будет пить перед тем как морфиться, чтобы эля не убила),
; тотал манки, щит, горжетка (это та часть армора, которая на шею одевается).
; Если убийство элей отключено (переменная KillElemental равна 0), то чар
; сначала, стоя в хайде, докапает всё вокруг себя, потом будет просто стоять.
;
; В скрипте предусмотренна одновременная прокачка спирит спика (это не отразиться
; на эффетивности скрипта).
;
; Настройка:
; Укажите нужно ли убивать элементалей (переменная KillElemental). По умолчанию включено.
; Укажите вес, набрав который чар пойдёт разгружаться (переменная maxweight)
; Укажите координаты х и у точки, находящейся рядом с сундуком (переменные x[0],y[o])
; Введите координаты тайлов, между которыми нужно ходить и стоя в которых копать (массивы x и y)
; Укажите количество тайлов, между которыми ходит чар (переменная n)
; Укажите ID ящика и подконтейнера внутри этого ящика, в который чар будет складывать руду
; (переменные Container и Container2 в функции Razgruzka()).
;
; Всё. Наслаждайтесь.
sub main()
VAR KillElemental=0 ;Убивать элей, или нет
VAR my, mx,i,j,p=1,time=UO.Time(),maxweight=700,n=2
DIM x[1],y[1]
x[0]=5519 ;Координаты тайла
y[0]=1594 ;рядом с ящиком
;Парами х,у укажите координаты тайлов, стоя в которых чар будет копать вокруг себя
x[1]=5522
y[1]=1583
uo.deletejournal()
while (not uo.dead())
WalkN(x[p],y[p],'')
if p==1 then ;Вместо цифры 2 укажите порядковый номер последнего тайла, стоя в котором вы копаете
p=1
else
p=p+1
endif
mx = UO.GetX("self")
my = UO.GetY("self")
tohide()
for i = mx-3 to mx+3
for j = my-3 to my+3
dig(i,j,KillElemental)
if UO.Weight>=maxweight then
WalkN(x[0],y[0],'')
razgruzka()
WalkN(x[p],y[p],'')
endif
###### Spirit Speak ######
UO.FindType('0x0010',-1,'ground')
if uo.Time()-time>500 and UO.FindCount()>0 and UO.SkillVal('Spirit',1)<1000 then
uo.deletejournal()
uo.useskill('Spirit')
while not uo.injournal('netherworld')
wait(200)
wend
time=uo.Time()
tohide()
endif
##########################
UO.Print("Now Mining In: "+str(mx-i)+" "+str(my-j))
next
next
UO.FindType('0x0010',-1,'ground')
if UO.FindCount()>0 then
i = UO.GetX("self")
j = UO.GetY("self")
if KillElemental==1 Then
KillElem()
WalkN(i,j,'')
else
repeat
wait(1000)
until UO.IsNPC('finditem')==0
endif
endif
WalkN(x[0],y[0],'')
razgruzka()
wend
end sub
sub dig(i,j,KillElemental)
var MMM,count,x,y
while (not uo.injournal("no ore")) and (not uo.injournal("in rock")) and (not uo.injournal ("That is too far")); and (not uo.injournal ("You put the Iron Ore"))
tohide()
UO.Waittargettile("1339", str(i), str(j),"0")
UO.Usetype (0x0F39) ;a shovel
uo.deletejournal()
count=0
while (not uo.injournal("fail")) and (not uo.injournal("put")) and (not uo.injournal("elemental")) and (not uo.injournal("no ore")) and (not uo.injournal("in rock")) and (not uo.injournal ("That is too far")) and count<300
wait(100)
count=count+1
wend
if count<10 and uo.injournal("fail") then
wait(9000)
endif
UO.FindType('0x0010',-1,'ground')
if UO.InJournal('something with ore') OR UO.InJournal("attacking you") OR uo.findcount()>0 then
x = UO.GetX("self")
y = UO.GetY("self")
if KillElemental==1 Then
KillElem()
WalkN(x,y,'')
endif
endif
wend
uo.deletejournal()
end sub
sub razgruzka()
VAR Container='0x4015C687'; Тут укажите ID своего ящика
VAR Container2='0x4038E9D7';ID сумки внутри ящика
UO.UseObject(Container)
wait(1000)
while uo.count('0x19B7')<>0
UO.FindType('0x19B7')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x19B8')<>0
UO.FindType('0x19B8')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x19B9')<>0
UO.FindType('0x19B9')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x19BA')<>0
UO.FindType('0x19BA')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0EED')<>0
UO.FindType('0x0EED')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F11')<>0
UO.FindType('0x0F11')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F15')<>0
UO.FindType('0x0F15')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F16')<>0
UO.FindType('0x0F16')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F10')<>0
UO.FindType('0x0F10')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F26')<>0
UO.FindType('0x0F26')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F0F')<>0
UO.FindType('0x0F0F')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x143E')<>0
UO.FindType('0x143E')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
while uo.count('0x0F18')<>0
UO.FindType('0x0F18')
UO.MoveItem('finditem','0',Container2)
wait(900)
wend
end sub
sub tohide()
while NOT UO.Hidden()
UO.DeleteJournal()
if UO.Life<50 then
UO.UseType('0x0F0E','0x0631') ; inviz potion
wait(2000)
else
UO.UseSkill('Hiding')
repeat
wait(50)
until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied')
endif
UO.WarMode('flip')
wait(100)
UO.Warmode(0)
wend
end sub
#=====================================thx to SavageV===========
# CheckLag() - click on backpack and awaiting "backpack"
# message in journal.
#
# Journal has been deleted!!!
#--------------------------------------------------------------
sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
Repeat
wait(500)
Until UO.InJournal('backpack')
end sub
#======================================thx to SavageV==========
# WalkN(X,Y,Serial) - char is walking by dX and dY step
# sub using Home, End, PgUp, PgDown keys
# d'not rebind this key from default action!
# serial - Serial of target or "" - string
# walkwait - delay after keypress
# Example:
# WalkN(2080,2113,'') - go to coordinates
# WalkN(0,0,'0x12345678') - go to target position
#--------------------------------------------------------------
sub WalkN(x,y,Target)
VAR i,StepSucess
VAR dx,dy,Exit=0
While Exit<>1
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 Then
Exit=1
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 Then
Exit=1
Endif
Endif
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then
StepSucess=Go(3,40,300) ;SE - DownArrow
Endif
If dx>0 AND dy<0 Then
StepSucess=Go(1,39,300) ;NE - RightArrow
Endif
If dx<0 AND dy>0 Then
StepSucess=Go(5,37,300) ;SW - LeftArrow
Endif
If dx<0 AND dy<0 Then
StepSucess=Go(7,38,300) ;WN - UpArrow
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then
StepSucess=Go(2,34,300) ;E - PgDown
If StepSucess==-1 Then
StepSucess=Go(3,40,300) ;SE - DownArrow
If StepSucess==-1 Then
StepSucess=Go(1,39,300) ;NE - RightArrow
Endif
Endif
Endif
If dx<0 Then
StepSucess=Go(6,36,300) ;W - Home
If StepSucess==-1 Then
StepSucess=Go(7,38,300) ;WN - UpArrow
If StepSucess==-1 Then
StepSucess=Go(5,37,300) ;SW - LeftArrow
Endif
Endif
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then
StepSucess=Go(4,35,300) ;S - End
If StepSucess==-1 Then
StepSucess=Go(3,40,300) ;SE - DownArrow
If StepSucess==-1 Then
StepSucess=Go(5,37,300) ;SW - LeftArrow
Endif
Endif
Endif
If dy<0 Then
StepSucess=Go(0,33,300) ;N - PgUp
If StepSucess==-1 Then
StepSucess=Go(7,38,300) ;WN - UpArrow
If StepSucess==-1 Then
StepSucess=Go(1,39,300) ;NE - RightArrow
Endif
Endif
Endif
Endif
Wend
end sub
sub Go(dir,key,walkwait)
VAR x,y
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 x==UO.GetX() AND y==UO.GetY() Then
return -1
Else
return 1
Endif
end sub
sub killelem()
VAR LastTimer, Elem
UO.UseType('0x0F0E','0x0631') ; inviz potion
While UO.STR<201 ; U'r not morfed char max Strength + 1
If UO.Mana>=50 then
UO.WaitMenu('What','Daemon')
UO.Cast('Polymorph')
wait(8000)
else
UO.UseType('0x0F0E','0x09DF') ; total mana potion
wait(3000)
endif
Wend
LastTimer=UO.Timer()
repeat
UO.BandageSelf()
wait(4000)
until UO.Life==UO.STR
UO.UseType(0x1B76) ; heater shield
UO.UseType(0x1413) ; platemail gorget
UO.DeleteJournal()
UO.Exec('warmode 1')
UO.FindType('0x0010',-1,'ground')
Elem=UO.GetSerial('finditem')
UO.Attack(Elem)
repeat
wait(1000)
If UO.Life<50 Then
UO.UseType('0x0F0E','0x09BB') ;GH
Endif
If UO.GetDistance(Elem)>1 Then
WalkN(0,0,Elem)
Endif
until UO.IsNPC(Elem)==0
wait(3000)
UO.findtype('0x19B9',-1,'ground') ; 3 ore
UO.moveitem('finditem')
wait(1000)
UO.findtype('0x19B8',-1,'ground') ; 3 ore
UO.moveitem('finditem')
wait(1000)
UO.findtype('0x19BA',-1,'ground') ; 3 ore
UO.moveitem('finditem')
wait(1000)
UO.findtype('0x19B7',-1,'ground') ; 3 ore
UO.moveitem('finditem')
wait(1000)
UO.findtype('0x0EED',-1,'ground') ; 3 ore
UO.moveitem('finditem')
wait(1000)
UO.FindType('0x0010',-1,'ground')
If UO.GetQuantity('finditem')>0 Then
KillElem()
Endif
UO.Exec('warmode 0')
wait(1000)
UO.Print("Sdoh skotina!")
LastTimer=UO.Timer()
if UO.Life<180 then ; U'r max HP
repeat
UO.BandageSelf()
wait(4000)
until UO.Life>180 OR LastTimer+300<UO.Timer()
endif
UO.DeleteJournal()
end subСобственно скрипт работает ..но хотелось бы чтобы он ходил по нескольким координатам:Данныи скрипт ходит только в одну точку окапывает до определенного веса и идет разгружаться....хотелось бы чтоб по проишествию разргузки он шел в другое место...Играю Я на ДРВ копаю в випке ...Хотелось бы чтоб скрипт ходил по 4 точкам...
Очень прошу помочь чем можете!
Буду очень признателен и благодарен