Prosu vseh kto mojet mne pomoci

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Prosu vseh kto mojet mne pomoci

Post by vertijok »

problema vot v ciom ia zdelal, peredelal skript na mining mne nado teperi skript na ress esli ciar ubit to on idiot i resaita k resu gorod minok.
1) ciar dapustem kopait evo ubil mob ile igrok poivliaita sobsenia sto on trup kakoe sobsenia ia sam tuda napesu.
2) ia emu vpisavaiu koordinati kuda iti resata
3) on nahodit resa katori resait i kricit ress poka evo ne resniot on atuda ne uhodit.

Kamu ne leni pmogite oceni nada
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

прошу прощения за флуд. (скрипта нет)
но транслит рулит:
esli ciar ubit to on idiot - (перевод) если чар убит то он идиот :D
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

GAUHAR wrote:прошу прощения за флуд. (скрипта нет)
но транслит рулит:
esli ciar ubit to on idiot - (перевод) если чар убит то он идиот :D
a kak ia tebe pravelina napesu????
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

vertijok wrote:
GAUHAR wrote:прошу прощения за флуд. (скрипта нет)
но транслит рулит:
esli ciar ubit to on idiot - (перевод) если чар убит то он идиот :D
a kak ia tebe pravelina napesu????

topaet ;-)
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

Destruction wrote:
vertijok wrote:
GAUHAR wrote:прошу прощения за флуд. (скрипта нет)
но транслит рулит:
esli ciar ubit to on idiot - (перевод) если чар убит то он идиот :D
a kak ia tebe pravelina napesu????

topaet ;-)
mojesi pomoci so skriptikam oceni nujna?
YogurtYo
Posts: 35
Joined: 2008-10-18 09:56:25

Post by YogurtYo »

vertijok wrote:
Destruction wrote:
vertijok wrote:
GAUHAR wrote:прошу прощения за флуд. (скрипта нет)
но транслит рулит:
esli ciar ubit to on idiot - (перевод) если чар убит то он идиот :D
a kak ia tebe pravelina napesu????

topaet ;-)
mojesi pomoci so skriptikam oceni nujna?

извиняюся за офтоп, но ржунимагу
Cornor
Posts: 67
Joined: 2005-06-07 21:05:18

Post by Cornor »

Prjidjestsja pisjatj samomy tut vriatljui ktoto vrjubitja chto ti hotjel skazatj :?
$!@m
Posts: 106
Joined: 2006-08-10 08:25:32

Post by $!@m »

Напиши по-человечески - поможем. То, что написано, даже читать не хочу.
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

На счет транслита. Есть такой ресур, может чем и поможет:
http://www.translit.ru/
По поводу скрипта есть только идея:

Code: Select all

#######################################################################
# Если по какой либо причине персонаж убит, то бежим к месту реса,    #
# потом обратно к месту смерти, лутаем труп, или то, что осталось на  #
# земле.                                                              #
#######################################################################

#######################################################################
#  Процедура разметки пути к месту реса.                              #
# В ключевых точках щелкаем прицелом по персонажу, в месте реса       #
# отменяем прицел клавишей [ESC].                                     #
# После завершения разметки пути к месту реса из текстового окна      #
# вставляем получившийся текст в процедуру GoToResurrect              #
#---------------------------------------------------------------------#
sub MarkToAnkh()
   DIM XPoint[100], YPoint[100]
   VAR tAnkh1 = '0x0002', tAnkh2 = '0x0003'
   VAR idAnkh
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         idAnkh = idPoint
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub
#---------------------------------------------------------------------#
#######################################################################

#######################################################################
# Идем к месту возраждения и орём там, пока не реснут.                #
# В основную функцию скрипта вставить такие строки:                   #
# if UO.Dead() then                                                   #
#    GoToResurrect()                                                  #
# endif                                                               #
#---------------------------------------------------------------------#
SUB GoToResurrect()
   VAR myX = UO.GetX()
   VAR myY = UO.GetY()
   VAR myCorpse = UO.GetSerial('lastcorpse')
#======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
#==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 2
   DIM koord_X[2], koord_Y[2]
       koord_X[1] = 0000
       koord_Y[1] = 0000
       koord_X[2] = 0000
       koord_Y[2] = 0000
#==== вставте текст до этого комментария ====#
#============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   UO.DeleteJournal()
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # Бежим обратно.
   for i = LastIndexDIM to 1 step - 1
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   #Подходим конкретно к месту смерти:
   gotoxy(myX,myY,0)
   #Лутаем свой труп:
   LootCorpse(myCorpse)
endsub

SUB LootCorpse(idCorpse)
   VAR xc = UO.GetX(idCorpse)
   VAR yc = UO.GetY(idCorpse)
   VAR i, ii = 5 #ii - последний индекс в массиве Loot
   DIM Loot[5]   #Список того что будем лутать.
      Loot[1] = ''  #тип руды.
      Loot[2] = ''  #тип кирки.
      Loot[3] = ''  #тип кирки (перевернутый).
      Loot[4] = ''  #тип лопаты.
      Loot[5] = ''  #тип лопаты (перевернутый).
   gotoxy(xc, yc, 1)
   UO.UseObject(idCorpse)
   wait(500)
   CheckLag()
   #Лутаем свой труп, если он не порезан.
   UO.FindType('-1', '-1', idCorpse)
   while UO.FindCount()
      CheckLag()
      UO.MoveItem('finditem')
      wait(500)
      UO.FindType('-1', '-1', idCorpse)
   wend
   #Лутаем с земли.
   UO.Set('finddistance','1')
   for i = 1 to ii
      UO.FindType(Loot[i], '-1', 'ground')
      while UO.FindCount()
         CheckLag()
         UO.MoveItem('finditem')
         wait(500)
         UO.FindType(Loot[i], '-1', 'ground')
      wend
   next
   UO.Set('finddistance','14')
endsub
#---------------------------------------------------------------------#
#######################################################################

Вполне возможно, что после реса надо бежать к банку и брать кирку или лопату там. vertijok, думаю что этим сможешь справиться сам.
И еще, в процедуре LootCorpse проставь необходимые типы.
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

GAUHAR wrote:На счет транслита. Есть такой ресур, может чем и поможет:
http://www.translit.ru/
По поводу скрипта есть только идея:

Code: Select all

#######################################################################
# Если по какой либо причине персонаж убит, то бежим к месту реса,    #
# потом обратно к месту смерти, лутаем труп, или то, что осталось на  #
# земле.                                                              #
#######################################################################

#######################################################################
#  Процедура разметки пути к месту реса.                              #
# В ключевых точках щелкаем прицелом по персонажу, в месте реса       #
# отменяем прицел клавишей [ESC].                                     #
# После завершения разметки пути к месту реса из текстового окна      #
# вставляем получившийся текст в процедуру GoToResurrect              #
#---------------------------------------------------------------------#
sub MarkToAnkh()
   DIM XPoint[100], YPoint[100]
   VAR tAnkh1 = '0x0002', tAnkh2 = '0x0003'
   VAR idAnkh
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         idAnkh = idPoint
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub
#---------------------------------------------------------------------#
#######################################################################

#######################################################################
# Идем к месту возраждения и орём там, пока не реснут.                #
# В основную функцию скрипта вставить такие строки:                   #
# if UO.Dead() then                                                   #
#    GoToResurrect()                                                  #
# endif                                                               #
#---------------------------------------------------------------------#
SUB GoToResurrect()
   VAR myX = UO.GetX()
   VAR myY = UO.GetY()
   VAR myCorpse = UO.GetSerial('lastcorpse')
#======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
#==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 2
   DIM koord_X[2], koord_Y[2]
       koord_X[1] = 0000
       koord_Y[1] = 0000
       koord_X[2] = 0000
       koord_Y[2] = 0000
#==== вставте текст до этого комментария ====#
#============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   UO.DeleteJournal()
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # Бежим обратно.
   for i = LastIndexDIM to 1 step - 1
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   #Подходим конкретно к месту смерти:
   gotoxy(myX,myY,0)
   #Лутаем свой труп:
   LootCorpse(myCorpse)
endsub

SUB LootCorpse(idCorpse)
   VAR xc = UO.GetX(idCorpse)
   VAR yc = UO.GetY(idCorpse)
   VAR i, ii = 5 #ii - последний индекс в массиве Loot
   DIM Loot[5]   #Список того что будем лутать.
      Loot[1] = ''  #тип руды.
      Loot[2] = ''  #тип кирки.
      Loot[3] = ''  #тип кирки (перевернутый).
      Loot[4] = ''  #тип лопаты.
      Loot[5] = ''  #тип лопаты (перевернутый).
   gotoxy(xc, yc, 1)
   UO.UseObject(idCorpse)
   wait(500)
   CheckLag()
   #Лутаем свой труп, если он не порезан.
   UO.FindType('-1', '-1', idCorpse)
   while UO.FindCount()
      CheckLag()
      UO.MoveItem('finditem')
      wait(500)
      UO.FindType('-1', '-1', idCorpse)
   wend
   #Лутаем с земли.
   UO.Set('finddistance','1')
   for i = 1 to ii
      UO.FindType(Loot[i], '-1', 'ground')
      while UO.FindCount()
         CheckLag()
         UO.MoveItem('finditem')
         wait(500)
         UO.FindType(Loot[i], '-1', 'ground')
      wend
   next
   UO.Set('finddistance','14')
endsub
#---------------------------------------------------------------------#
#######################################################################

