Запуск двух ф-ций из одной, как?
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
18 мая 2015 10:59
Сообщение #1
Есть 2 зацикленные функции:
sub Func1()
    repeat
        wait(1000)
    until UO.Dead()
endsub
;-----------------------------
sub Func2()
    repeat
        wait(1000)
    until UO.Dead()
endsub


Как их запустить из другой, что бы запустились обе?
В итоге что бы получилось, по смыслу такое (этот вариант не рабочий).
;
sub Func3()
    Func1()
    Func2()
endsub
Генерал Полковник (31351072)15 лет
Dragonstalker
Сообщений: 4091
Рег. 6.09.2009
18 мая 2015 11:21
Сообщение #2
sub doublefunc()
uo.exec Func1()
uo.exec Func2()
end sub



вроде так :beach:
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
18 мая 2015 14:59
Сообщение #3
Первый вариант работать будет только не явно. Не получится грохнуть отдельную функцию. Если нужно чтобы 1 командой запускалось несколько процедур и их отдельно контролировать то делается двойной exec
sub f1()
    repeat
        wait(1000)
    until UO.Dead()
endsub
;-----------------------------
sub f2()
    repeat
        wait(1000)
    until UO.Dead()
endsub


sub func3()
    uo.exec('exec f1')
    uo.exec('exec f2')
endsub

в данном примере регистр не важен. F1 f1 exec F1 - пофигу.
Генерал Полковник (37807901)13 летИнквизитор
Inquisitor
Сообщений: 792
Рег. 27.06.2011
19 мая 2015 04:36
Сообщение #4
нада учитывать состояние запущеных или нет функций - кто то очень мудро вешает флаги - как вариант
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
19 мая 2015 08:26
Сообщение #5
а про это я на yoko уже рассказывал и показывал :)
Маршал (73319389)14 летИнквизитор
Inquisitor
Сообщений: 1693
Рег. 19.06.2010
19 мая 2015 19:53
Сообщение #6
Можно обойтись без флагов, например:
  if not UO.FunRunning('f1') then
    UO.Exec('exec f1')
  end if
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
19 мая 2015 22:23
Сообщение #7
Лучше while тк if модет подвести и закрть не все скрипты ;)
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
19 мая 2015 22:37
Сообщение #8
были прецеденты :wink:
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
22 мая 2015 23:11
Сообщение #9
Zombie,
Можно обойтись без флагов, например:
if not UO.FunRunning('f1') then
UO.Exec('exec f1')
end if


После добавления строки:
if not UO.FunRunning('RazgruzkaHome') and not UO.FunRunning('RazgruzkaBank') then

клиент/инжект ОЧЕНЬ часто стал крашится...


Sub AutoLoot()
   repeat
      if not UO.FunRunning('RazgruzkaHome') and not UO.FunRunning('RazgruzkaBank') then
         UO.Set('finddistance',1)
         UO.FindType('0x2006', '-1', '1'); Ищем на земле труп
         if uo.FindCount() > 0 and UO.GetDistance("finditem")<=1 then  
            Loot2()
         endif
      endif      
   until UO.Dead()
end sub
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
22 мая 2015 23:16
Сообщение #10
добавь после последнего endif паузу wait(100)
не совсем понятны эти ухищрения :umnik2:
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
23 мая 2015 01:58
Сообщение #11
Mirage,не помогает. даже wait(400)вылетает.
С одним UO.FunRunning более менее нормально.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
23 мая 2015 08:57
Сообщение #12
100 вполне достаточно - это чтобы цикл не крутился если труп не найдет без пауз вообще.
Sub AutoLoot()
var body ='0x2006'
var LootDist = 1
   repeat
      if not UO.FunRunning('RazgruzkaHome|RazgruzkaBank') then
         uo.findtype(body, -1, 'ground', LootDist)
         if uo.FindCount() and UO.GetDistance("finditem")<=LootDist then  
            Loot2()
         endif
      endif
     wait(100)      
   until UO.Dead()
end sub

Попробуй вот так. Не фигово бы еще функцию лута увидеть - может у тебя там тоже ад какой то. И я надеюсь ты это все на последнем 15 инжекте юзаешь? Иначе я бы не советовал вообще исеользовать новые функции. Они приводят ровно к тому результату про который ты написал.
И мне все еще не понятно чем вызвано ограничение на лут при условии запущеных разгрузках. Как часто у тебя на базе горы трупов валяются что отвлечет чара от складирования вещей?
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
23 мая 2015 13:53
Сообщение #13
Mirage,
Не фигово бы еще функцию лута увидеть - может у тебя там тоже ад какой то. И я надеюсь ты это все на последнем 15 инжекте юзаешь?


Инжа15.

Скрипт на лут простейший:
   UO.Set( 'finddistance', '2' )
  
   UO.FindType('0x2006', '-1', '1');        
  
   if uo.FindCount() > 0 and UO.GetDistance("finditem")<=2 then
      UO.DeleteJournal("You can't see|You can't reach|cancelled|You carve|You skin")
      UO.SetReceivingContainer('LootBag')
      wait(100)
      Tryp = UO.GetSerial("finditem")
      
      uo.WaitTargetObject(Tryp);    
      wait(100)
      UO.UseType('0x13F6');     Butcher Knife
      repeat
         wait(100)
         count=count+1
      until UO.InJournal("You carve|You skin") or count==10
      
      uo.UseObject(Tryp)
      wait(700)
      
      if NOT UO.InJournal("You can't see") and NOT UO.InJournal("You can't reach") and NOT UO.InJournal("cancelled") then
         UO.Set('finddistance','2')
         Repeat
            UO.FindType("-1","-1",Tryp)
            UO.Grab("0","finditem");      
            wait(tWaitGrabLoot)
         Until UO.FindCount() == 0
         if UO.FindCount()==0 then
            uo.ignore(Tryp);    
            UO.Charprint('self', '68', " +")            
         end if
        
      end if


Mirage,
И мне все еще не понятно чем вызвано ограничение на лут при условии запущеных разгрузках. Как часто у тебя на базе горы трупов валяются что отвлечет чара от складирования вещей?


дело не в трупах на базе. Просто при запущеном автолуте, разгрузка тупит, иполовину вещей не выгружает.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
23 мая 2015 14:19
Сообщение #14
В начале разгрузки отключи автолут а в конце запусти. И переделай на новые функции.
UO.Set( 'finddistance', '2' )
UO.FindType('0x2006', '-1', '1');
=
UO.FindType('0x2006', '-1', '1',2);
надежнее.
Ps проверь тот скрипт что я отредактировал крашит или нет?
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
23 мая 2015 17:15
Сообщение #15
if not UO.FunRunning('RazgruzkaHome|RazgruzkaBank') then

не работает вообще :no2:

а
if not UO.FunRunning('RazgruzkaHome') and not UO.FunRunning('RazgruzkaBank') then
if not UO.FunRunning('RazgruzkaHome') then

работают

проверено 1111
Sub AutoLoot()
   repeat
      if not UO.FunRunning('RazgruzkaHome|RazgruzkaBank') then
         UO.Set('finddistance',1)
         UO.FindType('0x2006', '-1', '1');    
         if uo.FindCount() > 0 and UO.GetDistance("finditem")<=1 then  
            Loot2()
         endif
         wait(200)
         uo.print("1111");<<<<<<<----------------------------------------
      endif      
   until UO.Dead()
end sub
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
23 мая 2015 17:31
Сообщение #16
Еще 1 вопрос не по теме:
как закрыть сундук/труп/сумку... (просто закрытие контейнера со скрипта)
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
23 мая 2015 18:11
Сообщение #17
Цитата: Mirage
добавь после последнего endif паузу wait(100)

:bye:
закрыть либо правой кнопкой либо отойти
Старший Прапорщик (2538576)9 лет
Ranger
Сообщений: 113
Рег. 19.02.2015
23 мая 2015 21:16
Сообщение #18
Лучше UO.FunRunning вообще не использовать. Пробовал и после последнего endif . крашит всеравно

закрыть либо правой кнопкой либо отойти

просто закрыть скриптом никак?
Последние посетители (0):

 
Сейчас: 25 ноября 2024 02:33