Page 1 of 1
Автосмена вооружения
Posted: 2007-05-10 20:27:13
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 - очевидно, что так сравнивать нельзя...
Подскажите пожалуйста как правильно сделать?
.
Posted: 2007-05-10 21:30:56
by Rivory
Если я не ошибаюсь, надо юзать такую конструкцию
в сравнениях, т.к. нам нужно число в сравнениях, а 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
Posted: 2007-05-10 21:34:51
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 ...
.
Posted: 2007-05-10 22:39:01
by Nmy
на
здесь неправильно...
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
Posted: 2007-05-11 07:46:42
by ArNeithen
Не проходит проверка
Тест такой был:
Code: Select all
sub AutoChange()
while 1
if uo.getlayer('0x13B1')=="Rhand" then
uo.usetype('0x13FC')
end if
wait(250)
wend
end sub
Ведь по идее в таком виде он должен вообще сразу менять оружие
если вдруг лук да окажется в руках, м? Не проходит... =/
Posted: 2007-05-11 08:22:51
by Nmy
возьми глаза в руки
Posted: 2007-05-11 09:23:44
by ArNeithen
Mr Nmy wrote:возьми глаза в руки
Если вы про
То со слэшем тоже не работает...
Rhand или Lhand не влияет...
Posted: 2007-05-11 12:21:38
by Nmy
я тестил и у меня все работало
а зачем слеш нужен- зайди в хелпе, посмотри линк objects
обрати внимание
Code: Select all
if uo.getdistance('lastattack') < 2 and uo.getlayer('_0x13B1')=="Rhand" then
если последний атакуемый в растояние меньше чем в 2 клетки и одет такой тип в руке, то переодевать то и то
Posted: 2007-05-11 12:42:56
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
Posted: 2007-05-11 13:00:18
by ArNeithen
2Mr Nmy Ага, нашёл у себя ошибку ) Огромное спасибо, теперь всё работает. )
2Destruction За ваш вариант - отдельно, то что нужно ) Благодарю
Posted: 2007-05-12 01:20:11
by Destruction
ArNeithen wrote:2Mr Nmy Ага, нашёл у себя ошибку ) Огромное спасибо, теперь всё работает. )
2Destruction За ваш вариант - отдельно, то что нужно ) Благодарю
У меня пустой цикл был.. поправил
