Yoko

All sides of Injection
It is currently 2024-03-29 10:30:11

All times are UTC+02:00




Post new topic  Reply to topic  [ 6 posts ] 
Author Message
PostPosted: 2006-02-28 22:05:40 
Offline

Joined: 2005-06-18 15:55:25
Posts: 24
Скрипт работает нормльно. Но после того как проходит весь массив и он начинает заново, то выдает ошибвку в строке f.open. Это самое начало практически
Code:
sub main()
var Ms1 = "There is no ore here to mine"
var Ms2 = "You got hit"
var Ms3 = "You cannot mine that"
var f=file("C:\kopka2.dat") ## - Путь к файлу в котором будут хранится координаты
var k,wei
DIM Gx[82]
DIM Gy[82]
uo.say('.macro on')
while 1<2
   f.open()
   for k=1 to 82
       Beg:
       uo.deletejournal()
       Gx[k]=safe call f.ReadNumber()
       Gy[k]=safe call f.ReadNumber()
       uo.print('Idem kopat v to4ku X=' + str(Gx[k]))
       uo.print('Idem kopat v to4ku Y=' + str(Gy[k]))
       Walker(Gx[k],Gy[k])
         If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) <> '0x0E85' Then
            UO.Equipt( 'Rhand', '0x0E85' )
               repeat
                 wait(200)
               until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == '0x0E85'
         Endif     
        If UO.Waiting() Then
           UO.CancelTarget()
        Endif 
        uo.waittargetself()
        wait(200)   
        uo.usetype('0x0E85')
        repeat
          wait(500)
        until UO.InJournal(ms1) or UO.InJournal(ms2) or UO.InJournal(ms3)
        if UO.InJournal(ms2) then
           uo.deletejournal()
           UO.Exec("playwav C:\alarm1")
              while UO.Life < UO.STR or UO.InJournal(ms1)
                wait(200)
                if UO.Life < 1 then
                   uo.warmode( 1 )
                      repeat
                        wait(200)
                      until UO.Life < 1
                   goto Beg
                end if
              wend
       
       end if
       wei = ( UO.Str * 4 ) - 120
       if UO.Weight > wei then
          Razgruz()
       end if
       wait(4000)
  next
  f.close()
  uo.print('1 cikl zaverwen')
  wait(1000)
wend
end sub

Sub ProDrop(T,C)
UO.FindType(T,C,'backpack')
Var b = UO.GetSerial("finditem")
UO.FindType(T,C,'ground')
Var g = UO.GetSerial("finditem")
UO.MoveItem(b, "0", g,str(uo.getx(g)),str(uo.gety(g)),"0")
Wait(1000)
end sub

Sub Razgruz()
Walker(2426,176)
Walker(2449,176)

UO.Set('finddistance','2')
UO.FindType(0x0FB1,-1,'ground')
wait(200)
If UO.FindCount() <> 0 Then
    repeat
       UO.FindType('0x19B9')
       wait(200)
           IF UO.FindCount() > 0 Then
               If UO.GetColor('finditem') == '0x04AA' Then #Gold
                    ProDrop(0x19B9,0x04AA)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x0455' Then #BlackRock
                    ProDrop(0x19B9,0x0455)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x0515' Then #Vailorite
                   ProDrop(0x19B9,0x0515)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x052D' Then #Mifril
                    ProDrop(0x19B9,0x052D)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x0481' Then #Winter
                    ProDrop(0x19B9,0x0481)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x04C2' Then #blud
                    ProDrop(0x19B9,0x04C2)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x04DF' Then #azur
                    ProDrop(0x19B9,0x04DF)
                end if
                wait(200)
                If UO.GetColor('finditem') == '0x0947' Then #verit
                    ProDrop(0x19B9,0x0947)
                end if
                UO.UseObject('finditem')
                wait(1200)
          EndIf
      until UO.FindCount() == 0
UO.Print("Tenepb pa3/\o>|<uM")
else
UO.Print("Forge not found")
endIf

#############Iron
If UO.Count(0x1BF2, 0x0000) > 0 Then
ProDrop(0x1BF2, 0x0000)
EndIF
############Rasty
If UO.Count(0x1BF2,0x0750) > 0 Then
ProDrop(0x1BF2,0x0750)
EndIF
############Bronze
If UO.Count(0x1BF2, 0x0488) > 0 Then
  ProDrop(0x1BF2, 0x0488)
EndIF
############Old Copper
If UO.Count(0x1BF2, 0x0949) > 0 Then
  ProDrop(0x1BF2, 0x0949)
EndIF
############Dull Copper
If UO.Count(0x1BF2, 0x060A) > 0 Then
  ProDrop(0x1BF2, 0x060A)
