Модифицированный майнинг. Помогите доработать плс.
Moderators: Murderator+, Murderator
Модифицированный майнинг. Помогите доработать плс.
Я только начал разбираться с инжой. Намного легче разбираться на примерах =) Буду благодарен если поможете доработать макрос на майнинг.
Собственно что мне нужно
1. Я не знаю как работает схема "указания кирки" в вашем примере в разделе "скриптс", но мне нужно чтобы брало как обжект тайп. У нас на шарде кирка имеет заряды, поэтому нужно чтобы после рекола он брал из сундука в который складывает руду,две кирки (две вполне хватит) и потом юзал их через обжект тайп.
2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго, во-вторых объём руды содержиться не в одном тайле а в четырёх, в-третьих в тайле определённый вид руды т.к. если он будет ходить будет шанс нарыть разной руды, не только айрона. Самый простейщи вариант -- чтобы он ходил к 10ти точкам в шахте по кругу. Один раз выкопал -- перешёл, выкопал -- перешёл
3. Чтобы рекол был по двум айди рун в бекпаке через спеллбук -- ИМХО во всех скриптах это удобнее.
4. Как дополнение хорошо бы было если бы он периодически подходил к плавильне в шахте и плавил айрон т.к. сама руда у нас весит в 10 раз больше чем инги -- но это не критично.. значит будет чаще реколиться.
Зато мне абсолютно не нужны никакие алармы =)
Надеюсь тут есть человек который может это сделать, надеюсь что это не оч. сложно.
вот в этом топике в самом начала есть минимум два макроса на майнинг один из которых построен по принципу ходьбы от одной точку к другой, но сам не разберусь. http://yoko.netroof.net/forum/viewtopic ... 49&start=0
Кстати, шард НайтДей
Собственно что мне нужно
1. Я не знаю как работает схема "указания кирки" в вашем примере в разделе "скриптс", но мне нужно чтобы брало как обжект тайп. У нас на шарде кирка имеет заряды, поэтому нужно чтобы после рекола он брал из сундука в который складывает руду,две кирки (две вполне хватит) и потом юзал их через обжект тайп.
2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго, во-вторых объём руды содержиться не в одном тайле а в четырёх, в-третьих в тайле определённый вид руды т.к. если он будет ходить будет шанс нарыть разной руды, не только айрона. Самый простейщи вариант -- чтобы он ходил к 10ти точкам в шахте по кругу. Один раз выкопал -- перешёл, выкопал -- перешёл
3. Чтобы рекол был по двум айди рун в бекпаке через спеллбук -- ИМХО во всех скриптах это удобнее.
4. Как дополнение хорошо бы было если бы он периодически подходил к плавильне в шахте и плавил айрон т.к. сама руда у нас весит в 10 раз больше чем инги -- но это не критично.. значит будет чаще реколиться.
Зато мне абсолютно не нужны никакие алармы =)
Надеюсь тут есть человек который может это сделать, надеюсь что это не оч. сложно.
вот в этом топике в самом начала есть минимум два макроса на майнинг один из которых построен по принципу ходьбы от одной точку к другой, но сам не разберусь. http://yoko.netroof.net/forum/viewtopic ... 49&start=0
Кстати, шард НайтДей
Благодарю, Вы мне очень помогли =)
Собственно ниже я приведу макрос, который нужно немного дополнить --
### Ultimat Mining Macro w/fixes
sub go_mining()
var cycle=1
var path="7oi7ki" #change this from your exec record_path text
var test=0
var i=0
var j
uo.print('Target the bag for your ingots to go into')
uo.exec('addobject oresBag')
while uo.targeting()
wait(100)
wend
uo.print('Target your Pickaxe')
uo.exec('addtype pickaxe')
while uo.targeting()
wait(100)
wend
uo.print('Target your rune')
uo.exec('addobject temprune')
while uo.targeting()
wait(100)
wend
UO.SetCatchBag("oresBag")
While i<LEN(path)
if VAL(path[i]) then
j=VAL(path[i])
i=i+1
else
j=1
endif
Repeat
if test<>1 then
UO.DeleteJournal()
mine_spot()
end if
UO.Print("New Location!")
if not make_step(path[i]) then
UO.Print("Probably Stuck!")
UO.Print("Hope it is a Worldsave")
endif
j=j-1
Until j==0
i = i + 1
if cycle && i==LEN(path) then
i=0
endif
Wend
end sub
sub mine_spot()
var maxMineTime=9000
var times=0
var timeout=0
If UO.Weight>2000 Then #Set this weight according to your strength or server settings (2000 stone = about 500 str)
Oredroppings()
Endif
UO.DeleteJournal()
ToHide()
While (UO.InJournal("There is no") OR UO.InJournal("Try mining"))==0
UO.Print("Mining time!")
UO.DeleteJournal()
#UO.WaitTargetTile("1339",STR(UO.GetX()),STR(UO.GetY()),"0") ; edited out to work on Dominaira
UO.Exec("waittargetself")
UO.UseType("pickaxe")
timeout=0
times = times +1
if times>20 then
wait(maxMineTime)
times = 0
endif
Repeat
timeout=timeout+20
Wait(20)
#UO.Print("Waiting...")
Until UO.InJournal("You loosen") OR UO.InJournal("You put the") OR UO.InJournal("There is no") OR UO.InJournal("Try mining") OR UO.InJournal("That is too") OR UO.InJournal("You are starving") OR UO.InJournal("World save") OR timeout>maxMineTime
If UO.InJournal("World save") Then
Wait(5000)
UO.DeleteJournal()
Endif
Wend
return 0
end sub
sub record_path()
var x
var y
var path=""
UO.DeleteJournal()
Repeat
x=UO.GetX()
y=UO.GetY()
if waitNewPos(x,y) then
path=path+extract_dir(x,y,UO.GetX(),UO.GetY())
endif
Until UO.InJournal("stop")
path = compressPath(path)
UO.TextClear()
UO.TextOpen()
UO.TextPrint("Your path is:")
UO.TextPrint(path)
end sub
sub send_step(keycode,dir)
var x = UO.GetX()
var y = UO.GetY()
var timeout = 0
if UO.GetDir()<>dir then
UO.Press(keycode)
Repeat
wait(50)
Until UO.GetDir()==dir
endif
UO.Press(keycode)
Repeat
timeout=timeout+50
wait(50)
Until x<>UO.GetX() || y<>UO.GetY() || timeout>2000
if timeout>2000 then
return 0
endif
return 1
end sub
sub waitNewPos(x,y)
while x==UO.GetX() && y==UO.GetY()
if UO.InJournal("stop") then
return 0
endif
wend
return 1
end sub
sub compressPath(path)
Var i=0
Var j=0
Var newPath=""
while i<LEN(path)
j=1
while path[i]==path[i+1] AND j<9
i=i+1
j=j+1
wend
if j==1 then
newPath=newPath+path[i]
else
newPath=newPath+STR(j)+path[i]
endif
i=i+1
wend
return newPath
end sub
sub extract_dir(x,y,a,b)
if x>a then
if y==b then
return "i"
else
if y>b then
return "n"
else
return "w"
endif
endif
else
if x<a then
if y==b then
return "l"
else
if y>b then
return "e"
else
return "s"
endif
endif
else
if y>b then
return "o"
else
return "k"
endif
endif
endif
end sub
sub make_step(dir)
if dir=="e" then
send_step(39,1)
return 1
endif
if dir=="l" then
send_step(34,2)
return 1
endif
if dir=="s" then
send_step(40,3)
return 1
endif
if dir=="k" then
send_step(35,4)
return 1
endif
if dir=="w" then
send_step(37,5)
return 1
endif
if dir=="i" then
send_step(36,6)
return 1
endif
if dir=="n" then
send_step(38,7)
return 1
endif
if dir=="o" then
send_step(33,0)
return 1
endif
if dir=="d" then
While UO.Count("0x19b9")
UO.Drop("0x19b9")
wait(1000)
Wend
wait(200)
return 1
endif
UO.Print("Recall Time!")
return 0
end sub
sub Oredroppings()
UO.DeleteJournal()
Checkmana()
UO.UnSetCatchBag()
UO.DeleteJournal()
UO.Cast('Mark','temprune') #Keep an extra rune loose inside your backpack
Wait(5000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Mark','temprune')
Wait(5000)
Wend
Checkmana() Что такое чек мана и зачем оно мне надо? Мне кол-во маны проверять не надо она быстро регенерируется пассивно
UO.warmode(0)
UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook Как узнать номер своего слота и как он будет реколиться? У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол. Как можно заставить его просто реколиться домой по руне?
Wait(2000)
While UO.InJournal("spell fizzle")==1
UO.warmode(0)
UO.Exec("recall Runebook 0x03")
Wait(2000)
Wend
Checkmana()
UO.warmode(0)
UO.Cast('Recall','temprune') #Then it recalls back to where you were last and continues mining with the path you recorded!
Wait(3000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Recall','temprune')
Wait(3000)
Wend
UO.SetCatchBag("oresBag")
endsub
sub CheckLag() #Simple lag checking function so that you don't mess up marking or recalling
UO.DeleteJournal()
UO.Click('backpack')
Repeat
wait(200)
Until UO.InJournal('backpack')
end sub
А в каком месте он сбрасывает руду в контейнер? Чтобы я там мог добавить строку чтобы кирки брал из него..
### Ultimat Mining Macro w/fixes
sub go_mining()
var cycle=1
var path="7oi7ki" #change this from your exec record_path text
var test=0
var i=0
var j
uo.print('Target the bag for your ingots to go into')
uo.exec('addobject oresBag')
while uo.targeting()
wait(100)
wend
uo.print('Target your Pickaxe')
uo.exec('addtype pickaxe')
while uo.targeting()
wait(100)
wend
uo.print('Target your rune')
uo.exec('addobject temprune')
while uo.targeting()
wait(100)
wend
UO.SetCatchBag("oresBag")
While i<LEN(path)
if VAL(path[i]) then
j=VAL(path[i])
i=i+1
else
j=1
endif
Repeat
if test<>1 then
UO.DeleteJournal()
mine_spot()
end if
UO.Print("New Location!")
if not make_step(path[i]) then
UO.Print("Probably Stuck!")
UO.Print("Hope it is a Worldsave")
endif
j=j-1
Until j==0
i = i + 1
if cycle && i==LEN(path) then
i=0
endif
Wend
end sub
sub mine_spot()
var maxMineTime=9000
var times=0
var timeout=0
If UO.Weight>2000 Then #Set this weight according to your strength or server settings (2000 stone = about 500 str)
Oredroppings()
Endif
UO.DeleteJournal()
ToHide()
While (UO.InJournal("There is no") OR UO.InJournal("Try mining"))==0
UO.Print("Mining time!")
UO.DeleteJournal()
#UO.WaitTargetTile("1339",STR(UO.GetX()),STR(UO.GetY()),"0") ; edited out to work on Dominaira
UO.Exec("waittargetself")
UO.UseType("pickaxe")
timeout=0
times = times +1
if times>20 then
wait(maxMineTime)
times = 0
endif
Repeat
timeout=timeout+20
Wait(20)
#UO.Print("Waiting...")
Until UO.InJournal("You loosen") OR UO.InJournal("You put the") OR UO.InJournal("There is no") OR UO.InJournal("Try mining") OR UO.InJournal("That is too") OR UO.InJournal("You are starving") OR UO.InJournal("World save") OR timeout>maxMineTime
If UO.InJournal("World save") Then
Wait(5000)
UO.DeleteJournal()
Endif
Wend
return 0
end sub
sub record_path()
var x
var y
var path=""
UO.DeleteJournal()
Repeat
x=UO.GetX()
y=UO.GetY()
if waitNewPos(x,y) then
path=path+extract_dir(x,y,UO.GetX(),UO.GetY())
endif
Until UO.InJournal("stop")
path = compressPath(path)
UO.TextClear()
UO.TextOpen()
UO.TextPrint("Your path is:")
UO.TextPrint(path)
end sub
sub send_step(keycode,dir)
var x = UO.GetX()
var y = UO.GetY()
var timeout = 0
if UO.GetDir()<>dir then
UO.Press(keycode)
Repeat
wait(50)
Until UO.GetDir()==dir
endif
UO.Press(keycode)
Repeat
timeout=timeout+50
wait(50)
Until x<>UO.GetX() || y<>UO.GetY() || timeout>2000
if timeout>2000 then
return 0
endif
return 1
end sub
sub waitNewPos(x,y)
while x==UO.GetX() && y==UO.GetY()
if UO.InJournal("stop") then
return 0
endif
wend
return 1
end sub
sub compressPath(path)
Var i=0
Var j=0
Var newPath=""
while i<LEN(path)
j=1
while path[i]==path[i+1] AND j<9
i=i+1
j=j+1
wend
if j==1 then
newPath=newPath+path[i]
else
newPath=newPath+STR(j)+path[i]
endif
i=i+1
wend
return newPath
end sub
sub extract_dir(x,y,a,b)
if x>a then
if y==b then
return "i"
else
if y>b then
return "n"
else
return "w"
endif
endif
else
if x<a then
if y==b then
return "l"
else
if y>b then
return "e"
else
return "s"
endif
endif
else
if y>b then
return "o"
else
return "k"
endif
endif
endif
end sub
sub make_step(dir)
if dir=="e" then
send_step(39,1)
return 1
endif
if dir=="l" then
send_step(34,2)
return 1
endif
if dir=="s" then
send_step(40,3)
return 1
endif
if dir=="k" then
send_step(35,4)
return 1
endif
if dir=="w" then
send_step(37,5)
return 1
endif
if dir=="i" then
send_step(36,6)
return 1
endif
if dir=="n" then
send_step(38,7)
return 1
endif
if dir=="o" then
send_step(33,0)
return 1
endif
if dir=="d" then
While UO.Count("0x19b9")
UO.Drop("0x19b9")
wait(1000)
Wend
wait(200)
return 1
endif
UO.Print("Recall Time!")
return 0
end sub
sub Oredroppings()
UO.DeleteJournal()
Checkmana()
UO.UnSetCatchBag()
UO.DeleteJournal()
UO.Cast('Mark','temprune') #Keep an extra rune loose inside your backpack
Wait(5000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Mark','temprune')
Wait(5000)
Wend
Checkmana() Что такое чек мана и зачем оно мне надо? Мне кол-во маны проверять не надо она быстро регенерируется пассивно
UO.warmode(0)
UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook Как узнать номер своего слота и как он будет реколиться? У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол. Как можно заставить его просто реколиться домой по руне?
Wait(2000)
While UO.InJournal("spell fizzle")==1
UO.warmode(0)
UO.Exec("recall Runebook 0x03")
Wait(2000)
Wend
Checkmana()
UO.warmode(0)
UO.Cast('Recall','temprune') #Then it recalls back to where you were last and continues mining with the path you recorded!
Wait(3000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Recall','temprune')
Wait(3000)
Wend
UO.SetCatchBag("oresBag")
endsub
sub CheckLag() #Simple lag checking function so that you don't mess up marking or recalling
UO.DeleteJournal()
UO.Click('backpack')
Repeat
wait(200)
Until UO.InJournal('backpack')
end sub
А в каком месте он сбрасывает руду в контейнер? Чтобы я там мог добавить строку чтобы кирки брал из него..
Благодарю, Вы мне очень помогли =)
Поехали
uo.print('Target your Pickaxe')
uo.exec('addtype pickaxe')
while uo.targeting()
wait(100)
wend
Тут ты указываешь Кирку и она забивается по Обьекту ....Удаляем ))
uo.print('Target your rune')
uo.exec('addobject temprune')
while uo.targeting()
wait(100)
wend
Это вроде руна Аларм .....Удаляем
If UO.Weight>2000 Then
Oredroppings()
Endif
Тут у тебя ссылка на отсуцтвующий модуль сброса руды (Oredroppings) ...... там и правь поднятие кирки запаски .
UO.UseType("pickaxe")
Так ...тут вместо слова pickaxe забей просто тип ...... если он не найдет кирку (сломалась он возмет другую с таким же типом. (обьект может быть тока один ....а вот тип относится к всем киркам)
Checkmana()
Это якобы скрипт который проверяет количество манны у тебя ...нужно это для того что бы перемарчить руну если она закончилась ....... вдруг у тебя 5 раз физл будет .
UO.Exec("recall Runebook 0x03")
Так ....в модуле проверки веса где нету модуля сброса добавь строчку
Это
sub RecallToHome()
var i
uo.print('Реколимся домой...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeHome')
uo.cast('Recall')
if WaitForRecall()==1 then
return 1
end if
next
return 0
end sub
Этот модуль возврата его уже после сброса.
sub RecallToCave()
var i
uo.print('Реколимся обратно...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeCave')
uo.cast('Recall')
if waitForRecall()==1 then
return 1
end if
next
return 0
end sub
А это добавь в самое начало ( это модули выбора рунок )
uo.print('Выбери руну домой: ')
uo.exec('addobject runeHome')
while uo.Targeting()
wait(100)
wend
uo.print('Выбери руну в Шахту: ')
uo.exec('addobject runeCave')
while uo.Targeting()
wait(100)
wend
ог добавить строку чтобы кирки брал из него.. [/color][/quote]
2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго,
Тот скрипт который у тебя он и ходит по шахте .....запиши путь скриптом (помойму Рекорд Паф)
проверяй.
uo.print('Target your Pickaxe')
uo.exec('addtype pickaxe')
while uo.targeting()
wait(100)
wend
Тут ты указываешь Кирку и она забивается по Обьекту ....Удаляем ))
uo.print('Target your rune')
uo.exec('addobject temprune')
while uo.targeting()
wait(100)
wend
Это вроде руна Аларм .....Удаляем
If UO.Weight>2000 Then
Oredroppings()
Endif
Тут у тебя ссылка на отсуцтвующий модуль сброса руды (Oredroppings) ...... там и правь поднятие кирки запаски .
UO.UseType("pickaxe")
Так ...тут вместо слова pickaxe забей просто тип ...... если он не найдет кирку (сломалась он возмет другую с таким же типом. (обьект может быть тока один ....а вот тип относится к всем киркам)
Checkmana()
Это якобы скрипт который проверяет количество манны у тебя ...нужно это для того что бы перемарчить руну если она закончилась ....... вдруг у тебя 5 раз физл будет .
UO.Exec("recall Runebook 0x03")
Так ....в модуле проверки веса где нету модуля сброса добавь строчку
Это
sub RecallToHome()
var i
uo.print('Реколимся домой...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeHome')
uo.cast('Recall')
if WaitForRecall()==1 then
return 1
end if
next
return 0
end sub
Этот модуль возврата его уже после сброса.
sub RecallToCave()
var i
uo.print('Реколимся обратно...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeCave')
uo.cast('Recall')
if waitForRecall()==1 then
return 1
end if
next
return 0
end sub
А это добавь в самое начало ( это модули выбора рунок )
uo.print('Выбери руну домой: ')
uo.exec('addobject runeHome')
while uo.Targeting()
wait(100)
wend
uo.print('Выбери руну в Шахту: ')
uo.exec('addobject runeCave')
while uo.Targeting()
wait(100)
wend
ог добавить строку чтобы кирки брал из него.. [/color][/quote]
2. Нужно чтобы чар ходил по шахте -- во-первых у нас руда респавниться долго,
Тот скрипт который у тебя он и ходит по шахте .....запиши путь скриптом (помойму Рекорд Паф)
проверяй.
Все просто.
BETEPAH ™
BETEPAH ™
fr33s wrote:Собственно ниже я приведу макрос, который нужно немного дополнить --
Нет не "немного"
fr33s wrote:У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол
Из этого я делаю вывод что у тебя RunUO.С этого следует начинать -если это так.Потому что практически вся работа,проделанная Ветераном бесполезна.А это обидно.
Если в двух словах - этот скрипт нуждается в слишком серьезной переделке.
-вместо сообщений в журнале у тебя будут клилоки( но это ерунда)
Code: Select all
<.....>
#UO.WaitTargetTile("1339",STR(UO.GetX()),STR(UO.GetY()),"0")
UO.Exec("waittargetself")
<....>
-этот принцип прицела на тайл пола шахты работать не будет
RunUO требует точного соответствия при прицеле номера тайла,и всех координат.
fr33s wrote:UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook Как узнать номер своего слота и как он будет реколиться? У меня есть три возможности в буке -- гейт, абилка паладина -- святое путешествие и рекол. Как можно заставить его просто реколиться домой по руне?
Да,и насчет рекола....
Code: Select all
uo.recall(MyRunebuk,Num)
где MyRunebuk -ID рунабуки
Num - значение номера руны.
Причем для паладинского рекола(святое путешествие) вычисляется так:
Num = str(1+(6*номер руны в книге))
Например
Code: Select all
Num = str(1+(6*1))
uo.recall(MyRunebuk,Num)
Прыгнет по первой руне в книге паладинским реколом(святое путешествие).Формула

Num = str(6*номер руны в книге)-1))
простите =( не знал что отличия такие серьёзные
У меня есть небольшой опыт, если можно так сказать "скриптинга" на уоавтопилоте. Так вот на пилоте это реализуется по определённо логической схеме, но в пилоте нету типов и всего прочего, поэтому на основании скудных знаний о пилоте и инже мне мне интересно можно ли что-то подобное написать на инже --
Чтобы не прослыть лодырем, сразу пишу то, о чём уже имею какое-то представление =)
1.Юзтайп кирка координата северозапад (3 удара)
UO.Exec("usetype кирка")
wait (1000)
UO.LClick(х,у)
wait (6000)
# (*3)
2.два шага влево,
не знаю
3. юзтайп координата юговосток (3 удара)
UO.Exec("usetype кирка")
wait (1000)
UO.LClick(х,у)
wait (6000)
# (*3)
4. два шага вверх
не знаю
5. Далее 10 таких блоко по 2 шага по три удара по кругу -- не очень эффективно, зато не надо каждый раз маркить руну т.к. руда истощается по всей мине равномерно.
На шагах при ворлд сейве и лагах макрос обычно слетает (т.е. шаги пропускаются и чар может утопать чёрти куда или вообще никуда не топает долгое время) интересно можно ли на инже как-то защитить его от этого, чтобы он стабильно топал, но в любом случае максимальный вес у меня где-то 250 -- это мало и он будет часто реколиться домой а потом на исходную позицию, так что слёт не критичен.
6. после каждого шага проверка на вес, если вес больше определённого рекол перед сундуком домой,
Проверка на вес тут где-то была вверху точно не пойму
А вот рекол уже знаю, только нужно ещё условие -- иф вес зен рекол -- тож не знаю как =)
7. перетащить руду на сундук (притом не только айрон а всю руду),
Подозреваю что
UO.Exec("useobject айди бекпака") #открыть ящик
UO.Exec("findtype руда 0x0000 айди бекпака")
Как её перетащить куда-то не уверен так же интересно можно ли указать всю руду или нужно каждый тип по очереди?
8. взять две кирки, взять реги по 3 штуки
UO.Exec("useobject айди контейнера") #открыть ящик
UO.Exec("findtype кирки 0x0000 айди контейнера")
Uo.Exec("grab 2 finditem")
UO.Exec("findtype реги 0x0000 айди контейнера") #(*3)
Uo.Exec("grab 3 finditem")
9. рекол на исходную позицию.
uo.recall(MyRunebuk,Num)
Num = str(6*номер руны в книге)-1))
Такой вот довольно простой скрипт и не очень длинный. Кое-что я даже знаю как написать но в большинстве своём -- не знаю. Ведь такой скрипт по идее должен работать?
П.с. на аосе марк и рекол не физлят при 100+ магии никогда, а у меня именно 100. Возможно скрипт на майнинг на АОС был бы интересен не только мне. Ещё раз сори что не предупредил.
У меня есть небольшой опыт, если можно так сказать "скриптинга" на уоавтопилоте. Так вот на пилоте это реализуется по определённо логической схеме, но в пилоте нету типов и всего прочего, поэтому на основании скудных знаний о пилоте и инже мне мне интересно можно ли что-то подобное написать на инже --
Чтобы не прослыть лодырем, сразу пишу то, о чём уже имею какое-то представление =)
1.Юзтайп кирка координата северозапад (3 удара)
UO.Exec("usetype кирка")
wait (1000)
UO.LClick(х,у)
wait (6000)
# (*3)
2.два шага влево,
не знаю
3. юзтайп координата юговосток (3 удара)
UO.Exec("usetype кирка")
wait (1000)
UO.LClick(х,у)
wait (6000)
# (*3)
4. два шага вверх
не знаю
5. Далее 10 таких блоко по 2 шага по три удара по кругу -- не очень эффективно, зато не надо каждый раз маркить руну т.к. руда истощается по всей мине равномерно.
На шагах при ворлд сейве и лагах макрос обычно слетает (т.е. шаги пропускаются и чар может утопать чёрти куда или вообще никуда не топает долгое время) интересно можно ли на инже как-то защитить его от этого, чтобы он стабильно топал, но в любом случае максимальный вес у меня где-то 250 -- это мало и он будет часто реколиться домой а потом на исходную позицию, так что слёт не критичен.
6. после каждого шага проверка на вес, если вес больше определённого рекол перед сундуком домой,
Проверка на вес тут где-то была вверху точно не пойму
А вот рекол уже знаю, только нужно ещё условие -- иф вес зен рекол -- тож не знаю как =)
7. перетащить руду на сундук (притом не только айрон а всю руду),
Подозреваю что
UO.Exec("useobject айди бекпака") #открыть ящик
UO.Exec("findtype руда 0x0000 айди бекпака")
Как её перетащить куда-то не уверен так же интересно можно ли указать всю руду или нужно каждый тип по очереди?
8. взять две кирки, взять реги по 3 штуки
UO.Exec("useobject айди контейнера") #открыть ящик
UO.Exec("findtype кирки 0x0000 айди контейнера")
Uo.Exec("grab 2 finditem")
UO.Exec("findtype реги 0x0000 айди контейнера") #(*3)
Uo.Exec("grab 3 finditem")
9. рекол на исходную позицию.
uo.recall(MyRunebuk,Num)
Num = str(6*номер руны в книге)-1))
Такой вот довольно простой скрипт и не очень длинный. Кое-что я даже знаю как написать но в большинстве своём -- не знаю. Ведь такой скрипт по идее должен работать?
П.с. на аосе марк и рекол не физлят при 100+ магии никогда, а у меня именно 100. Возможно скрипт на майнинг на АОС был бы интересен не только мне. Ещё раз сори что не предупредил.
Last edited by fr33s on 2005-01-13 17:31:41, edited 1 time in total.
Благодарю, Вы мне очень помогли =)
я к сожалению ещё совсем не знаю архитектуру языка.. =р
так только обрывки.. пока что основная загвоздка в том, чтобы он ходил и реколился с проверкой на вес. Ну и самая большая приблема оформить эти модули в работающий скрипт с циклами, сабами, вендами и прочими необходимыми эндами )
так только обрывки.. пока что основная загвоздка в том, чтобы он ходил и реколился с проверкой на вес. Ну и самая большая приблема оформить эти модули в работающий скрипт с циклами, сабами, вендами и прочими необходимыми эндами )
Благодарю, Вы мне очень помогли =)
начну с рекола
sub mining()
var Num
Num = str(1+(6*1)) или Num = str((6*1)-1)
uo.recall(0x4002943C,Num)
end sub
-- всё чего удаётся этим добиться -- надпись "Сет дефолт рун кэнселд" -- фигня какая-то.
Кто-то может сказать как отреколиться по простой руне через айтем айди? )
sub mining()
var Num
Num = str(1+(6*1)) или Num = str((6*1)-1)
uo.recall(0x4002943C,Num)
end sub
-- всё чего удаётся этим добиться -- надпись "Сет дефолт рун кэнселд" -- фигня какая-то.
Кто-то может сказать как отреколиться по простой руне через айтем айди? )
Благодарю, Вы мне очень помогли =)
чувствую мне бы больше подошёл такой скрипт, но в нём слишком много незнакомых мне команд
Из него нужно убрать все алармы, уожурнал .. я так понимаю что этот скрипт построен не на тайлах.
Var DRuna='0x40226200' ; АЙДИ рунки домой
Var NRuna=1
Var UnloadCont='0x401BB7F9' ; АЙДИ сундука для руды
sub maning()
var mx, my, mz, i, j, jor, ser, noto
DIM MRuna[6] ; Массив из АЙДИ рунок в шахты
MRuna[1]='0x40101C55'
MRuna[2]='0x402264A8'
MRuna[3]='0x4028E150'
MRuna[4]='0x400BBF6F'
MRuna[5]='0x4022654E'
MRuna[6]='0x402263EB'
uo.print('!!Выбери Лопату!! ')
uo.exec('addobject Shovel')
while uo.targeting()
wait(100)
wend
na4alo:
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()
for i = mx-4 to mx+4
for j = my -4 to my+4
while not UO.Hidden()
UO.Warmode("0")
uo.print("Прячемся...")
UO.UseSkill("Hiding")
wait(4000)
wend
UO.Print("Копаем в координатах: "+str(mx-i)+" "+str(my-j))
infologs()
while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock")
##while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock") and not UO.InJournal("Iron Ore")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Useobject("Shovel")
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock")
wait (500)
if uo.injournal("heavy") then
##Pause()
endif
if uo.dead() then
##Pause()
endif
for jor = 0 to 9
ser = uo.journalserial(jor)
noto = uo.getnotoriety(ser)
if noto <> 1 and noto <> 0 and not uo.injournal("elemental") then
if uo.waiting() then
uo.canceltarget()
endif
goto end
endif
next
wend
if uo.weight > uo.str*4 then ; Максимальный вес при котором домой с рудой
goto end
endif
wend
UO.DeleteJournal()
next
next
end:
if uo.waiting() then
uo.canceltarget()
endif
RecallRune(DRuna)
wait(5000)
while not UO.Hidden()
UO.Warmode("0")
uo.print("Прячемся...")
UO.UseSkill("Hiding")
wait(4000)
wend
loot()
UO.SetReceivingContainer(UnloadCont)
Wait(100)
UO.Grab('0',MRuna[NRuna])
Wait(1000)
NRuna=NRuna+1
if NRuna>6 then
NRuna=1
endif
UO.UnSetReceivingContainer()
uo.useobject(UnloadCont)
Wait(100)
UO.Grab('0',MRuna[NRuna])
GetRegy()
wait(1000)
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
RecallRune(MRuna[NRuna])
wait(5000)
goto na4alo
end sub
sub GetRegy()
if uo.count('0x0F7B')<10 then
uo.FindType('0x0F7B',-1,UnloadCont) ;Blood Moss
wait(100)
uo.Grab('10','finditem')
wait(500)
end if
if uo.count('0x0F86')<10 then
uo.FindType('0x0F86',-1,UnloadCont) ;Mandrake Roots
wait(100)
uo.Grab('10','finditem')
wait(500)
end if
if uo.count('0x0F8D')<5 then
uo.FindType('0x0F8D',-1,UnloadCont) ;Spider's Silk
wait(100)
uo.Grab('5','finditem')
wait(500)
end if
if uo.count('0x0F7A')<5 then
uo.FindType('0x0F7A',-1,UnloadCont) ;Black Pearls
wait(100)
uo.Grab('5','finditem')
wait(500)
end if
end sub
sub loot() ; перекладка руды в сундук
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit
DIM Ore[20]
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
Ore[4]=0x0F11 ; saphires
Ore[5]=0x0F16 ; amethysts
Ore[6]=0x0F18 ; tourmalines
Ore[7]=0x0F15 ; citrines
Ore[8]=0x0F10 ; emeralds
Ore[9]=0x0F0F ; star sapphires
Ore[10]=0x0F26 ; diamonds
Ore[11]=0x1F4C ; recall scrolls
Ore[12]=0x0EED ; gold
Ore[13]=0x0F20 ; tourmaline
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 13
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
end sub
sub RecallRune(rn) ; Рекол по рункам
var mx, my
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
mx = UO.GetX("self")
my = UO.GetY("self")
UO.DeleteJournal()
UO.Cast('Recall',rn)
wait(4000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal
endif
end sub
sub pwav() ; звук при выкапывании ЭЛЕМЕНТАЛА
endsub
sub pwavw(); звук при появлении ПК
endsub
sub infologs()
UO.Print('У вас всего '+Str(UO.Count('0x19B7')+UO.Count('0x19B8')+UO.Count('0x19B9')+UO.Count('0x19BA'))+' руды в сумке')
UO.Print('Из них '+Str(UO.Count('0x19B7','0x0000')+UO.Count('0x19B8','0x0000')+UO.Count('0x19B9','0x0000')+UO.Count('0x19BA','0x0000'))+' айрон и ' +str(UO.Count('0x19B7')+UO.Count('0x19B8')+UO.Count('0x19B9')+UO.Count('0x19BA')-(UO.Count('0x19B7','0x0000')+UO.Count('0x19B8','0x0000')+UO.Count('0x19B9','0x0000')+UO.Count('0x19BA','0x0000')))+' цветмет')
end sub
Из него нужно убрать все алармы, уожурнал .. я так понимаю что этот скрипт построен не на тайлах.
Var DRuna='0x40226200' ; АЙДИ рунки домой
Var NRuna=1
Var UnloadCont='0x401BB7F9' ; АЙДИ сундука для руды
sub maning()
var mx, my, mz, i, j, jor, ser, noto
DIM MRuna[6] ; Массив из АЙДИ рунок в шахты
MRuna[1]='0x40101C55'
MRuna[2]='0x402264A8'
MRuna[3]='0x4028E150'
MRuna[4]='0x400BBF6F'
MRuna[5]='0x4022654E'
MRuna[6]='0x402263EB'
uo.print('!!Выбери Лопату!! ')
uo.exec('addobject Shovel')
while uo.targeting()
wait(100)
wend
na4alo:
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()
for i = mx-4 to mx+4
for j = my -4 to my+4
while not UO.Hidden()
UO.Warmode("0")
uo.print("Прячемся...")
UO.UseSkill("Hiding")
wait(4000)
wend
UO.Print("Копаем в координатах: "+str(mx-i)+" "+str(my-j))
infologs()
while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock")
##while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("far away") and not UO.InJournal("in rock") and not UO.InJournal("Iron Ore")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Useobject("Shovel")
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock")
wait (500)
if uo.injournal("heavy") then
##Pause()
endif
if uo.dead() then
##Pause()
endif
for jor = 0 to 9
ser = uo.journalserial(jor)
noto = uo.getnotoriety(ser)
if noto <> 1 and noto <> 0 and not uo.injournal("elemental") then
if uo.waiting() then
uo.canceltarget()
endif
goto end
endif
next
wend
if uo.weight > uo.str*4 then ; Максимальный вес при котором домой с рудой
goto end
endif
wend
UO.DeleteJournal()
next
next
end:
if uo.waiting() then
uo.canceltarget()
endif
RecallRune(DRuna)
wait(5000)
while not UO.Hidden()
UO.Warmode("0")
uo.print("Прячемся...")
UO.UseSkill("Hiding")
wait(4000)
wend
loot()
UO.SetReceivingContainer(UnloadCont)
Wait(100)
UO.Grab('0',MRuna[NRuna])
Wait(1000)
NRuna=NRuna+1
if NRuna>6 then
NRuna=1
endif
UO.UnSetReceivingContainer()
uo.useobject(UnloadCont)
Wait(100)
UO.Grab('0',MRuna[NRuna])
GetRegy()
wait(1000)
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
RecallRune(MRuna[NRuna])
wait(5000)
goto na4alo
end sub
sub GetRegy()
if uo.count('0x0F7B')<10 then
uo.FindType('0x0F7B',-1,UnloadCont) ;Blood Moss
wait(100)
uo.Grab('10','finditem')
wait(500)
end if
if uo.count('0x0F86')<10 then
uo.FindType('0x0F86',-1,UnloadCont) ;Mandrake Roots
wait(100)
uo.Grab('10','finditem')
wait(500)
end if
if uo.count('0x0F8D')<5 then
uo.FindType('0x0F8D',-1,UnloadCont) ;Spider's Silk
wait(100)
uo.Grab('5','finditem')
wait(500)
end if
if uo.count('0x0F7A')<5 then
uo.FindType('0x0F7A',-1,UnloadCont) ;Black Pearls
wait(100)
uo.Grab('5','finditem')
wait(500)
end if
end sub
sub loot() ; перекладка руды в сундук
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit
DIM Ore[20]
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
Ore[4]=0x0F11 ; saphires
Ore[5]=0x0F16 ; amethysts
Ore[6]=0x0F18 ; tourmalines
Ore[7]=0x0F15 ; citrines
Ore[8]=0x0F10 ; emeralds
Ore[9]=0x0F0F ; star sapphires
Ore[10]=0x0F26 ; diamonds
Ore[11]=0x1F4C ; recall scrolls
Ore[12]=0x0EED ; gold
Ore[13]=0x0F20 ; tourmaline
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 13
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
end sub
sub RecallRune(rn) ; Рекол по рункам
var mx, my
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
mx = UO.GetX("self")
my = UO.GetY("self")
UO.DeleteJournal()
UO.Cast('Recall',rn)
wait(4000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal
endif
end sub
sub pwav() ; звук при выкапывании ЭЛЕМЕНТАЛА
endsub
sub pwavw(); звук при появлении ПК
endsub
sub infologs()
UO.Print('У вас всего '+Str(UO.Count('0x19B7')+UO.Count('0x19B8')+UO.Count('0x19B9')+UO.Count('0x19BA'))+' руды в сумке')
UO.Print('Из них '+Str(UO.Count('0x19B7','0x0000')+UO.Count('0x19B8','0x0000')+UO.Count('0x19B9','0x0000')+UO.Count('0x19BA','0x0000'))+' айрон и ' +str(UO.Count('0x19B7')+UO.Count('0x19B8')+UO.Count('0x19B9')+UO.Count('0x19BA')-(UO.Count('0x19B7','0x0000')+UO.Count('0x19B8','0x0000')+UO.Count('0x19B9','0x0000')+UO.Count('0x19BA','0x0000')))+' цветмет')
end sub
Благодарю, Вы мне очень помогли =)
раз уж решил начать с рекола-разберись с этой процедурой,которую
сам же и цитируешь
для корректной работы с рунабукой требуется установить значения.
сам же и цитируешь
Code: Select all
sub RecallRune(rn) ; Рекол по рункам
var mx, my
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
mx = UO.GetX("self")
my = UO.GetY("self")
UO.DeleteJournal()
UO.Cast('Recall',rn)
wait(4000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal
endif
end sub
для корректной работы с рунабукой требуется установить значения.
Code: Select all
uo.set('norbcalc','1')
uo.set('norbcheck','1')