Page 1 of 2

я лювлю рыбу но не могу домой полететь

Posted: 2008-10-11 23:27:52
by papir7
всем привет.помогите пожалуйста дорогие скриптеры.вот скрипт на рыбалку.как набераеш максимальный вес,реколишся домой по рунбуку.но мой герой не реколитца почемуто:( Пишетца - Cant see the target.(когда очередь рекола подходит) Рунбук я указал при начальной маркировке.Помогите пожалуйста.

Code: Select all

sub Starter()
	var i=0,j=0,k=0,r=0,q=0,ii,jj
	var TopX=324,TopY=65
	dim PointX[5000], PointY[5000],PointT[5000]
	
	var flag=0,PointCount=0,clicks=0,flag2=0
	#BETEP™#
	uo.Exec("filterspeech on")
	uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'")
	
	if GetFromFile==1 then
		uo.Print('Загружаем координаты из файла...')
		f.open()
		PointCount=safe call f.ReadNumber()
		for i=1 to PointCount
			PointT[i]=safe call f.ReadNumber()
			PointX[i]=safe call f.ReadNumber()
			PointY[i]=safe call f.ReadNumber()
		next
		f.close()
	else
		
		uo.Print('Выбери Кирку: ')
		uo.Exec('addobject Pickaxe')
		while uo.Targeting()
			wait(100)
		wend
		uo.Print('Собираем координаты точек для ловли ...')
		repeat
			clicks=0
			flag=0
			uo.DeleteJournal()
			uo.UseObject('Pickaxe')
			waitForTarget()
			uo.DeleteJournal()
			WaitForTryRock()
			if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then
				flag=3
			end if
			PointCount=PointCount+1
			PointX[PointCount]=uo.LastTile(1)
			PointY[PointCount]=uo.LastTile(2)
			PointT[PointCount]=uo.LastTile(0)
			uo.Print('Найдена точка ловли '+str(PointCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' '+str(PointCount))
		until (Flag==3) or (PointCount==5000)
		uo.Exec("filterspeech off")
		uo.Print('Анализ закончен, координаты точек записаны в файл C:\Fish.dat')
		SaveToFile(PointCount,PointX,PointY,PointT)
	end if
	uo.Print('Точек найдено: '+str(PointCount))
	wait(2000)
	while 1==1
		if PointCount>0 then
			for i=1 to PointCount
				uo.Print('Идем к координате '+str(i)+': x='+str(PointX[i])+' y='+str(PointY[i]))
				flag=GotoXY(PointX[i],PointY[i])
				if flag==1 then
					if TryHiding==1 then
						ToHide()
					end if
					Fishing()
				end if
			next
		end if
	wend
end sub

sub Options()########################################## Конфиг
	UO.Say("zdarova eto skript nastrojka!")
	wait(3000)
	UO.Say("sledujte instrukcii!")
	wait(3000)
	UO.Say("vi dolzni stojat licom k sunduku dla sbrosa!!")
	wait(4000)
	
	UO.Say("ukazite runbuk ")
	UO.AddObject('RuneB1')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	
	UO.Say("ukazite sunduk pricelom")
	UO.AddObject('Sunduk')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	UO.Say("ukazite sumku v sunduke")
	UO.AddObject('SundukBag')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	
	UO.Say("otli4no")
	UO.UseObject('Sunduk')
	wait(3000)
	
	UO.Say("ukazite sumku dla rar ribi")
	UO.AddObject('StoreFish')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	
	UO.Say("ukazite sumku dla prajz ribi")
	UO.AddObject('StorePRFish')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	
	UO.Say("ukazite sumku dla kart")
	UO.AddObject('StoreMAP')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.SaveConfig()
	
	wait(2000)
	
	UO.Say("vse ok,perezapustite skript.")
end sub


Sub Fishing()
	var mX, mY, mZ, i, j
	var f
	var a=0
	#########################################################################
	###################
	### Массив рыбы ###
	###################
	dim Fish[6]
	Fish[0]=0x09CC
	Fish[1]=0x09CD
	Fish[2]=0x09CE
	Fish[3]=0x09CF
	Fish[4]=0x14EB
	Fish[5]=0x0DD6
	Fish[6]=0x0DD6
	
	Beginning:
	uo.Set('finddistance','6')
	mX = uo.getX("self")
	mY = uo.getY("self")
	mZ = uo.getZ("self")
	uo.DeleteJournal()
	for i = mX-6 to mX+6
		for j = mY-6 to mY+6
			
			if uo.Dead() then
				return
			end if
			
			if TryToHide==1 then
				ToHide()
			end if
			
			uo.Print("Сейчас ловим: "+str(mx-i)+" "+str(my-j))
			
			while not uo.InJournal("You pull") and not uo.InJournal("in water") and not uo.InJournal("no fish") and not uo.InJournal("far away")
				uo.DeleteJournal()
				uo.Waittargettile("1341", str(i), str(j), str(mZ))
				uo.Usetype('0x0DBF')
				
				while not uo.InJournal("You pull") and not uo.InJournal("location") and not uo.InJournal("no fish") and not uo.InJournal("but fail") and not uo.InJournal("far away") and not uo.InJournal("in water")
					wait (100)
					if uo.InJournal("You pull") then
						
						if a>0 then
							uo.print(STR(a))
						end if
						
						if UO.InJournal("You pull out a fish!") then
							if TakeFish==1 then
								uo.Print('Собираем рыбу.')
								for f=0 to 3
									uo.FindType(Fish[f],"-1","ground")
									if uo.Count(Fish[2])> 0 then
										a= a+1
									end if
									uo.MoveItem("finditem","1","Fishs")
									wait(200)
								next
							end if
						endif
						
						if UO.InJournal("You pull out a Tattered treasure map!") then
							if TakeMaps==1 then
								uo.Print('Собираем карты.')
								for f=4 to 4
									uo.FindType(Fish[f],"-1","ground")
									uo.MoveItem("finditem","-1","Maps")
									wait(200)
								next
							end if
						endif
						
						if UO.InJournal("Truly Rare Fish") then
							if TakeRareFish==1 then
								uo.Print('Собираем рар рыбу.')
								for f=5 to 5
									uo.FindType(Fish[f],"-1","ground")
									uo.MoveItem("finditem","-1","RareFish")
									wait(200)
								next
							end if
						endif
						
						if UO.InJournal("Prize") then
							if TakePrizeFish==1 then
								uo.Print('Собираем приз рыбу.')
								for f=6 to 6
									uo.FindType(Fish[f],"-1","ground")
									uo.MoveItem("finditem","-1","PrizeFish")
									wait(200)
								next
							end if
						endif
						
						if TryRecall==1 and uo.Weight>=uo.STR*4+20 then
							ToRecall()
						end if
						
					end if
				wend
			wend
			uo.DeleteJournal()
		next
	next
end sub


Sub ToRecall()
	RecallToHome()
	Drop()
	if EatingFood==1 then
		EatingFood()
	end if
	wait(3000)
	RecallToPoint()
end sub

sub RecallToHome()
	uo.Print('Прыгаем Домой.')
	RunebookRecall(RuneToHome)
end sub

sub RecallToPoint()
	uo.Print('Прыгаем в Лес.')
	RunebookRecall(RuneToPoint)
end sub

sub ToHide()
	while not uo.Hidden()
		uo.Print('Пытаемся уйти в хайд...')
		uo.DeleteJournal()
		uo.UseSkill('Stealth')
		wait(4500)
	wend
	wait(100)
end sub

Sub WaitForRecall()
	var Text1=uo.GetName()+": The spell fizzles."
	var mess='',lastX=uo.getX(),lastY=uo.getY()
	for var i=0 to 200
		mess=uo.Journal(0)
		if uo.Journal(0)==Text1 then
			return 0
		end if
		if uo.getX()<>lastX or uo.getY()<>LastY then
			return 1
		end if
		wait(50)
	next
	return 0
end sub


Sub WaitForTryRock()
	var Text1="That is too far away."
	var Text2="Try mining in rock."
	var Text3="There is no ore here to mine."
	var Text4="You have no line of sight to that location"
	var Text5="You can't see the target"
	for var i=0 to 50
		if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then
			return 1
		end if
		wait(200)
	next
	return 0
end sub

Sub WaitForTarget()
	for var i=0 to 50
		if uo.Targeting()==1 then
			return 1
		end if
		wait(200)
	next
	return 0
end sub

Sub WaitForChangeXY(myX,myY,lastX,lastY)
	for var i=1 to 50
		if lastX<>myX or lastY<>myY then
			return 1
		end if
		wait(200)
	next
	return 0
end sub

Sub GotoXY(x,y)
	var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
	for i=1 to 60
		myX=uo.getX();
		myY=uo.getY();
		if LastX==myX and LastY==myY then
			halt=halt+1
		else
			halt=0
		end if
		if halt>=10 then
			if uo.GetDir()==1 then
				for z=0 to 8
					uo.Press(40)
				next
			end if
			if uo.GetDir()==3 then
				for z=0 to 8
					uo.Press(37)
				next
			end if
			if uo.GetDir()==5 then
				for z=0 to 8
					uo.Press(38)
				next
			end if
			if uo.GetDir()==7 then
				for z=0 to 8
					uo.Press(39)
				next
			end if
			halt=15
		end if
		if Numb(x-myX)<=1 and Numb(y-myY)<=1 then
			return 1
		end if
		if x<=myX then
			if y<=myY then
				for z=0 to 3
					uo.Press(38)
				next
			else
				for z=0 to 3
					uo.Press(37)
				next
			end if
		else
			if y<=myY then
				for z=0 to 3
					uo.Press(39)
				next
			else
				for z=0 to 3
					uo.Press(40)
				next
			end if
		end if
		lastX=myX
		lastY=myY
		wait(200)
	next
	return 0
end sub

Sub Numb(num)
	if num>=0 then
		return num
	else
		return num*(-1)
	end if
end sub

Sub SaveToFile(PointCount,PointX,PointY,PointT)
	var f=file("C:\Fish.dat")
	var s=0,i=0
	f.open()
	f.create()
	s=safe call f.writeln(PointCount)
	for i=1 to PointCount
		s=safe call f.writeln(str(PointT[i])+' '+str(PointX[i])+' '+str(PointY[i]))
	next
	f.close()
end sub

sub Drop()
	if uo.Waiting() then
		uo.CancelTarget()
	end if
	var Exit
	var f
	;var a=0
	dim Fish[7]
	Fish[0]=0x09CC
	Fish[1]=0x09CD
	Fish[2]=0x09CE
	Fish[3]=0x09CF
	Fish[4]=0x14EB
	Fish[5]=0x0DD6
	Fish[6]=0x0DD6
	
	UO.UseObject('Sunduk')
	wait(1000)
	UO.UseObject('SundukBag')
	wait(1000)
	UO.UseObject('StoreFish')
	wait(1300)
	UO.UseObject('StoreMAP')
	wait(1000)
	UO.UseObject('StorePRFish')
	
	
	wait(700)
	exit=0
	
	repeat
		for f=0 to 3
			uo.FindType(Fish[f],"-1","backpack")
			uo.SetReceivingContainer('StoreFish')
			if uo.GetQuantity('finditem')> 0 then
				repeat
					wait(130)
					
					uo.FindType(Fish[f],"-1","backpack")
					uo.Grab('0','finditem')
					wait(1300)
				until uo.FindCount()==0
			else
				exit=1
			next
			uo.UnSetReceivingContainer()
		end if
	until Exit==1
	
	exit=0
	repeat
		for f=4 to 4
			uo.FindType(Fish[f],"-1","backpack")
			uo.SetReceivingContainer('StoreMAP')
			if uo.GetQuantity('finditem')> 0 then
				repeat
					uo.FindType(Fish[f],"-1","backpack")
					uo.Grab('0','finditem')
					wait(1000)
				until uo.FindCount()==0
			else
				exit=1
			next
			uo.UnSetReceivingContainer()
		end if
	until Exit==1
	
	exit=0
	repeat
		for f=5 to 5
			uo.FindType(Fish[f],"0x01BB","backpack")
			uo.SetReceivingContainer('StorePRFish')
			if uo.GetQuantity('finditem')>0 then
				repeat
					uo.FindType(Fish[f],"0x01BB","backpack")
					uo.Grab('0','finditem')
					wait(1000)
				until uo.FindCount()==0
			else
				exit=1
			next
			uo.UnSetReceivingContainer()
		end if
	until Exit==1
	
	repeat
		for f=6 to 6
			uo.FindType(Fish[f],"backpack")
			uo.SetReceivingContainer('StoreFish') ;rar
			if uo.GetQuantity('finditem')>0 then
				repeat
					uo.FindType(Fish[f],"-1","backpack")
					uo.Grab('0','finditem')
					wait(1000)
				until uo.FindCount()==0
			else
				exit=1
			next
			uo.UnSetReceivingContainer()
		end if
	until Exit==1
	uo.Print("Улов выложен")
end sub


Sub RunebookRecall(n)
	oldX=uo.getX()
	oldY=uo.getY()
	repeat
		uo.Exec('warmode 0')
		uo.UseObject('Runebook')
		wait(1000)
		uo.LClick(135, n*15+55)
		wait(500)
		uo.LClick(135, n*15+55)
		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 Open(Container)
	uo.DeleteJournal()
	uo.UseObject(Container)
	repeat
		wait(500)
	until uo.InJournal('Contains')
end sub


Sub EatingFood()
	ToEat()
	DropFood()
end sub

Sub ToEat()
	uo.SetReceivingContainer('backpack')
	Open('Sunduk')
	uo.FindType(TypeFood,'-1','Sunduk')
	uo.Grab('50','finditem')
	wait(500)
	repeat
		Checklag()
		uo.UseType(TypeFood)
		wait(1000)
	until uo.InJournal('You are simply too full to eat any more!')
	uo.UnsetReceivingContainer()
end sub

Sub DropFood()
	if uo.Waiting() then
		uo.CancelTarget()
	end if
	var f,Exit
	dim Food[1]
	Food[0]=TypeFood
	uo.SetReceivingContainer('Sunduk')
	wait(500)
	for f=0 to 0
		Exit=0
		repeat
			uo.FindType(Food[f])
			if uo.GetQuantity('finditem')>0 then
				uo.Grab('0','finditem')
				wait(1500)
			else
				Exit=1
			end if
		until Exit==1
	next
	uo.UnSetReceivingContainer('Sunduk')
end sub

Sub RecallAtAttack()
	var mX,mY
	reccal:
	uo.DeleteJournal()
	if uo.Waiting() then
		uo.CancelTarget()
	end if
	mX=uo.getX("self")
	mY=uo.getY("self")
	uo.DeleteJournal()
	uo.FindType('0x1F14',-1,'mY')
	uo.Cast('Recall','finditem')
	uo.Print('Атака! Реколимся!')
	wait(4000)
	if not uo.getX("self")<>mX and not uo.getY("self")<>mY then
		goto reccal
	end if
	RecallToHome()
	Drop()
	Terminate()
end sub

sub Reconnect()
	var ReconnectTime,rFlag
	ReconnectTime='0'
	rFlag=1
	repeat
		while (uo.ObjAtLayer('Bpack')=='')
			if rFlag then
				ReconnectTime=MakeTime()
				rFlag=0
			end if
			wait(20000)
			uo.Say('')
			wait(3000)
			uo.Say('')
			wait(3000)
			uo.Say('')
			wait(3000)
			uo.LDblClick(357,164)
			uo.LClick(616,459)
			wait(3000)
		wend
		wait(3000)
		if (rFlag==0) and (ReconnectTime<>'0') then
			uo.TextOpen()
			uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
			rFlag=1
			ReconnectTime='0'
		end if
	until false
end sub

Sub MakeTime()
	var d,t,ret,i
	ret=str(uo.Time())
	t=""
	for i=0 to Len(ret)
		t=ret[Len(ret)-i]+t
		if (i==2) or (i==4) then
			t=":"+t
		end if
	next
	ret=str(uo.Date())
	d=""
	for i=0 to Len(ret)
		d=ret[Len(ret)-i] + d
		if (i==2) or (i==4) then
			d="."+d
		end if
	next
	ret=t+" @ "+d
	return ret
end sub

sub Terminate()
	uo.Print('Все функции скрипта выключены!')
	uo.DeleteJournal()
	uo.Exec('terminate all')
	wait(100)
	uo.Exec('terminate all')
	wait(100)
	uo.Exec('terminate all')
	wait(100)
end sub

Sub CheckLag()
	if uo.Waiting()>0 then
		uo.Exec('canceltarget')
	end if
	uo.DeleteJournal()
	uo.Click('backpack')
	repeat
		wait(50)
	until uo.InJournal('backpack')
end sub

Posted: 2008-10-12 05:09:23
by Millerbeer
Ты в скрипте настройка добавляешь обьект - RuneB1

Code: Select all

UO.Say("ukazite runbuk ") 
      UO.AddObject('RuneB1') 
      While UO.Targeting()==2 
         wait(500) 
      Wend 
      UO.SaveConfig() 
, а уже когда реколлишься, используешь обьект - Runebook

Code: Select all

Sub RunebookRecall(n) 
oldX=uo.getX() 
oldY=uo.getY() 
repeat 
uo.Exec('warmode 0') 
uo.UseObject('Runebook') 
Обзови из одинаково, помоему в этом трабл.

Posted: 2008-10-12 12:25:25
by papir7
спасибо.объясни пожалуйста,как это - обозвать их одинаково? функцию саму? Я не очень понимаю!

Posted: 2008-10-12 12:30:15
by Millerbeer
Не так выразился. Рунбуку ты обозвал - RuneB1, соответственно и использовать тебе надо её же, так что во втором куске исправь, вместо uo.UseObject('Runebook') пропиши uo.UseObject('RuneB1')

Posted: 2008-10-12 18:10:51
by papir7
спасибо тебе большое! полёт по рунбуке заработал 8) Но вот есть насущная проблема.Герой прилетит к дому,выгрузитcа,и летит опять рыбачить.Но к сожалению при прилёте к месту рыбалке,герой просто стоит на месте и не рыбачит(притом никаких ошибок не вылетает).И ещё,он не всю рыбу выгружает :oops: Вот список рыбы в списке .присутсвует вся рыба но к сожалению он не всю выгружает :cry:

Code: Select all

sub Drop()
if uo.Waiting() then
uo.CancelTarget()
end if
var Exit
var f
;var a=0
dim Fish[7]
Fish[0]=0x09CC
Fish[1]=0x09CD
Fish[2]=0x09CE
Fish[3]=0x09CF
Fish[4]=0x14EB
Fish[5]=0x0DD6
Fish[6]=0x0DD6
Можеш пожалуйста сказать хоть почему он не рыбачит?

Posted: 2008-10-12 20:02:36
by Millerbeer

Code: Select all

Sub Fishing() 
   var mX, mY, mZ, i, j 
   var f 
   var a=0 
   ######################################################################### 
   ################### 
   ### Массив рыбы ### 
   ################### 
   dim Fish[6] 
тут тоже вбей dim Fish[7] вместо dim Fish[6]
это так, неточность, а поповоду невыгружает и не рыбачит, пока смотрю, скрипт замудрёный какой-то.

Posted: 2008-10-12 21:15:07
by papir7
ты золото спасибо! да я вбил парочку видов рыб,на всякий случай.если найдёш время до глянь пожалуйста,чего там такое.

Posted: 2008-10-12 21:48:22
by Millerbeer

Code: Select all

sub Drop() 
   if uo.Waiting() then 
      uo.CancelTarget() 
   end if 
   var f 
   dim Fish[7] 
   Fish[0]=0x09CC 
   Fish[1]=0x09CD 
   Fish[2]=0x09CE 
   Fish[3]=0x09CF 
   Fish[4]=0x14EB 
   Fish[5]=0x0DD6 
   Fish[6]=0x0DD6 
    
   UO.UseObject('Sunduk') 
   wait(1000) 
   UO.UseObject('SundukBag') 
   wait(1000) 
   UO.UseObject('StoreFish') 
   wait(1300) 
   UO.UseObject('StoreMAP') 
   wait(1000) 
   UO.UseObject('StorePRFish') 
    
    
   wait(700) 
   
     
      for f=0 to 3 
         if uo.count(Fish[f]) then
             uo.SetReceivingContainer('StoreFish') 
                while uo.count(Fish[f])
                    uo.FindType(Fish[f],"-1","backpack") 
                    uo.Grab('0','finditem') 
                    checklag()
                    wait(1000) 
                 wend
             uo.UnSetReceivingContainer() 
          end if 
       next
    
      if uo.count(Fish[4]) then
         uo.SetReceivingContainer('StoreMAP') 
            while uo.count(Fish[4])
               uo.FindType(Fish[4],"-1","backpack") 
               uo.Grab('0','finditem')
               checklag()
               wait(1000) 
             wend 
          uo.UnSetReceivingContainer() 
       end if 
    
      if uo.count(Fish[5]) then
         uo.SetReceivingContainer('StorePRFish') 
            while uo.count(Fish[5])
               uo.FindType(Fish[5],"-1","backpack") 
               uo.Grab('0','finditem')
               checklag()
               wait(1000) 
             wend 
          uo.UnSetReceivingContainer() 
       end if 
  

      if uo.count(Fish[6]) then
         uo.SetReceivingContainer('StoreFish') 
            while uo.count(Fish[6])
               uo.FindType(Fish[6],"-1","backpack") 
               uo.Grab('0','finditem')
               checklag()
               wait(1000) 
             wend 
          uo.UnSetReceivingContainer() 
       end if 
 
   uo.Print("Улов выложен") 
end sub 
переделал выгружалку, должна выгружать все типы, указанные в массиве из пака по сундукам, не уверен, что распихивать по сундукам будет, как задумано, т.к. не разбираюсь в типах рыбы. Хошь чтоб точно раскладывал, распиши подробно какой тип - какая рыба, типа призовая, обычная или рарная или ваще это карта. А если призовая рыба того же типа что и обычная или рарная, но другого цвета, то ваще надо всё по другому делать.

Posted: 2008-10-13 16:51:37
by Millerbeer
Ты ваще разобрался как этот скрипт работает? Запускаешь Starter, скрипт проверяет значение странной переменной GetFromFile, эта переменная нигде не обьявляется и значение ей нигде не присваивается, но тем не менее, скрипт проверяет, если она равна 1, то скрипт загружает из файла в массивы координаты точек лова, иначе скрипт предлагает тебе взять в зубы кирку и пройтись потыкать киркой, показать эти точки лова рыбы, и ходить и тыкать ты будешь, пока ненатыкаешь 5000 точек или ни ткнёшь в себя. После этого скрипт запишет координаты этих точек в файл, и вот тут, я думаю, он и должен присвоить значение 1 переменной GetFromFile. Но, неважно, не присваивает и ладно, я думаю, чтоб скрипт сработал и не глюкнул, лучше вернуться к первой точке, и только потом ткнуть киркой под себя. Потом скрипт проверяет, если он насохранял точек больше нуля, чар, по идее, по очереди по ним бегает и рыбачит, реколится, выкладывает, прилетает, опять рыбачит и ваще всё зашибись :lol:

Posted: 2008-10-13 19:18:14
by papir7
))))) GetfromFile - это файл с кординатами (сохранённый на компе) по которым он рыбачить,чтобы каждый раз не маркать место ловли рыбы.Скрипт работает так - грузиш функцию Starter,и он ловит рыбу.Как наберёт много веса - летит домой и складывает улов в сундук.Но есть кое-что.Перед началом ловли надо загрузить функцию - Options,чтобы прицелом указать сундук и мешки в нём(в которые рыбу складывать).Моя проблема в том,что когда он всё выгрузит и прилетает на место рыбалки он ничего не делает :( А просто стоит.Чего скажеш?

Posted: 2008-10-13 19:20:16
by papir7
Слушай я помойму бред написал)) Так значит Getfromfile нули устанавливаетца как он прилетит домой или как? поясни пожалуйста! и как сделать так чтобы всё норм было.

