Опять про итемдроп
Moderators: Murderator+, Murderator
Опять про итемдроп
Народ ! Пожайлуста, помогите, обыскал весь форум, много нашёл касающегося обкладыванием ветока со всех сторон жертвы, но ниченго рабочего так и не нашёл, не могли бы вы дать ссылочку на рабочий скрипт или отписаться здесь ?? Суть такова, чтобы я стоял впритык ко врагу, независимо какой стороной и нажимая на кнопку, мой пративник обкладывался бы с 4 сторон, лучше с 8 конечно, всё таки кривая вердата не такая уж и вещь далёкая...
Re: Опять про итемдроп
ZID wrote:Народ ! Пожайлуста, помогите, обыскал весь форум, много нашёл касающегося обкладыванием ветока со всех сторон жертвы, но ниченго рабочего так и не нашёл, не могли бы вы дать ссылочку на рабочий скрипт или отписаться здесь ?? Суть такова, чтобы я стоял впритык ко врагу, независимо какой стороной и нажимая на кнопку, мой пративник обкладывался бы с 4 сторон, лучше с 8 конечно, всё таки кривая вердата не такая уж и вещь далёкая...
чем ты его обкладываешь и как стоишь? в смысле - на соседних тайлах, или на одном и том же?
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
вобщем, чтобы я стоял рожей к противнику и он кидал ветку ему за спину, слева и справа, вот что то типа этого скрипта... получше конечно.... только тут он кидает почему то за спину врагу когда стоишь к нему жопой к лицу.... и только за спину, но не по сторонам...
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
если первый скрипт работает, то его можно переделать так(только еще расстояние проверять):
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
такс. перечитал первый твой пост в топике. кажется, понял, в чем дело. но ответь мне на один вопрос - кто тебе сказал, что ты выложишь ветки вокруг жертвы раньше, чем она отойдет в сторону?
получилось примерно следующее:
получилось примерно следующее:
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
ZID wrote:и ещё плиз, если не сложно, напиши на то чтобы он обкладывал 4 ветками с 4 сторон (по бокам и верх низ), по углам не надо... но и первую плиз поправь...
я тебе показал пару способов, дальше ты и сам, я думаю, сможешь...
для четырех сторон - просто убираешь из массивов, что в начале скрипта лишние направления (все элементы ч нечетными индексами), оставив в них только 4 вместо восьми, ну и соответственно индексы другие : 1-4. потом после определения направления чара берешь из массивов данные просто в другом порядке. в каком - уже труда разобраться не составит.
Last edited by GrayLord on 2004-10-11 01:16:22, edited 1 time in total.