Page 2 of 4
Re: помогите пжслта с атакои
Posted: 2010-03-29 13:39:38
by Beyonder
Покатит, но у тебя много кода повторяется. Лучше сделай так:
Code: Select all
sub castFS()
autoCastScroll('FlameStrike','0x1234',20)
endsub
Sub autoCastScroll(scrollName, scrollType, ManaNeed)
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(scrollType)<>0 then
castScroll(scrollType,ManaNeed,'Enemy')
uo.print(scrollName+': '+STR(UO.Count(scrollType)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
И даже глобальных переменных с типом свитка не надо. Просто по функции на каждый скролл и всё работает =)
Re: помогите пжслта с атакои
Posted: 2010-03-29 14:55:58
by lavdenis
Может тогда все вместе лучше так?
sub castFS()
autoCastScroll('FlameStrike','0x1234',20)
endsub
sub autoCastScroll(scrollName, scrollType, ManaNeed)
if UO.Mana<ManaNeed then
UO.Print("NO MANA!")
manadrink('ManaPotion','0x4321')
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(scrollType)<>0 then
castScroll(scrollType,ManaNeed,'Enemy')
uo.print(scrollName+': '+STR(UO.Count(scrollType)))
else
UO.Print("NO SCROLLS!")
endif
endsub
sub manadrink(ManaName,manaType)
if uo.count(manaType)<>0 then
uo.usetype('manaType')
uo.print('ManaName: '+STR(UO.Count('manaType')))
else
uo.print ("NO MANA POTIONS!")
endsub
Re: помогите пжслта с атакои
Posted: 2010-03-30 09:23:33
by lavdenis
чет у меня со взятием цели трабл возник так то все работает, но вообщем:
Code: Select all
sub selectEnemy() ###### Тут все понятно выбираем цель если цель есть тогда атака
addOrGetObject('Enemy',8,-1)
uo.Cast('Magic Arrow','Enemy')
UO.Attack('Enemy')
endsub
sub addOrGetObject(name,distance,timeout) ### Здесь сама проверка если цель есть то атака
var oldObject = UO.GetSerial(name)
if (oldObject>0) AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then
return oldObject
else ########## Если цели нет то добовление
return addObjectWait(name,timeout)
endif
endsub
sub addObjectWait(name,timeout) #### Само добавление цели
var timeLeft
repeat
UO.AddObject(name,0)
if uo.waiting() then
uo.canceltarget()
endif
UO.AddObject(name)
timeLeft = timeout
while (NOT uo.Targeting()) AND (timeLeft>0)
wait(50)
timeLeft = timeLeft -50
wend
while (uo.Targeting()) AND (timeLeft>0)
wait(50)
timeLeft = timeLeft -50
wend
until ((timeLeft>0) OR (timeout<=0)) AND (UO.GetSerial(name)>0)
return UO.GetSerial(name)
endsub
Суть проблемы:допустим я выбираю цель он пускает в нее стрелку и атачит если нажимаю еще раз то курсор не выпадает а снова пускает стрелку , но если я убежал от цели дальше 8 клеток и нажал добавить цель появляется таргет добавления новои цели ТУТ ВСЕ НОРМ!
дальше проблема я нажимаю Esc(то есть отменяю крестик) и если опять нажимаю добавление цели то он пишет Invalid serial index и invalid object:Enemy Где поправить чтоб после отмены таргета Esc-пом он по новому цель мог определять? Я думаю проблема в sub addObjectWait(name,timeout)......endsub но где?
Re: помогите пжслта с атакои
Posted: 2010-03-30 10:41:34
by Beyonder
Гм, я не помню что в инже записывается в переменную когда нет обьекта. Наверное эту часть:
Code: Select all
if (oldObject>0) AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then
Надо заменить на:
Code: Select all
if (oldObject>0) AND (NOT oldObject=='0xFFFFFFFF') AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then
Если всёравно не работает - попробуй через закладку инжекта добавь предмет, нажми Esc, и посмотри какой ID добавился. Вот тот неверный ID нужно воткнуть вместо "0xFFFFFFFF" (хотя 90% что я вспомнил правильно

).
Re: помогите пжслта с атакои
Posted: 2010-03-30 10:53:11
by lavdenis
неа он его просто обнулил вообщем надо так
if (oldObject>0) AND (NOT oldObject=='0x00000000') AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then
Проблему решил сенки
Re: помогите пжслта с атакои
Posted: 2010-03-30 10:57:37
by Beyonder
Тогда эту часть можешь стереть, она нафиг не нужна т.к. всеравно не работает:
Re: помогите пжслта с атакои
Posted: 2010-03-30 10:59:47
by lavdenis
ага... пропустил +)Ж
Re: помогите пжслта с атакои
Posted: 2010-03-30 11:05:03
by lavdenis
поиду тестить всю связку
Re: помогите пжслта с атакои
Posted: 2010-03-30 11:32:18
by lavdenis
Опять проблема не кидает стрелку при первом определении.Т.е. если объекта нет то когда добавляешь при первом клике крестиком на противнике стрелка не летит а хотелось бы чтоб сразу летела
Re: помогите пжслта с атакои
Posted: 2010-03-30 11:39:20
by Beyonder
Покажи какой скрипт на стрелку ты используешь.
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:09:46
by lavdenis
sub addOrGetObject(name,distance,timeout)
var oldObject = UO.GetSerial(name)
if (NOT oldObject=='0x00000000') AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then
return oldObject
else
return addObjectWait(name,timeout)
endif
endsub
sub selectEnemy()
addOrGetObject('Enemy',8,-1)
uo.Cast('Magic Arrow','Enemy')
UO.Attack('Enemy')
endsub
Мож сюда добавить
sub addObjectWait(name,timeout)
var timeLeft
Var newObject=UO.GetSerial(name) ###Сюды
repeat
UO.AddObject(name,0)
if uo.waiting() then
uo.canceltarget()
endif
UO.AddObject(name)
timeLeft = timeout
while (NOT uo.Targeting()) AND (timeLeft>0)
wait(50)
timeLeft = timeLeft -50
wend
while (uo.Targeting()) AND (timeLeft>0)
wait(50)
timeLeft = timeLeft -50
wend
until ((timeLeft>0) OR (timeout<=0)) AND (UO.GetSerial(name)>0)
return UO.GetSerial(name)
if NewObject=UO.GetSerial(name) then ##### И сюды
uo.Cast('Magic Arrow',name)
endif
endsub
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:22:54
by lavdenis
АААААААаа не работает
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:23:38
by Beyonder
Не надо ничего менять, этот вариант не работает?
Code: Select all
sub selectEnemy()
addOrGetObject('Enemy',8,-1)
uo.Cast('Magic Arrow','Enemy')
UO.Attack('Enemy')
endsub
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:24:31
by lavdenis
почему все норм работает но при первичном определении стрелка не кидается. Потому что ему не откуда Id взять она кидается только при повторном нажатии когда он определил id. А надо чтоб сразу еще летела
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:26:25
by Beyonder
Думаю инжа лишний прицел проглатывает. Попробуй так:
Code: Select all
sub selectEnemy()
addOrGetObject('Enemy',8,-1)
Wait(200)
uo.Cast('Magic Arrow','Enemy')
UO.Attack('Enemy')
endsub
Или так:
Code: Select all
sub selectEnemy()
addOrGetObject('Enemy',8,-1)
UO.WaitTargetObject('Enemy')
uo.Cast('Magic Arrow')
UO.Attack('Enemy')
endsub
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:40:10
by lavdenis
ага с задержкои на 1500 помогло
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:47:35
by Beyonder
1500 это слишком много. Попробуй так:
Code: Select all
sub selectEnemy()
addOrGetObject('Enemy',8,-1)
if (UO.Waiting() OR UO.Targeting()) then
UO.CancelTarget()
endif
uo.Cast('Magic Arrow','Enemy')
UO.Attack('Enemy')
endsub
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:50:34
by lavdenis
+))))))) неа только если 1300 задержки во втором варианте вообще магию забыл+)Ж
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:50:58
by Beyonder
И еще здесь ошибка:
Code: Select all
until ((timeLeft>0) OR (timeout<=0)) AND (UO.GetSerial(name)>0)
поменяй на:
Code: Select all
until ((timeLeft>0) OR (timeout<=0)) AND (NOT UO.GetSerial(name) == '0x00000000')
+))))))) неа только если 1300 задержки в первом варинатнте вообще магию забыл+)Ж
Значит точно сьедает прицел какой-то.
Re: помогите пжслта с атакои
Posted: 2010-03-30 12:56:39
by lavdenis
until ((timeLeft>0) OR (timeout<=0)) AND (NOT UO.GetSerial(name) == '0x00000000')
В результате Enhanled exeption in parser и на экране
'0x00000000'
'0x00000000'
'0x00000000'
.
.
.