EndIF
############Copper
If UO.Count(0x1BF2, 0x0641) > 0 Then
  ProDrop(0x1BF2, 0x0641)
EndIF
############Pirit
If UO.Count(0x1BF2, 0x09EE) > 0 Then
  ProDrop(0x1BF2, 0x09EE)
EndIF
############Silver
If UO.Count(0x1BF8, 0x0482) > 0 Then
  ProDrop(0x1BF8, 0x0482)
EndIF
############Shadow
If UO.Count(0x1BF2, 0x0770) > 0 Then
  ProDrop(0x1BF2, 0x0770)
EndIF
############Agapit
If UO.Count(0x1BF2, 0x0400) > 0 Then
  ProDrop(0x1BF2, 0x0400)
EndIF
############Ambers
If UO.Count(0x0F25,0x0000) > 0 Then
  ProDrop(0x0F25,0x0000)
EndIF
############karti
If UO.Count(0x14ED) > 0 Then
 while uo.count('0x14ED')
 uo.findtype('0x14ED','-1','Bpack')
 wait(200)
 uo.moveitem('finditem','-1','0x5BFD8B81')
 wait(1000)
 wend
EndIF
uo.print('UgeM KonaTb :-)')

Walker(2426,176)
end sub


#####################################################
# WW  W  WW   AA    LL     Kk KK  EE  EE  RRR       #
# WW  W  WW  AA A   LL     Kk K   EEE     R  R      #
# WW  W  WW  AA A   LL     KKK    EEEEE   R R       #
# WW WW  WW  AAAA   LL     KKK    EEE     RRR       #
#  WWW WWW  AA   A   LLLL  KK Kk  EE  EE  R  RR     #
#####################################################
             
var Prec=0
var MaxTraceDistance=15
var Speed=2
var StepTimeOut=600

Sub Walker(GoX,GoY)
  UO.SetGlobal("Logging","0")
  UO.SetGlobal("BlindWalk","0")
  var LastDir
  UO.SetGlobal("GlobalGoX",str(GoX))
  UO.SetGlobal("GlobalGoY",str(GoY))
  while not IsEnd(GoX,GoY)
    LogInfo('Just walking')
    LastDir=GoUntilHit(GoX,GoY)
    if not IsEnd(GoX,GoY) then
      LogInfo('Tracing')
      FullAroundTrace(LastDir,GoX,GoY)
    end if
  wend
end sub

Sub FullAroundTrace(StartDir,GoX,GoY)
  var LineX=UO.GetX()
  var LineY=UO.GetY()
  var CurDir=StartDir
  var Direction=CountDirection(GoX,GoY,CurDir)
  var StartX,StartY
  var MovesDone=0
  repeat
    StartX=UO.GetX()
    StartY=UO.GetY()
    CurDir=Tracer(CurDir,Direction)
    if (CurDir==GetDir(GoX,GoY)) then
      return
    endif
    if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir()),LineX,LineY,GoX,GoY,StartX,StartY) then
      return
    end if
    MovesDone=MovesDone+1
    CurDir=AddToDir(CurDir,-Direction)
  until MovesDone>MaxTraceDistance
end sub

Sub CountDirection(GoX,GoY,StartDir)
  var GoDir=GetDir(GoX,GoY)
  var MyX=UO.GetX()
  var MyY=UO.GetY()
  if GoDir<StartDir then
    return -1
  end if
  if GoDir>StartDir then
    return 1
  end if
  if Abs(MyX-GoX)>Abs(MyY-GoY) then
    if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
      return -1
    else
      return 1
    end if
  else
    if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
      return -1
    else
      return 1
    end if
  end if
end sub

Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY)
  var x3,y3,x4,y4
  x3=StartX
  y3=StartY
  x4=StartX+(XFromDir(Dir)-StartX)*Speed
  y4=StartY+(YFromDir(Dir)-StartY)*Speed
  return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4)
end sub

Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4)
  if x1==x3 and y1==y3 then
    return false
  end if
  var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
  var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
  if z1*z2>0 then
    return false
  else
    LogInfo('Vector info:')
    LogInfo('x1= '+str(x1))
    LogInfo('y1= '+str(y1))
    LogInfo('x2= '+str(x2))
    LogInfo('y2= '+str(y2))
    LogInfo('x3= '+str(x3))
    LogInfo('y3= '+str(y3))
    LogInfo('x4= '+str(x4))
    LogInfo('y4= '+str(y4))
    return true
  end if
end sub

Sub IsDiap(X,X0,X1)
  if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
    return true
  end if
  return false
end sub