Вполне возможно, что после реса надо бежать к банку и брать кирку или лопату там. vertijok, думаю что этим сможешь справиться сам.
И еще, в процедуре LootCorpse проставь необходимые типы.
я так посмотрел почти все што мне надо в етот скрипт токо мне не надо штобы он брал кирку , а брал реги из сумке каторыи надо поставить id сундука с регами. У меня гномовская кирка и она не пропадает из бек пака, Да и еще одна праблема после таго как он recall к шахте он в места таго штобы начел копал в хэид то он сначала медетирует а потом встает в хэид и наченает копать почему я не знаю на Оскоме работает отлично а на Оскоме фрее вот такая праблема . Помагите приззззззз я токо насенаю внекать в скриптах. :(

Code: Select all

sub Vertijok()
UO.Print("!!Viberi kirku!!")
UO.Exec('addobject Shovel')
While UO.targeting()
   Wait(3000)
Wend
uo.print('!!Viberi runu damoi!! ')
uo.exec('addobject runeHome')
while uo.targeting()
wait(15000)
wend
######################################################################################
uo.print('!!Viberi sunduk s regami!! ')
uo.exec('addobject Sunduk')
while uo.targeting()
wait(100)
wend
######################################################################################
uo.print('!!Viberi runu v saxtu!! ')
uo.exec('addobject runeCave')
while uo.targeting()
wait(100)
wend
######################################################################################
GoToMine()
repeat
while not uo.dead()
GoToMine() 
gotoxy(2562,491,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2558,497,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2560,493,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2563,488,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2565,483,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2570,480,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2575,477,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2578,480,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2573,483,0)
GetOre()
GoToHome()
GoToMine()
gotoxy(2570,486,0)
GetOre()
GoToHome()
wend
end sub
######################################################################################
sub GoToHome()
gotoxy(2566,481,0)
gotoxy(2558,505,0)
gotoxy(2552,505,0)
gotoxy(2552,501,0) 
gotoxy(2525,501,0)
gotoxy(2525,515,0) 
gotoxy(2507,515,0)
gotoxy(2507,542,0)
uo.say('bank')
wait(3000)
uo.waittargetobject('runeHome') ; домой
wait(500)
uo.cast('Recall')
wait(3000)
loot()
wait(3000)
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
end sub
######################################################################################
sub GoToMine()
uo.waittargetobject('runeCave') ; V saxtu
med()
regi()
wait(500)
uo.cast('Recall')
goto reccal
endif
wait(5000)
gotoxy(2558,497,0)
end sub
######################################################################################
sub Start()
If    UO.GetGlobal('MiningCheck')=='on' Then
   UO.SetGlobal('MiningCheck','on')
   UO.Exec('Exec Terminate')
Else
   UO.Exec('Exec Select')
   UO.SetGlobal('MiningCheck','on')
EndIf
end sub
##############################
### Копаем руду возле себя ###
##############################
Sub GetOre()
var mx, my, mz, i, j, CheckTime, CheckLag=0
###
var Wait_1 = "You put"
var Wait_2 = "heavy"
var Wait_3 = "Это слишком далеко отсюда."
var Wait_4 = "Тут не осталось руды."
var Wait_5 = "but fail"
var Wait_6 = "Туда Вам не дотянуться"
var Wait_7 = "in rock"
var Wait_8 = "You have found some"
###
var Fizzle_1 = "Тут не осталось руды."
var Fizzle_2 = "Это слишком далеко отсюда."
var Fizzle_3 = "Туда Вам не дотянуться"
var Fizzle_4 = "in rock"
###
mx = UO.GetX('self')
my = UO.GetY('self')
mz = UO.GetZ('self')
For i = mx-3 TO mx+3
   For j = my-3 TO my+3
      Hide()
      UO.Print("Get Coordinate: "+str(mx-i)+" "+str(my-j))
         REPEAT
            CheckLag = CheckLag+1
               
                  
               EndIf
            Hide()
               If UO.Waiting() Then
                  UO.Targeting()
               EndIf
            UO.WaitTargeTtile('1341',str(i),str(j),str(mz))
            UO.UseObject('Shovel')
            CheckTime = UO.Timer()
            UO.DeleteJournal()
               REPEAT
                  Wait(300)
               Until UO.InJournal(Wait_1) or UO.InJournal(Wait_2) or UO.InJournal(Wait_3) or UO.InJournal(Wait_4) or UO.InJournal(Wait_5) or UO.InJournal(Wait_6) or UO.InJournal(Wait_7) or UO.InJournal(Wait_8) or (CheckTime+150)<UO.Timer() or UO.Dead()
               If UO.InJournal(Wait_8) Then
                  
               EndIf
               If CheckLag==10 Then
                  CheckLag = 0
                  Wait(9000)
               EndIf
         Until UO.InJournal(Fizzle_1) or UO.InJournal(Fizzle_2) or UO.InJournal(Fizzle_3) or UO.InJournal(Fizzle_4) or UO.Dead()
   Next
Next
REPEAT
end sub
######################################################################################
sub loot()
hide()
uo.UseSkill('Stealth')
wait(3000)
begin:
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit
VAR UnloadCont='0x412546E4' ; ID sunduka
DIM Ore[5]
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 3
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
uo.print('vigruzili vsiu rudu pora kopati dalise???')
end sub
#######################
### Прячимся в хайд ###
#######################
sub hide()
while not UO.Hidden()
UO.Warmode("0")
uo.print("Nikaimsia")
UO.UseSkill("Hiding")
wait(4000)
wend
######################################################################################

######################################################################################
sub med()
VAR LastTimer
UO.DeleteJournal()
while UO.Mana<UO.Int
LastTimer=UO.Timer()
UO.UseSkill('Meditation')
repeat
wait(100)
until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
UO.DeleteJournal()
wait(200)
wend
end sub
######################################################################################
sub regi()
VAR r, q, n, amount = 5
Dim reg[4]
reg[1] = '0x0F7A'
reg[2] = '0x0F7B'
reg[3] = '0x0F86'
reg[4] = '0x0E21'

 For r = 1 to 4
 if uo.count( reg[r] )<>amount then
  q = amount - uo.count( reg[r] )

   if q <> 0 then
     if q > 0 then

      uo.useobject("Sunduk")
     
      wait(250)
     

      uo.findtype( reg[r] , -1 ,"Sunduk")

       If uo.findcount() == 0 then
        uo.msg('Ia vzial regi!')
        return
       endif

      uo.moveitem('finditem', STR(q) )
      wait(1000)
        else

      q = q*-1
     uo.findtype( reg[r] )
     uo.moveitem('finditem', STR(q) ,"Sunduk")
     
     wait(1000)

     endif
   endif

 endif
 next

  While uo.Count('0x0F09','0x0060') < 2
   uo.findtype('0x0F09','0x0060',"Sunduk")
   if uo.FindCount() then
     uo.moveitem('finditem')
     checklag()
     wait(1000)
   endif
  wend

uo.print('Vziali regi ...')
end sub
######################################################################################
sub Kill()
var Count,LastTimer,Golem
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7 
Ore[3]=0x19BA 
Ore[4]=0x19B8 
Ore[5]=0x0F11 
Ore[6]=0x0F16 
Ore[7]=0x0F18 
Ore[8]=0x0F15 
Ore[9]=0x0F10 
Ore[10]=0x0F0F 
Ore[11]=0x0F26 
Ore[12]=0x1F4C 
Ore[13]=0x0EED
hide()
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What','Daemon')
uo.Cast('Polymorph')
wait(8000)
else
med()
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Golem)
repeat
wait(1000)
if uo.Life<50 Then
uo.Bandageself()
end if
if uo.GetDistance(Golem)>1 then
gotoxy(0,0,'finditem')
end if
until uo.IsNPC(Golem)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub
####################################
### Смотрим скока накопали руды. ###
####################################
Sub InfoOre()
var i, ii, a, LogsTime=PrintTime()
Dim Ore[3]
    Ore[0] = '0x19B9' ; 4 and more ore
    Ore[1] = '0x19B8' ; 3 ore
    Ore[2] = '0x19BA' ; 2 ore
    Ore[3] = '0x19B7' ; 1 ore

Dim NameOre[13]
    NameOre[0]  = 'Iron'
    NameOre[1]  = 'Cooper'
    NameOre[2]  = 'Agapite'
    NameOre[3]  = 'Golden'
    NameOre[4]  = 'Orion'
    NameOre[5]  = 'Verite'
    NameOre[6]  = 'Dwarf'
    NameOre[7]  = 'Silver'
    NameOre[8]  = 'Shadow'
    NameOre[9]  = 'Valorite'
    NameOre[10] = 'Crystal'
    NameOre[11] = 'Magma'
    NameOre[12] = 'Obsidian'
    NameOre[13] = 'Mytheril'

Dim ColorOre[13]
    ColorOre[0]  = '0x0000'
    ColorOre[1]  = '0x0641'
    ColorOre[2]  = '0x0400'
    ColorOre[3]  = '0x084d'
    ColorOre[4]  = '0x048a'
    ColorOre[5]  = '0x07d1'
    ColorOre[6]  = '0x0488'
    ColorOre[7]  = '0x0482'
    ColorOre[8]  = '0x0770'
    ColorOre[9]  = '0x0515'
    ColorOre[10] = '0x0487'
    ColorOre[11] = '0x0486'
    ColorOre[12] = '0x0485'
    ColorOre[13] = '0x048d'
UO.TextOpen()
UO.TextPrint("#####################")
UO.TextPrint("## Время: "+LogsTime+" ##")
UO.TextPrint("#####################")
For i = 0 TO 3
   For ii = 0 TO 13
      
      If a<>0 Then
            UO.TextPrint(NameOre[ii]+" Ore: "+STR(a))
      EndIf
   Next
Next
UO.TextPrint("#####################")
end sub

Sub GetAmount(Type,Color,Cont)
var item_amount = 0
UO.IgnoreReset()
REPEAT
UO.FindType(Type, Color, Cont)
   If UO.FindCount() Then
      If UO.GetQuantity('finditem')==0 Then
         item_amount = item_amount + 1
      Else
         item_amount = item_amount + UO.GetQuantity('finditem')
      EndIf
      UO.Ignore('finditem')
      UO.FindType(Type, Color, Cont)
   EndIf
Until UO.FindCount()==0 or UO.Dead()
UO.IgnoreReset()
Return item_amount
end sub
##############
### Часики ###
##############
Sub PrintTime()
var HR  = ''
var MIN = ''
var SEC = ''
var CurrentTime = UO.Time() 
If CurrentTime>99999 Then
   HR  = Mid(STR(CurrentTime),0,2)
   MIN = Mid(STR(CurrentTime),2,2)
   SEC = Mid(STR(CurrentTime),4,2)
Else
   If CurrentTime > 9999 Then
      HR  = '0'+Mid(STR(CurrentTime),0,1)
      MIN = Mid(STR(CurrentTime),1,2)
      SEC = Mid(STR(CurrentTime),3,2)
   Else
      If CurrentTime > 999 Then
         HR  = '00'
         MIN = Mid(STR(CurrentTime),0,2)
         SEC = Mid(STR(CurrentTime),2,2)
      Else
         If CurrentTime > 99 Then
            HR  = '00'
            MIN = '0'+Mid(STR(CurrentTime),0,1)
            SEC = Mid(STR(CurrentTime),1,2)
         Else
            If CurrentTime > 9  Then
               HR  = '00'
               MIN = '00' 
               SEC = STR(CurrentTime)
            Else
            HR  = '00'
            MIN = '00' 
            SEC = '0'+STR(CurrentTime)         
            EndIf
         EndIf
      EndIf
   EndIf
EndIf
Return (HR+':'+MIN+':'+SEC)   
end sub
##################
### РЕКОНЕКТОР ###
##################
Sub Reconnect()
var ReconnectTime,rFlag
ReconnectTime = '0'
rFlag = 1
REPEAT
   While UO.ObjAtLayer('Bpack')==''
      If rFlag Then
         ReconnectTime = PrintTime()
         rFlag = 0
      EndIf
      Wait(20000)
      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.TextOpen()
      UO.TextPrint("Disconnected & Reconnected @ "+ReconnectTime)
      rFlag = 1
      ReconnectTime = '0'
   EndIf
Until false
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!")
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
если можете поставте в етот скрипт (катори я поставил тут буду благодарен .)
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Code: Select all

# 1. Добавлил функция разметки от банка к месту реса - MarkWay.
# Эта функция выполняется один раз, после чего необходимо внести
# изменения в процедуре GoToResurrect. (все это делается в редакторе инжи)
# Сохраняешь изменения и забываешь про эту разметку навсегда.
# Вопрос: Почему разметку надо делать начиная у банка?
# Ответ: Потому что такова логика твоего скрипта. Живой чар или
#  мертвый после добычи руды он все равно идет к банку.
# 2. Если интересно, то посмотри внимательно весь скрипт, я оставил
# немного комментариев.
# 3. Если скрипт работать не будет, не обессудь, дальше разбирать с
# данным скриптом интереса нет, так как ему необходима глобальная
# переделка.


 VAR BagInBank = '0x00000000'  #<<< ID мешка с реагентами, лежащего в банке.

sub Vertijok()
   UO.Print("!!Viberi kirku!!")
   UO.Exec('addobject Shovel')
   While UO.targeting()
      Wait(3000)
   Wend
   uo.print('!!Viberi runu damoi!! ')
   uo.exec('addobject runeHome')
   while uo.targeting()
      wait(15000)
   wend
   #######################################
   uo.print('!!Viberi sunduk s regami!! ')
   uo.exec('addobject Sunduk')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   uo.print('!!Viberi runu v saxtu!! ')
   uo.exec('addobject runeCave')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   #GoToMine()   #<<< Закоментировал. Больше не будет медитировать перед копкой.
   #repeat       #<<< нет until (поэтому закомментировал)
      while not uo.dead()
         GoToMine()
         gotoxy(2562,491,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2558,497,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2560,493,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2563,488,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2565,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2575,477,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2578,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2573,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,486,0)
         GetOre()
         GoToHome()
      wend
