мининг
Posted: 2011-04-09 17:31:40
ап
Mirage wrote:если прогнать скрипт через CodeSweeper то проблемный участок сразу видно![]()
в Sub COL()
закрывашка
for n=1 to 21
endsub
Code: Select all
sub mining()
VAR Kirka = '0x0F39' ; это как я понимаю объявление инструмента. Запомним эту строку - потом вернемся сюда.
VAR MaxVes = 500 ; максимальный вес - используется в скрипте ниже.
VAR TileNum = '1339' ; номер тайла с рудой (хотя рудонесущих тайлов несколько десятков... Но можно и так по старинке.)
VAR x, y, t, k, i, f ; тут бла бла бла...
Dim gox[14] ; это как я понимаю координаты перемещения по пещере. Зачем то прописанные в копалке, но пес с ними.
gox[0] = 353
gox[1] = 358
gox[2] = 352
gox[3] = 357
gox[4] = 362
gox[5] = 370
gox[6] = 375
gox[7] = 380
gox[8] = 384
gox[9] = 379
gox[10] = 375
gox[11] = 366
gox[12] = 357
gox[13] = 353
Dim goy[14]
goy[0] = 1453
goy[1] = 1448
goy[2] = 1448
goy[3] = 1439
goy[4] = 1439
goy[5] = 1437
goy[6] = 1433
goy[7] = 1429
goy[8] = 1432
goy[9] = 1441
goy[10] = 1436
goy[11] = 1439
goy[12] = 1439
goy[13] = 1446
while 1 ; цикл живет пока 1. Мощно но не учитывает многие моменты.
for i = 0 to 13 ; тут все пуском
WalkME(gox[i],goy[i],'') ; ходим по координатам
for y=-4 to 4
for x=-4 to 4
while not UO.Hidden() ; тут прячемся перед совершением действия. В принципе расписывать не нужно - в скрипте есть процедура пряталка.
UO.Warmode("0")
uo.print("Ïðÿ÷åìñÿ...")
UO.UseSkill("Hiding")
wait(4000)
wend
repeat ; ВОТ наш больной. Повторять до тех пор пока... ХЗ что именно должно произойти - условия завершения цикла несуществует и оно извесно только тебе так как это ты его сломал. Ищи исходник оригинального скрипта.
for f=1 to 10 ; это походу 10 попыток на копку. Через забор но пусть...
if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then ; вот это ФИГНЯ. У тебя вс крипте выше указана КИРКА. Зачем проверять просто так есть ли в паке лопаты?
return
endif
UO.DeleteJournal()
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0) ; забегая вперед (или назад) скажу - зачем дублировать прицел который есть в sub DigAhole?
DigAhole(x,y) ; собсно лопаткой тресь в тайл
if waitforore()==1 then ; если выполняется какое то условие то попытка = 10... Мне кажется лучше сделать return
f=10
endif
If UO.Weight > 495 Then ; это место запомним. Тут скидывается мусорное железо.
UO.Print('Ïåðåãðóç!')
sbroska()
endif
if flagpk==1 then ; если нашли ПК прерываем копку - логично.
return
endif
if uo.injournal('You have been revealed') and flaginvis==1 then ; если раскрылись - прячемся и зачем то прерываем копку.
flaginvis=0
invis()
return
endif
next
if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then ; если неудачно выкопали руду - ждем 10 секунд. Зачем? Специфика шарда - единственное что приходит на ум. Если нет - в топку.
wait(10000)
endif
if checkelem()==1 then ; если вылез элементаль - прерываем копку, спорно но пусть.
return
endif
If UO.Weight > MaxVes Then ; ОП повторный сканер веса.
UO.Print(" Overweight!" )
return
Endif
next
next
next
wend
endsub ; вот тут видно что какойто цикл сбит
Code: Select all
VAR Kirka = '0x0F39' ; выше sub потому что используются в нескольких процедурах.
VAR MaxVes = 500
VAR TileNum = '1339'
sub mining()
VAR x, y, t, k, i, f
Dim gox[14]
gox[0] = 353
gox[1] = 358
gox[2] = 352
gox[3] = 357
gox[4] = 362
gox[5] = 370
gox[6] = 375
gox[7] = 380
gox[8] = 384
gox[9] = 379
gox[10] = 375
gox[11] = 366
gox[12] = 357
gox[13] = 353
Dim goy[14]
goy[0] = 1453
goy[1] = 1448
goy[2] = 1448
goy[3] = 1439
goy[4] = 1439
goy[5] = 1437
goy[6] = 1433
goy[7] = 1429
goy[8] = 1432
goy[9] = 1441
goy[10] = 1436
goy[11] = 1439
goy[12] = 1439
goy[13] = 1446
while not UO.Dead() ; пока чар живой
for i = 0 to 13
WalkME(gox[i],goy[i],'')
for y=-4 to 4
for x=-4 to 4
Tohide() ; запустили проверку на спрятался нет
; repeat ;пока ее закомментируем.
for f=1 to 10
CAll() ; проверка на все случаи жизни
UO.DeleteJournal()
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
DigAhole(x,y)
if waitforore()==1 then
f=10
endif
CAll(); проверка на все случаи жизни
next
if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then
wait(10000)
endif
next
next
next
wend
endsub
Sub CAll()
if uo.count( Kirka )<1 or UO.Weight > MaxVes or flagpk==1 or checkelem()==1 then
return
endif
if uo.injournal('You have been revealed') and flaginvis==1 then
flaginvis=0
invis()
return
endif
If UO.Weight > 495 Then
UO.Print('Ïåðåãðóç!')
sbroska()
endif
endsub
Code: Select all
VAR MaxVes = 500
VAR TileNum = '1339'
sub mining()
VAR x, y, t, k, i, f
Dim gox[14]
gox[0] = 1799
gox[1] = 1804
gox[2] = 1809
gox[3] = 1808
gox[4] = 1803
gox[5] = 1808
gox[6] = 1805
gox[7] = 1799
gox[8] = 1805
gox[9] = 1808
gox[10] = 1805
gox[11] = 1810
gox[12] = 1803
gox[13] = 1799
Dim goy[14]
goy[0] = 1060
goy[1] = 1057
goy[2] = 1055
goy[3] = 1050
goy[4] = 1049
goy[5] = 1044
goy[6] = 1039
goy[7] = 1033
goy[8] = 1039
goy[9] = 1044
goy[10] = 1049
goy[11] = 1054
goy[12] = 1058
goy[13] = 1053
while not UO.Dead() ; ïîêà ÷àð æèâîé
for i = 0 to 13
WalkME(gox[i],goy[i],'')
for y=-4 to 4
for x=-4 to 4
Tohide() ; çàïóñòèëè ïðîâåðêó íà ñïðÿòàëñÿ íåò
; repeat ;ïîêà åå çàêîììåíòèðóåì.
for f=1 to 10
CAll() ; ïðîâåðêà íà âñå ñëó÷àè æèçíè
UO.DeleteJournal()
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
DigAhole(x,y)
if waitforore()==1 then
f=10
endif
CAll(); ïðîâåðêà íà âñå ñëó÷àè æèçíè
if flagpk==1 then
return
endif
next
if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then
wait(10000)
endif
if checkelem()==1 then
return
endif
If UO.Weight > MaxVes Then
UO.Print(" Overweight!" )
return
Endif
next
next
next
wend
endsub
Sub CAll()
if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then
return
endif
if uo.injournal('You have been revealed') and flaginvis==1 then
flaginvis=0
invis()
return
endif
If UO.Weight > 495 Then
UO.Print('Ïåðåãðóç!')
sbroska()
endif
endsub
Code: Select all
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)