Sub GoUntilHit(GoX,GoY)
  var LastDir
  LastDir=GetDir(GoX,GoY)
  var CouldMove
  repeat
    LastDir=GetDir(GoX,GoY)
    if LastDir<>0 and not IsEnd(GoX,GoY) then
      CouldMove=TryDir(LastDir)
    end if
  until LastDir==0 or IsEnd(GoX,GoY) or not CouldMove
  return LastDir
end sub

Sub IsEnd(GoX,GoY)
  if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
    LogInfo('END FOUND')
    return true
  else
    return false
  end if
end sub

Sub GetDir(GoX,GoY)
  var MyX=UO.GetX()
  var MyY=UO.GetY()
  var DiffX=Abs(UO.GetX()-GoX)
  var DiffY=Abs(UO.GetY()-GoY)
  var GoDir=0
  if (DiffX/(DiffY+0.1))>=2 then
    if (MyX>GoX) then
      GoDir=7
    else
      GoDir=3
    end if
  else

  if (DiffY/(DiffX+0.1))>=2 then
    if (MyY>GoY) then
      GoDir=5
    else
      GoDir=1
    end if
  else
 
  if (MyX>GoX) and (MyY>GoY) then
    GoDir=6
  else
  if (MyX>GoX) and (MyY<GoY) then
    GoDir=8
  else
  if (MyX<GoX) and (MyY>GoY) then
    GoDir=4
  else
  if (MyX<GoX) and (MyY<GoY) then
    GoDir=2
  end if
  end if
  end if
  end if
  end if
  end if
  return GoDir
end sub

Sub Tracer(StartDir,Direction)
  var CurDir=StartDir
  var Result
  repeat
    Result=TryDir(CurDir)
    if not Result then
      CurDir=AddToDir(CurDir,Direction)
    end if
  until Result
  return Result
end sub

Sub AddToDir(Dir,Cnt)
  var NewDir=Dir
  NewDir=NewDir+Cnt
  while NewDir>8
    NewDir=NewDir-8
  wend
  while NewDir<1
    NewDir=NewDir+8
  wend
  return NewDir
end sub

Sub TryDir(Dir)
  var BegX=UO.GetX() # Ia?aeuiia O
  var BegY=UO.GetY() # Ia?aeuiia Y
  var Counter=0
  var GoX=BegX
  var GoY=BegY
  GoX=XFromDir(Dir)
  GoY=YFromDir(Dir)
  if not IsPass(GoX,GoY) then
    LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
    return false
  end if
  return TurnAndGoDir(Dir)
end sub

Sub XFromDir(Dir)
  if Dir==2 OR Dir==3 Or Dir==4 then
    return (UO.GetX()+1)
  end if
  if Dir==6 OR Dir==7 Or Dir==8 then
    return (UO.GetX()-1)
  end if
  return (UO.GetX())
end sub

Sub YFromDir(Dir)
  if Dir==8 OR Dir==1 Or Dir==2 then
    return (UO.GetY()+1)
  end if
  if Dir==4 OR Dir==5 Or Dir==6 then
    return (UO.GetY()-1)
  end if
  return (UO.GetY())
end sub

Sub TurnAndGoDir(Dir)
  var StartDir=GetDirToDir(UO.GetDir())
  var StartX=UO.GetX()
  var StartY=UO.GetY()
  var EndDir
  var Counter=0
  GoDir(Dir)
  repeat
    EndDir=GetDirToDir(UO.GetDir())
    wait(100)
    Counter=Counter+1
  until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=8
  if Counter>=8 then
  return 0
  end if
  if StartY<>UO.GetY() or StartX<>UO.GetX() then
  return Dir
  else
  GoDir(Dir)
    repeat
      wait(100)
      Counter=Counter+1
    until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/100
    if Counter>=StepTimeOut/100 then
      LogInfo('Step timeout reached')
      return 0
    else
      return Dir
    end if
  end if
end sub

Sub GetDirToDir(GotDir)
   var ChangedDir=-GotDir
   ChangedDir=AddToDir(ChangedDir,5)
   return ChangedDir
end sub

Sub DirToInj(Dir)
   dim Dirs[9]
   Dirs[1]=1
   Dirs[2]=2
   Dirs[3]=3
   Dirs[4]=6
   Dirs[5]=9
   Dirs[6]=8
   Dirs[7]=7
   Dirs[8]=4

   return (Dirs[Dir])
end sub

Sub GoDir(Dir)
   dim Dirs[9]
   Dirs[1]=35
   Dirs[2]=40
   Dirs[3]=34
   Dirs[4]=39
   Dirs[5]=33
   Dirs[6]=38
   Dirs[7]=36
   Dirs[8]=37

   var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
   var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
   var GoDistance
   if (DistanceX-Prec)<Speed then
      GoDistance=DistanceX-Prec
   else
      if (DistanceY-Prec)<Speed then
         GoDistance=DistanceY-Prec
      else
         GoDistance=Speed
      endif
   endif

   UO.Press(Dirs[Dir],GoDistance)
end sub

Sub IsPass(X,Y)
  if UO.GetGlobal("BlindWalk") then
    return true
  endif

   dim Types[60]
   Types[1]=3
   Types[2]=25
   Types[3]=51
   Types[4]=63
   Types[5]=113
   Types[6]=140
   Types[7]=172
   Types[8]=219
   Types[9]=232
   Types[10]=235
   Types[11]=239
   Types[12]=243
   Types[13]=248
   Types[14]=251
   Types[15]=264
   Types[16]=267
   Types[17]=282
   Types[18]=289
   Types[19]=321
   Types[20]=379
   Types[21]=420
   Types[22]=440
   Types[23]=476
   Types[24]=499
   Types[25]=513
   Types[26]=542
   Types[27]=578
   Types[28]=586
   Types[29]=622
   Types[30]=700
   Types[31]=804
   Types[32]=1740
   Types[33]=1758
   Types[34]=1770
   Types[35]=1779
   Types[36]=1779
   Types[37]=1881
   Types[38]=1886
   Types[39]=1801
   Types[40]=1805
   Types[41]=1813
   Types[42]=1820
   Types[43]=1831
   Types[44]=1833
   Types[45]=1843
   Types[46]=1850
   Types[47]=1873
   Types[48]=1876
   Types[49]=1885
   Types[50]=1888
   Types[51]=1946
   Types[52]=1969
   Types[53]=2500
   Types[54]=2539
 
  for var i=1 TO 53 STEP 2
    if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
      return true
    end if
  next
  return false
end sub

Sub LogInfo(Line)
  if not UO.GetGlobal("Logging")=="0" then
    UO.TextOpen()
    UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
  end if
end sub

Sub Abs(X)
  if X>0 then
    return X
  else
    return (-X)
  end if
end sub


Top
   
 Post subject:
PostPosted: 2006-02-28 22:49:45 
Offline

Joined: 2005-06-26 12:29:37
Posts: 65
1) Если массив объявлен как Gx[82], то его элементы нумеруются от 0 до 81, а не от 1 до 82. Соответственно, цикл for k=1 to 82 ошибочный.

2) Зачем каждый раз в цикле заново считывать координаты? Достаточно будет считать их один раз.


Top
   
 Post subject:
PostPosted: 2006-02-28 22:51:15 
Offline
User avatar

Joined: 2005-07-14 20:53:05
Posts: 124
Я думаю что инжа просто не хочет по второму разу открывать тот же фаил ... он уже загружен ... попробуй поставить f.open() перед while

З.Ы.Я канечно не все понимаю ... но что то знаю. :)

_________________
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer


Top
   
 Post subject:
PostPosted: 2006-02-28 23:55:16 
Offline

Joined: 2005-06-18 15:55:25
Posts: 24
agem wrote:
1) Если массив объявлен как Gx[82], то его элементы нумеруются от 0 до 81, а не от 1 до 82. Соответственно, цикл for k=1 to 82 ошибочный.

просто масив идет с 1 эллемента а не с 0, ну хотя исправлю
agem wrote:
2) Зачем каждый раз в цикле заново считывать координаты? Достаточно будет считать их один раз.

я честно сказать взял эту команду из друго скрипта на форуме, а описание ее не нашел.


Top
   
 Post subject:
PostPosted: 2006-02-28 23:56:07 
Offline

Joined: 2005-06-18 15:55:25
Posts: 24
Blood Slayer wrote:
Я думаю что инжа просто не хочет по второму разу открывать тот же фаил ... он уже загружен ... попробуй поставить f.open() перед while

З.Ы.Я канечно не все понимаю ... но что то знаю. :)

а я после массива поставил f.close()
просто ошибка выскакивает и я пробовал ее по разному исправить


Top
   
 Post subject:
PostPosted: 2006-03-01 00:31:03 
Offline
User avatar

Joined: 2005-07-14 20:53:05
Posts: 124
Boris wrote:
Blood Slayer wrote:
Я думаю что инжа просто не хочет по второму разу открывать тот же фаил ... он уже загружен ... попробуй поставить f.open() перед while

З.Ы.Я канечно не все понимаю ... но что то знаю. :)

а я после массива поставил f.close()
просто ошибка выскакивает и я пробовал ее по разному исправить


Ну я просто только начало почитал :)

_________________
Я пока только учусь :oops:



http://www.surfjunky.com/?r=BloodSlayer


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

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 29 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited