Page 1 of 1

Зацикленный каст.

Posted: 2007-03-02 21:34:46
by SnOo13
Дело простое: Но я не знаю всех команд, по этому в реализации у меня проблемы.

Скрипт прост: Писал я его самостоятельно, брав другие скрипты за основу, но задержка "Wait" не стабильна. Т.к. каст по времени изменяется на десятые секунды, но эти десятые в сумме важны.

Code: Select all

sub Fsuy()
while 1
uo.print(' !!! -= FSIM HIM! =- !!! ')
   uo.cast('Flame Strike','laststatus')
   repeat
   wait(4700)
   wend
end sub


Работает так, на одну кнопку включил он ФСит, на другую выключаю.

Помогите реализовать, так: Допустим кастует ФС, массив из восьми типов регов, как только реги отобрались или физл, выполняет всю процедуру сначало).

Posted: 2007-03-03 00:11:45
by Mihail
чтобы на одну кнопку включать\выключать юзай глобальные переменные - так же было вроде в топике "полезности"
p.s.

Code: Select all

UO.BM, UO.BP, UO.GA, UO.GS,
    UO.MR, UO.NS, UO.SA, UO.SS
[/code]

Posted: 2007-03-03 01:16:19
by to4a
в общем то писал в окне ответа, запускать не пробовал поэтому не исключено что ошибок дохрена, прокомментированые значения подстроить под шард.
Работает так: забиндил на кнопку ф-ция TriggerFS, нажал кнопку и он до охренения ФСит ластатус, нажал ещё раз перестаёт

Code: Select all

sub TriggerFS()
   if UO.GetGlobal('FS') then
      UO.SetGlobal('FS',0)
   else
      UO.SetGlobal('FS',1)
      UO.Exec('FS')
   endif
endsub

sub FS()
   var TGT=UO.GetSerial('laststatus')
   if TGT==UO.GetSerial('self') and TGT=='0x00000000' and TGT=='0xFFFFFFFF' then
      UO.Print('LastStatus Target Error!')
      UO.SetGlobal('FS',0)
      return
   endif
   repeat
      if UO.SS and UO.SA then # РЕГИ ТРЕБУЕМЫЕ НА ФС
         if UO.Mana>=24 then # МАНА ТРЕБУЕМАЯ ДЛЯ ФСА
            UO.Cast('Flame Strike',TGT)
            WaitManaChange(UO.Mana)
         else
            if UO.Count('0x0F0E','0x09DF') then # ТИП И ЦВЕТ ТОТАЛ МАНКИ
               UO.UseType('0x0F0E','0x09DF')
            else
               UO.Print('No mana!')
               UO.SetGlobal('FS',0)
               return
            endif
         endif
      else
         UO.Print('No Reagents!')
         UO.SetGlobal('FS',0)
         return
      endif
   until not UO.GetGlobal('FS')
endsub

Sub WaitManaChange(now)
var timer=0
 while UO.Mana>=now or timer<=100
  timer=timer+1
  wait(50)
 wend
endsub

Posted: 2007-03-03 11:41:56
by SnOo13
Блин, спасибо. Но это не-то, вы только задачу усложняете.
Объясню:
На моём шарде, я хожу в шмоте который мне позволяет пускать фсы один за одним и для прокачки на мобах, важно пускать фс 1 за 1, с минимумом задержек. Каст фса изменяется на десятые секунды, минимальная заддержка "Wait", часто приводит к физлам (1 каст не успевает кастанутся и начинается второй).

Приведу систему:

Code: Select all

sub Fsuy() 
while 1
uo.print(' !!! -= FSIM HIM! =- !!! ')
   uo.cast('Flame Strike','laststatus')
   Ищет реги требуемые на фс UO.SS and UO.SA
   Запоминает кол-во UO.SS = приравнивая его к "X"
   Как-только UO.SS < X or UO.InJournal() = "The spell fizzles" ; Начитает всё сначало.
   wend
end sub

Это систему написал я так, как себе представляю, возможно другие команды или по другому она должна выглядеть, просьба направить меня на правельный путь. За ранее спасибо.

И еще вопрос, может ли этот скрипт работать без TWI?

Posted: 2007-03-03 13:40:34
by to4a
ну то что я написал всё это делать и будет

Posted: 2007-03-03 17:04:49
by SnOo13
В твой скрипт работает, но у меня мана регенится очень быстро!
Он пускает 2-3 фса и скрипт ничего неделает, но функция запущенной остается.

Posted: 2007-03-03 17:58:22
by to4a
хм... ну я ж говорил что не писал в окне ответа... ну попробуй так, лишнее поудалял:

Code: Select all

sub TriggerFS()
   if UO.GetGlobal('FS') then
      UO.SetGlobal('FS',0)
   else
      UO.SetGlobal('FS',1)
      UO.Exec('FS')
   endif
endsub

sub FS()
   var TGT=UO.GetSerial('laststatus')
   if TGT==UO.GetSerial('self') and TGT=='0x00000000' and TGT=='0xFFFFFFFF' then
      UO.Print('LastStatus Target Error!')
      UO.SetGlobal('FS',0)
      return
   endif
   repeat
      if UO.SS and UO.SA then # РЕГИ ТРЕБУЕМЫЕ НА ФС
         UO.Cast('Flame Strike',TGT)
         WaitManaChange(UO.Mana)
      else
         UO.Print('No Reagents!')
         UO.SetGlobal('FS',0)
         return
      endif
   until not UO.GetGlobal('FS')
endsub

Sub WaitManaChange(now)
var timer=0
 while UO.Mana>=now or timer<=100
  timer=timer+1
  wait(50)
 wend
endsub