Page 1 of 2

Защита запуска.

Posted: 2006-05-15 14:55:18
by Krelyn
Я не хочу чтобы скрипт запускался более чем в одном экземпляре т.е. как бы я не хитрил с переменными - заблокировать запуск скритов - всегда можно запустить второ скрипт просто зажав кнопку....
Пример того что должно быть

саб Вася()
иф саб Вася уже включен
конец скрипта
элс
уо.мсг("Хай, я Вася,не килл плиз!")
ендиф
енд саб


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

Posted: 2006-05-15 16:11:06
by Scripts Writer
Тоже ранее замарачивался такой штукой, когда нужен был хайдинг в пвп-но частенько жмёшь 2 раза и один хайд другому мешает ... я выходил из этой ситуации биндом на кнопку-отключение скрипта.

Posted: 2006-05-15 16:27:57
by Krelyn
я просто не весь скрипт выложил......я написал так что второй скрипт запустится только если зажать кнопку)т.е. независимо от скорости нажатия всёравно 2 открывается..не всегда но часто........для меня бинд на завершение скрипта- не выход =(...вот буду думать....

Posted: 2006-05-15 21:53:39
by Scripts Writer
Попробуй привязаться к журналу или же действию скрипта ...

( допустим при обкасте-привязка к увеличению брони ,
при лорах-привязка к месагам в журнале ).

Posted: 2006-05-16 00:21:49
by Mihail
уо.сетГлобал
уо.гетГлобал
уо.сетИзиУо
уо.гетИзиУо

Posted: 2006-05-16 07:53:44
by Krelyn
Сет и Гет пробовал - работает, но второй всёранво проскакивает если кнопку зажать.......



Может попробовать запуск скрипта из конфига УО?


типа макрос в УО -
Say ,exec bot


там ненастолько сильно быстро залипание клавиш)

или может что нить можно сделать с залипанием клавиш чтоб помедленнее?)

Posted: 2006-05-16 08:17:17
by DerMeister =)
Krelyn wrote:Сет и Гет пробовал - работает, но второй всёранво проскакивает если кнопку зажать.......



Может попробовать запуск скрипта из конфига УО?


типа макрос в УО -
Say ,exec bot


там ненастолько сильно быстро залипание клавиш)

или может что нить можно сделать с залипанием клавиш чтоб помедленнее?)

В настройках клавиатуры в виндовсе поставь задержку перед началом повтора побольше, а скорость повтора уменьши =)

Posted: 2006-05-16 08:43:53
by Grin
при использовании глобальных переменых ничего никогда не проскочит...
Но лутше всего устанавливать переменые на запрет на какоето время... не на все время действия это что бы избежать повторов при на чале действия (зажими и тд)
а если не обходими обезопасить скрипт полностью до завершенито больше интервал ожидания ставим или по завержению фцнкциональной ычасти скрипта.
в случаи таймера есть проблема в передачи параметров... Возникают сложности когда необходими гарантировать 100% передачу параметров

Code: Select all

sub SetTimer()
uo.setGlobal(uo.GetGlobal('valname'), '1')
wait(val(uo.GetGlobal('waittime')))
end sub
sub somescript()
if uo.GetGlobal('myscript') <> '1' then
uo.SetGlobal('valname', 'myscript')
uo.SetGlobal('waittime', '1500') #пауза после установки значения
uo.exec("exec SetTimer")
... #сам скрипт
end if
end sub


PS В новом скриптовом модуле планируется организзовать передачу параметров скриптам вызваных через exec

Posted: 2006-05-16 09:30:46
by SLAK
Grin wrote:В новом скриптовом модуле планируется организзовать передачу параметров скриптам вызваных через exec

Это хорошо...

Posted: 2006-05-16 22:03:48
by Krelyn
Grin wrote:при использовании глобальных переменых ничего никогда не проскочит...
Но лутше всего устанавливать переменые на запрет на какоето время... не на все время действия это что бы избежать повторов при на чале действия (зажими и тд)
а если не обходими обезопасить скрипт полностью до завершенито больше интервал ожидания ставим или по завержению фцнкциональной ычасти скрипта.
в случаи таймера есть проблема в передачи параметров... Возникают сложности когда необходими гарантировать 100% передачу параметров

Code: Select all

sub SetTimer()
uo.setGlobal(uo.GetGlobal('valname'), '1')
wait(val(uo.GetGlobal('waittime')))
end sub
sub somescript()
if uo.GetGlobal('myscript') <> '1' then
uo.SetGlobal('valname', 'myscript')
uo.SetGlobal('waittime', '1500') #пауза после установки значения
uo.exec("exec SetTimer")
... #сам скрипт
end if
end sub


PS В новом скриптовом модуле планируется организзовать передачу параметров скриптам вызваных через exec

просто по привычке юзаю переменную Изи т.к. работаю тесно с ней...попробую через глобальную.......надеюсь помогет) спасибо

Posted: 2006-05-16 22:24:32
by Grin
да хоть СетИзи
разници почти 0 просто лезть в рееестор что бы хранить там переменые... помойму это бредовато;) куда ближе сетглобал;)

Posted: 2006-05-17 00:13:03
by Edred
Grin wrote:лезть в рееестор что бы хранить там переменые... помойму это бредовато;) куда ближе сетглобал;)


Объясни это Дестракшену... :wink:

Posted: 2006-05-17 08:28:16
by Savage
Это оправдано токо в одном случае, когда с переменной работают несколько запущенных инжектов.

Posted: 2006-05-17 09:37:43
by Krelyn
sub healcast()
if uo.GetGlobal("Cast")== "0" then
uo.SetGlobal('Cast','1')
uo.cast("Heal","self")
var xmana = uo.mana
while xmana == uo.mana
wait(5)
wend
uo.SetGlobal('Cast','0')
endif
endsub



как не пытаюсь.....если зажать кнопку с хилом проскакивают 2.....

Posted: 2006-05-17 12:53:40
by Grin
страна почему он вообще работал;)) Просто в твоем случаи нужно проинициализировать глобальную переменую...
а в скрипте в самом начале просто поставь задержку маленьку... хотястрано времени в полне должно хватать что бы запуск был только единожды... одно дело что утебя не много другая система магии и мана забирается сразуже

Code: Select all

sub healcast()
wait(100) #prigelanii mogno umen'shit'
if uo.GetGlobal("Cast")<>"1" then
uo.SetGlobal('Cast','1')
uo.cast("Heal","self")
var xmana = uo.mana
while xmana == uo.mana
wait(5)
wend
uo.SetGlobal('Cast','0')
endif
endsub

Posted: 2006-05-17 13:01:08
by Savage
Попробуй так что ли, но лучше наверное делать через очередь. Видел тут кто то кидал конвейер кастов.
А может проще тренировать руки? :)

Code: Select all

sub healcast() 
   wait(200)
   if uo.GetGlobal("Cast")== "0" then
      uo.SetGlobal('Cast','1')
      uo.cast("Heal","self")
      var xmana = uo.mana
      while UO.Mana >= xmana
         wait(300)
      wend
      uo.SetGlobal('Cast','0')
   endif
endsub

Posted: 2006-05-17 13:06:05
by Grin
Толку от конвеера? Если там и тут используются глобальные переменый которые почемуто не успевают выстовиться...

Posted: 2006-05-17 13:32:26
by Savage
Ну если отрывисто нажимать кнопки но раньше времени окончания работы скрипта то все будет норм, а если зажимать то и никакая пауза в начале скрипта не поможет.

А от конвейера будет толк - либо он удалит из очереди лишний вызов скрипта либо исполнит его. При зажимании хоткея просто очередь наполнится вызовами скрипта. А процедура обработки конвейера не станет два раза одновременно запускать один скрипт. Вообщем такой подход надежнее по моему.

Posted: 2006-05-17 16:44:50
by Krelyn
я скрипт не себе пишу......я итак кастую далеко не медленно......уу меня на конекте руками быстрее намного т.к. заранее таргет кидаю ......а с этим лучше придумайте что нить)

Posted: 2006-05-17 18:11:39
by Grin
Savage wrote:Ну если отрывисто нажимать кнопки но раньше времени окончания работы скрипта то все будет норм, а если зажимать то и никакая пауза в начале скрипта не поможет.

А от конвейера будет толк - либо он удалит из очереди лишний вызов скрипта либо исполнит его. При зажимании хоткея просто очередь наполнится вызовами скрипта. А процедура обработки конвейера не станет два раза одновременно запускать один скрипт. Вообщем такой подход надежнее по моему.

ну а как потвойму очеред заполняетя?;)) Если тут в пары строчках глобаьная переменая не успеет востановится...
то в конвеер она полюбомуц пройдет... только эфлеект может получится двойного каста... то он откастит нормально но потом все равно еще каст сделает;)) Выход это писать по мима имя скрипта еще и время что бы сравнивал с предыдущим. но как бы это не крак бы это не было плохо;) все зависет как очередь формируется... Если копированием срок то возможно и так все пройдет тосто одновременно сформируется 2 строки которые друг друга переапишут... вообще чушь какого фига глобальная переменая так медленно срабатывает;)))

Krelyn там пару постов раньше я предложил тебе вариант с задержкой в начале попробуй его.