Page 1 of 2

Опять про итемдроп

Posted: 2004-10-07 13:24:43
by ZID
Народ ! Пожайлуста, помогите, обыскал весь форум, много нашёл касающегося обкладыванием ветока со всех сторон жертвы, но ниченго рабочего так и не нашёл, не могли бы вы дать ссылочку на рабочий скрипт или отписаться здесь ?? Суть такова, чтобы я стоял впритык ко врагу, независимо какой стороной и нажимая на кнопку, мой пративник обкладывался бы с 4 сторон, лучше с 8 конечно, всё таки кривая вердата не такая уж и вещь далёкая...

Re: Опять про итемдроп

Posted: 2004-10-07 18:36:29
by GrayLord
ZID wrote:Народ ! Пожайлуста, помогите, обыскал весь форум, много нашёл касающегося обкладыванием ветока со всех сторон жертвы, но ниченго рабочего так и не нашёл, не могли бы вы дать ссылочку на рабочий скрипт или отписаться здесь ?? Суть такова, чтобы я стоял впритык ко врагу, независимо какой стороной и нажимая на кнопку, мой пративник обкладывался бы с 4 сторон, лучше с 8 конечно, всё таки кривая вердата не такая уж и вещь далёкая...

чем ты его обкладываешь и как стоишь? в смысле - на соседних тайлах, или на одном и том же?

Posted: 2004-10-07 19:40:33
by ZID
я стою перед ним мордой вперёд допустим....

Posted: 2004-10-08 04:07:09
by GrayLord
ZID wrote:я стою перед ним мордой вперёд допустим....

я не очень понял, для чего тебе это и чем ты собрался обкладывать, но вот тебе пара примеров и делай с ними что хочешь. оба выстраивают вокруг тебя квадратный забот из указаного типа предметов размером 5х5:
1) этот пример наименее глючен, но с ним дофига всего инжект пишет, если не отключать injectecho, да и работает довольно медленно

Code: Select all

sub main()   
   droparound("0x097B") # 0x097B заменить на нужный тип предмета
endsub
sub droparound(itemtype)
   var a,b,c,d,e,x,y
   for a=-2 to 1
      b=str(a)
      c=str(0-a)      
      for e=0 to 3         
         d=uo.count(itemtype)
         if d>0 then
            uo.waittargettype(itemtype)
            uo.addobject('f')
            if e==0 then
               x=uo.getx('self')+2
               y=uo.gety('self')+a
            endif
            if e==1 then
               x=uo.getx('self')-2
               y=uo.gety('self')-a
            endif
            if e==2 then
               x=uo.getx('self')-a
               y=uo.gety('self')+2
            endif
            if e==3 then
               x=uo.getx('self')+a
               y=uo.gety('self')-2
            endif
            uo.textprint(str(x)+' '+str(y))
            uo.moveitem('f',"1","ground",str(x),str(y),str(255))
            repeat               
               wait(100)
            until d<>uo.count(itemtype)
            wait(100)
         endif
      next
   next   
endsub



2) этот пример, вроде бы, работает пошустрее, но на лагах может "хватать" вещь с земли и класть её в новое место

Code: Select all

sub main()
   var what="0x0E21" # 0x0E21 заменить на objtype необходимого предмета
   droparound(what)
endsub
sub droparound(itemtype)
   var a,b,c,d,e,x,y
   
   for a=-2 to 1
      b=str(a)
      c=str(0-a)      
      for e=0 to 3         
         d=uo.count(itemtype)
         if d>0 then
            uo.findtype(itemtype,'-1','backpack')            
            if e==0 then
               x=uo.getx('self')+2
               y=uo.gety('self')+a
            else
               if e==1 then
                  x=uo.getx('self')-2
                  y=uo.gety('self')-a
               else
                  if e==2 then
                     x=uo.getx('self')-a
                     y=uo.gety('self')+2
                  else
                     x=uo.getx('self')+a
                     y=uo.gety('self')-2                     
                  endif               
               endif
            endif            
            uo.moveitem('finditem',"1","ground",str(x),str(y),str(uo.getz()))
            repeat               
               wait(30)
            until d<>uo.count(itemtype)
            wait(30)
         endif
      next
   next   
endsub


Posted: 2004-10-08 13:43:59
by ZID
спасиб, ща потестю....

Posted: 2004-10-08 13:50:17
by ZID
и в первом и во втором ничего не делает вообще, что то быстроо проскакивает, но ничего не происходит..

Posted: 2004-10-08 14:34:17
by ZID
аааа неее сорри, 1 работает, но это свосем не то что мне нужно... я проси чтобы он чела обкладывал ветками, чтобы чел застревал... и веток не стока...

Posted: 2004-10-08 14:58:47
by ZID
вобщем, чтобы я стоял рожей к противнику и он кидал ветку ему за спину, слева и справа, вот что то типа этого скрипта... получше конечно.... только тут он кидает почему то за спину врагу когда стоишь к нему жопой к лицу.... и только за спину, но не по сторонам...

Code: Select all

sub itemdrop()
; Itemdrop by Dei
var Ditem='0x1B9B' ; item to drop
var hgt='0' ; height (-2 to 4)

uo.findtype(Ditem,-1,'my')
if uo.getquantity('finditem')>=1 then
if uo.getdir('self')==0 then ; N
   uo.drop('1','0','2',hgt,'finditem')
end if
if uo.getdir('self')==1 then ; NE
      uo.drop('1','-2','2',hgt,'finditem')
      end if
if uo.getdir('self')==2 then ; E
         uo.drop('1','-2','0',hgt,'finditem')
            end if
if uo.getdir('self')==3 then ; SE
            uo.drop('1','-2','-2',hgt,'finditem')
                  end if
if uo.getdir('self')==4 then ; S
             uo.drop('1','0','-2',hgt,'finditem')
                  end if                     
if uo.getdir('self')==5 then ; SW
         uo.drop('1','2','-2',hgt,'finditem')
            end if
if uo.getdir('self')==6 then ; W
      uo.drop('1','2','0',hgt,'finditem')
      end if
if uo.getdir('self')==7 then ; NW
   uo.drop('1','2','2',hgt,'finditem')
end if
     else
uo.findtype(Ditem,-1,'ground')
if uo.getquantity('finditem')<=1 then
uo.grab('1','finditem')
     end if
end if
end sub

Posted: 2004-10-08 16:44:43
by ZID
хм.... я сам переделал, чтобы кидал передом, но как сделать чтобы кидал ещщё и по бокам ветки ??? и жедательно под себя... ?

Posted: 2004-10-08 17:07:55
by GrayLord
ZID wrote:и в первом и во втором ничего не делает вообще, что то быстроо проскакивает, но ничего не происходит..

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

Posted: 2004-10-08 17:15:32
by GrayLord
если первый скрипт работает, то его можно переделать так(только еще расстояние проверять):

Code: Select all

sub main() 
   var what="0x1B9B"
   ver opponent="0x12345678" # заменить на сериал оппонента
   droparound(what, opponent)
endsub
sub droparound(itemtype,who)
   var a,b,c,d,e,x,y
   for a=-1 to 0
      b=str(a)
      c=str(0-a)       
      for e=0 to 3         
         d=uo.count(itemtype)
         if d>0 then
            uo.findtype(itemtype,'-1','backpack')             
            if e==0 then
               x=uo.getx(who)+1
               y=uo.gety(who)+a
            else
               if e==1 then
                  x=uo.getx(who)-1
                  y=uo.gety(who)-a
               else
                  if e==2 then
                     x=uo.getx(who)-a
                     y=uo.gety(who)+1
                  else
                     x=uo.getx(who)+a
                     y=uo.gety(who)-1                     
                  endif               
               endif
            endif             
            uo.moveitem('finditem',"1","ground",str(x),str(y),str(uo.getz()))
            repeat               
               wait(30)
            until d<>uo.count(itemtype)
            wait(30)
         endif
      next
   next
endsub

Posted: 2004-10-08 18:15:30
by ZID
неее... никаких серивлов оппонента ненадо чтобы можно было и без оппонента можно было вылодить...

Posted: 2004-10-08 23:36:57
by GrayLord
ZID wrote:неее... никаких серивлов оппонента ненадо чтобы можно было и без оппонента можно было вылодить...

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

Posted: 2004-10-08 23:51:18
by GrayLord
ZID wrote:хм.... я сам переделал, чтобы кидал передом, но как сделать чтобы кидал ещщё и по бокам ветки ??? и жедательно под себя... ?

хотя бы схемку какую нарисовал бы, что ли... пару примеров "на пальцах", что конкретно ты от скрипта хочешь...

Posted: 2004-10-09 00:13:23
by GrayLord
такс. перечитал первый твой пост в топике. кажется, понял, в чем дело. но ответь мне на один вопрос - кто тебе сказал, что ты выложишь ветки вокруг жертвы раньше, чем она отойдет в сторону?
получилось примерно следующее:

Code: Select all

#N=0,-1; NE=1,-1;  E=1,0; SE=1,1; S=0,1; SW=-1,1; W=-1,0; NW=-1,-1;   
sub dropitems()
   var item='0x1B9B'
   dim ox[8],oy[8]
#----N----
   ox[0]=0
   oy[0]=-1
#----NE---
   ox[1]=1
   oy[1]=-1
#----E----
   ox[2]=1
   oy[2]=0
#----SE---
   ox[3]=1
   oy[3]=1
#----S----
   ox[4]=0
   oy[4]=1
#----SW---
   ox[5]=-1
   oy[5]=1
#----W----
   ox[6]=-1
   oy[6]=0
#----NW
   ox[7]=-1
   oy[7]=-1
#------------      
   var x,d,t
   uo.ignorereset()
   d=uo.getdir('self')      
   for x=0 to 7   
      uo.findtype(item,'-1','backpack')
      if uo.findcount()>0 then
         t=uo.count(item)
         uo.drop('1',str(ox[x]+ox[d]),str(oy[x]+oy[d]),'0','finditem')
         uo.ignore(uo.getserial('findinem'))
         repeat
            wait(10)
         until t<>uo.count(item)
         wait(50)
      endif
   next
endsub

Posted: 2004-10-10 15:54:41
by ZID
ХМ... РАБОТАЕТ... но почему то инвалид обжект тайп 0X000000 пишет после того как кладёт 3 ветку...

Posted: 2004-10-10 16:11:52
by ZID
и типа надо последовательность ветко сменить, так как после того как он по бокамкладёт ветки он не может положить в верхние углы... пожтому ошибки..

Posted: 2004-10-10 16:59:14
by ZID
спасибо что помогаешь

Posted: 2004-10-10 17:37:26
by ZID
и ещё плиз, если не сложно, напиши на то чтобы он обкладывал 4 ветками с 4 сторон (по бокам и верх низ), по углам не надо... но и первую плиз поправь...

Posted: 2004-10-11 01:13:32
by GrayLord
ZID wrote:и ещё плиз, если не сложно, напиши на то чтобы он обкладывал 4 ветками с 4 сторон (по бокам и верх низ), по углам не надо... но и первую плиз поправь...

я тебе показал пару способов, дальше ты и сам, я думаю, сможешь...
для четырех сторон - просто убираешь из массивов, что в начале скрипта лишние направления (все элементы ч нечетными индексами), оставив в них только 4 вместо восьми, ну и соответственно индексы другие : 1-4. потом после определения направления чара берешь из массивов данные просто в другом порядке. в каком - уже труда разобраться не составит.