endsub
################################################################
sub GoToHome()
   gotoxy(2566,481,0)
   gotoxy(2558,505,0)
   gotoxy(2552,505,0)
   gotoxy(2552,501,0)
   gotoxy(2525,501,0)
   gotoxy(2525,515,0)
   gotoxy(2507,515,0)
   gotoxy(2507,542,0)
   if UO.Dead() then   #<<<
      GoToResurrect()  #<<< ДОБАВИЛ ВОЗРОЖДЕНИЕ.
   endif               #<<<
   uo.say('bank')
   wait(3000)
   uo.waittargetobject('runeHome') ; домой
   wait(500)
   uo.cast('Recall')
   wait(3000)
   loot()
   wait(3000)
   #reccal:      #<<< а это к чему? и почему эта метка находится здесь?
   uo.deletejournal()
   if uo.waiting() then
      uo.canceltarget()
   endif
endsub
################################################################
Sub GoToMine()
   med()
   regi()
   wait(500)
   uo.waittargetobject('runeCave') ; V saxtu
   uo.cast('Recall')
   #goto reccal   #<<< goto ссылается на метку в другой процедуре???
   #endif         #<<< а где if ... then ?
   wait(5000)
   gotoxy(2558,497,0)
endsub
################################################################
sub Start()
   If UO.GetGlobal('MiningCheck')=='on' Then
      UO.SetGlobal('MiningCheck','on')
      UO.Exec('Exec Terminate')
    Else
      UO.Exec('Exec Select')
      UO.SetGlobal('MiningCheck','on')
   EndIf
endsub
##############################
### Копаем руду возле себя ###
##############################
Sub GetOre()
   var mx, my, mz, i, j, CheckTime, CheckLag=0
   ###
   var Wait_1 = "You put"
   var Wait_2 = "heavy"
   var Wait_3 = "Это слишком далеко отсюда."
   var Wait_4 = "Тут не осталось руды."
   var Wait_5 = "but fail"
   var Wait_6 = "Туда Вам не дотянуться"
   var Wait_7 = "in rock"
   var Wait_8 = "You have found some"
   ###
   var Fizzle_1 = "Тут не осталось руды."
   var Fizzle_2 = "Это слишком далеко отсюда."
   var Fizzle_3 = "Туда Вам не дотянуться"
   var Fizzle_4 = "in rock"
   ###
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   For i = mx-3 TO mx+3
      For j = my-3 TO my+3
         Hide()
         UO.Print("Get Coordinate: "+str(mx-i)+" "+str(my-j))
         REPEAT
            CheckLag = CheckLag+1
            #EndIf   #<<< где if ... then ?
            Hide()
            If UO.Waiting() Then
               UO.Targeting()
            EndIf
            UO.WaitTargeTtile('1341',str(i),str(j),str(mz))
            UO.UseObject('Shovel')
            CheckTime = UO.Timer()
            UO.DeleteJournal()
            REPEAT
               Wait(300)
            Until UO.InJournal(Wait_1) or UO.InJournal(Wait_2) or UO.InJournal(Wait_3) or UO.InJournal(Wait_4) or UO.InJournal(Wait_5) or UO.InJournal(Wait_6) or UO.InJournal(Wait_7) or UO.InJournal(Wait_8) or (CheckTime+150)<UO.Timer() or UO.Dead()
            If UO.InJournal(Wait_8) Then
               #смысл этой проверки?
            EndIf
            If CheckLag==10 Then
               CheckLag = 0
               Wait(9000)
            EndIf
         Until UO.InJournal(Fizzle_1) or UO.InJournal(Fizzle_2) or UO.InJournal(Fizzle_3) or UO.InJournal(Fizzle_4) or UO.Dead()
      Next
   Next
   #REPEAT  #<<< а это для чего?
endsub
######################################################################################
Sub loot()
   hide()
   uo.UseSkill('Stealth')
   wait(3000)
 begin:
   if uo.waiting() then
      uo.canceltarget()
   endif
   VAR a,Exit
   VAR UnloadCont='0x412546E4' ; ID sunduka
   DIM Ore[5]
      Ore[0]=0x19B9 ; 4 and more ore
      Ore[1]=0x19B7 ; 1 ore
      Ore[2]=0x19BA ; 2 ore
      Ore[3]=0x19B8 ; 3 ore
   UO.SetReceivingContainer(UnloadCont)
   wait(500)
   For a=0 to 3
      Exit=0
      repeat
         UO.FindType(Ore[a])
         if UO.GetQuantity('finditem')>0 then
            UO.Grab('0','finditem')
            wait(1500)
          Else
            Exit=1
         endif
      until Exit==1
   Next
   UO.UnSetReceivingContainer()
   uo.print('vigruzili vsiu rudu pora kopati dalise???')
endsub
#######################
### Прячимся в хайд ###
#######################
Sub hide()
   while not UO.Hidden()
      UO.Warmode("0")
      uo.print("Nikaimsia")
      UO.UseSkill("Hiding")
      wait(4000)
   wend
endsub   #<<<добавил, так как отсутствовало.
################################################################

################################################################
Sub med()
   VAR LastTimer
   UO.DeleteJournal()
   while UO.Mana<UO.Int
      LastTimer=UO.Timer()
      UO.UseSkill('Meditation')
      repeat
         wait(100)
      until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
      UO.DeleteJournal()
      wait(200)
   wend
endsub
################################################################
Sub regi()
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,"Sunduk")
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,"Sunduk")
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',"Sunduk")
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
################################################################
Sub Kill()
   var Count,LastTimer,Golem
   var o,exit
   dim Ore[13]
      Ore[1]=0x19B9
      Ore[2]=0x19B7
      Ore[3]=0x19BA
      Ore[4]=0x19B8
      Ore[5]=0x0F11
      Ore[6]=0x0F16
      Ore[7]=0x0F18
      Ore[8]=0x0F15
      Ore[9]=0x0F10
      Ore[10]=0x0F0F
      Ore[11]=0x0F26
      Ore[12]=0x1F4C
      Ore[13]=0x0EED
   hide()
   while uo.STR<uo.Life+1
      if uo.Mana>=50 then
         uo.WaitMenu('What','Daemon')
         uo.Cast('Polymorph')
         wait(8000)
       else
         med()
         wait(3000)
      endif
   wend
   LastTimer=uo.Timer()
   repeat
      uo.BandageSelf()
      wait(4000)
   until uo.Life==uo.STR or LastTimer+300<uo.Timer()
   uo.UseType('0x1B76') ## - Хеатер Щит(тип).
   uo.DeleteJournal()
   uo.Exec('warmode 1')
   uo.FindType('0x0010',-1,'ground')
   Elemental=uo.GetSerial('finditem')
   uo.Attack(Golem)
   repeat
      wait(1000)
      if uo.Life<50 Then
         uo.Bandageself()
      endif
      if uo.GetDistance(Golem)>1 then
         gotoxy(0,0,'finditem')
      endif
   until uo.IsNPC(Golem)==0
   wait(3000)
   uo.Exec('warmode 0')
   wait(1000)
   LastTimer=uo.Timer()
   uo.DeleteJournal()
   for o=1 to 13
      exit=0
      repeat
         uo.FindType(Ore[o],-1,'ground')
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
          else
            exit=1
         endif
      until exit==1
   next
   ### uo.Exec('warmode 1')
   uo.Exec('warmode 0')
   uo.Exec('exec Mining')
endsub
####################################
### Смотрим скока накопали руды. ###
####################################
Sub InfoOre()
   var i, ii, a, LogsTime=PrintTime()
   Dim Ore[3]
      Ore[0] = '0x19B9' ; 4 and more ore
      Ore[1] = '0x19B8' ; 3 ore
      Ore[2] = '0x19BA' ; 2 ore
      Ore[3] = '0x19B7' ; 1 ore

   Dim NameOre[13]
      NameOre[0]  = 'Iron'
      NameOre[1]  = 'Cooper'
      NameOre[2]  = 'Agapite'
      NameOre[3]  = 'Golden'
      NameOre[4]  = 'Orion'
      NameOre[5]  = 'Verite'
      NameOre[6]  = 'Dwarf'
      NameOre[7]  = 'Silver'
      NameOre[8]  = 'Shadow'
      NameOre[9]  = 'Valorite'
      NameOre[10] = 'Crystal'
      NameOre[11] = 'Magma'
      NameOre[12] = 'Obsidian'
      NameOre[13] = 'Mytheril'

   Dim ColorOre[13]
      ColorOre[0]  = '0x0000'
      ColorOre[1]  = '0x0641'
      ColorOre[2]  = '0x0400'
      ColorOre[3]  = '0x084d'
      ColorOre[4]  = '0x048a'
      ColorOre[5]  = '0x07d1'
      ColorOre[6]  = '0x0488'
      ColorOre[7]  = '0x0482'
      ColorOre[8]  = '0x0770'
      ColorOre[9]  = '0x0515'
      ColorOre[10] = '0x0487'
      ColorOre[11] = '0x0486'
      ColorOre[12] = '0x0485'
      ColorOre[13] = '0x048d'
   UO.TextOpen()
   UO.TextPrint("#####################")
   UO.TextPrint("## Время: "+LogsTime+" ##")
   UO.TextPrint("#####################")
   For i = 0 TO 3
      For ii = 0 TO 13
         If a<>0 Then
            UO.TextPrint(NameOre[ii]+" Ore: "+STR(a))
         EndIf
      Next
   Next
   UO.TextPrint("#####################")
endsub

Sub GetAmount(Type,Color,Cont)
   var item_amount = 0
   UO.IgnoreReset()
   REPEAT
      UO.FindType(Type, Color, Cont)
      If UO.FindCount() Then
         If UO.GetQuantity('finditem')==0 Then
            item_amount = item_amount + 1
          Else
            item_amount = item_amount + UO.GetQuantity('finditem')
         EndIf
         UO.Ignore('finditem')
         UO.FindType(Type, Color, Cont)
      EndIf
   Until UO.FindCount()==0 or UO.Dead()
   UO.IgnoreReset()
   Return item_amount
endsub
##############
### Часики ###
##############
Sub PrintTime()
   var HR  = ''
   var MIN = ''
   var SEC = ''
   var CurrentTime = UO.Time()
   If CurrentTime>99999 Then
      HR  = Mid(STR(CurrentTime),0,2)
      MIN = Mid(STR(CurrentTime),2,2)
      SEC = Mid(STR(CurrentTime),4,2)
    Else
      If CurrentTime > 9999 Then
         HR  = '0'+Mid(STR(CurrentTime),0,1)
         MIN = Mid(STR(CurrentTime),1,2)
         SEC = Mid(STR(CurrentTime),3,2)
       Else
         If CurrentTime > 999 Then
            HR  = '00'
            MIN = Mid(STR(CurrentTime),0,2)
            SEC = Mid(STR(CurrentTime),2,2)
          Else
            If CurrentTime > 99 Then
               HR  = '00'
               MIN = '0'+Mid(STR(CurrentTime),0,1)
               SEC = Mid(STR(CurrentTime),1,2)
             Else
               If CurrentTime > 9  Then
                  HR  = '00'
                  MIN = '00'
                  SEC = STR(CurrentTime)
                Else
                  HR  = '00'
                  MIN = '00'
                  SEC = '0'+STR(CurrentTime)
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   Return (HR+':'+MIN+':'+SEC)
endsub
##################
### РЕКОНЕКТОР ###
##################
Sub Reconnect()
   var ReconnectTime,rFlag
   ReconnectTime = '0'
   rFlag = 1
   REPEAT
      While UO.ObjAtLayer('Bpack')==''
         If rFlag Then
            ReconnectTime = PrintTime()
            rFlag = 0
         EndIf
         Wait(20000)
         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.TextOpen()
         UO.TextPrint("Disconnected & Reconnected @ "+ReconnectTime)
         rFlag = 1
         ReconnectTime = '0'
      EndIf
   Until false
endsub

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
   endif
   if dx<=prec then
      return
   endif
   if not ldc then
      uo.print(STR(dx))
   endif
   if dx<3 then
      mk=70
    else
      mk=15
   endif
   ox=mx
   oy=my
   for k=1 to mk
      mx=UO.GetX()
      my=UO.GetY()
      if mx<>ox or my<>oy then
         goto sdidapl
      endif
      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
   endif
   if dx<=prec then
      return
   endif
   if ld==dx then
      ldc=ldc+1
      if ldc>100 then
         uo.print("Can not reach location!")
         return
      endif
    else
      ld=dx
   endif
   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
   endif
   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
   endif
   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
endsub


#######################################################################
# Процедура разметки пути от банка к месту реса.                      #
# В ключевых точках щелкаем прицелом по персонажу.                    #
# Разметка пути завершается нажатием клавиши [ESC].                   #
# После завершения разметки пути из текстового окна вставляем         #
# получившийся текст в процедуру GoToResurrect.                       #
#---------------------------------------------------------------------#
sub MarkWay()
   DIM XPoint[100], YPoint[100]
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub

SUB GoToResurrect()  # Идем к месту возраждения и орём там, пока не реснут.
   #======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
   #==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 2
   DIM koord_X[2], koord_Y[2]
       koord_X[1] = 0000
       koord_Y[1] = 0000
       koord_X[2] = 0000
       koord_Y[2] = 0000
   #==== вставте текст до этого комментария ====#
   #============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # После реса идем к обратно к банку.
   for i = LastIndexDIM to 1 step -1
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   GetReagentsFromBank()
endsub

#Полный копипаст твоей функции regi с небольшими изменениями.
SUB GetReagentsFromBank()
   #VAR BagInBank = '0x00000000' #<<<Вынес в глобальные переменные
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   UO.Say('bank')
   wait(3000)
   UO.UseObject(BagInBank)
   wait(3000)
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,BagInBank)
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,BagInBank)
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',BagInBank)
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
#--------------------------------------------------------------#
################################################################
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

GAUHAR wrote:

Code: Select all

# 1. Добавлил функция разметки от банка к месту реса - MarkWay.
# Эта функция выполняется один раз, после чего необходимо внести
# изменения в процедуре GoToResurrect. (все это делается в редакторе инжи)
# Сохраняешь изменения и забываешь про эту разметку навсегда.
# Вопрос: Почему разметку надо делать начиная у банка?
# Ответ: Потому что такова логика твоего скрипта. Живой чар или
#  мертвый после добычи руды он все равно идет к банку.
# 2. Если интересно, то посмотри внимательно весь скрипт, я оставил
# немного комментариев.
# 3. Если скрипт работать не будет, не обессудь, дальше разбирать с
# данным скриптом интереса нет, так как ему необходима глобальная
# переделка.


 VAR BagInBank = '0x00000000'  #<<< ID мешка с реагентами, лежащего в банке.

sub Vertijok()
   UO.Print("!!Viberi kirku!!")
   UO.Exec('addobject Shovel')
   While UO.targeting()
      Wait(3000)
   Wend
   uo.print('!!Viberi runu damoi!! ')
   uo.exec('addobject runeHome')
   while uo.targeting()
      wait(15000)
   wend
   #######################################
   uo.print('!!Viberi sunduk s regami!! ')
   uo.exec('addobject Sunduk')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   uo.print('!!Viberi runu v saxtu!! ')
   uo.exec('addobject runeCave')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   #GoToMine()   #<<< Закоментировал. Больше не будет медитировать перед копкой.
   #repeat       #<<< нет until (поэтому закомментировал)
      while not uo.dead()
         GoToMine()
         gotoxy(2562,491,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2558,497,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2560,493,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2563,488,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2565,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2575,477,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2578,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2573,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,486,0)
         GetOre()
         GoToHome()
      wend
endsub
################################################################
sub GoToHome()
   gotoxy(2566,481,0)
   gotoxy(2558,505,0)
   gotoxy(2552,505,0)
   gotoxy(2552,501,0)
   gotoxy(2525,501,0)
   gotoxy(2525,515,0)
   gotoxy(2507,515,0)
   gotoxy(2507,542,0)
   if UO.Dead() then   #<<<
      GoToResurrect()  #<<< ДОБАВИЛ ВОЗРОЖДЕНИЕ.
   endif               #<<<
   uo.say('bank')
   wait(3000)
   uo.waittargetobject('runeHome') ; домой
   wait(500)
   uo.cast('Recall')
   wait(3000)
   loot()
   wait(3000)
   #reccal:      #<<< а это к чему? и почему эта метка находится здесь?
   uo.deletejournal()
   if uo.waiting() then
      uo.canceltarget()
   endif
endsub
################################################################
Sub GoToMine()
   med()
   regi()
   wait(500)
   uo.waittargetobject('runeCave') ; V saxtu
   uo.cast('Recall')
   #goto reccal   #<<< goto ссылается на метку в другой процедуре???
   #endif         #<<< а где if ... then ?
   wait(5000)
   gotoxy(2558,497,0)
endsub
################################################################
sub Start()
   If UO.GetGlobal('MiningCheck')=='on' Then
      UO.SetGlobal('MiningCheck','on')
      UO.Exec('Exec Terminate')
    Else
      UO.Exec('Exec Select')
      UO.SetGlobal('MiningCheck','on')
   EndIf
endsub
##############################
### Копаем руду возле себя ###
##############################
Sub GetOre()
   var mx, my, mz, i, j, CheckTime, CheckLag=0
   ###
   var Wait_1 = "You put"
   var Wait_2 = "heavy"
   var Wait_3 = "Это слишком далеко отсюда."
   var Wait_4 = "Тут не осталось руды."
   var Wait_5 = "but fail"
   var Wait_6 = "Туда Вам не дотянуться"
   var Wait_7 = "in rock"
   var Wait_8 = "You have found some"
   ###
   var Fizzle_1 = "Тут не осталось руды."
   var Fizzle_2 = "Это слишком далеко отсюда."
   var Fizzle_3 = "Туда Вам не дотянуться"
   var Fizzle_4 = "in rock"
   ###
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   For i = mx-3 TO mx+3
      For j = my-3 TO my+3
         Hide()
         UO.Print("Get Coordinate: "+str(mx-i)+" "+str(my-j))
         REPEAT
            CheckLag = CheckLag+1
            #EndIf   #<<< где if ... then ?
            Hide()
            If UO.Waiting() Then
               UO.Targeting()
            EndIf
            UO.WaitTargeTtile('1341',str(i),str(j),str(mz))
            UO.UseObject('Shovel')
            CheckTime = UO.Timer()
            UO.DeleteJournal()
            REPEAT
               Wait(300)
            Until UO.InJournal(Wait_1) or UO.InJournal(Wait_2) or UO.InJournal(Wait_3) or UO.InJournal(Wait_4) or UO.InJournal(Wait_5) or UO.InJournal(Wait_6) or UO.InJournal(Wait_7) or UO.InJournal(Wait_8) or (CheckTime+150)<UO.Timer() or UO.Dead()
            If UO.InJournal(Wait_8) Then
               #смысл этой проверки?
            EndIf
            If CheckLag==10 Then
               CheckLag = 0
               Wait(9000)
            EndIf
         Until UO.InJournal(Fizzle_1) or UO.InJournal(Fizzle_2) or UO.InJournal(Fizzle_3) or UO.InJournal(Fizzle_4) or UO.Dead()
      Next
   Next
   #REPEAT  #<<< а это для чего?
endsub
######################################################################################
Sub loot()
   hide()
   uo.UseSkill('Stealth')
   wait(3000)
 begin:
   if uo.waiting() then
      uo.canceltarget()
   endif
   VAR a,Exit
   VAR UnloadCont='0x412546E4' ; ID sunduka
   DIM Ore[5]
      Ore[0]=0x19B9 ; 4 and more ore
      Ore[1]=0x19B7 ; 1 ore
      Ore[2]=0x19BA ; 2 ore
      Ore[3]=0x19B8 ; 3 ore
   UO.SetReceivingContainer(UnloadCont)
   wait(500)
   For a=0 to 3
      Exit=0
      repeat
         UO.FindType(Ore[a])
         if UO.GetQuantity('finditem')>0 then
            UO.Grab('0','finditem')
            wait(1500)
          Else
            Exit=1
         endif
      until Exit==1
   Next
   UO.UnSetReceivingContainer()
   uo.print('vigruzili vsiu rudu pora kopati dalise???')
endsub
#######################
### Прячимся в хайд ###
#######################
Sub hide()
   while not UO.Hidden()
      UO.Warmode("0")
      uo.print("Nikaimsia")
      UO.UseSkill("Hiding")
      wait(4000)
   wend
endsub   #<<<добавил, так как отсутствовало.
################################################################

################################################################
Sub med()
   VAR LastTimer
   UO.DeleteJournal()
   while UO.Mana<UO.Int
      LastTimer=UO.Timer()
      UO.UseSkill('Meditation')
      repeat
         wait(100)
      until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
      UO.DeleteJournal()
      wait(200)
   wend
endsub
################################################################
Sub regi()
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,"Sunduk")
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,"Sunduk")
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',"Sunduk")
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
################################################################
Sub Kill()
   var Count,LastTimer,Golem
   var o,exit
   dim Ore[13]
      Ore[1]=0x19B9
      Ore[2]=0x19B7
      Ore[3]=0x19BA
      Ore[4]=0x19B8
      Ore[5]=0x0F11
      Ore[6]=0x0F16
      Ore[7]=0x0F18
      Ore[8]=0x0F15
      Ore[9]=0x0F10
      Ore[10]=0x0F0F
      Ore[11]=0x0F26
      Ore[12]=0x1F4C
      Ore[13]=0x0EED
   hide()
   while uo.STR<uo.Life+1
      if uo.Mana>=50 then
         uo.WaitMenu('What','Daemon')
         uo.Cast('Polymorph')
         wait(8000)
       else
         med()
         wait(3000)
      endif
   wend
   LastTimer=uo.Timer()
   repeat
      uo.BandageSelf()
      wait(4000)
   until uo.Life==uo.STR or LastTimer+300<uo.Timer()
   uo.UseType('0x1B76') ## - Хеатер Щит(тип).
   uo.DeleteJournal()
   uo.Exec('warmode 1')
   uo.FindType('0x0010',-1,'ground')
   Elemental=uo.GetSerial('finditem')
   uo.Attack(Golem)
   repeat
      wait(1000)
      if uo.Life<50 Then
         uo.Bandageself()
      endif
      if uo.GetDistance(Golem)>1 then
         gotoxy(0,0,'finditem')
      endif
   until uo.IsNPC(Golem)==0
   wait(3000)
   uo.Exec('warmode 0')
   wait(1000)
   LastTimer=uo.Timer()
   uo.DeleteJournal()
   for o=1 to 13
      exit=0
      repeat
         uo.FindType(Ore[o],-1,'ground')
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
          else
            exit=1
         endif
      until exit==1
   next
   ### uo.Exec('warmode 1')
   uo.Exec('warmode 0')
   uo.Exec('exec Mining')
endsub
####################################
### Смотрим скока накопали руды. ###
####################################
Sub InfoOre()
   var i, ii, a, LogsTime=PrintTime()
   Dim Ore[3]
      Ore[0] = '0x19B9' ; 4 and more ore
      Ore[1] = '0x19B8' ; 3 ore
      Ore[2] = '0x19BA' ; 2 ore
      Ore[3] = '0x19B7' ; 1 ore

   Dim NameOre[13]
      NameOre[0]  = 'Iron'
      NameOre[1]  = 'Cooper'
      NameOre[2]  = 'Agapite'
      NameOre[3]  = 'Golden'
      NameOre[4]  = 'Orion'
      NameOre[5]  = 'Verite'
      NameOre[6]  = 'Dwarf'
      NameOre[7]  = 'Silver'
      NameOre[8]  = 'Shadow'
      NameOre[9]  = 'Valorite'
      NameOre[10] = 'Crystal'
      NameOre[11] = 'Magma'
      NameOre[12] = 'Obsidian'
      NameOre[13] = 'Mytheril'

   Dim ColorOre[13]
      ColorOre[0]  = '0x0000'
      ColorOre[1]  = '0x0641'
      ColorOre[2]  = '0x0400'
      ColorOre[3]  = '0x084d'
      ColorOre[4]  = '0x048a'
      ColorOre[5]  = '0x07d1'
      ColorOre[6]  = '0x0488'
      ColorOre[7]  = '0x0482'
      ColorOre[8]  = '0x0770'
      ColorOre[9]  = '0x0515'
      ColorOre[10] = '0x0487'
      ColorOre[11] = '0x0486'
      ColorOre[12] = '0x0485'
      ColorOre[13] = '0x048d'
   UO.TextOpen()
   UO.TextPrint("#####################")
   UO.TextPrint("## Время: "+LogsTime+" ##")
   UO.TextPrint("#####################")
   For i = 0 TO 3
      For ii = 0 TO 13
         If a<>0 Then
            UO.TextPrint(NameOre[ii]+" Ore: "+STR(a))
         EndIf
      Next
   Next
   UO.TextPrint("#####################")
