Page 1 of 1

нужен совет знатоков по поводу написания скрипта .

Posted: 2005-10-05 21:03:57
by admir
значит есть скрипт в котором 1 раз включая - врубаеца цикл , повтороное вызывание скрипта вызывает else условие в ктоором вызываються параметры которые определяються в цикле скрипта .
грамотный скрипт или подскажете другие идеи ?
Имено сама идея в том что крутиться цикл скрипта, вызываетьяс дубль скрипта,но уже идет условия else , я так понимаю что передавать не глобальные параметры в новый дублированный скрипт не получиться , есть еще 1 задумка - при вызове else условия глобал параметр меняеться и в теле цикла поставить условие на этот глобал параметр для вывода параметров на экран, тогда будут вызываться параметры в томже цикле и не нужно будет глобал использовать .

Code: Select all

sub say_fury()
   UO.DeleteJournal()
   var fury,max,total
   If UO.GetGlobal('furyScriptCheck')<>'on' Then
      UO.SetGlobal('furyScriptCheck','on')
      repeat
      if (UO.InJournal("fury pts") or UO.InJournal("Max fury!") or UO.InJournal("Total:")) Then
                  if (UO.InJournal("Max fury!") or UO.InJournal("Total:")) Then
            if UO.InJournal("Max fury!") Then
               total =uo.journal(UO.inJournal("Max fury!")-1)
               UO.SetGlobal('TotalFuryCheck',total)
            endif
            if UO.InJournal("Total:") Then
               total =uo.journal(UO.inJournal("Total:")-1)
               UO.SetGlobal('TotalFuryCheck',total)
            endif   
         endif
         checklag()
         UO.DeleteJournal()
      endif
      Wait(150)
      until false
   else
      uo.fontcolor("0x0035")
      #UO.msg(uo.GetGlobal('FuryCheck')+'   '+ uo.GetGlobal('TotalFuryCheck'))
      UO.msg(uo.GetGlobal('TotalFuryCheck'))
      checklag()
      UO.DeleteJournal()
      #AdmiR(2005)
   endif   
end sub

Posted: 2005-10-06 00:16:13
by PCGamer
В чём проблема то? Как циклить скрипты? Я делаю основную функцию, которая проверяет через глобальную переменную не запущена ли ещё одна такая функция. И вторая функция, которая вырубает первую функцию, изменяя глобатьную переменную.

Posted: 2005-10-08 00:50:55
by admir
ты не понял мне не нужно вырубать скрипт .

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

Posted: 2005-10-08 13:56:02
by PCGamer
Если параметров много или там массивы какие -нибудь будут, то становится целесообразно параметры в файл сохранять.

ЗЫ: Конкретный ответ можно дать только на конкретный вопрос :D Если не секрет, то зачем тебе это? И где ты это потом будешь использовать?

Posted: 2005-10-09 14:15:08
by Grin
А смысл???
Делаешь так...
Утебя есть основной скрипт по обновлению переменых(Скрипт 1).
Дальше унас есть скрипт (Скрипт 2) который за пускает этот скрипт. Так по чему бы теперь в Скрипте 2 не проверить а не запушен ли скрипт Скрипт 1? если запущен тогда выводим твои глобальные переменые...
в Скрипт 2 все сводится к ифу на проверку furyScriptCheck
дальше если офф то запускаем... если он то вы водим TotalFuryCheck
и FuryCheck ( толкьо вот в скрипте заполнение последне переменной не предусмотренно;) )

Posted: 2005-10-10 17:10:33
by admir
PCGamer - для себя , может я какихто тонкостей не знаю , поэтому и спрашиваю , ну и другие идеи если будут интересные всегда полезно .

Grin, как проверить запущен ли скрипт нормально ? через глобал параметр типа furyScriptCheck как ты казал если 0 то запустить 1 скрипт в котором меняем параметр с 0 на 1 так ?
только может возникнуть ситуация такая , скрипт можно выключить руками в закладке скриптс , а глобал параметр не измениться , и последущий раз сскрипт1 не запуститься . приеться перегружать клиент .

Posted: 2005-10-10 17:26:04
by Titanium
admir wrote:Grin, как проверить запущен ли скрипт нормально ? через глобал параметр типа furyScriptCheck как ты казал если 0 то запустить 1 скрипт в котором меняем параметр с 0 на 1 так ?
только может возникнуть ситуация такая , скрипт можно выключить руками в закладке скриптс , а глобал параметр не измениться , и последущий раз сскрипт1 не запуститься . приеться перегружать клиент .


Ну можно тогда в furyScriptCheck хранить не 1 или 0, а допустим текущее время. И соответственно обновлять его в цикле. А при проверке если расхождение furyScriptCheck с текущим временем составит какую-то величину (> периода обновления), то значит скрипт не запущен.

Posted: 2005-10-10 21:28:53
by Grin
хех не думал даже что вы так далеко зайдете...
делаете просто грубо говоря тацмаут...
Функция которая должна проверятся должна проврерять какуюто глобальную переменую назовем ее запрос...
Как только функция у видала что в глобаьное перемной поевилось ее имя она должна от ветить проверяющей функции ответом по другой глобальной перемоенной... успеть она должна за определенный период времени

Posted: 2005-10-10 23:38:03
by admir
грин объяснил спасибо ) спс я тоже думал что нада таймером туда фигачить , щас придумаю .
а нет примера ни у кого?

Posted: 2005-10-11 22:26:26
by Grin
;) не будем изобретать велосипед и посмотрим на то что уже есть;)
Унас есть такая замечательное особенность окошек как меж оконые сообщения...
Так вот никто никогда не говори окнам что кним пришло сообщение если конечно не вызвали фугнкцию обратотки всообщений... просто окно потупому пытается из очереди извлечь для нее сообщение...
Вот так что есть нас... унас будет 2 функции одна постит запрос
а другая проверяет нет ли запроса... и если есть то обрабатывает чистит за прос и оправляет ответ...
сделаем запрос с синхронизацией;) тоесть наш запрос будет ждать какоето время и после этого как оно пройдет будет смореть результат если он не пришел то сичитаем что функция дед;)

Sub SendQuery(TimeOut, Name)
UO.SetGlobal('MsgQeury', Name)
UO.SetGlobal('MsgNotify', 0)
wait(TimeOut)
Return UO.GetGlobal('MsgNotify')
End Sub

Sub SendNotify(Name)
If UO.GetGlobal('MsgQeury') == Name then
UO.SetGlobal('MsgQeury', '')
UO.SetGlobal('MsgNotify', 1)
End If
End Sub

Собственно и все...
Проблема теперь толкьо в том что бы скрипт проверял пришло ли кнему чего нибудь по чаще то есть в каждом цикле должна быть проверка на сообщение

Posted: 2005-10-11 22:56:42
by admir
вот написал как я понял что нада сделать чтоб скрипт проверял работает ли цикл или нет :


Code: Select all

sub querty()
var n
uo.setglobal('querty_check','1') # чтоб проверка не запускалась еще раз
uo.setglobal('script_check','1') # - то на что будет реагировать цикл
wait(5000) #даем время 5 секунд на генерацию ответа .
if (uo.getglobal('script_check') == '1') then # если ответа не былo то
uo.setglobal('furyScriptCheck','off')   #врубаем цикл скрипта
end if
uo.setglobal('querty_check','0')
end sub


соответственно с теле цикла поставить вот такую проверку
if uo.getglobal('script_check') == '1' then
uo.setglobal('script_check','0')
end if


норм? а
Грин твое не совсем все понял в скрипте но по тексту у меня врод так же .кстати может можно сделать универсальный таймер тоесть чтоб каждый раз не писать новый с новыми глобальными параметрами а допустим - чтоб таймер сам ловил название которое ему передавал скрипт и проверял его .
правда проблема еще в том что у меня таймер может врубиться только 1 раз , 2 таймера одновременно не смогут .

Posted: 2005-10-11 23:27:11
by Grin
Правельно уловил;)
Можешь пойти дальше и заделать небольшой мезанизм по обмегну между функциями...
Смысл будет в том что будет функция которая будет ставить в очередь таймеры на запросы...
У этой функции будет свой локальный внутрений масив... и через глобальные реперменные она будет обращатся ...
Главное добится синхроности что бы не было пере песи наших основных переменных;) в общем если долго мучится можно за варганить полноценый межскиптовый диалог;))

Posted: 2005-10-11 23:43:02
by Sfagnum
я вот не врубаюсь, а зачем через setglobal мутить то?
ИМХО вполне можно просто через переменную глобальную сиё делать.