Posted: 2008-10-13 19:49:04
by Millerbeer
Файл где координаты точек - C:\Fish.dat, открой его блокнотом и вытри с него все координаты, закрой его пустым. Ниже строки sub Starter() сделай пустую строку и набери там:
var GetFromFile=0
Сохрани скрипт. Теперь, когда ты запустишь Starter, он те напишет
Выбери кирку. Надо, чтоб у тя в паке была кирка. Ты, значит выбираешь кирку и ходишь по берегу тыкаешь прицелом в места, с которых будешь рыбачить, когда надоест, подойди к месту, где у тя была первая точка и ткни киркой точно под себя, тогда скрипт сохранит все точки в файл и начнёт рыбачить с них поочереди. Теперь у тебя будет файл с координатами и чтоб опять не бегать с киркой перед следующим запуском скрипта измени var GetFromFile=0 на var GetFromFile=1. И ещё совет, чтоб чар не заблудился, если ты рыбачишь вдоль берега, то протыкай точки какойто кусок вдоль берега, потом протыкай точки обратно к началу, и потом киркой точно под себя. А то может так получиться, что чар у тебя убежит хер знает куда от первой точки и потом несможет к ней вернуться.

Posted: 2008-10-14 00:16:49
by papir7
Millerbeer спассиб! Щас хоть герой рыбу выгружает абсолютно всю 8) Но вот тока,когда он летить обратно к месту рыбалки он так и так не рыбачит,чтож творитцо то(( ,а просто на месте стоит.Getfromfile=1 не помогает.Я нашол начало скрипта,там вроде Getfromfile=1 есть вот глянь:

Code: Select all

var RuneToHome=1 ## 1 -  Номер руны Домой,по счёту в рунбуке.(сейчас в 1ом слоте,можно менять от 1-9)
###
var RuneToPoint=2 ## 2- Номер руны в Лес,по счёту в рунбуке.(сейчас в 9ом слоте,можно менять от 1-9)
###
var GetFromFile=0 ## 1 - Координаты будут считыватся из файла, 0 - собиратся из клиента
### (сначала соберите а потом считывайте из файла).
может ещё в чом то ошибка? Ну остальные настройки не столь важны.Кушать,рекол от пк и тагдалее.Я их не включал.

Posted: 2008-10-14 03:08:31
by Millerbeer
А до реколла он по точкам ходит или нет? Попробуй в ходилке в своей, в функции Sub GotoXY(x,y) после каждого нажатия на кнопку, т.е. команды uo.Press воткнуть checklag() и wait(300). Короче, чтоб каждое нажатие на кнопку выглядело так:

Code: Select all

uo.Press(кнопка) 
checklag()
wait(300)

Posted: 2008-10-15 20:10:01
by papir7
аха он ходит до рекола по точкам,но потом,када выгрузитца нe рыбачит, а просто на месте стоит.Может проблема в функциях :

[/code]Starter
Options
RecallToHome
RecallToPoint
ToHide
Drop
Reconnect
Terminate

Code: Select all


Может,после рекола обратно к месту ловли Starter не работает?

Posted: 2008-10-15 22:16:17
by Millerbeer
Фууу, блиин, дошло наконец-то... :lol: Автор скрипта проверку веса и реколл засунул внутрь цикла, который ждёт сообщение в журнале. Естественно, что после 2 реколлов и выгрузки рыбы в журнале нихрена этого сообщения не остаётся, поэтому когда чар прилетает из дома цикл дальше ждёт появления Ю пул или локейшн или фиш или остальной дребедени... Короче, сделай вот что... В функции Sub Fishing() вот этот кусок

Code: Select all

                  if TryRecall==1 and uo.Weight>=uo.STR*4+20 then 
                     ToRecall() 
                  end if 
оттуда убери нахрен, а засунь его как сейчас покажу

Code: Select all

Sub Fishing() 
   var mX, mY, mZ, i, j 
   var f 
   var a=0 
   ######################################################################### 
   ################### 
   ### Массив рыбы ### 
   ################### 
   dim Fish[6] 
   Fish[0]=0x09CC 
   Fish[1]=0x09CD 
   Fish[2]=0x09CE 
   Fish[3]=0x09CF 
   Fish[4]=0x14EB 
   Fish[5]=0x0DD6 
   Fish[6]=0x0DD6 
    
   Beginning: 
   uo.Set('finddistance','6') 
   mX = uo.getX("self") 
   mY = uo.getY("self") 
   mZ = uo.getZ("self") 
   uo.DeleteJournal() 
   for i = mX-6 to mX+6 
      for j = mY-6 to mY+6 
          
         if uo.Dead() then 
            return 
         end if 
          
         if TryToHide==1 then 
            ToHide() 
         end if 
          
         uo.Print("Сейчас ловим: "+str(mx-i)+" "+str(my-j)) 
          
         while not uo.InJournal("You pull") and not uo.InJournal("in water") and not uo.InJournal("no fish") and not uo.InJournal("far away") 
            uo.DeleteJournal() 
            uo.Waittargettile("1341", str(i), str(j), str(mZ)) 
            uo.Usetype('0x0DBF') 
             
            while not uo.InJournal("You pull") and not uo.InJournal("location") and not uo.InJournal("no fish") and not uo.InJournal("but fail") and not uo.InJournal("far away") and not uo.InJournal("in water") 
               wait (100) 
               if uo.InJournal("You pull") then 
                   
                  if a>0 then 
                     uo.print(STR(a)) 
                  end if 
                   
                  if UO.InJournal("You pull out a fish!") then 
                     if TakeFish==1 then 
                        uo.Print('Собираем рыбу.') 
                        for f=0 to 3 
                           uo.FindType(Fish[f],"-1","ground") 
                           if uo.Count(Fish[2])> 0 then 
                              a= a+1 
                           end if 
                           uo.MoveItem("finditem","1","Fishs") 
                           wait(200) 
                        next 
                     end if 
                  endif 
                   
                  if UO.InJournal("You pull out a Tattered treasure map!") then 
                     if TakeMaps==1 then 
                        uo.Print('Собираем карты.') 
                        for f=4 to 4 
                           uo.FindType(Fish[f],"-1","ground") 
                           uo.MoveItem("finditem","-1","Maps") 
                           wait(200) 
                        next 
                     end if 
                  endif 
                   
                  if UO.InJournal("Truly Rare Fish") then 
                     if TakeRareFish==1 then 
                        uo.Print('Собираем рар рыбу.') 
                        for f=5 to 5 
                           uo.FindType(Fish[f],"-1","ground") 
                           uo.MoveItem("finditem","-1","RareFish") 
                           wait(200) 
                        next 
                     end if 
                  endif 
                   
                  if UO.InJournal("Prize") then 
                     if TakePrizeFish==1 then 
                        uo.Print('Собираем приз рыбу.') 
                        for f=6 to 6 
                           uo.FindType(Fish[f],"-1","ground") 
                           uo.MoveItem("finditem","-1","PrizeFish") 
                           wait(200) 
                        next 
                     end if 
                  endif   
               end if 
            wend 
         wend 
         uo.DeleteJournal() 
                  if TryRecall==1 and uo.Weight>=uo.STR*4+20 then 
                     ToRecall() 
                  end if 
      next 
   next 
end sub 
короче, можешь прям отсюда функцию всю скопировать и у себя заменить..., ваще скрипт масштабный, но исполнение корявенькое :D

Posted: 2008-10-15 22:26:31
by Millerbeer
А ваще погоди...Домой он реколлится из разных мест, а обратно возвращается на одно и тоже, так что после реколла на рыбалку ему ещё нужно добежать на ту точку где он рыбачил...Короче, надо пол скрипта тут переделывать...Сча пойду посплю, а завтра вечером посмотрю, что можно сделать...
Хотя, вполне возможно, что по прилёту обратно, он на той точке куда прилетит всё протыкает-проловит и побежит на следующую из списка точку, так что попробуй тот вариант, что я тебе в предыдущем посте нарисовал..
Вобщем отпишись что получилось, а то я всё в теории и никогда на практике.... :lol:

Posted: 2008-10-15 22:53:12
by Millerbeer
Нет, наверное всё-таки правильнее будет сделать вот как:
В скрипте Фишинг, если вес превысит максимальное значение, делаем просто Return. А уже в скрипт Стартер воткнём реколлы с выгрузками. Тогда по прилёту из дома он поскачет с удочкой наперевес на следующую точку из массива. Да и с точки зрения структурного программирования это правильней. В общем модифицированные Starter и Fishing копируй и вместо своих втыкай

Code: Select all

sub Starter() 
   var i=0,j=0,k=0,r=0,q=0,ii,jj 
   var TopX=324,TopY=65 
   dim PointX[5000], PointY[5000],PointT[5000] 
    
   var flag=0,PointCount=0,clicks=0,flag2=0 
   #BETEP™# 
   uo.Exec("filterspeech on") 
   uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'") 
    
   if GetFromFile==1 then 
      uo.Print('Загружаем координаты из файла...') 
      f.open() 
      PointCount=safe call f.ReadNumber() 
      for i=1 to PointCount 
         PointT[i]=safe call f.ReadNumber() 
         PointX[i]=safe call f.ReadNumber() 
         PointY[i]=safe call f.ReadNumber() 
      next 
      f.close() 
   else 
       
      uo.Print('Выбери Кирку: ') 
      uo.Exec('addobject Pickaxe') 
      while uo.Targeting() 
         wait(100) 
      wend 
      uo.Print('Собираем координаты точек для ловли ...') 
      repeat 
         clicks=0 
         flag=0 
         uo.DeleteJournal() 
         uo.UseObject('Pickaxe') 
         waitForTarget() 
         uo.DeleteJournal() 
         WaitForTryRock() 
         if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then 
            flag=3 
         end if 
         PointCount=PointCount+1 
         PointX[PointCount]=uo.LastTile(1) 
         PointY[PointCount]=uo.LastTile(2) 
         PointT[PointCount]=uo.LastTile(0) 
         uo.Print('Найдена точка ловли '+str(PointCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' '+str(PointCount)) 
      until (Flag==3) or (PointCount==5000) 
      uo.Exec("filterspeech off") 
      uo.Print('Анализ закончен, координаты точек записаны в файл C:\Fish.dat') 
      SaveToFile(PointCount,PointX,PointY,PointT) 
   end if 
   uo.Print('Точек найдено: '+str(PointCount)) 
   wait(2000) 
   while 1==1 
      if PointCount>0 then 
         for i=1 to PointCount 
            uo.Print('Идем к координате '+str(i)+': x='+str(PointX[i])+' y='+str(PointY[i])) 
            flag=GotoXY(PointX[i],PointY[i]) 
            if flag==1 then 
               if TryHiding==1 then 
                  ToHide() 
               end if 
               Fishing() 
                  if TryRecall==1 and uo.Weight>=uo.STR*4  then 
                     ToRecall() 
                  end if 
            end if 
         next 
      end if 
   wend 
end sub 



Sub Fishing() 
   var mX, mY, mZ, i, j 
   var f 
   ######################################################################### 
   ################### 
   ### Массив рыбы ### 
   ################### 
   dim Fish[7] 
   Fish[0]=0x09CC 
   Fish[1]=0x09CD 
   Fish[2]=0x09CE 
   Fish[3]=0x09CF 
   Fish[4]=0x14EB 
   Fish[5]=0x0DD6 
   Fish[6]=0x0DD6 
    
   Beginning: 
   uo.Set('finddistance','6') 
   mX = uo.getX("self") 
   mY = uo.getY("self") 
   mZ = uo.getZ("self") 
   uo.DeleteJournal() 
   for i = mX-6 to mX+6 
      for j = mY-6 to mY+6 
          
         if uo.Dead() then 
            return 
         end if 
          
         if TryToHide==1 then 
            ToHide() 
         end if 
          
         uo.Print("Сейчас ловим: "+str(mx-i)+" "+str(my-j)) 
          
         repeat
            uo.DeleteJournal() 
            uo.Waittargettile("1341", str(i), str(j), str(mZ)) 
            uo.Usetype('0x0DBF') 
             
                repeat 
                     wait (300) 
                untiluo.InJournal("You pull|location|no fish|but fail|far away|in water")  
                if (UO.InJournal("You pull out a fish!")) and (TakeFish==1) then 
                        uo.Print('Собираем рыбу.') 
                        for f=0 to 3 
                           uo.FindType(Fish[f],"-1","ground") 
                                 if uo.FindCount() then
                                       uo.MoveItem("finditem","0","Fishs") 
                                       wait(200)
                                 endif 
                         next
                         uo.Print(str(uo.Count(Fish[2]))) 
                  endif 
                   if (UO.InJournal("You pull out a Tattered treasure map!")) and (TakeMaps==1) then 
                        uo.Print('Собираем карты.') 
                        uo.FindType(Fish[4],"-1","ground") 
                               if uo.FindCount() then
                                     uo.MoveItem("finditem","0","Maps") 
                                     wait(200)
                               endif
                   endif 
                   if (UO.InJournal("Truly Rare Fish")) and (TakeRareFish==1) then 
                        uo.Print('Собираем рар рыбу.') 
                           uo.FindType(Fish[5],"-1","ground") 
                                  if uo.FindCount() then
                                        uo.MoveItem("finditem","0","RareFish") 
                                        wait(200) 
                                    endif
                     end if  
                     if (UO.InJournal("Prize")) and( TakePrizeFish==1) then 
                        uo.Print('Собираем приз рыбу.') 
                        uo.FindType(Fish[6],"-1","ground") 
                                    if uo.FindCount() then
                                          uo.MoveItem("finditem","0","PrizeFish") 
                                          wait(200)
                                     end if 
                      endif                     
                      if  uo.Weight>=uo.STR*4 then 
                            Return
                      end if  
         until  uo.InJournal("in water|no fish|far away|location")
      next 
   next 

end sub 

Типа, почти последний релиз :lol: , ваще тут при желании до фига чего можно переделать, так сказать, очеловечить и окультурить :lol:

Posted: 2008-10-16 11:49:33
by papir7
спасиб! вот я вставил тобой исправленный кусок sub(Starter) он работает
а второй кусок sub(Fishing) выдаёт ошибку при старте скрипта
line 357 parse error.
------

Code: Select all

Sub Fishing()
   var mX, mY, mZ, i, j
   var f
   #########################################################################
   ###################
   ### Массив рыбы ###
   ###################
   dim Fish[7]
   Fish[0]=0x09CC
   Fish[1]=0x09CD
   Fish[2]=0x09CE
   Fish[3]=0x09CF
   Fish[4]=0x14EB
   Fish[5]=0x0DD6
   Fish[6]=0x0DD6
   
   Beginning:
   uo.Set('finddistance','6')
   mX = uo.getX("self")
   mY = uo.getY("self")
   mZ = uo.getZ("self")
   uo.DeleteJournal()
   for i = mX-6 to mX+6
      for j = mY-6 to mY+6
         
         if uo.Dead() then
            return
         end if
         
         if TryToHide==1 then
            ToHide()
         end if
         
         uo.Print("Сейчас ловим: "+str(mx-i)+" "+str(my-j))
         
         repeat
            uo.DeleteJournal()
            uo.Waittargettile("1341", str(i), str(j), str(mZ))
            uo.Usetype('0x0DBF')
             
                repeat
                     wait (300)
                untiluo.InJournal("You pull|location|no fish|but fail|far away|in water") 
                if (UO.InJournal("You pull out a fish!")) and (TakeFish==1) then
                        uo.Print('Собираем рыбу.')
                        for f=0 to 3
                           uo.FindType(Fish[f],"-1","ground")
                                 if uo.FindCount() then
                                       uo.MoveItem("finditem","0","Fishs")
                                       wait(200)
                                 endif
                         next
                         uo.Print(str(uo.Count(Fish[2])))
                  endif
                   if (UO.InJournal("You pull out a Tattered treasure map!")) and (TakeMaps==1) then
                        uo.Print('Собираем карты.')
                        uo.FindType(Fish[4],"-1","ground")
                               if uo.FindCount() then
                                     uo.MoveItem("finditem","0","Maps")
                                     wait(200)
                               endif
                   endif
                   if (UO.InJournal("Truly Rare Fish")) and (TakeRareFish==1) then
                        uo.Print('Собираем рар рыбу.')
                           uo.FindType(Fish[5],"-1","ground")
                                  if uo.FindCount() then
                                        uo.MoveItem("finditem","0","RareFish")
                                        wait(200)
                                    endif
                     end if 
                     if (UO.InJournal("Prize")) and( TakePrizeFish==1) then
                        uo.Print('Собираем приз рыбу.')
                        uo.FindType(Fish[6],"-1","ground")
                                    if uo.FindCount() then
                                          uo.MoveItem("finditem","0","PrizeFish")
                                          wait(200)
                                     end if
                      endif                     
                      if  uo.Weight>=uo.STR*4 then
                            Return
                      end if 
         until  uo.InJournal("in water|no fish|far away|location")
      next
   next

end sub                                     
чтож дедать?

Posted: 2008-10-16 11:51:02
by papir7
вот полный скрипт с апдейтами.Выдаёт line 357 - parse error.

Code: Select all

sub Starter()
   var i=0,j=0,k=0,r=0,q=0,ii,jj
   var TopX=324,TopY=65
   dim PointX[5000], PointY[5000],PointT[5000]
   
   var flag=0,PointCount=0,clicks=0,flag2=0
   #BETEP™#
   uo.Exec("filterspeech on")
   uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'")
   
   if GetFromFile==1 then
      uo.Print('Загружаем координаты из файла...')
      f.open()
      PointCount=safe call f.ReadNumber()
      for i=1 to PointCount
         PointT[i]=safe call f.ReadNumber()
         PointX[i]=safe call f.ReadNumber()
         PointY[i]=safe call f.ReadNumber()
      next
      f.close()
   else
       
      uo.Print('Выбери Кирку: ')
      uo.Exec('addobject Pickaxe')
      while uo.Targeting()
         wait(100)
      wend
      uo.Print('Собираем координаты точек для ловли ...')
      repeat
         clicks=0
         flag=0
         uo.DeleteJournal()
         uo.UseObject('Pickaxe')
         waitForTarget()
         uo.DeleteJournal()
         WaitForTryRock()
         if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then
            flag=3
         end if
         PointCount=PointCount+1
         PointX[PointCount]=uo.LastTile(1)
         PointY[PointCount]=uo.LastTile(2)
         PointT[PointCount]=uo.LastTile(0)
         uo.Print('Найдена точка ловли '+str(PointCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' '+str(PointCount))
      until (Flag==3) or (PointCount==5000)
      uo.Exec("filterspeech off")
      uo.Print('Анализ закончен, координаты точек записаны в файл C:\Fish.dat')
      SaveToFile(PointCount,PointX,PointY,PointT)
   end if
   uo.Print('Точек найдено: '+str(PointCount))
   wait(2000)
   while 1==1
      if PointCount>0 then
         for i=1 to PointCount
            uo.Print('Идем к координате '+str(i)+': x='+str(PointX[i])+' y='+str(PointY[i]))
            flag=GotoXY(PointX[i],PointY[i])
            if flag==1 then
               if TryHiding==1 then
                  ToHide()
               end if
               Fishing()
                  if TryRecall==1 and uo.Weight>=uo.STR*4  then
                     ToRecall()
                  end if
            end if
         next
      end if
   wend
end sub


sub Options()########################################## Конфиг
UO.Say("zdarova! tebja privetstvujet skript nastrojka!")
wait(3000)
UO.Say("sledujte instrukcijam!")
wait(3000)
UO.Say("vi dolzni stojat licom k sunduku mesta sbrosa!")
wait(4000)

UO.Say("ukazite runbuk ")
      UO.AddObject('RuneB1')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()

UO.Say("ukazite sunduk pricelom")
      UO.AddObject('Sunduk')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()
  UO.Say("ukazite sumku v sunduke")
      UO.AddObject('SundukBag')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()

UO.Say("Отлично")
UO.UseObject('Sunduk')
wait(3000)

UO.Say("ukazite sumku dla rar ribi")
      UO.AddObject('StoreFish')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()

UO.Say("ukazite sumku dla prize ribi")
      UO.AddObject('StorePRFish')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()

UO.Say("ukazite sumku dla kart")
      UO.AddObject('StoreMAP')
      While UO.Targeting()==2
         wait(500)
      Wend
      UO.SaveConfig()

wait(2000)

UO.Say("nastrojka zakon4enna. Dlja izmenenija parametrov,perezapustite skript povtorno.")
end sub


Sub Fishing()
   var mX, mY, mZ, i, j
   var f
   #########################################################################
   ###################
   ### Массив рыбы ###
   ###################
   dim Fish[7]
   Fish[0]=0x09CC
   Fish[1]=0x09CD
   Fish[2]=0x09CE
   Fish[3]=0x09CF
   Fish[4]=0x14EB
   Fish[5]=0x0DD6
   Fish[6]=0x0DD6
   
   Beginning:
   uo.Set('finddistance','6')
   mX = uo.getX("self")
   mY = uo.getY("self")
   mZ = uo.getZ("self")
   uo.DeleteJournal()
   for i = mX-6 to mX+6
      for j = mY-6 to mY+6
         
         if uo.Dead() then
            return
         end if
         
         if TryToHide==1 then
            ToHide()
         end if
         
         uo.Print("Сейчас ловим: "+str(mx-i)+" "+str(my-j))
         
         repeat
            uo.DeleteJournal()
            uo.Waittargettile("1341", str(i), str(j), str(mZ))
            uo.Usetype('0x0DBF')
             
                repeat
                     wait (300)
                untiluo.InJournal("You pull|location|no fish|but fail|far away|in water") 
                if (UO.InJournal("You pull out a fish!")) and (TakeFish==1) then
                        uo.Print('Собираем рыбу.')
                        for f=0 to 3
                           uo.FindType(Fish[f],"-1","ground")
                                 if uo.FindCount() then
                                       uo.MoveItem("finditem","0","Fishs")
                                       wait(200)
                                 endif
                         next
                         uo.Print(str(uo.Count(Fish[2])))
                  endif
                   if (UO.InJournal("You pull out a Tattered treasure map!")) and (TakeMaps==1) then
                        uo.Print('Собираем карты.')
                        uo.FindType(Fish[4],"-1","ground")
                               if uo.FindCount() then
                                     uo.MoveItem("finditem","0","Maps")
                                     wait(200)
                               endif
                   endif
                   if (UO.InJournal("Truly Rare Fish")) and (TakeRareFish==1) then
                        uo.Print('Собираем рар рыбу.')
                           uo.FindType(Fish[5],"-1","ground")
                                  if uo.FindCount() then
                                        uo.MoveItem("finditem","0","RareFish")
                                        wait(200)
                                    endif
                     end if 
                     if (UO.InJournal("Prize")) and( TakePrizeFish==1) then
                        uo.Print('Собираем приз рыбу.')
                        uo.FindType(Fish[6],"-1","ground")
                                    if uo.FindCount() then
                                          uo.MoveItem("finditem","0","PrizeFish")
                                          wait(200)
                                     end if
                      endif                     
                      if  uo.Weight>=uo.STR*4 then
                            Return
                      end if 
         until  uo.InJournal("in water|no fish|far away|location")
      next
   next

end sub                                     


Sub ToRecall()
RecallToHome()
Drop()
if EatingFood==1 then
EatingFood()
end if
wait(3000)
RecallToPoint()
end sub

sub RecallToHome()
uo.Print('Прыгаем Домой.')
RunebookRecall(RuneToHome)
end sub

sub RecallToPoint()
uo.Print('Прыгаем в Лес.')
RunebookRecall(RuneToPoint)
end sub

sub ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(4500)
wend
wait(100)
end sub

Sub WaitForRecall()
var Text1=uo.GetName()+": The spell fizzles."
var mess='',lastX=uo.getX(),lastY=uo.getY()
for var i=0 to 200
mess=uo.Journal(0)
if uo.Journal(0)==Text1 then
return 0
end if
if uo.getX()<>lastX or uo.getY()<>LastY then
return 1
end if
wait(50)
next
return 0
end sub


Sub WaitForTryRock()
var Text1="That is too far away."
var Text2="Try mining in rock."
var Text3="There is no ore here to mine."
var Text4="You have no line of sight to that location"
var Text5="You can't see the target"
for var i=0 to 50
if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then
return 1
end if
wait(200)
next
return 0
end sub

Sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
end if
wait(200)
next
return 0
end sub

Sub WaitForChangeXY(myX,myY,lastX,lastY)
for var i=1 to 50
if lastX<>myX or lastY<>myY then
return 1
end if
wait(200)
next
return 0
end sub

Sub GotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60
myX=uo.getX();
myY=uo.getY();
if LastX==myX and LastY==myY then
halt=halt+1
else
halt=0
end if
if halt>=10 then
if uo.GetDir()==1 then
for z=0 to 8
uo.Press(40)
next
end if
if uo.GetDir()==3 then
for z=0 to 8
uo.Press(37)
next
end if
if uo.GetDir()==5 then
for z=0 to 8
uo.Press(38)
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.Press(39)
next
end if
halt=15
end if
if Numb(x-myX)<=1 and Numb(y-myY)<=1 then
return 1
end if
if x<=myX then
if y<=myY then
for z=0 to 3
uo.Press(38)
next
else
for z=0 to 3
uo.Press(37)
next
end if
else
if y<=myY then
for z=0 to 3
uo.Press(39)
next
else
for z=0 to 3
uo.Press(40)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub

Sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub

Sub SaveToFile(PointCount,PointX,PointY,PointT)
var f=file("C:\Fish.dat")
var s=0,i=0
f.open()
f.create()
s=safe call f.writeln(PointCount)
for i=1 to PointCount
s=safe call f.writeln(str(PointT[i])+' '+str(PointX[i])+' '+str(PointY[i]))
next
f.close()
end sub

sub Drop()
   if uo.Waiting() then
      uo.CancelTarget()
   end if
   var f
   dim Fish[7]
   Fish[0]=0x09CC
   Fish[1]=0x09CD
   Fish[2]=0x09CE
   Fish[3]=0x09CF
   Fish[4]=0x14EB
   Fish[5]=0x0DD6
   Fish[6]=0x0DD6
   
   UO.UseObject('Sunduk')
   wait(1000)
   UO.UseObject('SundukBag')
   wait(1000)
   UO.UseObject('StoreFish')
   wait(1300)
   UO.UseObject('StoreMAP')
   wait(1000)
   UO.UseObject('StorePRFish')
   
   
   wait(700)
   
     
      for f=0 to 3
         if uo.count(Fish[f]) then
             uo.SetReceivingContainer('StoreFish')
                while uo.count(Fish[f])
                    uo.FindType(Fish[f],"-1","backpack")
                    uo.Grab('0','finditem')
                    checklag()
                    wait(1000)
                 wend
             uo.UnSetReceivingContainer()
          end if
       next
   
      if uo.count(Fish[4]) then
         uo.SetReceivingContainer('StoreMAP')
            while uo.count(Fish[4])
               uo.FindType(Fish[4],"-1","backpack")
               uo.Grab('0','finditem')
               checklag()
               wait(1000)
             wend
          uo.UnSetReceivingContainer()
       end if
   
      if uo.count(Fish[5]) then
         uo.SetReceivingContainer('StorePRFish')
            while uo.count(Fish[5])
               uo.FindType(Fish[5],"-1","backpack")
               uo.Grab('0','finditem')
               checklag()
               wait(1000)
             wend
          uo.UnSetReceivingContainer()
       end if
 

      if uo.count(Fish[6]) then
         uo.SetReceivingContainer('StoreFish')
            while uo.count(Fish[6])
               uo.FindType(Fish[6],"-1","backpack")
               uo.Grab('0','finditem')
               checklag()
               wait(1000)
             wend
          uo.UnSetReceivingContainer()
       end if
 
   uo.Print("Улов выложен")
end sub 

Sub RunebookRecall(n)
oldX=uo.getX()
oldY=uo.getY()
repeat
uo.Exec('warmode 0')
uo.UseObject('RuneB1')
wait(1000)
uo.LClick(135, n*15+55)
wait(500)
uo.LClick(135, n*15+55)
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 Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub


Sub EatingFood()
ToEat()
DropFood()
end sub

Sub ToEat()
uo.SetReceivingContainer('backpack')
Open('Sunduk')
uo.FindType(TypeFood,'-1','Sunduk')
uo.Grab('50','finditem')
wait(500)
repeat
Checklag()
uo.UseType(TypeFood)
wait(1000)
until uo.InJournal('You are simply too full to eat any more!')
uo.UnsetReceivingContainer()
end sub

Sub DropFood()
if uo.Waiting() then
uo.CancelTarget()
end if
var f,Exit
dim Food[1]
Food[0]=TypeFood
uo.SetReceivingContainer('Sunduk')
wait(500)
for f=0 to 0
Exit=0
repeat
uo.FindType(Food[f])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
Exit=1
end if
until Exit==1
next
uo.UnSetReceivingContainer('Sunduk')
end sub

Sub RecallAtAttack()
var mX,mY
reccal:
uo.DeleteJournal()
if uo.Waiting() then
uo.CancelTarget()
end if
mX=uo.getX("self")
mY=uo.getY("self")
uo.DeleteJournal()
uo.FindType('0x1F14',-1,'mY')
uo.Cast('Recall','finditem')
uo.Print('Атака! Реколимся!')
wait(4000)
if not uo.getX("self")<>mX and not uo.getY("self")<>mY then
goto reccal
end if
RecallToHome()
Drop()
Terminate()
end sub

sub Reconnect()
var ReconnectTime,rFlag
ReconnectTime='0'
rFlag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rFlag then
ReconnectTime=MakeTime()
rFlag=0
end if
wait(20000)
uo.Say('')
wait(3000)
uo.Say('')
wait(3000)
uo.Say('')
wait(3000)
uo.LDblClick(357,164)
uo.LClick(616,459)
wait(3000)
wend
wait(3000)
if (rFlag==0) and (ReconnectTime<>'0') then
uo.TextOpen()
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
rFlag=1
ReconnectTime='0'
end if
until false
end sub

Sub MakeTime()
var d,t,ret,i
ret=str(uo.Time())
t=""
for i=0 to Len(ret)
t=ret[Len(ret)-i]+t
if (i==2) or (i==4) then
t=":"+t
end if
next
ret=str(uo.Date())
d=""
for i=0 to Len(ret)
d=ret[Len(ret)-i] + d
if (i==2) or (i==4) then
d="."+d
end if
next
ret=t+" @ "+d
return ret
end sub

sub Terminate()
uo.Print('Все функции скрипта выключены!')
uo.DeleteJournal()
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
end sub

Sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub