Page 1 of 1

мининг

Posted: 2011-04-09 17:31:40
by Irina E
ап

Re: мининг

Posted: 2011-04-10 20:10:37
by Mirage
если прогнать скрипт через CodeSweeper то проблемный участок сразу видно ;)

в Sub COL()
закрывашка

for n=1 to 21
endsub

Re: мининг

Posted: 2011-04-10 20:59:52
by Irina E
Mirage wrote:если прогнать скрипт через CodeSweeper то проблемный участок сразу видно ;)

в Sub COL()
закрывашка

for n=1 to 21
endsub
удалил смотри выше :(
и за Эту ошибку и крЭша даже не охота играть

Re: мининг

Posted: 2011-04-10 22:55:38
by Mirage
куда ты торопишься? Просмотри медленно скрипт. я просто глядя заметил 3 опечатки.
1) sub mining()
опять шурум бурум с циклами. Открыт repeat, until не видать, for next пляшут. Прогони через расставлялку отступов.
2) скидывалка руды
dim 9 а элементов 10
3) таже скидывалка руды
dim 01 02 03... зачем фантазировать если есть правила?
Не спеши, внимательнее просматривай, все равно не убежит скрипт.

Приведи мысли в порядок, продумай что и зачем делает скрипт (прямо на бумаге набросай с рисунками и чертежами):
1) стартую у дома - кусок набора инструментов
2) прилетел на место - начал добычу
3) набрал пак - полетел домой - сбросил...
и так далее.
Потом по кускам просматривай каждую процедуру отдельно постепенно наполняя один большой файл со скриптом. Сначала самое необходимое - полеты, копку, ходилку, скидывалку. Потом уже всякие дополнительные логирования убегалки и прочую косметику. И все будет тип топ.

Re: мининг

Posted: 2011-04-11 06:44:29
by Irina E
я с этими repeat не понимаю вопще нифега зделай ты этот кусок sub mining() а дальше я доделаю
да и скинь сылку или ту прогу чтобы проганять скрипт

Re: мининг

Posted: 2011-04-11 10:09:23
by Mirage
Программа для отступов во второй строке моей подписи.

Re: мининг

Posted: 2011-04-11 14:27:12
by Irina E
убрал репеат и тоже самое ошибка и крэш сразу

помоги пожалуста со скриптом

Re: мининг

Posted: 2011-04-11 18:33:24
by Mirage
Сделать за тебя я не могу так как тебе лучше знать что ты от скрипта хочешь получить. Я такими скриптами никогда не копал и не рубил. Я могу объяснить где ошибки (которые ты кстати даже не постарался разобрать сам). Итак поехали:
Пропускаем скрипт через утилиту в моей подписи. В "кошерном" скрипте все 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: мининг

Posted: 2011-04-11 18:56:49
by Irina E

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: мининг

Posted: 2011-04-12 07:37:55
by Irina E

Code: Select all

 UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)

может ли от этого выдавать ошибку и крэшить если он 2 раза в скрипте

Re: мининг

Posted: 2011-04-15 08:38:20
by Irina E
уважаемый Мираж помоги пожалуйста со скриптом а то у меня крыша едит уже