На готов отказываться от функциональности АСМа из за такой проблемы ... =)
Попробую решить обновлением дллок
- Old Paradise Forums
- → Viewing Profile: Posts: Dustman
Toggle shoutbox
Chat
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Community Stats
- Group Members
- Active Posts 48
- Profile Views 6575
- Member Title Novice
- Age Age Unknown
- Birthday Birthday Unknown
-
Gender
Not Telling
Posts I've Made
In Topic: Проблема с инжой
19 February 2010 - 11:35
In Topic: Проблема с инжой
19 February 2010 - 02:37
автолоад немаленький =))) и проблем в нем я не нашел... но может свежий взгляд... =)
sub recallASMmini()
var runebook = '0x40044c23'; ID Runebook. Use ,info
var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")
var how = 2 #### 1 = Реколл_по_зарядам; 2 = Реколл_по_регам; 3 = Реколл_гейтом; 4 = Перезарядка_рунбуки
var oldX=uo.getX()
var oldY=uo.getY()
var number, num=val(where)
if how == 1 then
number = num+1
endif
if how == 2 then
number = num*2+18
endif
if how == 3 then
number = num*2+19
endif
if how == 4 then
deletejournal('You have no scrolls')
uo.recall(runebook, 1)
if uo.injournal('You have no scrolls') then
uo.print('You have no scrolls. Terminating.')
return
else
return
endif
endif
if num>16 or num<1 then
uo.print('Wrong rune number. Terminating.')
return
endif
repeat
uo.warmode(false)
deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')
uo.recall(runebook, number)
uo.useskill('Hiding')
var k=0
repeat
wait(500)
k=k+500
until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000
if uo.injournal('Insufficient mana for this spell') then
uo.print('You need more mana. Terminating')
return
endif
if uo.injournal('You lack the reagents for this spell') then
uo.print('You need more reagents. Terminating')
return
endif
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
sub saysell()
uo.msg('Продам МС+9/+15/Холинайт грудак/Драгон руки/ДМ перчи')
endsub
sub testtt()
repeat
uo.findtype('0x13E3', '0x0000', -1)
if uo.findcount()>0 then
deletejournal('You smelt')
wait(100)
uo.waittargetobject('finditem')
uo.useobject(0x400541FB)
repeat
wait(100)
until uo.injournal('You smelt')
else
wait(1000)
endif
until uo.findcount()==0
endsub
sub repairarm()
var i, name, y, itemnum, reptool, item
var dblhand = 1; 1 - dvuruchnoe; 0 - odnoruchnoe oruzhie
var armor = 1; 0 - esli metal, 1 - esli kozha
var necklace = 1; если используешь реген ожерелье то ставим 0, если используешь армор горжетку, то 1
Dim ar[8]
ar[0] = 'Hat'
ar[1] = 'Lhand'
ar[2] = 'Torso'
ar[3] = 'Arms'
ar[4] = 'Gloves'
ar[5] = 'Legs'
ar[6] = 'Pants'
ar[7] = 'Neck'
if armor == 0 then
reptool = '0x1865'
else
reptool = '0x0F9D'
endif
if uo.count(reptool) then
uo.print('Repair tool is avaliable. Starting to repair your armor')
else
uo.print('Repair tool not found! Terminating..')
return
endif
if necklace == 0 then
itemnum = 6
else
itemnum = 7
endif
for i = 0 to itemnum
if uo.objatlayer(ar[i])<>'' then
if i==1 and dblhand==1 then
goto skip
endif
item = uo.getserial(uo.objatlayer(ar[i]))
uo.moveitem(uo.objatlayer(ar[i]),-1,'backpack')
wait(300)
deletejournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')
uo.waittargetobject(item)
uo.usetype(reptool)
repeat
wait(100)
until uo.injournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')
if uo.injournal('must have') then
uo.print('No resourses to repair the weapon')
endif
if uo.injournal('fully repaired') then
uo.print('Succesfully repaired')
endif
if uo.injournal('Target weapon or armor to repair|Target leather armor to repair') then
uo.useobject(item)
uo.print('False settings. Terminating...')
return
endif
uo.useobject(item)
while uo.objatlayer(ar[i])<>item
wait(100)
wend
skip:
endif
next
uo.print('-=Done=-')
endsub
sub repairarmASM()
# podumat pro sloj malenkogo nagrudnika...
var MinDur = 10
var i, name, y, itemnum, reptool, item
var dblhand = UO.asmInputList("Выберите тип оружия","Одноручное;Двуручное") ;2 - dvuruchnoe; 1 - odnoruchnoe oruzhie
var armor = UO.asmInputList("Выберите тип доспехов","Металл;Кожа") ;1 - esli metal, 2 - esli kozha
var necklace = UO.asmInputList("Что у Вас на шее?","Ожерелье;Горжетка") ;если используешь реген ожерелье то ставим 1, если используешь армор горжетку, то 2
Dim ar[8]
ar[0] = 'Hat'
ar[1] = 'Lhand'
ar[2] = 'Torso'
ar[3] = 'Arms'
ar[4] = 'Gloves'
ar[5] = 'Legs'
ar[6] = 'Pants'
ar[7] = 'Neck'
if armor == 1 then
reptool = '0x1865' ;reptool for metall stuff
else
reptool = '0x0F9D' ;reptool for tailored stuff
endif
if uo.count(reptool) then
#h=uo.getserial('_0x13E3')
uo.print('Repair tool is avaliable. Starting to repair your armor')
else
uo.print('Repair tool not found! Terminating..')
return
endif
if necklace == 1 then
itemnum = 6
else
itemnum = 7
endif
for i = 0 to itemnum
if uo.objatlayer(ar[i])<>'' then
#deletejournal('Durability')
#uo.click(uo.objatlayer(ar[i]))
# repeat
# wait(10)
# until UO.InJournal("Durability")
# name = uo.Journal(uo.InJournal("Durability")-1)
# y = val(onlynumbers( name ))
# if y < MinDur then
# uo.print('Nachinau pochinku')
if i==1 and dblhand==2 then
goto skip
endif
item = uo.getserial(uo.objatlayer(ar[i]))
uo.moveitem(uo.objatlayer(ar[i]),-1,'backpack') ### uo.moveitem(Arms,-1,'backpack') or uo.unequip(ar[i])
#CheckLag()
wait(300)
deletejournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')
uo.waittargetobject(item)
uo.usetype(reptool)
repeat
wait(100)
until uo.injournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')
if uo.injournal('must have') then
uo.print('No resourses to repair the weapon')
endif
if uo.injournal('fully repaired') then
uo.print('Succesfully repaired')
endif
if uo.injournal('Target weapon or armor to repair|Target leather armor to repair') then
uo.useobject(item)
uo.print('False settings. Terminating...')
return
endif
uo.useobject(item)
while uo.objatlayer(ar[i])<>item
wait(100)
wend
# else
# uo.print('Pochinka ne nuzhna. Tekushaya prochnost: ' + str(y))
# endif
skip:
endif
next
uo.print('-=Done=-')
endsub
sub checkdurability()
var MinDur = 10, name, y, hand
var dblhand = 1
if dblhand == 0 then
hand = 'Rhand'
else
hand = 'Lhand'
endif
deletejournal('Durability')
uo.click(uo.objatlayer(hand))
repeat
wait(100)
until UO.InJournal("Durability")
name=uo.Journal(uo.InJournal("Durability")-1)
if len(onlynumbers( name )) == 4 then
y = val(Left(onlynumbers( name ),2))
endif
if len(onlynumbers( name )) == 3 then
y = val(Left(onlynumbers( name ),1))
endif
if y < MinDur then
uo.print('Nachinau pochinku')
repair()
else
uo.print('Pochinka ne nuzhna. Tekushaya prochnost: ' + str(y))
endif
endsub
sub repair()
var reptool = '0x1865'
var dblhand = 1; 0 - onehand. 1 - 2hand weapon
var wep, hand
if uo.count(reptool) then
uo.print('Repair tool is avaliable. Starting to repair your weapon')
else
uo.print('Repair tool not found! Terminating..')
return
endif
if dblhand == 0 then
wep = uo.getserial(uo.objatlayer('Rhand'))
hand = 'Rhand'
else
wep = uo.getserial(uo.objatlayer('Lhand'))
hand = 'Lhand'
endif
uo.unequip(hand)
CheckLag()
deletejournal('fully repaired|must have')
uo.waittargetobject(wep)
uo.usetype(reptool)
repeat
wait(100)
until uo.injournal('fully repaired|must have')
if uo.injournal('must have') then
uo.print('No resourses to repair the weapon')
endif
wait(50)
if uo.injournal('fully repaired') then
uo.print('Succesfully repaired')
endif
uo.useobject(wep)
end sub
sub fullavtoloot()
deletejournal('Body of')
while not false
if uo.injournal('Body of') then
deletejournal('Body of')
Looting2()
#checkdurability()
else
wait(100)
endif
wend
endsub
sub autoattack()
var mob
If UO.InJournal('is attacking you') then
mob=uo.getserial(UO.JournalSerial(UO.InJournal('is attacking you')-1))
UO.DeleteJournal()
if mob<>0 and mob<>uo.getserial('self') then
uo.attack(mob)
wait(1000)
end if
endif
wait(500)
endsub
#####################################################################
; Remember armor & weapon, disarm, healing from bandages, arm
Sub Bandag()
UO.Exec('bandageself')
endsub
#####################################################################
; AutoHeal. v.1.10b (c) Edred
;
; ?????????????? ?????? ???? (???????? ????? 30). ?????????????? ?????
; ???????? ??????? ??? ???????? ?????? 60. ?????????????? ???????????
; ?????? ? ???? ??? ??????? ? ?????? ?? ? ???? ????? ????????.
; dorabotat poison
sub AutoHeal()
while not uo.dead()
DeleteJournal('You put the bloody|You fail|already fully heal|Targeting cancelled|Unexpected target info')
If UO.Life < uo.str-(uo.str/10) Then
UO.Exec('bandageself')
repeat
wait(100)
until UO.InJournal('You put the bloody|You fail|already fully heal|Targeting cancelled|Unexpected target info')
else
wait(100)
Endif
wend
endsub
Sub Looting()
var wep = uo.getserial(uo.objatlayer('Lhand')) #Rhand for 1hand weapon - Lhand for 2 hand wep
VAR WaitTime=1800
VAR Exit=0, i
VAR dagger=0x0F51
DIM Loot[15]
Loot[0]=0x0EED;gold
Loot[1]=0x09AA;pandora
Loot[2]=0x1088;бусы
Loot[3]=0x108A;кольцо
Loot[4]=0x1086;браслет
Loot[5]=0x1087;серьги
Loot[6]=0x1078;кожа
Loot[7]=0x0F7B; BM
Loot[8]=0x0F7A; BP
Loot[9]=0x0F84; GA
Loot[10]=0x0F85; GI
Loot[11]=0x0F86; MR
Loot[12]=0x0F88; NS
Loot[13]=0x0F8C; SA
Loot[14]=0x0F8D; SS
Loot[15]=0x0E76;bag
#UO.UseObject('lastcorpse')
uo.waittargetobject('lastcontainer')
UO.UseType(dagger); бучер
wait(500)
uo.useobject(wep)
uo.say(chr(27))
For i=0 to 15
#UO.FindType(Loot[i],-1,'ground')
#if uo.findcount() then
#UO.moveitem("finditem", -1, 'backpack')
#wait(WaitTime)
#endif
#if UO.GetQuantity('lastcorpse') then
UO.FindType(Loot[i],-1,'lastcontainer')
if uo.findcount() then
UO.moveitem("finditem", -1, 'backpack')
wait(WaitTime)
endif
#endif
next
end sub
Sub Looting2()
var i,n
Dim Loot[15]
Loot[0]=0x0EED;gold
Loot[1]=0x09AA;pandora
Loot[2]=0x1088;бусы
Loot[3]=0x108A;кольцо
Loot[4]=0x1086;браслет
Loot[5]=0x1087;серьги
Loot[6]=0x1078;кожа
Loot[7]=0x0F7B; BM
Loot[8]=0x0F7A; BP
Loot[9]=0x0F84; GA
Loot[10]=0x0F85; GI
Loot[11]=0x0F86; MR
Loot[12]=0x0F88; NS
Loot[13]=0x0F8C; SA
Loot[14]=0x0F8D; SS
Loot[15]=0x0E76;bag
i = 1800
FOR n=0 TO 15
uo.findtype(Loot[n],"-1","lastcontainer")
if uo.findcount() > 0 then
UO.moveitem("finditem", -1, 'backpack')
uo.print("Found "+str(uo.findcount()))
Wait(i)
END if
next
end sub
#####################################################################
Sub GoHide()
While not UO.Hidden()
uo.warmode(false)
UO.UseSkill('Hiding')
Wait(4000)
Wend
endsub
Sub dogonPvM()
var mob
mob=uo.getserial('laststatus')
repeat
if uo.getdistance(mob)>1 then
Walker(uo.getX(mob), uo.gety(mob), 1)
end if
wait(500)
until uo.getHP(mob)<=0
endsub
sub RegCheck()
VAR n, q, c
Dim Req[50]; Requirements
Req[0]='0x0F7A'; regi bp
Req[1]='0x0F7B'; regi bm
Req[2]='0x0F86'; regi mr
Req[3]='0x0F88'; regi ns
Req[4]='0x0F8D'; regi ss
Req[5]='0x0F84'; regi ga
Req[6]='0x0F85'; regi gs
Req[7]='0x0F8C'; regi sa
Req[8]='0x0F0E'; gh
Req[9]='0x0F0E'; mana
Req[10]='0x0F0E'; refresh
Req[11]='0x0E21'; bandages
Req[12]='0x1F52'; paralyze scrolls
Req[13]='0x0F0E'; poison
Req[14]='0x0F3F'; arrows
Req[15]='0x0F0E'; empty bottles
Req[16]='0x0E20'; bloody bandages
Req[17]='0x1F5F'; fs
Req[18]='0x1BFB'; bolts
Req[19]='0x0F03'; Antifreeze
Req[20]='0x0F0E'; Invisibility
Req[21]='0x1F50'; Magic Reflection
Dim Qnt[50]; Quantity
Qnt[0]=50; regi
Qnt[1]=50; regi
Qnt[2]=50; regi
Qnt[3]=50; regi
Qnt[4]=50; regi
Qnt[5]=50; regi
Qnt[6]=50; regi
Qnt[7]=50; regi
Qnt[8]=15; gh
Qnt[9]=15; mana
Qnt[10]=10; refresh
Qnt[11]=100; bandages
Qnt[12]=20; paralyze scrolls
Qnt[13]=3; poison
Qnt[14]=0; arrows
Qnt[15]=0; empty bottles
Qnt[16]=0; bloody bandages
Qnt[17]=10; fs
Qnt[18]=50; bolts
Qnt[19]=3; Antifreeze
Qnt[20]=0; Invisibility
Qnt[21]=0; Magic Reflection
Dim Clr[50]; Color
Clr[0]='0x0000'; regi
Clr[1]='0x0000'; regi
Clr[2]='0x0000'; regi
Clr[3]='0x0000'; regi
Clr[4]='0x0000'; regi
Clr[5]='0x0000'; regi
Clr[6]='0x0000'; regi
Clr[7]='0x0000'; regi
Clr[8]='0x09BB'; gh
Clr[9]='0x09DF'; mana
Clr[10]='0x0997'; refresh
Clr[11]='0x0000'; bandages
Clr[12]='0x0000'; paralyze scrolls
Clr[13]='0x0998'; poison
Clr[14]='0x0000'; arrows
Clr[15]='0x0000'; empty bottles
Clr[16]='0x0000'; bloody bandages
Clr[17]='0x0000'; fs
Clr[18]='0x0000'; bolts
Clr[19]='0x09CF'; Antifreeze
Clr[20]='0x0631'; Invisibility
Clr[21]='0x0000'; Magic Reflection
if (uo.getserial('backpack') <> uo.getserial('lastcontainer')) then
c=uo.getserial('lastcontainer')
for n=0 to 7
while uo.count(Req[n],Clr[n])<>Qnt[n]
q=Qnt[n]-uo.count(Req[n],Clr[n])
if q>0 then
uo.findtype(Req[n],Clr[n],c)
if uo.findcount() then
uo.moveitem('finditem',STR(q),'backpack',141,134,0)
checklag()
wait(600)
else
uo.msg(' item Req('+str(n)+') NOT FOUND ')
return
endif
else
q=-q
uo.findtype(Req[n],Clr[n],'backpack')
if uo.findcount() then
uo.moveitem('finditem',STR(q),c)
checklag()
wait(600)
endif
endif
wend
next
endif
uo.print(' -= done =- ')
endsub
sub unloadregs()
VAR n, q, c
Dim Req[50]; Requirements
Req[0]='0x0F7A'; regi
Req[1]='0x0F7B'; regi
Req[2]='0x0F86'; regi
Req[3]='0x0F88'; regi
Req[4]='0x0F8D'; regi
Req[5]='0x0F84'; regi
Req[6]='0x0F85'; regi
Req[7]='0x0F8C'; regi
Req[8]='0x0F0E'; gh
Req[9]='0x0F0E'; mana
Req[10]='0x0F0E'; refresh
Req[11]='0x0E21'; bandages
Req[12]='0x1F52'; paralyze scrolls
Req[13]='0x0F0E'; poison
Req[14]='0x0F3F'; arrows
Req[15]='0x0F0E'; empty bottles
Req[16]='0x0E20'; bloody bandages
Req[17]='0x1F5F'; fs
Req[18]='0x1BFB'; bolts
Req[19]='0x0F03'; Antifreeze
if (uo.getserial('backpack') <> uo.getserial('lastcontainer')) then
c=uo.getserial('lastcontainer')
for n=0 to 7
uo.findtype(Req[n],-1,'my')
while uo.findcount()
uo.moveitem('finditem',0,c)
checklag()
wait(700)
uo.findtype(Req[n],-1,'my')
wend
next
endif
uo.print(' -= done =- ')
endsub
Sub opendoor()
uo.set('distance','2')
uo.opendoor()
uo.set('distance','3')
endsub
Sub RunebookRecall()
var n = 1
var oldX=uo.getX()
var oldY=uo.getY()
repeat
uo.Exec('warmode 0')
uo.UseObject('0x40044C23')
CheckLag()
uo.LClick(255, n*15+240)
CheckLag()
uo.LClick(255, n*15+240)
var time=uo.Timer()
repeat
wait(500)
until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('needs') or time+200<uo.Timer()
uo.DeleteJournal()
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
sub RunebookRecallRegs()
var oldX=uo.getX()
var oldY=uo.getY()
repeat
uo.Exec('warmode 0')
uo.UseObject('0x40044C23')
CheckLag()
uo.LClick(255, 377)
CheckLag()
uo.LClick(260, 330)
UO.UseSkill('Hiding')
var time=uo.Timer()
repeat
wait(500)
until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('needs') or time+200<uo.Timer()
uo.DeleteJournal()
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
########################################## ХОДИЛКА 3 ##########################
#var Prec=3 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=5 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#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=5
var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=2
var StepTimeOut=300 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping
var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
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 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
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 ##########################
Sub DeleteJournal(msg); msg это параметр, см. выше как его передают
var nom=UO.InJournal(msg); ищем сообщение и в переменную его
if nom>0 then
UO.SetJournalLine(Nom - 1,"deleted"); подменим сообщение
DeleteJournal(msg); вызов функцией самой себя, рекурсия
endif
endsub
Sub CheckLag()
DeleteJournal("backpack"); вытрим ТОЛЬКО нужные нам сообщения в журнале
UO.Click('backpack'); одиночный клик по вашему backpack
; ждем сообщения в журнале
repeat
wait(100)
until UO.InJournal("backpack")
end sub
Sub onlynumbers(string)
var i, j
var text=''
for i=0 to len(string); вот начинается этот самый перебор строки по 1 символу
for j=0 to 9; используется для "если символ (str) от 0 до 9, то.."
if mid(string,i,1)==str(j) then; если текущий символ в строке равен (преобразованному в текст) числу от 0 до 9, то...
text = text + mid(string,i,1); ...то записываем его в переменную которая потом будет передана в исходный скрипт
end if
next
next
return text
end sub
In Topic: Хорошие скрипты
19 February 2010 - 01:33
Третий вариант рекола. Задает только один вопрос - номер руны. Переменную вар меняет под себя в соответствии с комментариями.
sub recallASMmini()
var runebook = '0x40044c23'; ID Runebook. Use ,info
var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")
var how = 2 #### 1 = Реколл_по_зарядам; 2 = Реколл_по_регам; 3 = Реколл_гейтом; 4 = Перезарядка_рунбуки
var oldX=uo.getX()
var oldY=uo.getY()
var number, num=val(where)
if how == 1 then
number = num+1
endif
if how == 2 then
number = num*2+18
endif
if how == 3 then
number = num*2+19
endif
if how == 4 then
deletejournal('You have no scrolls')
uo.recall(runebook, 1)
if uo.injournal('You have no scrolls') then
uo.print('You have no scrolls. Terminating.')
return
else
return
endif
endif
if num>16 or num<1 then
uo.print('Wrong rune number. Terminating.')
return
endif
repeat
uo.warmode(false)
deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')
uo.recall(runebook, number)
uo.useskill('Hiding')
var k=0
repeat
wait(500)
k=k+500
until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000
if uo.injournal('Insufficient mana for this spell') then
uo.print('You need more mana. Terminating')
return
endif
if uo.injournal('You lack the reagents for this spell') then
uo.print('You need more reagents. Terminating')
return
endif
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
In Topic: Хорошие скрипты
19 February 2010 - 01:31
Отличие от предыдущего скрипта в том, что номер руны не руками вводим, а выбираем из меню...
sub recallASMcombo()
var runebook = '0x40044c23'; ID Runebook. Use ,info
var where = uo.asminputcombo("Укажите порядковый номер руны","1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16")
var how = uo.asminputlist("Укажите задачу","Реколл_по_зарядам;Реколл_по_регам;Реколл_гейтом;Перезарядка_рунбуки")
var oldX=uo.getX()
var oldY=uo.getY()
var number
if how == 1 then
number = where+1
endif
if how == 2 then
number = where*2+18
endif
if how == 3 then
number = where*2+19
endif
if how == 4 then
deletejournal('You have no scrolls')
uo.recall(runebook, 1)
if uo.injournal('You have no scrolls') then
uo.print('You have no scrolls. Terminating.')
return
else
return
endif
endif
if how == 0 then
uo.print('Wrong choise of recall method. Terminating.')
return
endif
if where>16 or where<1 then
uo.print('Wrong rune number. Terminating.')
return
endif
repeat
uo.warmode(false)
deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')
uo.recall(runebook, number)
uo.useskill('Hiding')
var k=0
repeat
wait(500)
k=k+500
until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000
if uo.injournal('Insufficient mana for this spell') then
uo.print('You need more mana. Terminating')
return
endif
if uo.injournal('You lack the reagents for this spell') then
uo.print('You need more reagents. Terminating')
return
endif
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
In Topic: Хорошие скрипты
19 February 2010 - 01:28
Скрипт на рекол по рунбуке. Ставим АйДи своей буки и пользуемся. Вводим номер руны руками и выбераем необходимый способ. Так же можно перезаряжать, выбрав соответствующий пункт. Не стоит использовать для побега от ПК.
sub recallASMstring()
var runebook = '0x40044c23'; ID Runebook. Use ,info
var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")
var how = uo.asminputlist("Укажите задачу","Реколл_по_зарядам;Реколл_по_регам;Реколл_гейтом;Перезарядка_рунбуки")
var oldX=uo.getX()
var oldY=uo.getY()
var number, num=val(where)
if how == 1 then
number = num+1
endif
if how == 2 then
number = num*2+18
endif
if how == 3 then
number = num*2+19
endif
if how == 4 then
deletejournal('You have no scrolls')
uo.recall(runebook, 1)
if uo.injournal('You have no scrolls') then
uo.print('You have no scrolls. Terminating.')
return
else
return
endif
endif
if how == 0 then
uo.print('Wrong choise of recall method. Terminating.')
return
endif
if num>16 or num<1 then
uo.print('Wrong rune number. Terminating.')
return
endif
repeat
uo.warmode(false)
deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')
uo.recall(runebook, number)
uo.useskill('Hiding')
var k=0
repeat
wait(500)
k=k+500
until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000
if uo.injournal('Insufficient mana for this spell') then
uo.print('You need more mana. Terminating')
return
endif
if uo.injournal('You lack the reagents for this spell') then
uo.print('You need more reagents. Terminating')
return
endif
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
- Old Paradise Forums
- → Viewing Profile: Posts: Dustman
- Privacy Policy



Find content