Yoko

All sides of Injection
It is currently 2025-11-11 07:06:20

All times are UTC+02:00




Post new topic  Reply to topic  [ 13 posts ] 
Author Message
PostPosted: 2007-04-18 12:18:13 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
Если меня аттачили и убили, то после реса чар помнит обидчика. Как его забыть и простить?
Возможно использовать это??
Code:
................
uo.ignore('0x0190')
uo.ignore('0x0191')
uo.ignorereset()
uo.CancelTarget()
.................





Да а вот еще. У меня чар на скрипте идет по длинному коридору. Из пункта А в пункт Б. В коридоре много проходов в которые заходить нежелательно. Если коридор заблокирован(чары, мобы, стенка) то чар может туда свернуть. Как добится того чтобы чар эти проходы считал стеной и не лез туда? Ширина прохода 1 тайл. Использую ходилку по типу GoToTile( 1111, 2222, 1, False ). Ниже сама ходилка.

Code:
======|проход|============|проход|=============
А                                         Б
==============|проход|=======================


Code:
Sub GoToTile( OX, OY, N, S ) 
   VAR myx, myy, MD, J
   VAR Lx1, Ly1
   VAR Lx2, Ly2
   VAR Sx, Sy
   VAR T
   VAR Des = N
   VAR MoveDelay = 100
   J = 1
   MD = MoveDelay * 1.5
   myx = uo.getx()
   myy = uo.gety()
   MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False)
   Sx = 0
   Sy = 0
   Lx1 = uo.getx() / 2
   Ly1 = uo.gety() / 2
   Lx2 = Lx1 / 2
   Ly2 = Ly1 / 2
   T = UO.Timer()
   If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then
      UO.Exec('exec PermResend')
   EndIf
   While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 )
      If ( (UO.Timer() - T) * 15 > MoveDelay ) Then
         T = UO.Timer()
         Lx2 = Lx1
         Ly2 = Ly1
         Lx1 = myx
         Ly1 = myy
         myx = uo.getx()
         myy = uo.gety()
      endIf
      MD=MoveDelay
      If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then
         MD = MD * 3 / GetDistance( ox, oy )
      EndIf
      wait(MD)
      If GetDistance( OX, OY ) > Des Then
         MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False)
      Else
         If S Then
            If GetDistance(OX,OY)<Des Then
               If GetDistance(OX,OY)<>0 Then
                  MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False)
               Else
                  MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
               EndIf
            EndIf
         EndIf
      EndIf
      If GetDistance(OX,OY)<>Des Then
         If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then
            If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then
               J=1
            EndIf
            J=J+1
            UO.Resend()
            Sx = uo.getx()
            Sy = uo.gety()
            Stun(ox,oy,J)
         EndIf
      EndIf
   Wend
   UO.Exec( 'terminate PermResend' )
endsub
;
; ============ MOVEONCE ===
; Процедура MoveOnce - хождение в определённую сторону
; Направления:
; Система направлений по клавишам Нумпада
; 8 = 1 | 2 = -1
; 9 = 2 | 1 = -2
; 6 = 3 | 4 = -3
; 3 = 4 | 7 = -4
;
; Такая система позволяет с лёгкостью получать направление, обратное
; данному...
;
Sub MoveOnce( Dir, Del, Rev )
   VAR Num
   Var MoveNumber = 1
   If Rev Then
      Num = MoveNumber + 1
   Else
      Num = MoveNumber
   EndIf
   If ( Num > 0 ) and ( Dir <> 0 ) Then
      If Dir == 1 Then
         UO.Press( 38, Num, Del )
      EndIf
      If Dir == 2 Then
         UO.Press( 33, Num, Del )
      EndIf
      If Dir == 3 Then
         UO.Press( 39, Num, Del )
      EndIf
      If Dir == 4 Then
         UO.Press( 34, Num, Del )
      EndIf
      If Dir == -1 Then
         UO.Press( 40, Num-1, Del )
      EndIf
      If Dir == -2 Then
         UO.Press( 35, Num, Del )
      EndIf
      If Dir == -3 Then
         UO.Press( 37, Num, Del )
      EndIf
      If Dir == -4 Then
         UO.Press( 36, Num, Del )
      EndIf
      If Rev Then
         If Dir <> -1 Then
            UO.Press( 40, 1, Del )
         EndIf
      EndIf
   EndIf
endsub
;
; ============== GETDIR ===
; Функция GetDir возвращает направление, по которому надо идти
; к координате
;
Sub GetDir( myx, myy, ox, oy )
   VAR I, J
   J = 0
   VAR X = ox - myx
   VAR Y = oy - myy
   I = GetQDir( Abs(X), Abs(Y) )
   If X >= 0 Then
      If Y >= 0 Then
         If I == 1 Then
            J = -2
         Else
            If I == 2 Then
               J = -1
            Else
               If I == 3 Then
                  J = 4
               EndIf
            EndIf
         EndIf
      Else
         If I == 1 Then
            J = 2
         Else
            If I == 2 Then
               J = 3
            Else
               If I == 3 Then
                  J = 4
               EndIf
            EndIf
         EndIf
      EndIf
   Else
      If Y >= 0 Then
         If I == 1 Then
            J = -2
         Else
            If I == 2 Then
               J = -3
            Else
               If I == 3 Then
                  J = -4
               EndIf
            EndIf
         EndIf
      Else
         If I == 1 Then
            J = 2
         Else
            If I == 2 Then
               J = 1
            Else
               If I == 3 Then
                  J = -4
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   RETURN J
endsub
;
; =============== GETQDIR ===
;
;
Sub GetQDir( x, y )
   VAR Ep = 0.172
   VAR J = 0
   If X == 0 Then
      J = 1
   Else
      If ( Y / X ) < Ep Then
         J = 3
      Else
         If ( X / Y ) < Ep Then
            J = 1
         Else
            J = 2
         EndIf
      EndIf
   EndIf
   RETURN J
endsub
;
; ============== GETDISTANCE ===
; Функция GetDistance возвращает расстояние до координат
; (как UO.GetDistance - до объекта)
;
; Почему так - потому что учим математику :)
;
Sub GetDistance( X, Y )
   VAR A, B, C
   A = abs( X - UO.GetX() )
   B = abs( Y - UO.GetY() )
   If A > B Then
      C = A
   Else
      C = B
   EndIf
   Return C
endsub
;
; ============= PERP ===
; Функция Perp возвращает направление, перпендикулярное введённому
;
Sub Perp( Dir )
   VAR D = Dir
   If Dir == 1 Then
      D = 3
   EndIf
   If Dir == 2 Then
      D = 4
   EndIf
   If Dir == 3 Then
      D = -1
   EndIf
   If Dir == 4 Then
      D = -2
   EndIf
   If Dir == -1 Then
      D = -3
   EndIf
   If Dir == -2 Then
      D = -4
   EndIf
   If Dir == -3 Then
      D = 1
   EndIf
   If Dir == -4 Then
      D = 2
   EndIf
   RETURN D
endsub
;
; =============== STUN ===
; Обход препятствий
;
Sub Stun( X, Y, N )
   VAR I
   VAR myx
   VAR myy
   VAR MoveDelay = 100
   myx = uo.getx()
   myy = uo.gety()
   For I=1 to N
      MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False)
   Next
   Wait(MoveDelay)
   UO.Resend()
   If (myx==uo.getx()) and (myy==uo.gety()) Then
      For I=1 to N
         MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False)
      Next
      Wait(MoveDelay)
      UO.Resend()
   EndIf
   If (myx==uo.getx()) and (myy==uo.gety()) Then
      For I=1 to N
         MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False)
      Next
      Wait(MoveDelay)
      Stun(x,y,N)
   EndIf   
endsub
;
; ============= ABS ===
; Убирает знак минуса в отрицательных числах
;
Sub abs( a )
   VAR b
   If a < 0 Then
      b = -a
   Else
      b = a
   endif
   return b
endsub
;
; ============== PERMRESEND ===
;
Sub PermResend()
   Var Mn = 9
   VAR MoveDelay = 100
   Repeat
      UO.Resend()
      Wait( MoveDelay * Mn )
   Until ( 1 > 2 )
endsub

_________________
Шард Антарес
Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 13:45:10 
Offline

Joined: 2006-03-10 00:19:11
Posts: 265
Location: http://drw.ru/
Code:
................
uo.ignore('0x0190')
uo.ignore('0x0191')
uo.ignorereset()
uo.CancelTarget()
.................

1. Параметр игнора - айди а не тип!
2. даже если бы тут был указан айди всё равно это не имеет смысла, ты игноришь когонибуть, и тут же после этого сбрасываешь игнор, смысл?
3. Чтото я не пойму смысла, что должно забыть клиент или скрипт? если скрипт то давай его сюда


Top
   
 Post subject:
PostPosted: 2007-04-18 13:53:51 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
Смысл чар бежит по координатам. Прибежал и ждет, на атаку отвечает атакой. Если умер, бежит ресатся. Проблема в том, что если по пути к мобам один из них меня бьет, то таргет на него. А нужно чтоб он отвечал мобам только когда на место прибежит. А не пытался аттачить когото далеко.
Code:
sub start()
VAR i
while i > 0
main()
wend
endsub

Sub main()
GoToTile( 5544, 1881, 1, False ) ; бежим к мобам
GoToTile( 5552, 1881, 1, False )
GoToTile( 5562, 1881, 1, False )
GoToTile( 5562, 1865, 1, False )
GoToTile( 5562, 1842, 1, False )

uo.ignore('0x0011') ; пытаемя забыть их
uo.ignore('0x001C')
uo.ignorereset()
uo.CancelTarget()

repeat ; стоим, если меня бьют, бью и я
wait(500)
until UO.Dead()

UO.WarMode(0)
GoToTile( 5562, 1864, 1, False ) ; бежим ресатся
GoToTile( 5562, 1881, 1, False )
GoToTile( 5551, 1881, 1, False )
GoToTile( 5543, 1881, 1, False )
GoToTile( 5537, 1881, 1, False )

While UO.Dead() ; ресаемся
UO.WarMode(0)
uo.usefromground('0x0420')
wait(500)
Wend

While uo.gethp()<150 ; ждем роста ХП
wait(500)
Wend

uo.ignore('0x0011') ; пытаемся забыть
uo.ignore('0x001C')
uo.ignorereset()
uo.CancelTarget()
endsub

_________________
Шард Антарес

Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 14:03:29 
Offline

Joined: 2006-03-10 00:19:11
Posts: 265
Location: http://drw.ru/
ignore - забывает только для команды findtype...

_________________
DRW - Glorior Belli
Image


Top
   
 Post subject:
PostPosted: 2007-04-18 14:06:23 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
тоесть можно оставить только это?
Code:
uo.CancelTarget()

Скрипт работает, но хочется грамотно =)
Спасибо.

_________________
Шард Антарес

Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 14:07:51 
Offline

Joined: 2006-03-10 00:19:11
Posts: 265
Location: http://drw.ru/
да и canceltarget там незачем, у тебя что есть какойто таргет когда ты прибегаешь?

_________________
DRW - Glorior Belli

Image


Top
   
 Post subject:
PostPosted: 2007-04-18 14:19:31 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
Есть. Меня убил этот моб, я реснулся но новых мобов не атакую,а аттачу того кто меня убил или кого я аттачил последнего. Поэтому когда прибегаю на место, то тупо стою и втыкаю, пока меня валят.

_________________
Шард Антарес

Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 14:24:04 
Offline

Joined: 2006-03-10 00:19:11
Posts: 265
Location: http://drw.ru/
Таргет - это прицел который появляется при использовании какогониубть скила/итема/магии или же посланный из инжи, команда canceltarget отменяет его, ты это не используешь в это скрипте - откуда у тебя будут братся таргеты? и к тому же наличия таргета в клиенте не отразится на атаке мобов... проблема скорее всего в другом

_________________
DRW - Glorior Belli

Image


Top
   
 Post subject:
PostPosted: 2007-04-18 14:28:32 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
Ну сначало чар просто тупо стоял и ждал пока его убьют.
А как вставил это:
Code:
uo.ignore('0x0011') ; пытаемя забыть их 
uo.ignore('0x001C')
uo.ignorereset()
uo.CancelTarget()

То он начал отвечать на атаку.
Возможно при атаке моба ловушка падает на него и после смерти чара на нем и остается? Непонял почему...

_________________
Шард Антарес

Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 14:33:46 
Offline

Joined: 2006-03-10 00:19:11
Posts: 265
Location: http://drw.ru/
ну хз, раз помогло оставь canceltarget, а может просто совпадение

_________________
DRW - Glorior Belli

Image


Top
   
 Post subject:
PostPosted: 2007-04-18 15:06:57 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Лудше напиши что твой скрипт должен делать, по пунктам, а то из вашего диалога я не много понял. Когда прибегаешь на место сделай поиск моба на расстоянии одного тайтла по типу, если их несколько видов используй массив, как только моб будет найден на расстоянии 1го тайтла записывай его ID, как моба который тебя атаковал + добавь предварительную проверку журнала на то что ты ему сразу не понравился как только он тебя увидел, имея его ID можешь его либо отправить в игнор при последующем поиске, либо убрать его из игнора.

Лично у меня uo.warmode() работает не так так надо, я предпочитаю использовать uo.exec('warmode 0'), не знаю на скок правильно, содрал из чьего-то скрипта на спарринг.

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

Чтобы твой чар не отвечал на атаки мобов пока бежит на место поставь uo.exec('warmode 0') в цикл во время хотьбы из пунткта А в пункт Б.

А вообще лудше когда прибегаешь на место, задай максимальную дистанцию поиска, перепиши ID всех мобов, подбеги к каждому и дай в лоб.


Last edited by Sanch on 2007-04-18 15:21:34, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2007-04-18 15:20:46 
Offline
User avatar

Joined: 2007-02-21 20:15:57
Posts: 479
Скрипт не претендует на лавры почета. Мобы агрессы, прибегая на место, я просто стою и жду пока сдохну отвечая на атаки. Все просто, а главное работает =) Тактика и реслинг прут потихоньку =)

_________________
Шард Антарес

Ururu


Top
   
 Post subject:
PostPosted: 2007-04-18 15:22:13 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
У тя там траблы с атаками были, ты их решил?

Ниже кусок моего скрипта на скупку регов, правда я его еще не тестил, но в теории все должно работать, чар рекольтся по руне, находит всех хуманоидов в радиусе 5 тайтлов, полходит к каждому с помощью ходилки go(x,y), закупает то что надо, тебе нужно то же самое, только с возвращение на место в котором изначально производился поиск + атака мобов когда подойдешь к нему + увеличить количество возможных целей, у меня их 3. Лишним для тебя тут еще является проверка наличия ПК в магазине.

Code:
sub CheckNPC() 
VAR a, x, y, vendor1, vendor2, vendor3, select = 1, done = 0, find = 0, name
uo.set('finddistance', '5')
uo.ignore('self', 'on')
DIM Chars[2]
Chars[0] = '0x0190' #тип игрока мужского пола#
Chars[1] = '0x0191' #тип игрока женского пола#
repeat
  for a = 0 to 1       
    uo.findtype(Chars[a], '-1', '1') 
    if uo.findcount() > 0 then
      if uo.getnotoriety('finditem') < 5 then
        if uo.getz('finditem') == uo.getz('self') then
          if select = 1 then
            vendor1 = uo.getserial('finditem')
            find = 1
          else
            wait(50)
          endif
          if select = 2 then
            vendor2 = uo.getserial('finditem')
            find = 2
          else
            wait(50)
          endif
          if select = 3 then
            vendor3 = uo.getserial('finditem')
            find = 3
          else
            wait(50)
          endif
          select = select + 1
          if select > 3 then
            done = 1
          else
            wait(50)
          endif
        else
          wait(50)
        endif
      else
        uo.exec('exec RegTeleport')
        return
      endif
    else
      wait(50)
    endif
  next
until done == 1 or uo.findcount() == 0
if find > 0 then
  x = uo.getx('vendor1')
  y = uo.gety('vendor1')
  go(x,y)
  name = uo.getname('vendor1')
  uo.say(name+' buy')
  wait(500)
  checklag()
  uo.buy('regi')
  wait(500)
  uo.say('bye')
  if uo.weight > 600 then
    uo.exec('exec GoHome')
    return
  else
    wait(50)
  endif
  if find == 2 then
    x = uo.getx('vendor2')
    y = uo.gety('vendor2')
    go(x,y)
    name = uo.getname('vendor2')
    uo.say(name+' buy')
    wait(500)
    checklag()
    uo.buy('regi')
    wait(500)
    uo.say('bye')
    if uo.weight > 600 then
      uo.exec('exec GoHome')
      return
    else
      wait(50)
    endif
    if find == 3 then
      x = uo.getx('vendor3')
      y = uo.gety('vendor3')
      go(x,y)
      name = uo.getname('vendor3')
      uo.say(name+' buy')
      wait(500)
      checklag()
      uo.buy('regi')
      wait(500)
      uo.say('bye')
      if uo.weight > 600 then
        uo.exec('exec GoHome')
        return
      else
        wait(50)
      endif
    else
      wait(50)
    endif
  else
    wait(50)
  endif
endif
uo.exec('exec RegTeleport')
end sub


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 13 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot] and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited