Написал скрипт (но руки видимо из попы)

Ask for help

Moderators: Murderator+, Murderator

SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Добрый день, написал скрипт (второй за всю жизнь) и он не работает.
Смысл такой - когда чар видит, что у оппонента по спарингу хп меньше половины - выключает вар, как увидит что хп стало полным - включает вар и атакует. Прошу, пожалуйста, проверьте где ошибка в скрипте.

Code: Select all

sub WarOffHP()
  While UO.Life > 0
    While uo.getHP('0x000159FE') < uo.getMaxHP('0x000159FE')/2 then
      If not uo.warmode(false) then
        uo.warmode(false)
        wait(500)
      Else
        wait(500)
      Endif
    wend
    wait(500)
    While uo.getHP('0x000159FE') = uo.getMaxHP('0x000159FE') then
      If not uo.warmode(true) then
        uo.warmode(true)
        wait(300)
        uo.attack('0x000159FE')
      Else
        wait(500)
      Endif
    Wend
  Wend
endsub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

Скрипт у тебя в принципе написан правильно. Ряд мелких косметических ошибок.

Code: Select all

sub WarOffHP()
  While UO.Life > 0 ; можно написать   while not uo.dead()
    While uo.getHP('0x000159FE') < uo.getMaxHP('0x000159FE')/2 ;  then не нужен
      If not uo.warmode(false) then
        uo.warmode(false)
        wait(500)
      Else
        wait(500)
      Endif
    wend
    wait(500)
    While uo.getHP('0x000159FE') == uo.getMaxHP('0x000159FE') ;  then не нужен, в условии ставится "==" ,а не "=", которое присваивает значение.
      If not uo.warmode(true) then
        uo.warmode(true)
        wait(300)
        uo.attack('0x000159FE')
      Else
        wait(500)
      Endif
    Wend
  Wend
endsub
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Спасибо. Скрипт запускается, но работать не хочет. Чар и вар включает и атакует вроде - бы, но бить не бьет, просто стоит около него, даже не знаю почему так.

выведи табличку жизней своего противника и свою табличку, на свою через запятая инфо укажы и вставь код ('0x000159FE') который будет аместь етого в строку номер 2. Добей до тех жизней которые будет вырубать вар противника, и такимжемакаром через запятая инфо полученый код введи в строку номер один..и так во всем скрипте


Вот такое посоветовали, вы не знаете что это значит? xD
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

А ну в принципе логично :)) Я тормознул на математике.
У тебя условия выглядят примерно вот так:

Code: Select all

до тех пор пока жизни (100) < жизни/2 (50)
ждем
дотех пор пока жизни (100)==жизням (100)
атакуем


а что происходит когда 50<жизни<100?
то-есть если предположить что на чарах находится какойто регенерирующий жизни предмет то более правильно будет как то так:

Code: Select all

sub WarOffHP()
var tar = '0x000159FE'
   While not uo.dead()
      if uo.getHP( tar ) >= uo.getMaxHP( tar )  then
         uo.attack( tar )
      endif
      if uo.getHP( tar ) <= (uo.getMaxHP( tar )/2) then
         If not uo.warmode(false) then
            uo.warmode(false)
         Endif
      endif
      wait(500)
   Wend
endsub

sub targ() ; запустить на кукле одетой в реген.
   While not uo.dead()
      If not uo.warmode(false) then
            uo.warmode(false)
      endif
      wait(500)
   Wend
endsub


полчаса мои два чара качали боевые и тактику ;)
На втором чаре можно повесить постоянный отхил, либо хилить его дерущимся чаром - будет расти хилинг.
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Code: Select all

sub WarOffHP()
var tar = '0x000159FE'
   While not uo.dead()
      if uo.getHP( tar ) >= uo.getMaxHP( tar )  then
         uo.attack( tar )
      endif
      if uo.getHP( tar ) <= (uo.getMaxHP( tar )/2) then
         If not uo.warmode(false) then
            uo.warmode(false)
         Endif
      endif
      wait(500)
   Wend
endsub

Спасибо большое,скрипт работает. только у меня он постоянно атакует пока равно максимальному )))), т.е. каждые пол секунды высвечивается ник грушы с боку, как только хп ниже максимального, перестает постоянно атаковать. как бы сделать чтобы он только один раз отаковал когда хп становится максимальным?

Code: Select all

sub targ() ; запустить на кукле одетой в реген.
   While not uo.dead()
      If not uo.warmode(false) then
            uo.warmode(false)
      endif
      wait(500)
   Wend
endsub

А мы не с одного сервера? Я так понимаю у вас тоже у "куклы" автоматически включается вар :) И я еще вчера утром допер до такого скрипта 8) только немного другой он у меня.

Code: Select all

sub WarOff()
  While UO.Life > 0
    If not uo.warmode(false) then
      uo.warmode(false)
      wait(500)
    Else
      wait(500)
    Endif
  Wend
endsub

И интересует почему вот допустим:

Code: Select all

If not uo.warmode(false) then
uo.warmode(false)

вот так вот работает, а вот так:

Code: Select all

If uo.warmode(true) then
uo.warmode(false)

не работает. точнее работает, но он и выключает вар когда в варе, и включает его когда вара нету.
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

И еще... как при помощи инжекта узнать есть в руке оружие или нет. Нужно для того чтобы, когда оружие сломается, чар одевал новое :)
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by ZeroDX »

SpaceBunny wrote:И еще... как при помощи инжекта узнать есть в руке оружие или нет. Нужно для того чтобы, когда оружие сломается, чар одевал новое :)


С запозданием, но все же

Code: Select all

If UO.ObjAtLayer('Rhand') <> t_Weapon then
        If t_Weapon == '0' then
          UO.UnEquip('Rhand')
          Wait(1000)
         else
          If UO.Count(t_Weapon) then
            UO.FindType(t_Weapon, -1, 'my')
            If UO.FindCount() then
              UO.Equip('Rhand', 'finditem')
              Wait(1000)
             else
              UO.Print('Ошибка 2')
              UO.Print('Скрипт продолжает работу')
            Endif
           else
            UO.FindType(t_Weapon, -1, id_Container)
            If UO.FindCount() then
              CheckLag()
              UO.MoveItem('finditem', -1, 'backpack')
              Wait(1000)
              UO.Equip('Rhand', 'finditem')
              Wait(1000)
             else
              UO.Print('В контейнере ' + id_Container + ' закончилось оружие для прокачки умения ' + Skills[a])
              UO.Print('Скрипт продолжает работу')
            Endif
          Endif
        Endif
      Endif
Endif


Ответ в первой строке,а дальше пример как использовать
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

ZeroDX
Как прочитать эту строчку?

Code: Select all

If UO.ObjAtLayer('Rhand') <> t_Weapon then

Если в правой руке нету оружия, то?
Или если в правой руке есть оружие, то?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

If UO.ObjAtLayer('Rhand') <> t_Weapon then
означает
если объект в правой руке не равет заданному типу оружия тогда...

Запись немного не верна. Правильнее было бы записать:

Code: Select all

if uo.GetGraphic(uo.ObjAtLayer('Rhand')) <> t_Weapon then

если тип объекта в правой руке не равен заданному типу оружия

вверху треба прописать
var t_Weapon = 'тип оружия'

ЛИБО как вариант чтобы совсем хорошо было прописать так:

Code: Select all

var t_Weapon = uo.GetGraphic(uo.ObjAtLayer('Rhand')) 


тогда скрипт ЗАПОМНИТ какое оружие было у тебя в руке на момент запуска и будет искать его в сундуке чтобы надеть в случае если у тебя не будет в руке заданного оружия :shock:

:lol:
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by ZeroDX »

А ведь действительно не верна. Написал примерно месяц назад, так ни разу и не тестировал.
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Спасибо! Сделал так, работает на ура :)

Только вот вопрос. У меня при одевании оружия, вылетает таргет. есть функция для отмены таргета? uo.CancelTarget() работать не хочет :(
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Re: Написал скрипт (но руки видимо из попы)

Post by GAUHAR »

Code: Select all

   if UO.Targeting() then
      UO.Say(chr(27))
   endif
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

отмена курсора-прицела:
uo.say(chr(27))
ВОЗМОЖНО но маловероятно
uo.msg(chr(27))
опередили :mrgreen:
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Code: Select all

sub oryj()
var t_Weapon = '0x0F52'
  while not uo.dead ()
    if uo.GetGraphic(uo.ObjAtLayer('Rhand')) <> t_Weapon then
      uo.usetype('0x0F52')
      wait(500)
      uo.Say(chr(27))
    endif
    wait(4000)
  wend
wait(500)
endsub


Спасибо, все работает. Вот так вот сейчас выглядит мой скрипт.
Вопрос такой, можно ли заменить вот это:

Code: Select all

uo.usetype('0x0F52')
wait(500)
uo.Say(chr(27))


на одну команду, чтобы оружие просто одевалось? Допустим uo.odetoryjie('0x0F52').
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by ZeroDX »

Code: Select all

UO.FindType(t_Weapon, -1, 'backpack')
If UO.FindCount() then
  UO.Equip('Rhand', 'finditem')
  Wait(500)
  else
  UO.Print('В бэкпаке персонажа отсутствует необходимое оружие :Р')
  Return
Endif
Last edited by ZeroDX on 2011-05-20 19:24:21, edited 1 time in total.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

uo.Equipt('Rhand',t_Weapon) ; одеть тип оружия.

Если в паке больше 1 экземпляра оружия то

Code: Select all

UO.FindType(t_Weapon, -1, 'backpack')
If UO.FindCount() then
  UO.Equip('Rhand', 'finditem')
  Wait(500)
  else
  UO.Print('В бэкпаке персонажа отсутствует необходимое оружие :Р')
  Return
Endif


=
uo.Equipt('Rhand',t_Weapon)

:wink:
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by ZeroDX »

Mirage wrote:uo.Equipt('Rhand',t_Weapon)

Ну или так :oops:
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Scripts Writer »

чтобы оружие просто одевалось? Допустим uo.odetoryjie('0x0F52').
:D
SpaceBunny
Posts: 11
Joined: 2011-05-17 17:53:33

Re: Написал скрипт (но руки видимо из попы)

Post by SpaceBunny »

Ох, теперь у меня новая проблема. Решил податься в горе-минера. Но вот беда, скрипт не очень хороший. Я понимаю что тут никто за меня его дописывать не будет, поэтому прошу дать мне хотя-бы наводку что и как делать.
Скрипт работает так - копает, ходит по шахте, когда макс. вес - относит в сундук около шахты, и обратно копать.
А проблема в том, что когда он отнес в сундук, и идет копать, то копает он не с того места где остановился, а с начала. Да и когда он приходит на начало, стоит еще минуты две ничего не делая.

Code: Select all

Sub tohome()
Go_To(3662, 2181, 0) # Как пройти к сундуку из шахты (А)
Go_To(3662, 2204, 0) # Как пройти к сундуку из шахты (В)
wait(500)
unloadore()#Выгружаемся
wait(500)
Go_To(3662, 2204, 0) # Как пройти в шахту от сундука (В)
Go_To(3662, 2181, 0) # Как пройти в шахту от сундука (А)
Go_To(3662, 2181, 0) # Это первая точка копания (А)
wait(500)
end sub

Sub unloadore()
VAR TempX,TempY,i,Exit, Exit1, ConTainer, j
VAR Index=14
DIM Ore[5]
TempX=UO.GetX()
TempY=UO.GetY()
Ore[0]=0x19B9
Ore[1]=0x19B7
Ore[2]=0x19BA
Ore[3]=0x19B8
Ore[4]=0x0F29
For i=0 to 4
Exit=0
repeat
UO.FindType(Ore[i])
if UO.GetQuantity('finditem')>0 then
Exit1=0
j=0
UO.MoveItem('finditem',0,"0x4003BADC")#ID сундука,куда складывать руду
wait(1000)
Else
Exit=1
endif
until Exit==1
Next
end sub
sub main()
VAR i
while 1==1

Go_To(3662, 2181, 0)#Это первая точка копания
min()
Go_To(3659, 2175, 0)#Вторая точка копания
min()
Go_To(3659, 2172, 0)#И.Т.Д.
min()
Go_To(3659, 2169, 0)
min()
Go_To(3659, 2166, 0)
min()
   
Go_To(3659, 2163, 0)
min()
Go_To(3659, 2160, 0)
min()
Go_To(3659, 2157, 0)
min()
Go_To(3656, 2155, 0)
min()
Go_To(3656, 2158, 0)
min()

Go_To(3656, 2161, 0)
min()
Go_To(3656, 2164, 0)
min()
Go_To(3656, 2167, 0)
min()
Go_To(3656, 2170, 0)
min()
Go_To(3656, 2173, 0)
min()
   
Go_To(3656, 2176, 0)
min()
Go_To(3656, 2179, 0)
min()
Go_To(3653, 2180, 0)
min()
Go_To(3653, 2177, 0)
min()
Go_To(3653, 2174, 0)
min()

wend
end sub

Sub min()
var x,y,z
VAR LastTimer
VAR ms1 = "There is nothing here to mine for."
VAR ms2 = "You can't use"
VAR ms3 = "Вы переместили"
VAR ms4 = "You loosen some rocks"
VAR ms5 = "location"
VAR ms6 = "Try mining"
VAR ms7 = "You can't see that"
VAR ms8 = "You stop"
VAR ms9 = "That is too"
VAR ms10= "Вы не смогли"
VAR ms11= "You cannot mine"
z=UO.GetZ("self")
for y=-2 to 2
for x=-2 to 2
UO.Print(str(x)+" "+str(y))
if uo.weight > 400 then #Вес при котором идем домой
tohome()
endif
repeat
uo.deletejournal()
UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z))
UO.UseType('0x0E85')
LastTimer=UO.Timer()
repeat
wait(300)
until UO.InJournal(ms1) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms7) OR  UO.InJournal(ms9) OR  UO.InJournal(ms10) OR  UO.InJournal(ms11) OR UO.Timer()>LastTimer+200
if UO.InJournal(ms3) then
else
endif
until UO.InJournal(ms2) OR UO.InJournal(ms1) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR  UO.InJournal(ms9) OR  UO.InJournal(ms11)
next
next
end sub

Sub Step(x,y,mx,my,forstep)
if uo.GetX('self') <> x then
if uo.GetY('self') <> y then
if mx<0 then
if my<0 then
uo.Press(40)
wait(forstep)
else
uo.Press(39)
wait(forstep)
end if
else
if my<0 then
uo.Press(37)
wait(forstep)
else
uo.Press(38)
wait(forstep)
end if
end if
else
if mx<0 then
uo.Press(34)
wait(forstep)
else
uo.Press(36)
wait(forstep)
end if
end if
else
if my<0 then
uo.Press(35)
wait(forstep)
else
uo.Press(33)
wait(forstep)
end if
end if
end sub

Sub Go_To(x,y,abc)
var mx,my,fx,fy
var xx=x
var yy=y
var DistX=0
var DistY=1
var forstep=300
repeat
mx=uo.GetX('self')-x
my=uo.GetY('self')-y
fx=mx+x
fy=my+y
Step(xx,yy,mx,my,forstep)
until x==fx+DistX && y==fy+DistY || x==fx-DistX && y==fy+DistY || x==fx+DistX && y==fy-DistY || x==fx-DistX && y==fy-DistY || x==fx && y==fy
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Написал скрипт (но руки видимо из попы)

Post by Mirage »

ты почти сделал это сам - не хватало только 1 строки.
+ у тебя маленькая ошибка/ неточность в Sub min()
Проверяй внимательно все if then endif. Там чего то не хватает, я не могу править - скрипт модифицирован под тебя.

Code: Select all

Sub tohome()
   VAR TempX=UO.GetX()
   VAR TempY=UO.GetY()
   Go_To(3662, 2181, 0) # Как пройти к сундуку из шахты (А)
   Go_To(3662, 2204, 0) # Как пройти к сундуку из шахты (В)
   wait(500)
   unloadore()#Выгружаемся
   wait(500)
   Go_To(3662, 2204, 0) # Как пройти в шахту от сундука (В)
   Go_To(3662, 2181, 0) # Как пройти в шахту от сундука (А)
   Go_To(3662, 2181, 0) # Это первая точка копания (А)
   Go_To(TempX, TempY, 0) # переходим к последней точке копания.
   wait(500)
end sub
Sub unloadore()
   VAR i,Exit, Exit1, ConTainer, j
   VAR Index=14
   DIM Ore[5]
   Ore[0]=0x19B9
   Ore[1]=0x19B7
   Ore[2]=0x19BA
   Ore[3]=0x19B8
   Ore[4]=0x0F29
   For i=0 to 4
      Exit=0
      repeat
         UO.FindType(Ore[i])
         if UO.GetQuantity('finditem')>0 then
            Exit1=0
            j=0
            UO.MoveItem('finditem',0,"0x4003BADC")#ID сундука,куда складывать руду
            wait(1000)
         Else
            Exit=1
         endif
      until Exit==1
   Next
end sub
sub main()
   VAR i
   while 1==1
      Go_To(3662, 2181, 0)#Это первая точка копания
      min()
      Go_To(3659, 2175, 0)#Вторая точка копания
      min()
      Go_To(3659, 2172, 0)#И.Т.Д.
      min()
      Go_To(3659, 2169, 0)
      min()
      Go_To(3659, 2166, 0)
      min()
      
      Go_To(3659, 2163, 0)
      min()
      Go_To(3659, 2160, 0)
      min()
      Go_To(3659, 2157, 0)
      min()
      Go_To(3656, 2155, 0)
      min()
      Go_To(3656, 2158, 0)
      min()
      Go_To(3656, 2161, 0)
      min()
      Go_To(3656, 2164, 0)
      min()
      Go_To(3656, 2167, 0)
      min()
      Go_To(3656, 2170, 0)
      min()
      Go_To(3656, 2173, 0)
      min()
      
      Go_To(3656, 2176, 0)
      min()
      Go_To(3656, 2179, 0)
      min()
      Go_To(3653, 2180, 0)
      min()
      Go_To(3653, 2177, 0)
      min()
      Go_To(3653, 2174, 0)
      min()
   wend
end sub
Sub min()
   var x,y,z
   VAR LastTimer
   VAR ms1 = "There is nothing here to mine for."
   VAR ms2 = "You can't use"
   VAR ms3 = "Вы переместили"
   VAR ms4 = "You loosen some rocks"
   VAR ms5 = "location"
   VAR ms6 = "Try mining"
   VAR ms7 = "You can't see that"
   VAR ms8 = "You stop"
   VAR ms9 = "That is too"
   VAR ms10= "Вы не смогли"
   VAR ms11= "You cannot mine"
   z=UO.GetZ("self")
   for y=-2 to 2
      for x=-2 to 2
         UO.Print(str(x)+" "+str(y))
         if uo.weight > 400 then #Вес при котором идем домой
            tohome()
         endif
         repeat
            uo.deletejournal()
            UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z))
            UO.UseType('0x0E85')
            LastTimer=UO.Timer()
            repeat
               wait(300)
            until UO.InJournal(ms1) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms7) OR  UO.InJournal(ms9) OR  UO.InJournal(ms10) OR  UO.InJournal(ms11) OR UO.Timer()>LastTimer+200
            if UO.InJournal(ms3) then
            else
            endif
         until UO.InJournal(ms2) OR UO.InJournal(ms1) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR  UO.InJournal(ms9) OR  UO.InJournal(ms11)
      next
   next
end sub
Sub Step(x,y,mx,my,forstep)
   if uo.GetX('self') <> x then
      if uo.GetY('self') <> y then
         if mx<0 then
            if my<0 then
               uo.Press(40)
               wait(forstep)
            else
               uo.Press(39)
               wait(forstep)
            end if
         else
            if my<0 then
               uo.Press(37)
               wait(forstep)
            else
               uo.Press(38)
               wait(forstep)
            end if
         end if
      else
         if mx<0 then
            uo.Press(34)
            wait(forstep)
         else
            uo.Press(36)
            wait(forstep)
         end if
      end if
   else
      if my<0 then
         uo.Press(35)
         wait(forstep)
      else
         uo.Press(33)
         wait(forstep)
      end if
   end if
end sub
Sub Go_To(x,y,abc)
   var mx,my,fx,fy
   var xx=x
   var yy=y
   var DistX=0
   var DistY=1
   var forstep=300
   repeat
      mx=uo.GetX('self')-x
      my=uo.GetY('self')-y
      fx=mx+x
      fy=my+y
      Step(xx,yy,mx,my,forstep)
   until x==fx+DistX && y==fy+DistY || x==fx-DistX && y==fy+DistY || x==fx+DistX && y==fy-DistY || x==fx-DistX && y==fy-DistY || x==fx && y==fy
end sub
Post Reply