endsub

Sub GetAmount(Type,Color,Cont)
   var item_amount = 0
   UO.IgnoreReset()
   REPEAT
      UO.FindType(Type, Color, Cont)
      If UO.FindCount() Then
         If UO.GetQuantity('finditem')==0 Then
            item_amount = item_amount + 1
          Else
            item_amount = item_amount + UO.GetQuantity('finditem')
         EndIf
         UO.Ignore('finditem')
         UO.FindType(Type, Color, Cont)
      EndIf
   Until UO.FindCount()==0 or UO.Dead()
   UO.IgnoreReset()
   Return item_amount
endsub
##############
### Часики ###
##############
Sub PrintTime()
   var HR  = ''
   var MIN = ''
   var SEC = ''
   var CurrentTime = UO.Time()
   If CurrentTime>99999 Then
      HR  = Mid(STR(CurrentTime),0,2)
      MIN = Mid(STR(CurrentTime),2,2)
      SEC = Mid(STR(CurrentTime),4,2)
    Else
      If CurrentTime > 9999 Then
         HR  = '0'+Mid(STR(CurrentTime),0,1)
         MIN = Mid(STR(CurrentTime),1,2)
         SEC = Mid(STR(CurrentTime),3,2)
       Else
         If CurrentTime > 999 Then
            HR  = '00'
            MIN = Mid(STR(CurrentTime),0,2)
            SEC = Mid(STR(CurrentTime),2,2)
          Else
            If CurrentTime > 99 Then
               HR  = '00'
               MIN = '0'+Mid(STR(CurrentTime),0,1)
               SEC = Mid(STR(CurrentTime),1,2)
             Else
               If CurrentTime > 9  Then
                  HR  = '00'
                  MIN = '00'
                  SEC = STR(CurrentTime)
                Else
                  HR  = '00'
                  MIN = '00'
                  SEC = '0'+STR(CurrentTime)
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   Return (HR+':'+MIN+':'+SEC)
endsub
##################
### РЕКОНЕКТОР ###
##################
Sub Reconnect()
   var ReconnectTime,rFlag
   ReconnectTime = '0'
   rFlag = 1
   REPEAT
      While UO.ObjAtLayer('Bpack')==''
         If rFlag Then
            ReconnectTime = PrintTime()
            rFlag = 0
         EndIf
         Wait(20000)
         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.TextOpen()
         UO.TextPrint("Disconnected & Reconnected @ "+ReconnectTime)
         rFlag = 1
         ReconnectTime = '0'
      EndIf
   Until false
endsub

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
   endif
   if dx<=prec then
      return
   endif
   if not ldc then
      uo.print(STR(dx))
   endif
   if dx<3 then
      mk=70
    else
      mk=15
   endif
   ox=mx
   oy=my
   for k=1 to mk
      mx=UO.GetX()
      my=UO.GetY()
      if mx<>ox or my<>oy then
         goto sdidapl
      endif
      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
   endif
   if dx<=prec then
      return
   endif
   if ld==dx then
      ldc=ldc+1
      if ldc>100 then
         uo.print("Can not reach location!")
         return
      endif
    else
      ld=dx
   endif
   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
   endif
   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
   endif
   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
endsub


#######################################################################
# Процедура разметки пути от банка к месту реса.                      #
# В ключевых точках щелкаем прицелом по персонажу.                    #
# Разметка пути завершается нажатием клавиши [ESC].                   #
# После завершения разметки пути из текстового окна вставляем         #
# получившийся текст в процедуру GoToResurrect.                       #
#---------------------------------------------------------------------#
sub MarkWay()
   DIM XPoint[100], YPoint[100]
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub

SUB GoToResurrect()  # Идем к месту возраждения и орём там, пока не реснут.
   #======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
   #==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 2
   DIM koord_X[2], koord_Y[2]
       koord_X[1] = 0000
       koord_Y[1] = 0000
       koord_X[2] = 0000
       koord_Y[2] = 0000
   #==== вставте текст до этого комментария ====#
   #============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # После реса идем к обратно к банку.
   for i = LastIndexDIM to 1 step -1
      gotoxy(koord_X[i], koord_Y[i], 0)
   next
   GetReagentsFromBank()
endsub

#Полный копипаст твоей функции regi с небольшими изменениями.
SUB GetReagentsFromBank()
   #VAR BagInBank = '0x00000000' #<<<Вынес в глобальные переменные
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   UO.Say('bank')
   wait(3000)
   UO.UseObject(BagInBank)
   wait(3000)
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,BagInBank)
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,BagInBank)
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',BagInBank)
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
#--------------------------------------------------------------#
################################################################
я в етом скрипте поставил кил ента но хз где надо ставить ево штобы когда появился голем он отачел полема
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

слушай аможешь зделать штобы он шол ресаца как ево убили ,а то он стоит гостом и питаица спрятаца
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Найди в своем скрипте и замени на это

Code: Select all

Sub hide() 
   while not UO.Hidden() and not UO.Dead()
      UO.Warmode("0")
      uo.print("Nikaimsia")
      UO.UseSkill("Hiding")
      wait(4000)
   wend
endsub
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Значит так... Не стоит размножать топики со своим скриптом, вполне возможно было написать, что возникла ошибка line 619 и сюда (и не надо делать репли со всем скриптом (очень трудно читать такие сообщения))
А теперь по существу. Я говорил, что разбераться со скриптом мне не интересно - это действительно так, но меня задела ошибка (так как об этой ошибке ты не говорил до моего изменения) на строке 619. (Как указал в соседнем топие Millerbear - все дело в ходилке.) Может быть быть все из-за моих дополнений? Поэтому добавил свою модифицированную ходилку Revenant'а (координаты пути к ресу взял из соседнего топика, так что надо только тестить, ходилка включается только когда надо идти ресаться, но она без обхода препятстий (надеюсь на пути препятствий нет)). Если скрипт опять будет выдавать ошибку на строках от 510 до 630, то это уже точно касается ходилки gotoxy(), а пока попробуй так:

Code: Select all

# 1. Добавлил функция разметки от банка к месту реса - MarkWay.
# Эта функция выполняется один раз, после чего необходимо внести
# изменения в процедуре GoToResurrect. (все это делается в редакторе инжи)
# Сохраняешь изменения и забываешь про эту разметку навсегда.
# Вопрос: Почему разметку надо делать начиная у банка?
# Ответ: Потому что такова логика твоего скрипта. Живой чар или
#  мертвый после добычи руды он все равно идет к банку.
# 2. Если интересно, то посмотри внимательно весь скрипт, я оставил
# немного комментариев.
# 3. Если скрипт работать не будет, не обессудь, дальше разбирать с
# данным скриптом интереса нет, так как ему необходима глобальная
# переделка.


 VAR BagInBank = '0x4009D5EC'  #<<< ID мешка с реагентами, лежащего в банке.

sub Vertijok()
   UO.Print("!!Viberi kirku!!")
   UO.Exec('addobject Shovel')
   While UO.targeting()
      Wait(3000)
   Wend
   uo.print('!!Viberi runu damoi!! ')
   uo.exec('addobject runeHome')
   while uo.targeting()
      wait(15000)
   wend
   #######################################
   uo.print('!!Viberi sunduk s regami!! ')
   uo.exec('addobject Sunduk')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   uo.print('!!Viberi runu v saxtu!! ')
   uo.exec('addobject runeCave')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   #GoToMine()   #<<< Закоментировал. Больше не будет медитировать перед копкой.
   #repeat       #<<< нет until (поэтому закомментировал)
      while not uo.dead()
         GoToMine()
         gotoxy(2562,491,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2558,497,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2560,493,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2563,488,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2565,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2575,477,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2578,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2573,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,486,0)
         GetOre()
         GoToHome()
      wend
endsub
################################################################
sub GoToHome()
   gotoxy(2566,481,0)
   gotoxy(2558,505,0)
   gotoxy(2552,505,0)
   gotoxy(2552,501,0)
   gotoxy(2525,501,0)
   gotoxy(2525,515,0)
   gotoxy(2507,515,0)
   gotoxy(2507,542,0)
   if UO.Dead() then   #<<<
      GoToResurrect()  #<<< ДОБАВИЛ ВОЗРОЖДЕНИЕ.
   endif               #<<<
   uo.say('bank')
   wait(3000)
   uo.waittargetobject('runeHome') ; домой
   wait(500)
   uo.cast('Recall')
   wait(3000)
   loot()
   wait(3000)
   #reccal:      #<<< а это к чему? и почему эта метка находится здесь?
   uo.deletejournal()
   if uo.waiting() then
      uo.canceltarget()
   endif
endsub
################################################################
Sub GoToMine()
   med()
   regi()
   wait(500)
   uo.waittargetobject('runeCave') ; V saxtu
   uo.cast('Recall')
   #goto reccal   #<<< goto ссылается на метку в другой процедуре???
   #endif         #<<< а где if ... then ?
   wait(5000)
   gotoxy(2558,497,0)
endsub
################################################################
sub Start()
   If UO.GetGlobal('MiningCheck')=='on' Then
      UO.SetGlobal('MiningCheck','on')
      UO.Exec('Exec Terminate')
    Else
      UO.Exec('Exec Select')
      UO.SetGlobal('MiningCheck','on')
   EndIf
endsub
##############################
### Копаем руду возле себя ###
##############################
Sub GetOre()
   var mx, my, mz, i, j, CheckTime, CheckLag=0
   ###
   var Wait_1 = "You put"
   var Wait_2 = "heavy"
   var Wait_3 = "Это слишком далеко отсюда."
   var Wait_4 = "Тут не осталось руды."
   var Wait_5 = "but fail"
   var Wait_6 = "Туда Вам не дотянуться"
   var Wait_7 = "in rock"
   var Wait_8 = "You have found some"
   ###
   var Fizzle_1 = "Тут не осталось руды."
   var Fizzle_2 = "Это слишком далеко отсюда."
   var Fizzle_3 = "Туда Вам не дотянуться"
   var Fizzle_4 = "in rock"
   ###
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   For i = mx-3 TO mx+3
      For j = my-3 TO my+3
         Hide()
         UO.Print("Get Coordinate: "+str(mx-i)+" "+str(my-j))
         REPEAT
            CheckLag = CheckLag+1
            #EndIf   #<<< где if ... then ?
            Hide()
            If UO.Waiting() Then
               UO.Targeting()
            EndIf
            UO.WaitTargeTtile('1341',str(i),str(j),str(mz))
            UO.UseObject('Shovel')
            CheckTime = UO.Timer()
            UO.DeleteJournal()
            REPEAT
               Wait(300)
            Until UO.InJournal(Wait_1) or UO.InJournal(Wait_2) or UO.InJournal(Wait_3) or UO.InJournal(Wait_4) or UO.InJournal(Wait_5) or UO.InJournal(Wait_6) or UO.InJournal(Wait_7) or UO.InJournal(Wait_8) or (CheckTime+150)<UO.Timer() or UO.Dead()
            If UO.InJournal(Wait_8) Then
               #смысл этой проверки?
            EndIf
            If CheckLag==10 Then
               CheckLag = 0
               Wait(9000)
            EndIf
         Until UO.InJournal(Fizzle_1) or UO.InJournal(Fizzle_2) or UO.InJournal(Fizzle_3) or UO.InJournal(Fizzle_4) or UO.Dead()
      Next
   Next
   #REPEAT  #<<< а это для чего?
