
Расшиный скрипт на хлопок
Moderators: Murderator+, Murderator
Расшиный скрипт на хлопок
Всем спасибо. Все работает. 

Last edited by YoungNoob on 2013-06-02 20:45:01, edited 1 time in total.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Расшиный скрипт на хлопок
Что такое "Расшиный", что такое "рекол из банка", ходилку для всех скриптов я использую от Beyonder. В общем:
1. Выложи скрипт на рекол который используешь.
2. Какое расстоение максимальное до хлопка когда на него можно кликнуть?
1. Выложи скрипт на рекол который используешь.
2. Какое расстоение максимальное до хлопка когда на него можно кликнуть?
Re: Расшиный скрипт на хлопок
Расширеный значит с ходилкой
1)uo.waittargetobject('IDруны')
uo.usetype('тип скролов')
т.е. Рекол из банка=рекол из пака по руне
2) Стоя на хлопке +тайлы вокруг

1)uo.waittargetobject('IDруны')
uo.usetype('тип скролов')
т.е. Рекол из банка=рекол из пака по руне
2) Стоя на хлопке +тайлы вокруг
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Расшиный скрипт на хлопок
Написал, проверь. Скопируй ходилку на которую я давал ссылку. В скрипте на сбор измени значения bankid = "0x00000000" - id контейнера банка, runezagon = "0x00000000" - id руны в загон, runebank = "0x00000000" - id руны в банк, hlopok = "0x0000" - Type хлопка. Запускаешь скрипт стоя у банка, он реколится в загон, ищет хлопок, если найдет то все соберет если нет то рекол в банк и ждет указанное время, то же самое если не найдет. Пробуй, если будут ошибки - пиши, поправлю.
Code: Select all
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
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Расшиный скрипт на хлопок
waittime = 0 - время ожидания респа, сколько стоять у банка ждать пока снова полетит проверять
Re: Расшиный скрипт на хлопок
Первый прогон скрипта - ВСЕ РАБОТАЕТ (только вещи в банк не выложил)
Щас подредактирую. тебе огромный респект!
я если честно в шоке, - не ожидал такой прыти!
Все сделал, ийди хлопка в паке другой нежели хлопок на земле
осталосб еще счетчик прикрутить, т.к. загона всего 3
спасибо
Щас подредактирую. тебе огромный респект!

я если честно в шоке, - не ожидал такой прыти!
Все сделал, ийди хлопка в паке другой нежели хлопок на земле

осталосб еще счетчик прикрутить, т.к. загона всего 3
спасибо
Last edited by YoungNoob on 2013-06-02 20:09:01, edited 1 time in total.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Расшиный скрипт на хлопок
Эта часть отвечает за выкладывание в банк хлопка.
Возможно wait(500) мало и банк не успел открыться, или же не ввел ID сундука банка.
Code: Select all
uo.msg("Bank")
wait(500)
uo.findcount(hlopok, "-1", "backpack")
if uo.findcount() then
uo.moveitem("finditem", "0", bankid)
end if
Возможно wait(500) мало и банк не успел открыться, или же не ввел ID сундука банка.
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Расшиный скрипт на хлопок
Code: Select all
uo.findcount(hlopok, "-1", "backpack")
Или в lastcontainer кидать
Code: Select all
uo.moveitem("finditem", "0", 'lastcontainer')
И хлопок вроде на стакуется, так что лучше зациклить сброс.
Code: Select all
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
Re: Расшиный скрипт на хлопок
Все доработано, всем спасибо ! 

Last edited by YoungNoob on 2013-06-02 20:43:53, edited 1 time in total.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Расшиный скрипт на хлопок
Code: Select all
uo.findcount(hlopok, "-1", "backpack")
Перебор рун через массив, waittime ты поставил 10000, это 10 секунд(1000 - 1 секунда) думаю нужно больше? Пробуй
Code: Select all
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
Re: Расшиный скрипт на хлопок
проверку на вес как прикрутить сюда?
Re: Расшиный скрипт на хлопок
Code: Select all
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()
Re: Расшиный скрипт на хлопок
Парсер выдает(( ещё бы в хайд уходил, я так то понимаю о чем речь идет а как написать самому чтоб красиво было чтоб от одного скрипта переходил к другому все это темный лес пока что..
Re: Расшиный скрипт на хлопок
Последняя строка моей подписи.
ЗЫ как вы не любите пользоваться поиском и обращать внимания на выделенные ярким сообщения...
ЗЫ как вы не любите пользоваться поиском и обращать внимания на выделенные ярким сообщения...
Re: Расшиный скрипт на хлопок
все что в последней строке сделано задержки проверил, через свипер прогнал..
Re: Расшиный скрипт на хлопок
Значит пойдем из далека.
Выкладывай скрипт - будем смотреть.
Выкладывай скрипт - будем смотреть.
Re: Расшиный скрипт на хлопок
Сегодня проверил скрипт на одноядерной машине действительно работает, но все ровно на проверку веса и хайда пока что нету времени разобраться а точнее ещё и хотел передалть немного чтоб не в банка а в сундук скидывал а так спасибо все ровно)))
Code: Select all
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
Re: Расшиный скрипт на хлопок
tyca7 wrote:все что в последней строке сделано задержки проверил, через свипер прогнал..
интересно, откуда тогда проблема и вопрос.
) прогнать скрипт через утилиту CodeSweeper ©Destruction которую можно найти вот тут и вот тут. Скрипт должен выглядеть лесенкой, примерно вот так:
Код:Code: Select all
sub main()
repeat
if then
for i = 0 to x
next
endif
until
endsub
Если endsub "отскочил" от левого края или наоборот весь скрипт прилип к левому - значит где то сбился цикл.
Code: Select all
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 ; <--------------------------------------------------