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
Тогда эту часть можешь стереть, она нафиг не нужна т.к. всеравно не работает:

Code: Select all

... (oldObject>0) AND ...

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'
.
.
.