Как одной кнопкой включить и выключить скрипт

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Как одной кнопкой включить и выключить скрипт

Post by GAUHAR »

Может кто-то ищет решение как одной кнопкой включать и выключать скрипт.
Хочу поделится своим.

Code: Select all

#########################################################################
# АЛГОРИТМ:                                                             #
#  Имеем переключатель с тримя положениями: 0 1 2                       #
#  ПЕРВОЕ НАЖАТИЕ ХОТКЕЯ - ЗАПУСК СКРИПТА                               #
# До первого запуска переключатель = 0, или не существует.              #
#  При первом запуске вначале скрипта проверяем равен ли переключатель 1,
# если равен, то устанавливаем переключатель равным 2 и выходим из      #
# скрипта, если не равен, тогда устанавливаем переключатель равным 1.   #
# Далее в основном цикле скрипта постоянно делается проверка равен ли   #
# переключатель 2.                                                      #
#  ВТОРОЕ НАЖАТИЕ ХОТКЕЯ - ЗАВЕРШИТЬ РАБОТУ СКРИПТА                     #
#  При повторном нажатии хоткея произходит загрузка еще одной копии     #
# скрипта, в начале которого поверяется равен ли переключатель 1, так   #
# как переключатель уже равен 1, то копия тут же выгружается, а         #
# переключатель устанавливается равным 2.                               #
#  А так как в первом скрипте постоянно делается проверка переключателя #
# и когда он становится равным 2, то и первый скрипт завершает работу   #
# и устанавливает переключатель в 0, чтобы при следующем запуске        #
# переключатель не был равен 1.                                         #
#  ЗАМЕЧАНИЕ: В качестве переключателя используется глобальная переменная.
# Так как значения таких переменных глобальные для всех скриптов текущей
# копии Injection, то необходимо следить чтобы эти переменные были      #
# уникальны для каждого скрипта использующего данный алгоритм.          #
#-----------------------------------------------------------------------#
sub TEST()
   # ... Ваши переменные
   # ... и начальные условия
   # ...
   if UO.GetGlobal('ST') == '1' then
      UO.SetGlobal('ST','2')
      wait(5000) # Cтрока используется для примера,
                 # чтобы проследить как выгрузится скрипт.
      return
    else
      UO.SetGlobal('ST','1')
   endif
   while 1 == 1
      if UO.GetGlobal('ST') == '2' then
         wait(5000)             # Cтрока используется для примера.
         UO.SetGlobal('ST','0')
         return
      endif
      # ... Ваш код.
      # ...
      # ...
      wait(2000)                # Cтрока используется для примера.
      UO.Print("ИДЕТ ТЕСТ ...") # Cтрока используется для примера.
   wend
endsub
#-----------------------------------------------------------------------#
#########################################################################

И еще одна, как мне кажется, полезная процедура.

Code: Select all

#########################################################################
# ЖДАТЬ НАЖАТИЯ КЛАВИШИ                                                 #
# Если в каком-то месте скрипта необходимо сделать паузу, которая       #
# снимается нажатием определенной клавиши или комбинацией клавиш, то    #
# в том месте скрипта прописываем вызов процедуры wait_keystroke(), и   #
# на клавишу (снимающую паузу) биндим вызов процедуры keystroke():      #
#   exec keystroke                                                      #
#-----------------------------------------------------------------------#
SUB keystroke()
   UO.SetGlobal('Wait_Pressing','off')
endsub
SUB wait_keystroke()
   UO.SetGlobal('Wait_Pressing','on')
   repeat
      wait(1000)
   until UO.GetGlobal('Wait_Pressing') == 'off'
endsub
#-----------------------------------------------------------------------#
#########################################################################

Хочу выразить свою благодарность
Yoko за классную пограмму
Edred'а за уроки по скриптингу, до них я просто боялся подойти к Injection, жаль что написаны не все
Всем экспертам за их помощь и внимание к чужим проблемам
Всем авторам разместившим свои скрипты на этом форуме, я многому по ним научился и многое из них потырил пока учился писать свои, так как сам не программист
Всем тем кто задавал глупые и умные вопросы, и тем кто на них отвечал.

============
ПОБЕЖДАЕТ ТОТ, КТО ВЕРИТ, ЧТО ОН МОЖЕТ ПОБЕДИТЬ.
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Запустить скрипт можно прописав его в хоткеях. А вырубить "килл процесс" если не ошибаюсь.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

добавлю в стопку :roll:

Code: Select all

########################################## 
Sub test()
##########################################
   If uo.getglobal('test')=='11' then
   uo.setglobal('test',00)
   uo.print(' !!! -= Test: off =- !!! ')
   uo.exec('terminate test')
   else
   uo.setglobal('test',11)
   uo.print(' !!! -= Test: on =- !!! ')
   end if
#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#

;script
;script
;script

#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
                                       
   uo.setglobal('test',00)
   uo.print(' !!! -= Test: off =- !!! ')
##########################################
end sub
##########################################
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

slonopotam wrote:Запустить скрипт можно прописав его в хоткеях. А вырубить "килл процесс" если не ошибаюсь.

Да, конечно, я об этом знаю, но так тоже удобно, всего-то несколько строк в коде.
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Спасибо NMY. Я не знал, что вызывающий скрипт может терминировать сам себя UO.Exec('terminate TEST') и все скрипты с таким же именем.
Так получилось ещё проще:

Code: Select all

sub TEST()
   if UO.GetGlobal('test')=='11' then
      UO.SetGlobal('test','00')
      UO.Print(' !!! -= Test: off =- !!! ')
      UO.Exec('terminate TEST')
    else
      UO.SetGlobal('test','11')
      UO.Print(' !!! -= Test: on =- !!! ')
   endif
   UO.SetGlobal('test','11')

   while 1==1
      UO.Print("ИДЕТ ТЕСТ")
      wait(1000)
   wend
endsub
Post Reply