помогите пжслта с атакои

Ask for scripts here

Moderators: Murderator+, Murderator

Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post 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


И даже глобальных переменных с типом свитка не надо. Просто по функции на каждый скролл и всё работает =)
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post 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
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post 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 но где?
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post 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% что я вспомнил правильно :) ).
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

неа он его просто обнулил вообщем надо так

if (oldObject>0) AND (NOT oldObject=='0x00000000') AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then

Проблему решил сенки
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Тогда эту часть можешь стереть, она нафиг не нужна т.к. всеравно не работает:

Code: Select all

... (oldObject>0) AND ...
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

ага... пропустил +)Ж
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

поиду тестить всю связку
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Опять проблема не кидает стрелку при первом определении.Т.е. если объекта нет то когда добавляешь при первом клике крестиком на противнике стрелка не летит а хотелось бы чтоб сразу летела
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Покажи какой скрипт на стрелку ты используешь.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post 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
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

АААААААаа не работает
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Не надо ничего менять, этот вариант не работает?

Code: Select all

sub selectEnemy()
    addOrGetObject('Enemy',8,-1)
    uo.Cast('Magic Arrow','Enemy')
    UO.Attack('Enemy')
endsub
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

почему все норм работает но при первичном определении стрелка не кидается. Потому что ему не откуда Id взять она кидается только при повторном нажатии когда он определил id. А надо чтоб сразу еще летела
Last edited by lavdenis on 2010-03-30 12:27:49, edited 1 time in total.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post 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
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

ага с задержкои на 1500 помогло
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post 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
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

+))))))) неа только если 1300 задержки во втором варианте вообще магию забыл+)Ж
Last edited by lavdenis on 2010-03-30 12:51:23, edited 1 time in total.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post 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 задержки в первом варинатнте вообще магию забыл+)Ж


Значит точно сьедает прицел какой-то.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

until ((timeLeft>0) OR (timeout<=0)) AND (NOT UO.GetSerial(name) == '0x00000000')


В результате Enhanled exeption in parser и на экране

'0x00000000'
'0x00000000'
'0x00000000'
.
.
.
Post Reply