мининг
Moderators: Murderator+, Murderator
Re: мининг
если прогнать скрипт через CodeSweeper то проблемный участок сразу видно
в Sub COL()
закрывашка
for n=1 to 21
endsub

в Sub COL()
закрывашка
for n=1 to 21
endsub
Re: мининг
Mirage wrote:если прогнать скрипт через CodeSweeper то проблемный участок сразу видно![]()
в Sub COL()
закрывашка
for n=1 to 21
endsub
удалил смотри выше

и за Эту ошибку и крЭша даже не охота играть
Re: мининг
куда ты торопишься? Просмотри медленно скрипт. я просто глядя заметил 3 опечатки.
1) sub mining()
опять шурум бурум с циклами. Открыт repeat, until не видать, for next пляшут. Прогони через расставлялку отступов.
2) скидывалка руды
dim 9 а элементов 10
3) таже скидывалка руды
dim 01 02 03... зачем фантазировать если есть правила?
Не спеши, внимательнее просматривай, все равно не убежит скрипт.
Приведи мысли в порядок, продумай что и зачем делает скрипт (прямо на бумаге набросай с рисунками и чертежами):
1) стартую у дома - кусок набора инструментов
2) прилетел на место - начал добычу
3) набрал пак - полетел домой - сбросил...
и так далее.
Потом по кускам просматривай каждую процедуру отдельно постепенно наполняя один большой файл со скриптом. Сначала самое необходимое - полеты, копку, ходилку, скидывалку. Потом уже всякие дополнительные логирования убегалки и прочую косметику. И все будет тип топ.
1) sub mining()
опять шурум бурум с циклами. Открыт repeat, until не видать, for next пляшут. Прогони через расставлялку отступов.
2) скидывалка руды
dim 9 а элементов 10
3) таже скидывалка руды
dim 01 02 03... зачем фантазировать если есть правила?
Не спеши, внимательнее просматривай, все равно не убежит скрипт.
Приведи мысли в порядок, продумай что и зачем делает скрипт (прямо на бумаге набросай с рисунками и чертежами):
1) стартую у дома - кусок набора инструментов
2) прилетел на место - начал добычу
3) набрал пак - полетел домой - сбросил...
и так далее.
Потом по кускам просматривай каждую процедуру отдельно постепенно наполняя один большой файл со скриптом. Сначала самое необходимое - полеты, копку, ходилку, скидывалку. Потом уже всякие дополнительные логирования убегалки и прочую косметику. И все будет тип топ.
Re: мининг
я с этими repeat не понимаю вопще нифега зделай ты этот кусок sub mining() а дальше я доделаю
да и скинь сылку или ту прогу чтобы проганять скрипт
да и скинь сылку или ту прогу чтобы проганять скрипт
Re: мининг
Программа для отступов во второй строке моей подписи.
Re: мининг
убрал репеат и тоже самое ошибка и крэш сразу
помоги пожалуста со скриптом
помоги пожалуста со скриптом
Re: мининг
Сделать за тебя я не могу так как тебе лучше знать что ты от скрипта хочешь получить. Я такими скриптами никогда не копал и не рубил. Я могу объяснить где ошибки (которые ты кстати даже не постарался разобрать сам). Итак поехали:
Пропускаем скрипт через утилиту в моей подписи. В "кошерном" скрипте все sub четотам()...endsub должны находиться по левому краю. Соответственно ВИДИМ что проблема начинается с sub mining(). Если его удалить скрипт по крайней мере принимает пищеварительный вид и все циклы в нем на местах. Давай ломать твою копалку.
если немного подкорректировать эту тему то получим примерно следующее:
Стало короче и красивше. Это всего скорее не полноценно рабочий вариант, нужно тебе самому разобраться с repeat и протестировать то что получится. Но вроде ход моих мыслей должен быть понятен.
Пропускаем скрипт через утилиту в моей подписи. В "кошерном" скрипте все sub четотам()...endsub должны находиться по левому краю. Соответственно ВИДИМ что проблема начинается с sub mining(). Если его удалить скрипт по крайней мере принимает пищеварительный вид и все циклы в нем на местах. Давай ломать твою копалку.
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
Стало короче и красивше. Это всего скорее не полноценно рабочий вариант, нужно тебе самому разобраться с repeat и протестировать то что получится. Но вроде ход моих мыслей должен быть понятен.
Re: мининг
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
вот тот 2 вариант твой я маленько переделал его вот что получилось пока работает посмотрим дальше что будет
потом отпешусь как работает крЭшит или нет
в твоем скрипте после убиства елема копает дальше а мне надо чтобы он улетал
после того как улетел от пк то он дома пытаица копать дальше
И спс тебе большое что помогаиш и извини но у меня не получаеца писать я то ко их маленько переделаю
Re: мининг
Code: Select all
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
может ли от этого выдавать ошибку и крэшить если он 2 раза в скрипте
Re: мининг
уважаемый Мираж помоги пожалуйста со скриптом а то у меня крыша едит уже