Yoko
http://forum.yoko.com.ua/

Расшиный скрипт на хлопок
http://forum.yoko.com.ua/viewtopic.php?f=17&t=17256
Page 1 of 2

Author:  YoungNoob [ 2013-06-02 15:32:37 ]
Post subject:  Расшиный скрипт на хлопок

Всем спасибо. Все работает. :mrgreen:

Author:  Incorrect User [ 2013-06-02 16:42:21 ]
Post subject:  Re: Расшиный скрипт на хлопок

Что такое "Расшиный", что такое "рекол из банка", ходилку для всех скриптов я использую от Beyonder. В общем:

1. Выложи скрипт на рекол который используешь.
2. Какое расстоение максимальное до хлопка когда на него можно кликнуть?

Author:  YoungNoob [ 2013-06-02 16:50:52 ]
Post subject:  Re: Расшиный скрипт на хлопок

Расширеный значит с ходилкой :wink:
1)uo.waittargetobject('IDруны')
uo.usetype('тип скролов')
т.е. Рекол из банка=рекол из пака по руне

2) Стоя на хлопке +тайлы вокруг

Author:  Incorrect User [ 2013-06-02 16:52:39 ]
Post subject:  Re: Расшиный скрипт на хлопок

То есть 1 тайл в любую сторону?

Author:  YoungNoob [ 2013-06-02 17:05:25 ]
Post subject:  Re: Расшиный скрипт на хлопок

да

***
*X*
***

Author:  Incorrect User [ 2013-06-02 17:59:20 ]
Post subject:  Re: Расшиный скрипт на хлопок

Написал, проверь. Скопируй ходилку на которую я давал ссылку. В скрипте на сбор измени значения bankid = "0x00000000" - id контейнера банка, runezagon = "0x00000000" - id руны в загон, runebank = "0x00000000" - id руны в банк, hlopok = "0x0000" - Type хлопка. Запускаешь скрипт стоя у банка, он реколится в загон, ищет хлопок, если найдет то все соберет если нет то рекол в банк и ждет указанное время, то же самое если не найдет. Пробуй, если будут ошибки - пиши, поправлю.

Code:
sub Hlopok()
  var bankid = "0x00000000", runezagon = "0x00000000", runebank = "0x00000000", hlopok = "0x0000", waittime = 0, posx, posy, timer, find
  uo.set("finddistance", "28")
  while not uo.dead()
    posx = uo.getx()
    posy = uo.gety()
    repeat
      uo.deletejournal()
      uo.cast("Recall", runezagon) ; ID руны в загон
      repeat
        wait(150)
      until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
    until uo.getx() <> posx or uo.gety() <> posy
    repeat
      uo.findtype(hlopok, "-1", "ground")
      if uo.findcount() then
        if uo.getdistance("finditem") > 1 then
          posx = uo.getx("finditem")
          posy = uo.gety("finditem")
          Walker(posx, posy, 1)
        end if
      uo.useobject("finditem")
      wait(150)
      end if
    until not uo.findcount()
    posx = uo.getx()
    posy = uo.gety()
    repeat
      uo.deletejournal()
      uo.cast("Recall", runebank) ; ID руны в банк
      repeat
        wait(150)
      until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
    until uo.getx() <> posx or uo.gety() <> posy
    uo.msg("Bank")
    wait(500)
    uo.findcount(hlopok, "-1", "backpack")
    if uo.findcount() then
      uo.moveitem("finditem", "0", bankid)
    end if
    wait(waittime) ; Время ожидания респа хлопка
  wend
end sub

Author:  Incorrect User [ 2013-06-02 18:08:46 ]
Post subject:  Re: Расшиный скрипт на хлопок

waittime = 0 - время ожидания респа, сколько стоять у банка ждать пока снова полетит проверять

Author:  YoungNoob [ 2013-06-02 20:03:22 ]
Post subject:  Re: Расшиный скрипт на хлопок

Первый прогон скрипта - ВСЕ РАБОТАЕТ (только вещи в банк не выложил)
Щас подредактирую. тебе огромный респект! :idea:
я если честно в шоке, - не ожидал такой прыти!