endsub
######################################################################################
Sub loot()
   hide()
   uo.UseSkill('Stealth')
   wait(3000)
 begin:
   if uo.waiting() then
      uo.canceltarget()
   endif
   VAR a,Exit
   VAR UnloadCont='0x412546E4' ; ID sunduka
   DIM Ore[5]
      Ore[0]=0x19B9 ; 4 and more ore
      Ore[1]=0x19B7 ; 1 ore
      Ore[2]=0x19BA ; 2 ore
      Ore[3]=0x19B8 ; 3 ore
   UO.SetReceivingContainer(UnloadCont)
   wait(500)
   For a=0 to 3
      Exit=0
      repeat
         UO.FindType(Ore[a])
         if UO.GetQuantity('finditem')>0 then
            UO.Grab('0','finditem')
            wait(1500)
          Else
            Exit=1
         endif
      until Exit==1
   Next
   UO.UnSetReceivingContainer()
   uo.print('vigruzili vsiu rudu pora kopati dalise???')
endsub
#######################
### Прячимся в хайд ###
#######################
Sub hide()
   while not UO.Hidden() and not UO.Dead()
      UO.Warmode("0")
      uo.print("Nikaimsia")
      UO.UseSkill("Hiding")
      wait(4000)
   wend
endsub   #<<<добавил, так как отсутствовало.
################################################################

################################################################
Sub med()
   VAR LastTimer
   UO.DeleteJournal()
   while UO.Mana<UO.Int
      LastTimer=UO.Timer()
      UO.UseSkill('Meditation')
      repeat
         wait(100)
      until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
      UO.DeleteJournal()
      wait(200)
   wend
endsub
################################################################
Sub regi()
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,"Sunduk")
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,"Sunduk")
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',"Sunduk")
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
################################################################
Sub Kill()
   var Count,LastTimer,Golem
   var o,exit
   dim Ore[13]
      Ore[1]=0x19B9
      Ore[2]=0x19B7
      Ore[3]=0x19BA
      Ore[4]=0x19B8
      Ore[5]=0x0F11
      Ore[6]=0x0F16
      Ore[7]=0x0F18
      Ore[8]=0x0F15
      Ore[9]=0x0F10
      Ore[10]=0x0F0F
      Ore[11]=0x0F26
      Ore[12]=0x1F4C
      Ore[13]=0x0EED
   hide()
   while uo.STR<uo.Life+1
      if uo.Mana>=50 then
         uo.WaitMenu('What','Daemon')
         uo.Cast('Polymorph')
         wait(8000)
       else
         med()
         wait(3000)
      endif
   wend
   LastTimer=uo.Timer()
   repeat
      uo.BandageSelf()
      wait(4000)
   until uo.Life==uo.STR or LastTimer+300<uo.Timer()
   uo.UseType('0x1B76') ## - Хеатер Щит(тип).
   uo.DeleteJournal()
   uo.Exec('warmode 1')
   uo.FindType('0x0010',-1,'ground')
   Elemental=uo.GetSerial('finditem')
   uo.Attack(Golem)
   repeat
      wait(1000)
      if uo.Life<50 Then
         uo.Bandageself()
      endif
      if uo.GetDistance(Golem)>1 then
         gotoxy(0,0,'finditem')
      endif
   until uo.IsNPC(Golem)==0
   wait(3000)
   uo.Exec('warmode 0')
   wait(1000)
   LastTimer=uo.Timer()
   uo.DeleteJournal()
   for o=1 to 13
      exit=0
      repeat
         uo.FindType(Ore[o],-1,'ground')
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
          else
            exit=1
         endif
      until exit==1
   next
   ### uo.Exec('warmode 1')
   uo.Exec('warmode 0')
   uo.Exec('exec Mining')
endsub
####################################
### Смотрим скока накопали руды. ###
####################################
Sub InfoOre()
   var i, ii, a, LogsTime=PrintTime()
   Dim Ore[3]
      Ore[0] = '0x19B9' ; 4 and more ore
      Ore[1] = '0x19B8' ; 3 ore
      Ore[2] = '0x19BA' ; 2 ore
      Ore[3] = '0x19B7' ; 1 ore

   Dim NameOre[13]
      NameOre[0]  = 'Iron'
      NameOre[1]  = 'Cooper'
      NameOre[2]  = 'Agapite'
      NameOre[3]  = 'Golden'
      NameOre[4]  = 'Orion'
      NameOre[5]  = 'Verite'
      NameOre[6]  = 'Dwarf'
      NameOre[7]  = 'Silver'
      NameOre[8]  = 'Shadow'
      NameOre[9]  = 'Valorite'
      NameOre[10] = 'Crystal'
      NameOre[11] = 'Magma'
      NameOre[12] = 'Obsidian'
      NameOre[13] = 'Mytheril'

   Dim ColorOre[13]
      ColorOre[0]  = '0x0000'
      ColorOre[1]  = '0x0641'
      ColorOre[2]  = '0x0400'
      ColorOre[3]  = '0x084d'
      ColorOre[4]  = '0x048a'
      ColorOre[5]  = '0x07d1'
      ColorOre[6]  = '0x0488'
      ColorOre[7]  = '0x0482'
      ColorOre[8]  = '0x0770'
      ColorOre[9]  = '0x0515'
      ColorOre[10] = '0x0487'
      ColorOre[11] = '0x0486'
      ColorOre[12] = '0x0485'
      ColorOre[13] = '0x048d'
   UO.TextOpen()
   UO.TextPrint("#####################")
   UO.TextPrint("## Время: "+LogsTime+" ##")
   UO.TextPrint("#####################")
   For i = 0 TO 3
      For ii = 0 TO 13
         If a<>0 Then
            UO.TextPrint(NameOre[ii]+" Ore: "+STR(a))
         EndIf
      Next
   Next
   UO.TextPrint("#####################")
endsub

Sub GetAmount(Type,Color,Cont)
   var item_amount = 0
   UO.IgnoreReset()
   REPEAT
      UO.FindType(Type, Color, Cont)
      If UO.FindCount() Then
         If UO.GetQuantity('finditem')==0 Then
            item_amount = item_amount + 1
          Else
            item_amount = item_amount + UO.GetQuantity('finditem')
         EndIf
         UO.Ignore('finditem')
         UO.FindType(Type, Color, Cont)
      EndIf
   Until UO.FindCount()==0 or UO.Dead()
   UO.IgnoreReset()
   Return item_amount
endsub
##############
### Часики ###
##############
Sub PrintTime()
   var HR  = ''
   var MIN = ''
   var SEC = ''
   var CurrentTime = UO.Time()
   If CurrentTime>99999 Then
      HR  = Mid(STR(CurrentTime),0,2)
      MIN = Mid(STR(CurrentTime),2,2)
      SEC = Mid(STR(CurrentTime),4,2)
    Else
      If CurrentTime > 9999 Then
         HR  = '0'+Mid(STR(CurrentTime),0,1)
         MIN = Mid(STR(CurrentTime),1,2)
         SEC = Mid(STR(CurrentTime),3,2)
       Else
         If CurrentTime > 999 Then
            HR  = '00'
            MIN = Mid(STR(CurrentTime),0,2)
            SEC = Mid(STR(CurrentTime),2,2)
          Else
            If CurrentTime > 99 Then
               HR  = '00'
               MIN = '0'+Mid(STR(CurrentTime),0,1)
               SEC = Mid(STR(CurrentTime),1,2)
             Else
               If CurrentTime > 9  Then
                  HR  = '00'
                  MIN = '00'
                  SEC = STR(CurrentTime)
                Else
                  HR  = '00'
                  MIN = '00'
                  SEC = '0'+STR(CurrentTime)
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   Return (HR+':'+MIN+':'+SEC)
endsub
##################
### РЕКОНЕКТОР ###
##################
Sub Reconnect()
   var ReconnectTime,rFlag
   ReconnectTime = '0'
   rFlag = 1
   REPEAT
      While UO.ObjAtLayer('Bpack')==''
         If rFlag Then
            ReconnectTime = PrintTime()
            rFlag = 0
         EndIf
         Wait(20000)
         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.TextOpen()
         UO.TextPrint("Disconnected & Reconnected @ "+ReconnectTime)
         rFlag = 1
         ReconnectTime = '0'
      EndIf
   Until false
endsub

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
   endif
   if dx<=prec then
      return
   endif
   if not ldc then
      uo.print(STR(dx))
   endif
   if dx<3 then
      mk=70
    else
      mk=15
   endif
   ox=mx
   oy=my
   for k=1 to mk
      mx=UO.GetX()
      my=UO.GetY()
      if mx<>ox or my<>oy then
         goto sdidapl
      endif
      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
   endif
   if dx<=prec then
      return
   endif
   if ld==dx then
      ldc=ldc+1
      if ldc>100 then
         uo.print("Can not reach location!")
         return
      endif
    else
      ld=dx
   endif
   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
   endif
   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
   endif
   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
endsub


#######################################################################
# Процедура разметки пути от банка к месту реса.                      #
# В ключевых точках щелкаем прицелом по персонажу.                    #
# Разметка пути завершается нажатием клавиши [ESC].                   #
# После завершения разметки пути из текстового окна вставляем         #
# получившийся текст в процедуру GoToResurrect.                       #
#---------------------------------------------------------------------#
sub MarkWay()
   DIM XPoint[100], YPoint[100]
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub

SUB GoToResurrect()  # Идем к месту возраждения и орём там, пока не реснут.
   #======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
   #==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 18
   DIM koord_X[18], koord_Y[18]
       koord_X[1] = 2506
       koord_Y[1] = 540
       koord_X[2] = 2514
       koord_Y[2] = 540
       koord_X[3] = 2517
       koord_Y[3] = 540
       koord_X[4] = 2517
       koord_Y[4] = 554
       koord_X[5] = 2517
       koord_Y[5] = 561
       koord_X[6] = 2528
       koord_Y[6] = 563
       koord_X[7] = 2546
       koord_Y[7] = 563
       koord_X[8] = 2552
       koord_Y[8] = 569
       koord_X[9] = 2552
       koord_Y[9] = 573
       koord_X[10] = 2556
       koord_Y[10] = 577
       koord_X[11] = 2559
       koord_Y[11] = 577
       koord_X[12] = 2562
       koord_Y[12] = 580
       koord_X[13] = 2567
       koord_Y[13] = 580
       koord_X[14] = 2567
       koord_Y[14] = 610
       koord_X[15] = 2578
       koord_Y[15] = 610
       koord_X[16] = 2578
       koord_Y[16] = 598
       koord_X[17] = 2574
       koord_Y[17] = 594
       koord_X[18] = 2574
       koord_Y[18] = 594
   #==== вставте текст до этого комментария ====#
   #============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      Walk_R3(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # После реса идем к обратно к банку.
   for i = LastIndexDIM to 1 step -1
      Walk_R3(koord_X[i], koord_Y[i], 0)
   next
   GetReagentsFromBank()
endsub

#Полный копипаст твоей функции regi с небольшими изменениями.
SUB GetReagentsFromBank()
   #VAR BagInBank = '0x00000000' #<<<Вынес в глобальные переменные
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   UO.Say('bank')
   wait(3000)
   UO.UseObject(BagInBank)
   wait(3000)
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,BagInBank)
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,BagInBank)
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',BagInBank)
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub

SUB Walk_R3(X,Y,pr)
 #Небольшая переделка ходилки Revenant'а, без обход апрепятствий.
 #Переделывал GAUHAR.
 #X,Y - координаты цели.
 #pr  - точность подхода к координатам цели.
   VAR KEY='38333936 034373540', n, m
   VAR xs=UO.GetX(), ys=UO.GetY(), ds = UO.GetDir(), k
   while ((X-xs>pr or xs-X>pr) and X<>xs) or ((Y-ys>pr or ys-Y>pr) and Y<>ys)
      if X < xs then
         n = 1
      endif
      if X == xs then
         n = 2
      endif
      if X > xs then
         n = 3
      endif
      if Y < ys then
         m = 1
      endif
      if Y == ys then
         m = 2
      endif
      if Y > ys then
         m = 3
      endif
      UO.Press(val(mid(KEY, 2*n+6*m-8, 2)))
      k = 0
      while xs == UO.GetX() and ys == UO.GetY() and ds == UO.GetDir() and k < 100
         wait(10)
         k = k + 1
      wend
      xs = UO.GetX()
      ys = UO.GetY()
      ds = UO.GetDir()
   wend
endsub
#--------------------------------------------------------------#
################################################################
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

GAUHAR wrote:Значит так... Не стоит размножать топики со своим скриптом, вполне возможно было написать, что возникла ошибка line 619 и сюда (и не надо делать репли со всем скриптом (очень трудно читать такие сообщения))
А теперь по существу. Я говорил, что разбераться со скриптом мне не интересно - это действительно так, но меня задела ошибка (так как об этой ошибке ты не говорил до моего изменения) на строке 619. (Как указал в соседнем топие Millerbear - все дело в ходилке.) Может быть быть все из-за моих дополнений? Поэтому добавил свою модифицированную ходилку Revenant'а (координаты пути к ресу взял из соседнего топика, так что надо только тестить, ходилка включается только когда надо идти ресаться, но она без обхода препятстий (надеюсь на пути препятствий нет)). Если скрипт опять будет выдавать ошибку на строках от 510 до 630, то это уже точно касается ходилки gotoxy(), а пока попробуй так:

Code: Select all

# 1. Добавлил функция разметки от банка к месту реса - MarkWay.
# Эта функция выполняется один раз, после чего необходимо внести
# изменения в процедуре GoToResurrect. (все это делается в редакторе инжи)
# Сохраняешь изменения и забываешь про эту разметку навсегда.
# Вопрос: Почему разметку надо делать начиная у банка?
# Ответ: Потому что такова логика твоего скрипта. Живой чар или
#  мертвый после добычи руды он все равно идет к банку.
# 2. Если интересно, то посмотри внимательно весь скрипт, я оставил
# немного комментариев.
# 3. Если скрипт работать не будет, не обессудь, дальше разбирать с
# данным скриптом интереса нет, так как ему необходима глобальная
# переделка.


 VAR BagInBank = '0x4009D5EC'  #<<< ID мешка с реагентами, лежащего в банке.

sub Vertijok()
   UO.Print("!!Viberi kirku!!")
   UO.Exec('addobject Shovel')
   While UO.targeting()
      Wait(3000)
   Wend
   uo.print('!!Viberi runu damoi!! ')
   uo.exec('addobject runeHome')
   while uo.targeting()
      wait(15000)
   wend
   #######################################
   uo.print('!!Viberi sunduk s regami!! ')
   uo.exec('addobject Sunduk')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   uo.print('!!Viberi runu v saxtu!! ')
   uo.exec('addobject runeCave')
   while uo.targeting()
      wait(100)
   wend
   #######################################
   #GoToMine()   #<<< Закоментировал. Больше не будет медитировать перед копкой.
   #repeat       #<<< нет until (поэтому закомментировал)
      while not uo.dead()
         GoToMine()
         gotoxy(2562,491,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2558,497,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2560,493,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2563,488,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2565,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2575,477,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2578,480,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2573,483,0)
         GetOre()
         GoToHome()
         GoToMine()
         gotoxy(2570,486,0)
         GetOre()
         GoToHome()
      wend
endsub
################################################################
sub GoToHome()
   gotoxy(2566,481,0)
   gotoxy(2558,505,0)
   gotoxy(2552,505,0)
   gotoxy(2552,501,0)
   gotoxy(2525,501,0)
   gotoxy(2525,515,0)
   gotoxy(2507,515,0)
   gotoxy(2507,542,0)
   if UO.Dead() then   #<<<
      GoToResurrect()  #<<< ДОБАВИЛ ВОЗРОЖДЕНИЕ.
   endif               #<<<
   uo.say('bank')
   wait(3000)
   uo.waittargetobject('runeHome') ; домой
   wait(500)
   uo.cast('Recall')
   wait(3000)
   loot()
   wait(3000)
   #reccal:      #<<< а это к чему? и почему эта метка находится здесь?
   uo.deletejournal()
   if uo.waiting() then
      uo.canceltarget()
   endif
endsub
################################################################
Sub GoToMine()
   med()
   regi()
   wait(500)
   uo.waittargetobject('runeCave') ; V saxtu
   uo.cast('Recall')
   #goto reccal   #<<< goto ссылается на метку в другой процедуре???
   #endif         #<<< а где if ... then ?
   wait(5000)
   gotoxy(2558,497,0)
endsub
################################################################
sub Start()
   If UO.GetGlobal('MiningCheck')=='on' Then
      UO.SetGlobal('MiningCheck','on')
      UO.Exec('Exec Terminate')
    Else
      UO.Exec('Exec Select')
      UO.SetGlobal('MiningCheck','on')
   EndIf
endsub
##############################
### Копаем руду возле себя ###
##############################
Sub GetOre()
   var mx, my, mz, i, j, CheckTime, CheckLag=0
   ###
   var Wait_1 = "You put"
   var Wait_2 = "heavy"
   var Wait_3 = "Это слишком далеко отсюда."
   var Wait_4 = "Тут не осталось руды."
   var Wait_5 = "but fail"
   var Wait_6 = "Туда Вам не дотянуться"
   var Wait_7 = "in rock"
   var Wait_8 = "You have found some"
   ###
   var Fizzle_1 = "Тут не осталось руды."
   var Fizzle_2 = "Это слишком далеко отсюда."
   var Fizzle_3 = "Туда Вам не дотянуться"
   var Fizzle_4 = "in rock"
   ###
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   For i = mx-3 TO mx+3
      For j = my-3 TO my+3
         Hide()
         UO.Print("Get Coordinate: "+str(mx-i)+" "+str(my-j))
         REPEAT
            CheckLag = CheckLag+1
            #EndIf   #<<< где if ... then ?
            Hide()
            If UO.Waiting() Then
               UO.Targeting()
            EndIf
            UO.WaitTargeTtile('1341',str(i),str(j),str(mz))
            UO.UseObject('Shovel')
            CheckTime = UO.Timer()
            UO.DeleteJournal()
            REPEAT
               Wait(300)
            Until UO.InJournal(Wait_1) or UO.InJournal(Wait_2) or UO.InJournal(Wait_3) or UO.InJournal(Wait_4) or UO.InJournal(Wait_5) or UO.InJournal(Wait_6) or UO.InJournal(Wait_7) or UO.InJournal(Wait_8) or (CheckTime+150)<UO.Timer() or UO.Dead()
            If UO.InJournal(Wait_8) Then
               #смысл этой проверки?
            EndIf
            If CheckLag==10 Then
               CheckLag = 0
               Wait(9000)
            EndIf
         Until UO.InJournal(Fizzle_1) or UO.InJournal(Fizzle_2) or UO.InJournal(Fizzle_3) or UO.InJournal(Fizzle_4) or UO.Dead()
      Next
   Next
   #REPEAT  #<<< а это для чего?
endsub
######################################################################################
Sub loot()
   hide()
   uo.UseSkill('Stealth')
   wait(3000)
 begin:
   if uo.waiting() then
      uo.canceltarget()
   endif
   VAR a,Exit
   VAR UnloadCont='0x412546E4' ; ID sunduka
   DIM Ore[5]
      Ore[0]=0x19B9 ; 4 and more ore
      Ore[1]=0x19B7 ; 1 ore
      Ore[2]=0x19BA ; 2 ore
      Ore[3]=0x19B8 ; 3 ore
   UO.SetReceivingContainer(UnloadCont)
   wait(500)
   For a=0 to 3
      Exit=0
      repeat
         UO.FindType(Ore[a])
         if UO.GetQuantity('finditem')>0 then
            UO.Grab('0','finditem')
            wait(1500)
          Else
            Exit=1
         endif
      until Exit==1
   Next
   UO.UnSetReceivingContainer()
   uo.print('vigruzili vsiu rudu pora kopati dalise???')
endsub
#######################
### Прячимся в хайд ###
#######################
Sub hide()
   while not UO.Hidden() and not UO.Dead()
      UO.Warmode("0")
      uo.print("Nikaimsia")
      UO.UseSkill("Hiding")
      wait(4000)
   wend
endsub   #<<<добавил, так как отсутствовало.
################################################################

################################################################
Sub med()
   VAR LastTimer
   UO.DeleteJournal()
   while UO.Mana<UO.Int
      LastTimer=UO.Timer()
      UO.UseSkill('Meditation')
      repeat
         wait(100)
      until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
      UO.DeleteJournal()
      wait(200)
   wend
endsub
################################################################
Sub regi()
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,"Sunduk")
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,"Sunduk")
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',"Sunduk")
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub
################################################################
Sub Kill()
   var Count,LastTimer,Golem
   var o,exit
   dim Ore[13]
      Ore[1]=0x19B9
      Ore[2]=0x19B7
      Ore[3]=0x19BA
      Ore[4]=0x19B8
      Ore[5]=0x0F11
      Ore[6]=0x0F16
      Ore[7]=0x0F18
      Ore[8]=0x0F15
      Ore[9]=0x0F10
      Ore[10]=0x0F0F
      Ore[11]=0x0F26
      Ore[12]=0x1F4C
      Ore[13]=0x0EED
   hide()
   while uo.STR<uo.Life+1
      if uo.Mana>=50 then
         uo.WaitMenu('What','Daemon')
         uo.Cast('Polymorph')
         wait(8000)
       else
         med()
         wait(3000)
      endif
   wend
   LastTimer=uo.Timer()
   repeat
      uo.BandageSelf()
      wait(4000)
   until uo.Life==uo.STR or LastTimer+300<uo.Timer()
   uo.UseType('0x1B76') ## - Хеатер Щит(тип).
   uo.DeleteJournal()
   uo.Exec('warmode 1')
   uo.FindType('0x0010',-1,'ground')
   Elemental=uo.GetSerial('finditem')
   uo.Attack(Golem)
   repeat
      wait(1000)
      if uo.Life<50 Then
         uo.Bandageself()
      endif
      if uo.GetDistance(Golem)>1 then
         gotoxy(0,0,'finditem')
      endif
   until uo.IsNPC(Golem)==0
   wait(3000)
   uo.Exec('warmode 0')
   wait(1000)
   LastTimer=uo.Timer()
   uo.DeleteJournal()
   for o=1 to 13
      exit=0
      repeat
         uo.FindType(Ore[o],-1,'ground')
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
          else
            exit=1
         endif
      until exit==1
   next
   ### uo.Exec('warmode 1')
   uo.Exec('warmode 0')
   uo.Exec('exec Mining')
endsub
####################################
### Смотрим скока накопали руды. ###
####################################
Sub InfoOre()
   var i, ii, a, LogsTime=PrintTime()
   Dim Ore[3]
      Ore[0] = '0x19B9' ; 4 and more ore
      Ore[1] = '0x19B8' ; 3 ore
      Ore[2] = '0x19BA' ; 2 ore
      Ore[3] = '0x19B7' ; 1 ore

   Dim NameOre[13]
      NameOre[0]  = 'Iron'
      NameOre[1]  = 'Cooper'
      NameOre[2]  = 'Agapite'
      NameOre[3]  = 'Golden'
      NameOre[4]  = 'Orion'
      NameOre[5]  = 'Verite'
      NameOre[6]  = 'Dwarf'
      NameOre[7]  = 'Silver'
      NameOre[8]  = 'Shadow'
      NameOre[9]  = 'Valorite'
      NameOre[10] = 'Crystal'
      NameOre[11] = 'Magma'
      NameOre[12] = 'Obsidian'
      NameOre[13] = 'Mytheril'

   Dim ColorOre[13]
      ColorOre[0]  = '0x0000'
      ColorOre[1]  = '0x0641'
      ColorOre[2]  = '0x0400'
      ColorOre[3]  = '0x084d'
      ColorOre[4]  = '0x048a'
      ColorOre[5]  = '0x07d1'
      ColorOre[6]  = '0x0488'
      ColorOre[7]  = '0x0482'
      ColorOre[8]  = '0x0770'
      ColorOre[9]  = '0x0515'
      ColorOre[10] = '0x0487'
      ColorOre[11] = '0x0486'
      ColorOre[12] = '0x0485'
      ColorOre[13] = '0x048d'
   UO.TextOpen()
   UO.TextPrint("#####################")
   UO.TextPrint("## Время: "+LogsTime+" ##")
   UO.TextPrint("#####################")
   For i = 0 TO 3
      For ii = 0 TO 13
         If a<>0 Then
            UO.TextPrint(NameOre[ii]+" Ore: "+STR(a))
         EndIf
      Next
   Next
   UO.TextPrint("#####################")
endsub

Sub GetAmount(Type,Color,Cont)
   var item_amount = 0
   UO.IgnoreReset()
   REPEAT
      UO.FindType(Type, Color, Cont)
      If UO.FindCount() Then
         If UO.GetQuantity('finditem')==0 Then
            item_amount = item_amount + 1
          Else
            item_amount = item_amount + UO.GetQuantity('finditem')
         EndIf
         UO.Ignore('finditem')
         UO.FindType(Type, Color, Cont)
      EndIf
   Until UO.FindCount()==0 or UO.Dead()
   UO.IgnoreReset()
   Return item_amount
endsub
##############
### Часики ###
##############
Sub PrintTime()
   var HR  = ''
   var MIN = ''
   var SEC = ''
   var CurrentTime = UO.Time()
   If CurrentTime>99999 Then
      HR  = Mid(STR(CurrentTime),0,2)
      MIN = Mid(STR(CurrentTime),2,2)
      SEC = Mid(STR(CurrentTime),4,2)
    Else
      If CurrentTime > 9999 Then
         HR  = '0'+Mid(STR(CurrentTime),0,1)
         MIN = Mid(STR(CurrentTime),1,2)
         SEC = Mid(STR(CurrentTime),3,2)
       Else
         If CurrentTime > 999 Then
            HR  = '00'
            MIN = Mid(STR(CurrentTime),0,2)
            SEC = Mid(STR(CurrentTime),2,2)
          Else
            If CurrentTime > 99 Then
               HR  = '00'
               MIN = '0'+Mid(STR(CurrentTime),0,1)
               SEC = Mid(STR(CurrentTime),1,2)
             Else
               If CurrentTime > 9  Then
                  HR  = '00'
                  MIN = '00'
                  SEC = STR(CurrentTime)
                Else
                  HR  = '00'
                  MIN = '00'
                  SEC = '0'+STR(CurrentTime)
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   Return (HR+':'+MIN+':'+SEC)
endsub
##################
### РЕКОНЕКТОР ###
##################
Sub Reconnect()
   var ReconnectTime,rFlag
   ReconnectTime = '0'
   rFlag = 1
   REPEAT
      While UO.ObjAtLayer('Bpack')==''
         If rFlag Then
            ReconnectTime = PrintTime()
            rFlag = 0
         EndIf
         Wait(20000)
         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.TextOpen()
         UO.TextPrint("Disconnected & Reconnected @ "+ReconnectTime)
         rFlag = 1
         ReconnectTime = '0'
      EndIf
   Until false
endsub

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
   endif
   if dx<=prec then
      return
   endif
   if not ldc then
      uo.print(STR(dx))
   endif
   if dx<3 then
      mk=70
    else
      mk=15
   endif
   ox=mx
   oy=my
   for k=1 to mk
      mx=UO.GetX()
      my=UO.GetY()
      if mx<>ox or my<>oy then
         goto sdidapl
      endif
      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
   endif
   if dx<=prec then
      return
   endif
   if ld==dx then
      ldc=ldc+1
      if ldc>100 then
         uo.print("Can not reach location!")
         return
      endif
    else
      ld=dx
   endif
   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
   endif
   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
   endif
   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
endsub


#######################################################################
# Процедура разметки пути от банка к месту реса.                      #
# В ключевых точках щелкаем прицелом по персонажу.                    #
# Разметка пути завершается нажатием клавиши [ESC].                   #
# После завершения разметки пути из текстового окна вставляем         #
# получившийся текст в процедуру GoToResurrect.                       #
#---------------------------------------------------------------------#
sub MarkWay()
   DIM XPoint[100], YPoint[100]
   VAR idPoint
   VAR i, iCount = 1
   VAR FlagMark = true
   while FlagMark
      UO.Print("Отметь точку маршрута.")
      UO.AddObject('TRGT')
      while UO.Targeting()
         wait(200)
      wend
      idPoint = UO.GetSerial('TRGT')
      if idPoint == UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         iCount = iCount + 1
         UO.Print("ТОЧКА пути занесена в маршрут.")
      endif
      if idPoint <> UO.GetSerial('self') then
         XPoint[iCount] = UO.GetX()
         YPoint[iCount] = UO.GetY()
         FlagMark = false
         UO.Print("Место возраждения занесено в маршрут.")
      endif
   wend
   UO.TextOpen()
   UO.TextClear()
   UO.TextPrint("#=== Текст скопировать в функцию GoToResurrect().")
   UO.TextPrint("#================================================")
   UO.TextPrint("   VAR LastIndexDIM = " + str(iCount))
   UO.TextPrint("   DIM koord_X[" + str(iCount) + "], koord_Y[" + str(iCount) + "]")
   for i = 1 to iCount
      UO.TextPrint("       koord_X[" +str(i) + "] = " + str(XPoint[i]))
      UO.TextPrint("       koord_Y[" +str(i) + "] = " + str(YPoint[i]))
   next
endsub

SUB GoToResurrect()  # Идем к месту возраждения и орём там, пока не реснут.
   #======== ВСТАВТЕ ПОЛУЧИВШИЙСЯ ТЕКСТ ========#
   #==== от этого комментария до следующего ====#
   VAR LastIndexDIM = 18
   DIM koord_X[18], koord_Y[18]
       koord_X[1] = 2506
       koord_Y[1] = 540
       koord_X[2] = 2514
       koord_Y[2] = 540
       koord_X[3] = 2517
       koord_Y[3] = 540
       koord_X[4] = 2517
       koord_Y[4] = 554
       koord_X[5] = 2517
       koord_Y[5] = 561
       koord_X[6] = 2528
       koord_Y[6] = 563
       koord_X[7] = 2546
       koord_Y[7] = 563
       koord_X[8] = 2552
       koord_Y[8] = 569
       koord_X[9] = 2552
       koord_Y[9] = 573
       koord_X[10] = 2556
       koord_Y[10] = 577
       koord_X[11] = 2559
       koord_Y[11] = 577
       koord_X[12] = 2562
       koord_Y[12] = 580
       koord_X[13] = 2567
       koord_Y[13] = 580
       koord_X[14] = 2567
       koord_Y[14] = 610
       koord_X[15] = 2578
       koord_Y[15] = 610
       koord_X[16] = 2578
       koord_Y[16] = 598
       koord_X[17] = 2574
       koord_Y[17] = 594
       koord_X[18] = 2574
       koord_Y[18] = 594
   #==== вставте текст до этого комментария ====#
   #============================================#
   VAR i, k = 0
   # Бежим к месту возрождения.
   for i = 1 to LastIndexDIM
      Walk_R3(koord_X[i], koord_Y[i], 0)
   next
   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   # После реса идем к обратно к банку.
   for i = LastIndexDIM to 1 step -1
      Walk_R3(koord_X[i], koord_Y[i], 0)
   next
   GetReagentsFromBank()
endsub

#Полный копипаст твоей функции regi с небольшими изменениями.
SUB GetReagentsFromBank()
   #VAR BagInBank = '0x00000000' #<<<Вынес в глобальные переменные
   VAR r, q, n, amount = 5
   Dim reg[4]
      reg[1] = '0x0F7A'
      reg[2] = '0x0F7B'
      reg[3] = '0x0F86'
      reg[4] = '0x0E21'
   UO.Say('bank')
   wait(3000)
   UO.UseObject(BagInBank)
   wait(3000)
   For r = 1 to 4
      if uo.count( reg[r] )<>amount then
         q = amount - uo.count( reg[r] )
         if q <> 0 then
            if q > 0 then
               uo.useobject("Sunduk")
               wait(250)
               uo.findtype( reg[r] , -1 ,BagInBank)
               If uo.findcount() == 0 then
                  uo.msg('Ia vzial regi!')
                  return
               endif
               uo.moveitem('finditem', STR(q) )
               wait(1000)
             else
               q = q*-1
               uo.findtype( reg[r] )
               uo.moveitem('finditem', STR(q) ,BagInBank)
               wait(1000)
            endif
         endif
      endif
   next
   While uo.Count('0x0F09','0x0060') < 2
      uo.findtype('0x0F09','0x0060',BagInBank)
      if uo.FindCount() then
         uo.moveitem('finditem')
         checklag()
         wait(1000)
      endif
   wend
   uo.print('Vziali regi ...')
endsub

SUB Walk_R3(X,Y,pr)
 #Небольшая переделка ходилки Revenant'а, без обход апрепятствий.
 #Переделывал GAUHAR.
 #X,Y - координаты цели.
 #pr  - точность подхода к координатам цели.
   VAR KEY='38333936 034373540', n, m
   VAR xs=UO.GetX(), ys=UO.GetY(), ds = UO.GetDir(), k
   while ((X-xs>pr or xs-X>pr) and X<>xs) or ((Y-ys>pr or ys-Y>pr) and Y<>ys)
      if X < xs then
         n = 1
      endif
      if X == xs then
         n = 2
      endif
      if X > xs then
         n = 3
      endif
      if Y < ys then
         m = 1
      endif
      if Y == ys then
         m = 2
      endif
      if Y > ys then
         m = 3
      endif
      UO.Press(val(mid(KEY, 2*n+6*m-8, 2)))
      k = 0
      while xs == UO.GetX() and ys == UO.GetY() and ds == UO.GetDir() and k < 100
         wait(10)
         k = k + 1
      wend
      xs = UO.GetX()
      ys = UO.GetY()
      ds = UO.GetDir()
   wend
endsub
#--------------------------------------------------------------#
################################################################
просто супер работает отлична токо надо чтобы когда он подходет к ресу чтобы нажал WAR и крикнул ресните меня пожалуста. И постави кил ента и голема если сможеши
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

В процедуре GoToResurrect находишь эти строки:

Code: Select all

   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend

и меняешь на эти:

Code: Select all

   # Кричим: "Ресните", - пока не реснут.
   while UO.Dead()
      UO.WarMode(1)
      UO.Say("Ресните меня пожалуйста.")
      wait(3000)
   wend
   UO.WarMode(0)

теперь чар будет в варе пока не реснут и выйдет из вара после реса.

В твоем скрипте есть процедура Kill и она вроде как раз для убийства всяких големов, но нигде не используется, так как по всей видимости просто добавлена из какого-то другого скрипта. К тому же я из Greenpeace, поэтому големов не убиваю. Попробуй с этим разобраться сам.
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

[quote="GAUHAR"] я пробовал но хз куда надо вставлять, у меня есть два вапроса 1) почему он после реса не идет лутать труп, а летит дамой ; 2) дапустем чар взял бенты и после как взял то тупа стоит на месте ничево не делает, и если можеши добавить хил если у нево менши 100 хп штобы он лечился . 3)На оскоме работает нормально а на оскоме фрее копает чуть медленеь и после пару раз как капнул ,кабута он не успел копать до таво как проидет пару сообщения раздалбиф пару камней вы так ничево не нашли. но штото на 630 выдало ошибку тоже самое как на 619 line не знаю почему на окоме работал отлична
Post Reply