Автосмена вооружения

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
ArNeithen
Posts: 10
Joined: 2005-05-13 19:59:40

Автосмена вооружения

Post by ArNeithen »

Суть идеи: скрипт непрерывно проверяет расстояние до противника и если тот подходит в упор - меняет лук на оружие ближнего боя.
Но (!) только если в руках экипирован лук в этот момент.

Я дошёл вот до этого:

Code: Select all

sub AutoChange()
while not uo.Dead()
UO.GetX('laststatus')
UO.GetY('laststatus')
if (UO.GetX('laststatus')-UO.GetX('self'))<2 or (UO.GetY('laststatus')-UO.GetY('self'))<2
and if UO.Equipt('Lhand','0x13B1')
then
UO.Exec("exec sword") ##[sub sword() - скрипт одевания меча и щита]
end if
wend
endsub


Был ещё вариант аналогичный, но через

Code: Select all

uo.GetDistance('laststatus')
...
 if uo.GetDistance('laststatus')<2



Ошибка выскакивает в строчке с if - очевидно, что так сравнивать нельзя...


Подскажите пожалуйста как правильно сделать?



.
Last edited by ArNeithen on 2007-05-12 00:32:11, edited 1 time in total.
Rivory
Posts: 205
Joined: 2005-01-06 11:49:28

Post by Rivory »

Если я не ошибаюсь, надо юзать такую конструкцию

Code: Select all

str(uo.getX....
str(uo.getY...

в сравнениях, т.к. нам нужно число в сравнениях, а uo.getX передаёт чтото другое (в одной теме Дестракшен чтото такое обьяснял)

тоесть твой текст должен быть таким

Code: Select all

if (str(UO.GetX('laststatus'))-str(UO.GetX('self')))<2 or (str(UO.GetY('laststatus'))-str(UO.GetY('self')))<2 
and if UO.Equipt('Lhand','0x13B1')
then
ArNeithen
Posts: 10
Joined: 2005-05-13 19:59:40

Post by ArNeithen »

Rivory wrote:Если я не ошибаюсь, надо юзать такую конструкцию

.....



То есть модификация в исходном виде:


Code: Select all

sub AutoChange()
while not uo.Dead()
str(UO.GetX('laststatus'))
str(UO.GetY('laststatus'))
if (str(UO.GetX('laststatus'))-str(UO.GetX('self')))<2 or (str(UO.GetY('laststatus'))-str(UO.GetY('self')))<2
and if UO.Equipt('Lhand','0x13B1')
then
UO.Exec("exec sword")
end if
wend
endsub



А всё равно parse error в стоке с if ...


.
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

Code: Select all

uo.getdistance([object])

Code: Select all

UO.Exec("exec sword") 

на

Code: Select all

uo.usetype('0x0000')


Code: Select all

if UO.Equipt('Lhand','0x13B1') 

здесь неправильно...

Code: Select all

sub main()
while 1
if uo.getdistance('lastattack') < 2 and uo.getlayer('_0x13B1')=="Rhand" then
uo.usetype('0x13FC')
end if
wait(250)
wend
end sub
ArNeithen
Posts: 10
Joined: 2005-05-13 19:59:40

Post by ArNeithen »

Не проходит проверка

Code: Select all

uo.getlayer('0x13B1')=="Rhand"


Тест такой был:

Code: Select all

sub AutoChange() 
while 1
if uo.getlayer('0x13B1')=="Rhand" then
uo.usetype('0x13FC')
end if
wait(250)
wend
end sub


Ведь по идее в таком виде он должен вообще сразу менять оружие
если вдруг лук да окажется в руках, м? Не проходит... =/
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

возьми глаза в руки
ArNeithen
Posts: 10
Joined: 2005-05-13 19:59:40

Post by ArNeithen »

Mr Nmy wrote:возьми глаза в руки


Если вы про

Code: Select all

uo.getlayer('_0x13B1')=="Rhand" 


То со слэшем тоже не работает...
Rhand или Lhand не влияет...
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

я тестил и у меня все работало
а зачем слеш нужен- зайди в хелпе, посмотри линк objects

обрати внимание

Code: Select all

if uo.getdistance('lastattack') < 2 and uo.getlayer('_0x13B1')=="Rhand" then 

если последний атакуемый в растояние меньше чем в 2 клетки и одет такой тип в руке, то переодевать то и то
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Code: Select all

sub WeaponChanger()
var bow = "0x0000" ; тип лука
var chg = "0x0000" ; тип ближнего оружия
repeat
   if uo.getDistance( 'laststatus' ) < 2 && uo.getGraphic( uo.objatlayer( 'Rhand' ) ) == bow then
      uo.equipt( chg )
   endif
   wait( 100 )
until false
endsub
Last edited by Destruction on 2007-05-12 01:20:25, edited 1 time in total.
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
ArNeithen
Posts: 10
Joined: 2005-05-13 19:59:40

Post by ArNeithen »

2Mr Nmy Ага, нашёл у себя ошибку ) Огромное спасибо, теперь всё работает. )
2Destruction За ваш вариант - отдельно, то что нужно ) Благодарю
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

ArNeithen wrote:2Mr Nmy Ага, нашёл у себя ошибку ) Огромное спасибо, теперь всё работает. )
2Destruction За ваш вариант - отдельно, то что нужно ) Благодарю

У меня пустой цикл был.. поправил :)
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Post Reply