Все сделал, ийди хлопка в паке другой нежели хлопок на земле :wink:
осталосб еще счетчик прикрутить, т.к. загона всего 3

спасибо

Author:  Incorrect User [ 2013-06-02 20:07:25 ]
Post subject:  Re: Расшиный скрипт на хлопок

Эта часть отвечает за выкладывание в банк хлопка.
Code:
    uo.msg("Bank")
    wait(500)
    uo.findcount(hlopok, "-1", "backpack")
    if uo.findcount() then
      uo.moveitem("finditem", "0", bankid)
    end if


Возможно wait(500) мало и банк не успел открыться, или же не ввел ID сундука банка.

Author:  Juicy Fruit [ 2013-06-02 20:10:59 ]
Post subject:  Re: Расшиный скрипт на хлопок

Code:
uo.findcount(hlopok, "-1", "backpack")
Этим много не найдешь, замени на uo.findtype(...)
Или в lastcontainer кидать
Code:
uo.moveitem("finditem", "0", 'lastcontainer')

И хлопок вроде на стакуется, так что лучше зациклить сброс.
Code:
    uo.msg("Bank")
    wait(500)
    uo.findtype(hlopok, "-1", "backpack")
    while uo.findcount()
      uo.moveitem("finditem", "0", 'lastcontainer')
      wait(500)
      uo.findtype(hlopok, "-1", "backpack")
    wend

Author:  YoungNoob [ 2013-06-02 20:24:04 ]
Post subject:  Re: Расшиный скрипт на хлопок

Все доработано, всем спасибо ! :mrgreen:

Author:  Incorrect User [ 2013-06-02 20:37:15 ]
Post subject:  Re: Расшиный скрипт на хлопок

Code:
uo.findcount(hlopok, "-1", "backpack")
- это я ошибся вместо findtype, заменил в новой версии.

Перебор рун через массив, waittime ты поставил 10000, это 10 секунд(1000 - 1 секунда) думаю нужно больше? Пробуй
Code:
sub Hlopok()
  var i, bankid = "0x418B9C35", runebank = "0x40012F74", hlopok = "0x0C51", waittime = 10000, posx, posy, timer, find
  uo.set("finddistance", "28")
  dim Rune[3]
  Rune[1] = "0x418F42EA"
  Rune[2] = "0x418F862F"
  Rune[3] = "0x4187EA37"
  while not uo.dead()
    for i = 1 to 3
      posx = uo.getx()
      posy = uo.gety()
      repeat
        uo.deletejournal()
        uo.cast("Recall", Rune[i]) ; ID руны в загон
        repeat
          wait(150)
        until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
      until uo.getx() <> posx or uo.gety() <> posy
      repeat
        uo.findtype(hlopok, "-1", "ground")
        if uo.findcount() then
          if uo.getdistance("finditem") > 1 then
            posx = uo.getx("finditem")
            posy = uo.gety("finditem")
            Walker(posx, posy, 1)
          end if
          uo.useobject("finditem")
          wait(150)
        end if
      until not uo.findcount()
      posx = uo.getx()
      posy = uo.gety()
      repeat
        uo.deletejournal()
        uo.cast("Recall", runebank) ; ID руны в банк
        repeat
          wait(150)
        until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
      until uo.getx() <> posx or uo.gety() <> posy
      uo.msg("Bank")
      wait(500)
      uo.findtype(hlopok, "-1", "backpack")
      if uo.findcount() then
        uo.moveitem("finditem", "0", bankid)
      end if
      wait(waittime) ; Время ожидания респа хлопка
    next
  wend
end sub

Author:  tyca7 [ 2013-07-19 01:56:55 ]
Post subject:  Re: Расшиный скрипт на хлопок

проверку на вес как прикрутить сюда?

Author:  Mirage [ 2013-07-19 06:31:30 ]
Post subject:  Re: Расшиный скрипт на хлопок

