Code:
var FindDistance=20
var TargetNextDepth=1 #На сколько углубляться в поисковик таргета? (Рекурсия)
var AutoRefresh=1 #Автообновление листа
sub autostart()
#Твой код автостарта...
InitGlobals()
#Это для более шустрой работы скрипта
#Можно проверять глобалки из самого скрипта на таргет,
#но смысл? лишнее время на обработку кода
end sub
sub TargetNext()
TargetNext(AutoRefresh,TargetNextDepth)
wait(50)
end sub
Sub InitGlobals()
uo.SetGlobal('FoundPlayers','0')
uo.SetGlobal('FoundPointer','0')
end sub
Sub FriendListIgnore()
uo.Ignore('self')
#Вписать ID чаров для игнора
#Можно заменить на массив ИДшек, как удобнее...
uo.Ignore('0x003BBE99')
uo.Ignore('0x004EDB32')
uo.Ignore('0x00569E31')
end sub
Sub TargetNext(Refresh,Recurse)
dim Types[2]
Types[0]='0x0190'
Types[1]='0x0191'
var i=0,ID=''
var FoundPlayers=val(uo.GetGlobal('FoundPlayers'))
var FoundPointer=val(uo.GetGlobal('FoundPointer'))
if FoundPlayers>0 then
if FoundPointer>=FoundPlayers then
uo.Print('End of found list. Refresh list.')
InitGlobals() #Сброс вектора объектов при достижении конца
if Recurse>0 then
TargetNext(0,Recurse)
endif
return
endif
if Refresh then
uo.SetGlobal('FoundPointer','0')
ID=uo.GetGlobal('FoundPlayersArray['+str(FoundPointer)+']')
uo.IgnoreReset()
FriendListIgnore()
uo.Set('finddistance',str(FindDistance))
FoundPlayers=0
for i=0 to 1
uo.FindType(Types[i],-1,'ground')
while uo.FindCount()
if uo.GetSerial('finditem')==ID then
uo.SetGlobal('FoundPointer',str(FoundPlayers))
endif
uo.SetGlobal('FoundPlayersArray['+str(FoundPlayers)+']',uo.GetSerial('finditem'))
FoundPlayers=FoundPlayers+1
uo.Ignore('finditem')
uo.FindType(Types[i],-1,'ground')
wend
next
uo.SetGlobal('FoundPlayers',str(FoundPlayers))
TargetNext(0,Recurse)
return
endif
for i=FoundPointer to FoundPlayers-1
ID=uo.GetGlobal('FoundPlayersArray['+str(i)+']')
if uo.GetDistance(ID)<=FindDistance then
uo.Attack(ID)
uo.SetGlobal('FoundPointer',str(i+1))
return
endif
next
uo.Print('End of found list. Refresh list.')
InitGlobals() #Сброс вектора объектов при достижении конца
if Recurse>0 then
TargetNext(0,Recurse)
endif
else
uo.IgnoreReset()
FriendListIgnore()
uo.Set('finddistance',str(FindDistance))
FoundPlayers=0
for i=0 to 1
uo.FindType(Types[i],-1,'ground')
while uo.FindCount()
uo.SetGlobal('FoundPlayersArray['+str(FoundPlayers)+']',uo.GetSerial('finditem'))
FoundPlayers=FoundPlayers+1
uo.Ignore('finditem')
uo.FindType(Types[i],-1,'ground')
wend
next
uo.SetGlobal('FoundPlayers',str(FoundPlayers))
if Recurse>0 then
TargetNext(0,Recurse-1)
endif
endif
end sub
Вот что я когда-то писал, без участия клиентского макроса. Насчет работоспособности не буду ничего говорить, писал не себе, но в период тестов глюков не было, чем всё кончилось - не знаю.
Может поможет чем-то, посмотреть как реализован поиск.