Правка скрипта на TargetNext из Клиента.

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Mimiks
Posts: 23
Joined: 2006-02-15 05:03:45
Contact:

Правка скрипта на TargetNext из Клиента.

Post by Mimiks »

Здаравия желаю. Имеется скрипт, суть скрипта:
Юзаем кнопку забинженую в клиенте на TargetNext, проверяем статус цели.
Проверяем не NPC ли цель, если цель Нпс, то выводим сообщение о пропуске Нпс и юзаем кнопку из клиента еще раз.
Если же цель не Нпс, то выводим сообщение что цель зафиксирована и запускаем скрипт AttackStat():
В этом скрипте делает атаку по последнему статусу.
Проблема в том что в скриптинге не силен. Не могу решить повторение нажатия кнопки в местах отмеченных ***.
Буду очень благодарен за помощь. Возможно есть какие то пожелания или дополнения.
Заранее благодарю.

Code: Select all

Sub tnext() # Юзаем кнопку TargetNext из клиента, проверяем не НПС ли в таргете.
   # start: ***
   uo.press(45)
   wait(500)
   uo.set('lasttarget','laststatus')
 
   if uo.isNPC('laststatus') then
      uo.print('skip NPC...')
   #  goto start ***
   else
      uo.print('targeting ok')
      wait(100)
      AttackStat()
   end if
   AttackStat()
end sub
###
###
Sub AttackStat() # Атаковать по последнему статусу
   if uo.GetNotoriety("laststatus")>2 then
      uo.print("attaking murderer "+uo.GetName("laststatus"))
      uo.attack("laststatus")
      #uo.cast("Strike","laststatus")
   end if   
end sub
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Правка скрипта на TargetNext из Клиента.

Post by Juicy Fruit »

Code: Select all

uo.isNPC
Оно определяет не НПС/Игрок, а Существо/Предмет.
Если ты все 'uo.isNPC' пропустишь - у тебя не останется чаров для выбора.
Mimiks
Posts: 23
Joined: 2006-02-15 05:03:45
Contact:

Re: Правка скрипта на TargetNext из Клиента.

Post by Mimiks »

Juicy Fruit wrote:

Code: Select all

uo.isNPC
Оно определяет не НПС/Игрок, а Существо/Предмет.
Если ты все 'uo.isNPC' пропустишь - у тебя не останется чаров для выбора.

Хмм. А есть идеи через какую команду реализовать проверку на Нпс ???
Mimiks
Posts: 23
Joined: 2006-02-15 05:03:45
Contact:

Re: Правка скрипта на TargetNext из Клиента.

Post by Mimiks »

Хорошо можно пойти другим путем я так понимаю можно не чекать Нпс или Нпс а скажем : uo.GetNotoriety("laststatus")<2 и если Статус больше 2 то AttackStat() а если меньше то проигрывало бы uo.press(45). Как реализовать подскажите.

Code: Select all

Sub tnext()    

#    uo.GetNotoriety("laststatus")<2  then  *** Куда ?
   # if  ***  then  # Оно надо ?
      uo.press(45)                          #
      wait(500)                              # Надо что бы эта чать повторялась если uo.GetNotoriety("laststatus")<2
      uo.set('lasttarget','laststatus')  #

   # else *** ?

   # end if *** ?

      uo.print("Target "+uo.GetName("laststatus")) #
      wait(100)                                                # А вот эта часть должна проигрываться если uo.GetNotoriety("laststatus")>2
   AttackStat()                                              #

end sub
###
###
Sub AttackStat()
   if uo.GetNotoriety("laststatus")>2 then
      uo.print("attaking murderer "+uo.GetName("laststatus"))
      uo.attack("laststatus")
      #uo.cast("Strike","laststatus")
   end if   
end sub


Дайте подсказку хоть чер что реализовать ? repeat - until ? while - wend ?
Тоесть вся суть тыкаем кнопку через уо клиент на Таргет некст если статус таргета <2, тоесть (Серый, криминал, вражеская гильда, мурдер), то еще раз прокликиваем кнопку в клиенте.
А если же статус таргета >3 то
uo.print("Target "+uo.GetName("laststatus"))
wait(100)
AttackStat()
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Правка скрипта на TargetNext из Клиента.

Post by Juicy Fruit »

Code: Select all

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
Вот что я когда-то писал, без участия клиентского макроса. Насчет работоспособности не буду ничего говорить, писал не себе, но в период тестов глюков не было, чем всё кончилось - не знаю.
Может поможет чем-то, посмотреть как реализован поиск.
Mimiks
Posts: 23
Joined: 2006-02-15 05:03:45
Contact:

Re: Правка скрипта на TargetNext из Клиента.

Post by Mimiks »

Вот что я когда-то писал, без участия клиентского макроса. Насчет работоспособности не буду ничего говорить, писал не себе, но в период тестов глюков не было, чем всё кончилось - не знаю.
Может поможет чем-то, посмотреть как реализован поиск.

Спс попробую разобраться.
Mimiks
Posts: 23
Joined: 2006-02-15 05:03:45
Contact:

Re: Правка скрипта на TargetNext из Клиента.

Post by Mimiks »

Juicy Fruit wrote:Вот что я когда-то писал, без участия клиентского макроса. Насчет работоспособности не буду ничего говорить, писал не себе, но в период тестов глюков не было, чем всё кончилось - не знаю.
Может поможет чем-то, посмотреть как реализован поиск.

Как я понял этот скрипт ищет вокруг существ по типу. Но проблема в том что под этот тип подпадают и Нпс и синие игроки. И он сразу атачит. Для пк может вполне сносно, но не для добропорядочных игроков. Как запилить сюда еще проверку на карму цели. по типу

Code: Select all

if uo.GetNotoriety("laststatus")>2 then
      uo.print("attaking murderer "+uo.GetName("laststatus"))
      uo.attack("laststatus")

И еще так же проблема в том что этот скрипт как я понял ищет только тип игроков - тоесть всякие монстры и прочее под этот тип не подпадают. С одной стороны хорошо - так как заточено под ПвП. С другой столоны было бы прикольно запилить сюда еще и мобов.
Хотя опять же если бы работало на ура чисто для пвп тоже было бы знатно. Тогда можно было бы для пвп использовать этот скрипт а для ПвЕ использовать руки + этот скрипт

Code: Select all

Sub AttackStat()
   # uo.press(45)
   Wait(100)
   if uo.GetNotoriety("laststatus")>2 then
      uo.print("attaking murderer "+uo.GetName("laststatus"))
      uo.attack("laststatus")
      #uo.cast("Strike","laststatus")
   end if   
end sub
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Правка скрипта на TargetNext из Клиента.

Post by Juicy Fruit »

Для проверки на синего используй

Code: Select all

uo.GetNotoriety("finditem")


Если желаешь искать всё живое

Code: Select all

uo.FindType(-1, -1, 'ground')
if uo.findcount() and uo.isnpc('finditem') then
нашлось что-то живое
endif
Post Reply