Yoko

All sides of Injection
It is currently 2025-12-30 05:52:13

All times are UTC+02:00




Post new topic  Reply to topic  [ 65 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
PostPosted: 2010-03-29 13:39:38 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Покатит, но у тебя много кода повторяется. Лучше сделай так:

Code:
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


И даже глобальных переменных с типом свитка не надо. Просто по функции на каждый скролл и всё работает =)


Top
   
PostPosted: 2010-03-29 14:55:58 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
Может тогда все вместе лучше так?
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


Top
   
PostPosted: 2010-03-30 09:23:33 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
чет у меня со взятием цели трабл возник так то все работает, но вообщем:

Code:


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 но где?


Top
   
PostPosted: 2010-03-30 10:41:34 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Гм, я не помню что в инже записывается в переменную когда нет обьекта. Наверное эту часть:
Code:
if (oldObject>0) AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then


Надо заменить на:
Code:
if (oldObject>0) AND (NOT oldObject=='0xFFFFFFFF') AND ((UO.GetDistance(oldObject)<=distance) OR (distance==-1)) then


Если всёравно не работает - попробуй через закладку инжекта добавь предмет, нажми Esc, и посмотри какой ID добавился. Вот тот неверный ID нужно воткнуть вместо "0xFFFFFFFF" (хотя 90% что я вспомнил правильно :) ).


Top
   
PostPosted: 2010-03-30 10:53:11 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
неа он его просто обнулил вообщем надо так

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

Проблему решил сенки


Top
   
PostPosted: 2010-03-30 10:57:37 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Тогда эту часть можешь стереть, она нафиг не нужна т.к. всеравно не работает:
Code:
... (oldObject>0) AND ...


Top
   
PostPosted: 2010-03-30 10:59:47 
Offline
User avatar

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


Top
   
PostPosted: 2010-03-30 11:05:03 
Offline
User avatar

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


Top
   
PostPosted: 2010-03-30 11:32:18 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
Опять проблема не кидает стрелку при первом определении.Т.е. если объекта нет то когда добавляешь при первом клике крестиком на противнике стрелка не летит а хотелось бы чтоб сразу летела


Top
   
PostPosted: 2010-03-30 11:39:20 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Покажи какой скрипт на стрелку ты используешь.


Top
   
PostPosted: 2010-03-30 12:09:46 
Offline
User avatar

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


Top
   
PostPosted: 2010-03-30 12:22:54 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
АААААААаа не работает


Top
   
PostPosted: 2010-03-30 12:23:38 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Не надо ничего менять, этот вариант не работает?

Code:
sub selectEnemy()
    addOrGetObject('Enemy',8,-1)
    uo.Cast('Magic Arrow','Enemy')
    UO.Attack('Enemy')
endsub


Top
   
PostPosted: 2010-03-30 12:24:31 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
почему все норм работает но при первичном определении стрелка не кидается. Потому что ему не откуда Id взять она кидается только при повторном нажатии когда он определил id. А надо чтоб сразу еще летела


Last edited by lavdenis on 2010-03-30 12:27:49, edited 1 time in total.

Top
   
PostPosted: 2010-03-30 12:26:25 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
Думаю инжа лишний прицел проглатывает. Попробуй так:

Code:
sub selectEnemy()
    addOrGetObject('Enemy',8,-1)
    Wait(200)
    uo.Cast('Magic Arrow','Enemy')
    UO.Attack('Enemy')
endsub


Или так:

Code:
sub selectEnemy()
    addOrGetObject('Enemy',8,-1)
    UO.WaitTargetObject('Enemy')
    uo.Cast('Magic Arrow')
    UO.Attack('Enemy')
endsub


Top
   
PostPosted: 2010-03-30 12:40:10 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
ага с задержкои на 1500 помогло


Top
   
PostPosted: 2010-03-30 12:47:35 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
1500 это слишком много. Попробуй так:

Code:
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


Top
   
PostPosted: 2010-03-30 12:50:34 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
+))))))) неа только если 1300 задержки во втором варианте вообще магию забыл+)Ж


Last edited by lavdenis on 2010-03-30 12:51:23, edited 1 time in total.

Top
   
PostPosted: 2010-03-30 12:50:58 
Offline
Expert!
User avatar

Joined: 2005-04-23 10:19:43
Posts: 388
И еще здесь ошибка:

Code:
until ((timeLeft>0) OR (timeout<=0)) AND (UO.GetSerial(name)>0)


поменяй на:

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


Quote:
+))))))) неа только если 1300 задержки в первом варинатнте вообще магию забыл+)Ж


Значит точно сьедает прицел какой-то.


Top
   
PostPosted: 2010-03-30 12:56:39 
Offline
User avatar

Joined: 2010-03-27 06:15:56
Posts: 87
until ((timeLeft>0) OR (timeout<=0)) AND (NOT UO.GetSerial(name) == '0x00000000')


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

'0x00000000'
'0x00000000'
'0x00000000'
.
.
.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 65 posts ]  Go to page Previous 1 2 3 4 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited