Yoko

All sides of Injection
It is currently 2024-03-28 19:59:34

All times are UTC+02:00




Post new topic  Reply to topic  [ 142 posts ]  Go to page 1 2 3 4 58 Next
Author Message
PostPosted: 2006-03-01 05:42:01 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Имеется старая версия ходилки - юзает ASM... Как-то пусто без walker'ов, отпощу пока, что есть.

Автор скрипта - Beyonder.

Последняя версия (актуально на 7 мая 2010).

Code:
########################################## ХОДИЛКА 3 ##########################
#var Prec=3 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1.
#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места.
#UO.SetGlobal("Logging","1")  # - показывать отладочные сообщения.
#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ.
#В функции IsPass, содержиться список проходимых тайлов.

#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден)
#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата:
#1 - влево вниз
#2 - вниз
#3 - вправо вниз
#4 - вправо
#5 - вправо вверх
#6 - вверх
#7 - влево вверх
#8 - влево
#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).
#####################################################
# 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 MaxTraceDistance=10
var TraceLoopIncrease=5#Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=15#Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=2
var StepTimeOut=500#Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping

var CheckCnt=1 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

sub ttt()
walker(2886-5,757+4,1)
end sub

Sub Walker(GoX,GoY,Prec)
  UO.SetGlobal("Logging","0")
  UO.SetGlobal("BlindWalk","0")
  var LastDir
  var MoveRes
  var TracerCnt
  UO.SetGlobal("GlobalGoX",str(GoX))
  UO.SetGlobal("GlobalGoY",str(GoY))
  while not IsEnd(GoX,GoY,Prec)
    TracerCnt = MaxTraceDistance
    repeat
      LogInfo('Just walking')
      LastDir=GoUntilHit(GoX,GoY,Prec)

      if IsEnd(GoX,GoY,Prec) then
        return 1
      end if

      LogInfo('Tracing')
      MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt)
      if TracerCnt > LimitTrace then
        return 0
      endif
      TracerCnt = TracerCnt + TraceLoopIncrease
    until MoveRes == 1
  wend
  return 1
end sub

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

Sub CountDirection(GoX,GoY,StartDir,Prec)
  var GoDir=GetDir(GoX,GoY,Prec)
  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) OR (GoDir==7) then
      return -1
    else
      return 1
    end if
  else
    if (GoDir==1) or (GoDir==5) then
      return -1
    else
      return 1
    end if
  end if
end sub

Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec)
  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,Prec)
end sub

Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
  if x1==x3 and y1==y3 then
    return false
  end if
 
   LogInfo('Start cross check')
 
  var ua1=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3)
  var ub1=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
 
  var ua2=(x2-x1)*(y1-y3)-(y2-y1)*(x1-x3)
  var ub2=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
 
  #Check for parallel lines
  if (ub1 == 0) or (ub2 == 0) then
   return false
  end if

  var u1=ua1/ub1
  var u2=ua2/ub2
 
  if IsDiap(u1,0,1,0.01) and IsDiap(u2,0,1,0.01) then
    LogInfo('Vectors crossing 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
  else
  LogInfo('End cross check')
    return false
  end if
end sub

Sub IsDiap(X,X0,X1,Prec)
  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,Prec)
  var LastDir
  LastDir=GetDir(GoX,GoY,Prec)
  var CouldMove
  repeat
    LastDir=GetDir(GoX,GoY,Prec)
    if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
      CouldMove=TryDir(LastDir,Prec)
    end if
  until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
  return LastDir
end sub

Sub IsEnd(GoX,GoY,Prec)
  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,Prec)
  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,Prec)
  var CurDir=StartDir
  var Result
  repeat
    Result=TryDir(CurDir,Prec)
    if not Result then
      CurDir=AddToDir(CurDir,Direction,Prec)
    end if
  until Result
  return Result
end sub

Sub AddToDir(Dir,Cnt,Prec)
  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,Prec)
  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,Prec)
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,Prec)
  var StartDir=GetDirToDir(UO.GetDir(),Prec)
  var StartX=UO.GetX()
  var StartY=UO.GetY()
  var EndDir
  var Counter=0
  var TestCounter=CheckCnt

#Direction Test
  repeat
    Counter = 0
    LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter)) 
    PressDir(Dir)
    repeat
      EndDir=GetDirToDir(UO.GetDir(),Prec)
      wait(DynamicPause)
      Counter=Counter+1
    until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
    TestCounter = TestCounter - 1
    LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter)) 
  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause

  if Counter>=StepTimeOut/DynamicPause  then
     LogInfo('Direction timeout reached')
     return 0
  end if
  #End direction Test

  if StartY<>UO.GetY() or StartX<>UO.GetX() then
    return Dir
  end if

  #Start Primary test
  TestCounter=CheckCnt
  repeat
    GoDir(Dir,Prec)
    Counter=0
    repeat
      wait(DynamicPause)
      Counter=Counter+1
    until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
    TestCounter = TestCounter - 1
  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
  #End primary test

  if Counter>=StepTimeOut/DynamicPause then
    LogInfo('Step timeout reached')
    return 0
  else
    return Dir
  end if
end sub

Sub GetDirToDir(GotDir,Prec)
   var ChangedDir=-GotDir
   ChangedDir=AddToDir(ChangedDir,5,Prec)
   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 PressDir(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

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

Sub GoDir(Dir,Prec)
   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
########################################## КОНЕЦ ХОДИЛКИ 3 ##########################


Top
   
 Post subject:
PostPosted: 2006-03-01 19:04:01 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
LordTom wrote:
Это Ветра ходилка :lol:

Дану, эту ходилку я писал вместе с Beyonder'ом, и ты думаешь я её не узнаю?! Я даже понял, как она действует :-)


Top
   
 Post subject:
PostPosted: 2006-03-01 21:38:17 
Offline

Joined: 2005-01-12 13:33:49
Posts: 26
Ошибка в 213 строке: Funktion not found - UO.ASMMAPGETTILE

И как ее приделать к скрипту Асканелли на форенсик?


Top
   
 Post subject:
PostPosted: 2006-03-01 22:53:13 
Offline

Joined: 2005-01-12 13:33:49
Posts: 26
LordTom wrote:
Night Wolf wrote:
Ошибка в 213 строке: Funktion not found - UO.ASMMAPGETTILE

И как ее приделать к скрипту Асканелли на форенсик?


2) Спроси у асканели или давай сюда скрипт.


http://forum.yoko.com.ua/viewtopic.php?p=31602#31602
Мне нужна любая ходилка вида GotoXY(X,Y,R), где R это расстояние на которое надо подойти. Желательно без установки дополних программы типа асм.


Top
   
 Post subject:
PostPosted: 2006-03-02 00:43:11 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
LordTom, сие ходилка (c) Beyonder & Destruction. И никакого не ветра, не надо мне тут гнать, а?

Я думаю, сторожилы могут тебе рассказать, что бывает, если меня чутка повыводить на тему авторства.


Top
   
 Post subject:
PostPosted: 2006-03-15 11:31:16 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Мож кто подскажет мне чайнику, для чего эта хадилка вообще нужна, че то не догоняю, хожу в уо я и руками не плохо :)


Top
   
 Post subject:
PostPosted: 2006-03-15 11:37:39 
Offline

Joined: 2006-02-01 20:19:03
Posts: 125
для того случая когда руки пересохли


Top
   
 Post subject:
PostPosted: 2006-03-15 15:27:39 
Offline

Joined: 2006-02-01 20:19:03
Posts: 125
я вот не врубаюсь- когда сия ходилка запустится - что произойдёт ?
нужно чтото указывать? и куда?


Top
   
 Post subject:
PostPosted: 2006-03-15 19:54:04 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
2LordTom, не надо никуда уходить, просто спорь со мной поменьше - я редко ошибаюсь, но бывает.

2Остальные, ходилка - неотъемлемая часть скрипта, в котором надо ходить, например на LumberJacking, т.к. хождение, обход препятствий и прочая нечисть это очень сложно - данное действо выделяется в отдельную функцию.


Top
   
 Post subject:
PostPosted: 2006-03-15 20:25:48 
Offline
User avatar

Joined: 2005-01-13 07:20:54
Posts: 528
ходилка без АСМа с privategettile()
добавил Prec в параметр запуска функции
#Walker(X,Y,Prec)

, ходилка отличная правда иногда по кругу зацикливает ..... поэтому настраивайте ...

Code:
########################################## ХОДИЛКА 3 ##########################
#var Prec=3 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1.
#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места.
#UO.SetGlobal("Logging","1")  # - показывать отладочные сообщения.
#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ.
#В функции IsPass, содержиться список проходимых тайлов.

#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Ничего не возвращает.
#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата:
#1 - влево вниз
#2 - вниз
#3 - вправо вниз
#4 - вправо
#5 - вправо вверх
#6 - вверх
#7 - влево вверх
#8 - влево
#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).
#####################################################
# 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=10
var Speed=2
var StepTimeOut=300

Sub Walker(GoX,GoY,Prec)
  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,Prec)
    LogInfo('Just walking')
    LastDir=GoUntilHit(GoX,GoY,Prec)
    if not IsEnd(GoX,GoY,Prec) then
      LogInfo('Tracing')
      FullAroundTrace(LastDir,GoX,GoY,Prec)
    end if
  wend
end sub

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

Sub CountDirection(GoX,GoY,StartDir,Prec)
  var GoDir=GetDir(GoX,GoY,Prec)
  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,Prec)
  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,Prec)
end sub

Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
  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,Prec)
  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,Prec)
  var LastDir
  LastDir=GetDir(GoX,GoY,Prec)
  var CouldMove
  repeat
    LastDir=GetDir(GoX,GoY,Prec)
    if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
      CouldMove=TryDir(LastDir,Prec)
    end if
  until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
  return LastDir
end sub

Sub IsEnd(GoX,GoY,Prec)
  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,Prec)
  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,Prec)
  var CurDir=StartDir
  var Result
  repeat
    Result=TryDir(CurDir,Prec)
    if not Result then
      CurDir=AddToDir(CurDir,Direction,Prec)
    end if
  until Result
  return Result
end sub

Sub AddToDir(Dir,Cnt,Prec)
  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,Prec)
  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,Prec)
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,Prec)
  var StartDir=GetDirToDir(UO.GetDir(),Prec)
  var StartX=UO.GetX()
  var StartY=UO.GetY()
  var EndDir
  var Counter=0
  GoDir(Dir,Prec)
  repeat
    EndDir=GetDirToDir(UO.GetDir(),Prec)
    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,Prec)
    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,Prec)
   var ChangedDir=-GotDir
   ChangedDir=AddToDir(ChangedDir,5,Prec)
   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,Prec)
   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


########################################## КОНЕЦ ХОДИЛКИ 3 ##########################


Top
   
 Post subject:
PostPosted: 2006-03-15 20:34:13 
Offline
User avatar

Joined: 2005-01-13 07:20:54
Posts: 528
Destruction wrote:
LordTom, сие ходилка (c) Beyonder & Destruction. И никакого не ветра, не надо мне тут гнать, а?

Я думаю, сторожилы могут тебе рассказать, что бывает, если меня чутка повыводить на тему авторства.

старожилы могут рассказать много , да вот стоит ли уделять внимание такому как ты...
люди сами все видят , кто есть кто ...


Top
   
 Post subject:
PostPosted: 2006-03-16 23:08:25 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Destruction wrote:
2LordTom, не надо никуда уходить, просто спорь со мной поменьше - я редко ошибаюсь, но бывает.


Точнее: ты не редко ошибаешься, а ты редко признаешь, что ошибся... :lol:


Top
   
 Post subject:
PostPosted: 2006-03-17 21:07:58 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
хммм... а где впечатления? :roll:


Top
   
 Post subject:
PostPosted: 2006-03-17 21:33:22 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Edred wrote:
Destruction wrote:
2LordTom, не надо никуда уходить, просто спорь со мной поменьше - я редко ошибаюсь, но бывает.


Точнее: ты не редко ошибаешься, а ты редко признаешь, что ошибся... :lol:

Нет, я редко ошибаюсь и еще реже признаю, что ошибся :wink:

Слушай, я тебе знаешь, что скажу, вооон в топ топике "Наследство Edred'а" автор все скрипты понатырил. Как ощущения? Вот у меня примерно такие же, т.к. Beyonder скрипт не один писал - я был морально с ним, команды подсказывал, помогал воплощать алгоритмы, искал баги.

ЗЫ: Афигенная вещь, главное не заставлять делать башие обходы, если нужна точность - надо воткнуть checklag()


Top
   
 Post subject:
PostPosted: 2006-04-06 08:37:05 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Очень большая просьба ко всем кто ходилку когда-то юзал.
Если у вас осталась последняя версия скрипта до отката форума, былобы офигенно ее сюда выложить. Потому что вместе с форумным откатом у меня полетел хард, и самой хорошей ходилки след простыл.


Top
   
 Post subject:
PostPosted: 2006-04-06 14:08:51 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Beyonder wrote:
Очень большая просьба ко всем кто ходилку когда-то юзал.
Если у вас осталась последняя версия скрипта до отката форума, былобы офигенно ее сюда выложить. Потому что вместе с форумным откатом у меня полетел хард, и самой хорошей ходилки след простыл.
А-а-а, так форум у тебя стоял? :lol:

Ладно, будет время - переделаю на get|setEasyUO вместо глобалок (Beyonder - ты тестил, ты заметил, что с ними появились краши), да и вообще, всё, что смогу сделаю с ней.

PS: Которая из них ближе к последней? А то тут две версии крутяться.


Top
   
 Post subject:
PostPosted: 2006-04-06 19:00:34 
Offline

Joined: 2006-02-03 19:32:33
Posts: 156
ходилка)))
кулл
т.е включил ее и нажимаешь кнопочки, на которых забиндена магия))
а если чар застрянет или на его пути куст или дерево или еще что-нить? :)

_________________
ЦСКА- чЕмПиОн, кто не верит, тот ...... (нехороший человек)


Top
   
 Post subject:
PostPosted: 2006-04-16 21:14:19 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Чутка подправил то, что было у меня.

Переделал на (set|get)EasyUO и privategettile.

Что касается того, что выложили чуть выше - тама ашибка.
Code:
 if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then


Откуда +1 то взяли?

Brodillka last:
Code:
##################################################### 
# WW  W  WW   AA    LL     Kk  k  EE  EE  RRR       #
# WW  W  WW  AA A   LL     Kk k   EEE     R  R      #
# WW WW  WW  AAAA   LL     KkK    EEE     RRR       #
#  WWW WWW  AA   A   LLLL  Kk kk  EE  EE  R  R      #
#####################################################
             
var Prec=0 # Как близко подойти?
var MaxTraceDistance=20 # Как далеко трессировать?
var Speed=2 # Скорость
var StepTimeOut=300 # Таймаут на шаг
uo.setEasyUO(3750,"1") # Вести лог?
uo.setEasyUO(3751,"0") # Ходить наощупь?

Sub Walker(GoX,GoY)
  var LastDir
  UO.setEasyUO(3752,str(GoX))
  UO.setEasyUO(3753,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 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() # Начальное Х
  var BegY=UO.GetY() # Начальное 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)
var OutDir
if Dir==1 then
OutDir=1
end if
if Dir==2 then
OutDir=2
end if
if Dir==3 then
OutDir=3
end if
if Dir==4 then
OutDir=6
end if
if Dir==5 then
OutDir=9
end if
if Dir==6 then
OutDir=8
end if
if Dir==7 then
OutDir=7
end if
if Dir==8 then
OutDir=4
end if
return OutDir
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.getEasyUO(3752)))
var DistanceY=Abs(UO.GetY()-val(UO.getEasyUO(3753)))
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(pX, pY)
  if UO.getEasyUO(3751) then
    return true
  endif
  var plen = 60
  dim Types[val(str(plen))]
  Types[0]=4
  Types[1]=3
  Types[2]=5
  Types[3]=6
  Types[4]=203
  Types[5]=197
  Types[6]=212
  Types[7]=242
  Types[8]=241
  Types[9]=196
  Types[10]=198
  Types[11]=199
  Types[12]=1713
  Types[13]=1724
  Types[14]=243
  Types[15]=240
  Types[16]=219
  Types[17]=209
  Types[18]=214
  Types[19]=57
  Types[20]=24
  Types[21]=52
  Types[22]=22
  Types[23]=56
  Types[24]=23
  Types[25]=25
  Types[26]=58
  Types[27]=53
  Types[28]=61
  Types[29]=59
  Types[30]=580
  Types[31]=585
  Types[32]=581
  Types[33]=582
  Types[34]=583
  Types[35]=584
  Types[36]=596
  Types[37]=152
  Types[38]=81
  Types[39]=93
  Types[40]=95
  Types[41]=83
  Types[42]=142
  Types[43]=503
  Types[44]=141
  Types[45]=143
  Types[46]=500
  Types[47]=1088
  Types[48]=1089
  Types[49]=1086
  Types[50]=155
  Types[51]=501
  Types[52]=98
  Types[53]=90
  Types[54]=502
  Types[55]=1087
  Types[56]=598
  Types[57]=582
  Types[58]=200
  Types[59]=216
 
  for var i=0 to plen-1
    if uo.privategettile(pX, pY, -1, Types[i], Types[i]) then
      return true
    end if
  next
  return false
end sub

Sub LogInfo(Line)
  if not UO.getEasyUO(3750)=="0" then
    UO.TextOpen()
    UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+str(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-04-16 22:32:36 
Offline

Joined: 2005-08-19 16:12:23
Posts: 182
Destruction wrote:

Что касается того, что выложили чуть выше - тама ашибка.
Code:
 if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then


Откуда +1 то взяли?


от верблюда, там степ 2:
Code:
  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


Top
   
 Post subject:
PostPosted: 2006-04-17 02:22:23 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
SLAK wrote:
Destruction wrote:

Что касается того, что выложили чуть выше - тама ашибка.
Code:
 if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then


Откуда +1 то взяли?


от верблюда, там степ 2:
Code:
  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

Ну дык получается, что PrivateGetTile оперирует между диапазоном Types[i] и Types[i+1], а это в корне неверно или я неверно понимаю команду privategettile.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 142 posts ]  Go to page 1 2 3 4 58 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 20 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