Page 1 of 1

Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 10:36:58
by necroic
Доброго дня всем!

Проблема вот в чём, на шарде для команды uo.waittargettile необходимо жёстко указывать номер тайла. Например в скрипте на ловлю рыбы. Если указать -1 или 0 или all , просто появляется сообщение "Вы не можете рыбачить здесь". Что можно придумать? У меня есть три варианта, хотел бы узнать, реализуемо ли такое:

1) Делать перебор по известным номерам тайлов из команды infotile
2) Скрипт берёт номер тайла из команды, например, uo.infotile(x abs, y abs) чтобы такая команда возвращало номер тайла указанных координат
3) некий аналог значений -1 или all, чтобы номер тайла для команды был вообще не обязателен.

Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...

Так же прошу подсказать, как сделать клик мышкой в абсолютные координаты.

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 11:17:15
by Mirage
necroic wrote: Оговорюсь, дело в том, что на моём шарде водичка задаётся разными номерами тайлов и узнавать все и перебирать не очень хочется...
:mrgreen:

Вообщето для этого существует утилита InsideUO которая отображает тайлы всех типов именно твоего шарда (даже если они не стандартные)

А так помоему ты изобретаешь велосипед. Попробуй вот такой скрипт для ловли:

Code: Select all

sub FishingAround()
	VAR X, Y, i, MaxRange = 6, MaxVes = 620
	VAR knife = '0x0F51'   ; нож
	VAR Steak = '0x097A'
	VAR Bag = '0x40205DFE'
	DIM Fish[5]
	Fish[1]  = '0x09CC'   ; тип рыбы 1
	Fish[2]  = '0x09CD'   ; тип рыбы 2
	Fish[3]  = '0x09CE'   ; тип рыбы 3
	Fish[4]  = '0x09CF'   ; тип рыбы 4
	for Y = -MaxRange to MaxRange
		for X = -MaxRange to MaxRange
			if FishTiles(UO.GetX()+X, UO.GetY()+Y) then
				repeat
					UO.DeleteJournal() 
					UO.Warmode(0)
					wait(100)
					UO.WaitTargetTile(FishTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
					; ********************************
					; Auto Tools
					if UO.Count(0x0DBF) || UO.Count(0x0DC0) then
						if UO.Count(0x0DBF) then
							UO.UseType(0x0DBF); <-- удочка
						else
							UO.UseType(0x0DC0); <-- удочка
						endif
					else
						return 1
					endif
					; ********************************
					repeat
						wait(100)
					until UO.InJournal('pull out|anything|поймали|You can|не получилось|no fish|нету рыбы|месте|далеко|вытащили удочку')
					For i=1 To 4
						UO.FindType( Fish[i], -1, 'ground' )
						If UO.FindCount() > 0 Then
							UO.Grab( 0, 'finditem' )
							Wait( 300 )
						Endif
					Next
					If UO.Weight > MaxVes Then
						UO.Print('Перегруз!')
						return 0
					endif
					If UO.Life < Uo.Str/10 then
						UO.Print('А мы умираем!')
						return 0
					endif
				until UO.InJournal("no fish|нету рыбы|anything|в другом месте|далеко|вытащили удочку") || UO.Dead()
				For i=1 To 4
					UO.FindType( Fish[i] )
					If UO.FindCount() > 0 Then
						UO.WaitTargetObject( 'finditem' )
						UO.UseType( knife )
						Wait( 500 )
						UO.FindType( Steak )
						If UO.FindCount() > 0 Then
							UO.MoveItem( 'finditem', '0' , Bag )
							wait( 500 )
						Endif
					Endif
				Next
			endif
		next
	next
	UO.Print(" = Вся рыба в квадрате поймана = ")
	UO.Sound(100)
	return 0
end sub
Sub FishTiles(X,Y)
	var j
	if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then
		for j=6038 to 6066
			if UO.PrivateGetTile(X, Y, -1, j, j) then
				return j
			end if
		next
	end if
	return 0; No Harvest Tiles
end sub
if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then ; <- ВОТ ТУТ как раз и перечислены ВСЕ возможные для ловли тайлы

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 11:27:46
by necroic
Скажите, я так понимаю, что функция UO.PrivateGetTile проверяет входит ли номер тайла, указанного в координатах в диапазон заданных значений, а может ли она выдать мне номер этого тайла? Она же проверяет вхождение использую переменные номера моего тайла и диапазона?

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 12:22:19
by Mirage
непонятно зачем конечно но будет чтото навроде этого:

Code: Select all

sub main()
	VAR X, Y, i, MaxRange = 6, MaxVes = 620
        uo.textclear()
	For Y = -MaxRange to MaxRange
		for X = -MaxRange to MaxRange
			if TestTiles(UO.GetX()+X, UO.GetY()+Y) then
				uo.textopen()
				UO.textPrint(TestTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
			Endif
		next
	Next
end sub
Sub TestTiles(X,Y)
	var j
	if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then ; тайлы воды
		for j=6038 to 6066
			if UO.PrivateGetTile(X, Y, -1, j, j) then
				return j
			end if
		next
	end if
	return 0
end sub
Или вот так, универсальная но сцуко медленная:

Code: Select all

sub main()
	VAR X, Y, i, MaxRange = 6, MaxVes = 620
        uo.textclear()
	For Y = -MaxRange to MaxRange
		for X = -MaxRange to MaxRange
			if TestTiles(UO.GetX()+X, UO.GetY()+Y) then
				uo.textopen()
				UO.textPrint(TestTiles(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
			Endif
		next
	Next
end sub
Sub TestTiles(X,Y)
	var j
	if UO.PrivateGetTile(X, Y, -1, 1000, 10000) then ; тайлы воды
		for j=1000 to 10000
			if UO.PrivateGetTile(X, Y, UO.GetZ(), j, j) then
				return j
			end if
		next
	end if
	return 0
end sub
Таким образом кстати можно собирать тайлы пола в пещерах и деревья. Нужно только задать верные границы тайлов.

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 13:17:08
by necroic
Почему то оба примера ничего мне не возвращают, запускал, правда, как написано, без доработок.

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 15:10:44
by Mirage
приват будет работать если у тебя инжект версии 702.11 и выше. В версии 5** команда не работает.
После запуска должен открываться текстовый лог и там будет столбик вида
тайл x y z
В первом случае скрипт ищет рядом только воду (если на мосту или под камнем спрятана - найдет)
второй ищет... а хз что он ищет :) если рядом есть дерево - будет дерево, если камень - будет камень... Если задать счет от 0 до 10К то выкидывает тайлы с номером 50-100 хз почему.

Re: Waittargettile, проблема с номером тайла.

Posted: 2011-03-30 15:38:50
by necroic
Понял, спасибо, буду пробовать!