Code:
var MaxVes = 500


      repeat
        uo.findtype(hlopok, "-1", "ground")
        if uo.findcount() then
          if uo.getdistance("finditem") > 1 then
            posx = uo.getx("finditem")
            posy = uo.gety("finditem")
            Walker(posx, posy, 1)
          end if
          uo.useobject("finditem")
          wait(150)
        end if
      until not uo.findcount()  || UO.Weight > MaxVes || UO.Dead()

Author:  tyca7 [ 2013-07-24 22:46:50 ]
Post subject:  Re: Расшиный скрипт на хлопок

Парсер выдает(( ещё бы в хайд уходил, я так то понимаю о чем речь идет а как написать самому чтоб красиво было чтоб от одного скрипта переходил к другому все это темный лес пока что..

Author:  Mirage [ 2013-07-25 06:47:45 ]
Post subject:  Re: Расшиный скрипт на хлопок

Последняя строка моей подписи.

ЗЫ как вы не любите пользоваться поиском и обращать внимания на выделенные ярким сообщения...

Author:  tyca7 [ 2013-07-29 00:45:14 ]
Post subject:  Re: Расшиный скрипт на хлопок

все что в последней строке сделано задержки проверил, через свипер прогнал..

Author:  Mirage [ 2013-07-29 06:22:39 ]
Post subject:  Re: Расшиный скрипт на хлопок

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

Author:  tyca7 [ 2013-07-31 00:05:11 ]
Post subject:  Re: Расшиный скрипт на хлопок

Сегодня проверил скрипт на одноядерной машине действительно работает, но все ровно на проверку веса и хайда пока что нету времени разобраться а точнее ещё и хотел передалть немного чтоб не в банка а в сундук скидывал а так спасибо все ровно)))

Code:
sub Hlopok()
  var i, bankid = "0x41607384", runebank = "0x416E70A2", hlopok = "0x0C4F", waittime = 100000, posx, posy, timer, find, LogsQty=75
  uo.set("finddistance", "28")
  dim Rune[4]
  Rune[1] = "0x41185F36"
  Rune[2] = "0x40B9E854"
  Rune[3] = "0x4013A159"
  Rune[4] = "0x4013A158"
  while not uo.dead()
    for i = 1 to 3
      posx = uo.getx()
      posy = uo.gety()
      repeat
        uo.deletejournal()
        uo.cast("Recall", Rune[i]) ; ID руны в загон
        var MaxVes = 500


      repeat
        uo.findtype(hlopok, "-1", "ground")
        if uo.findcount() then
          if uo.getdistance("finditem") > 1 then
            posx = uo.getx("finditem")
            posy = uo.gety("finditem")
            Walker(posx, posy, 1)
          end if
          uo.useobject("finditem")
          wait(150)
        end if
      until not uo.findcount()  || UO.Weight > MaxVes || UO.Dead()
      posx = uo.getx()
      posy = uo.gety()
      repeat
        uo.deletejournal()
        uo.cast("Recall", runebank) ; ID руны в банк
        repeat
          wait(200)
        until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
      until uo.getx() <> posx or uo.gety() <> posy
      uo.msg("Bank")
      wait(500)
      uo.findtype(hlopok, "-1", "backpack")
      if uo.findcount() then
        uo.moveitem("finditem", "0", bankid)
      end if
      wait(waittime) ; Время ожидания респа хлопка
    next
  wend
end sub

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; var Prec=3 # Как близко следует подойти к цели (Precision)
; В функции 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 шаг обхода).
var MaxTraceDistance = 1 ; Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
var TraceLoopIncrease = 1 ; Увеличение MaxTraceDistance при исчерпании количества ходов.
var LimitTrace = 10 ; Сколько шагов в обе стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed = 3 ; Сколько шагов делать за раз между проверками.
var DynamicPause = 30 ; Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
var steptimer = 2 ; Таймер на шаг(Значение 1 = 100мс). Время за которое чар проходит 1 тайл, если за это время чар не сдвинется с места скрипт расценит это как препятствие и начнет обходить.

sub Walker(GoX, GoY, Prec)
  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
      LastDir=GoUntilHit(GoX,GoY,Prec)
      if IsEnd(GoX,GoY,Prec) then
        return 1
      end if
      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
  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
    return true
  else
    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=TurnAndGoDir(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
    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=TurnAndGoDir(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 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), StartX=UO.GetX(), StartY=UO.GetY(), EndDir, timer
  #Start Primary test
  if GoDir(Dir, Prec) then
    return Dir
  else
    return 0
  end if
end sub

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

sub GoDir(Dir, Prec)
  var circle, StartDir=GetDirToDir(UO.GetDir(), Prec), StartX=UO.GetX(), StartY=UO.GetY(), EndDir, timer
  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 and (DistanceX - Prec) > (DistanceY - Prec) then
    GoDistance=DistanceX - Prec
  else
    if (DistanceY - Prec) < Speed and (DistanceY - Prec) > (DistanceX - Prec) then
      GoDistance=DistanceY - Prec
    else
      GoDistance=Speed
    end if
  end if
  circle = 0
  repeat
    UO.Press(Dirs[Dir])
    timer = uo.timer() + steptimer
    repeat
      EndDir=GetDirToDir(UO.GetDir(), Prec)
      wait(DynamicPause)
    until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or timer <= uo.timer()
    if StartDir<>EndDir then
      GoDistance = GoDistance + 1
      StartDir = EndDir
    end if
    circle = circle + 1
  until circle == GoDistance or GoDistance == 0 or timer <= uo.timer()
  if timer <= uo.timer() then
    return false
  else
    return true
  end if
end sub

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

Author:  Mirage [ 2013-07-31 06:10:16 ]
Post subject:  Re: Расшиный скрипт на хлопок

tyca7 wrote:
все что в последней строке сделано задержки проверил, через свипер прогнал..

интересно, откуда тогда проблема и вопрос.

Quote:
) прогнать скрипт через утилиту CodeSweeper ©Destruction которую можно найти вот тут и вот тут. Скрипт должен выглядеть лесенкой, примерно вот так:
Код:
Code:
sub main()
   repeat
      if then
         for i = 0 to x

         next
      endif
   until
endsub

Если endsub "отскочил" от левого края или наоборот весь скрипт прилип к левому - значит где то сбился цикл.


Code:
sub Hlopok()
   var i, bankid = "0x41607384", runebank = "0x416E70A2", hlopok = "0x0C4F", waittime = 100000, posx, posy, timer, find, LogsQty=75
   uo.set("finddistance", "28")
   dim Rune[4]
   Rune[1] = "0x41185F36"
   Rune[2] = "0x40B9E854"
   Rune[3] = "0x4013A159"
   Rune[4] = "0x4013A158"
   while not uo.dead()
      for i = 1 to 3
         posx = uo.getx()
         posy = uo.gety()
         repeat   ;  либо лишний ибо не хватает условия until
            uo.deletejournal()
            uo.cast("Recall", Rune[i]) ; ID руны в загон
            var MaxVes = 500
            repeat
               uo.findtype(hlopok, "-1", "ground")
               if uo.findcount() then
                  if uo.getdistance("finditem") > 1 then
                     posx = uo.getx("finditem")
                     posy = uo.gety("finditem")
                     Walker(posx, posy, 1)
                  end if
                  uo.useobject("finditem")
                  wait(150)
               end if
            until not uo.findcount()  || UO.Weight > MaxVes || UO.Dead()
            posx = uo.getx()
            posy = uo.gety()
            repeat
               uo.deletejournal()
               uo.cast("Recall", runebank) ; ID руны в банк
               repeat
                  wait(200)
               until uo.getx() <> posx or uo.gety() <> posy or uo.injournal("fizzles")
            until uo.getx() <> posx or uo.gety() <> posy
            uo.msg("Bank")
            wait(500)
            uo.findtype(hlopok, "-1", "backpack")
            if uo.findcount() then
               uo.moveitem("finditem", "0", bankid)
            end if
            wait(waittime) ; Время ожидания респа хлопка
         next
      wend
   end sub ; <--------------------------------------------------

Page 1 of 2 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/