Page 1 of 1

Как проверить сработал ли реколл?

Posted: 2004-07-29 08:12:21
by Robin
Хай Алл!

Помогите с сабжем плиз!

Ну скрипт я сам напишу - просто алгоритм подскажите. Никак додуматься не могу. В скрипте чар реколится по руне - как проверить сработал ли спелл перед тем как дальше скрипт продолжить? Ну можно проверять координаты - но там у меня руны разные могут быть - можно ли не сверяя абсолютные координаты чара и руны проверить успех рекола?

Posted: 2004-07-29 10:42:32
by Ugrum.

Code: Select all

.........
myx=uo.getx()
myy=uo.gety()

REPEAT
           uo.recall  ........         
           wait(3500)
            .............
If myx<>uo.getx() or myy<>uo.gety() then
    recOk = True
EndIf
............
UNTIL recOk

Posted: 2004-07-29 12:07:51
by Edred
Ugrum. wrote:

Code: Select all

.........
myx=uo.getx()
myy=uo.gety()

REPEAT
           uo.recall  ........         
           wait(3500)
            .............
If myx<>uo.getx() or myy<>uo.gety() then
    recOk = True
EndIf
............
UNTIL recOk


Не гарантирует. Иногда чара при физле реколла может отбросить немного, координаты сменятся. В каком-то скрипте, кажись Сергиуса на движение, проверка реколла производится путем проверки смены координат с учетом некоего радиуса... Что тоже не очень удобно если по какой-то причине надо среколлиться рядом. Надежнее проверять звук реколла.

Posted: 2004-07-29 16:29:02
by Robin
Спасибо большое!
Всё гениальное просто.

Чара при физле как таковом вроде не откидывает никогда никуда :) По крайней мере на сфере.

Posted: 2004-07-29 17:29:53
by Edred
Robin wrote:Спасибо большое!
Всё гениальное просто.

Чара при физле как таковом вроде не откидывает никогда никуда :) По крайней мере на сфере.


Именно на сфере и откидывает иногда...

Posted: 2004-07-29 23:03:52
by Yoko
никогда о таком не слышал, это чтото экзотическое

Posted: 2004-07-31 14:52:33
by Edred
Yoko wrote:никогда о таком не слышал, это чтото экзотическое


Может быть, может я ошибаюсь... Но есть еще один аргумент в пользу определения успешности реколла не через смену координат: такая проверка будет успешной только если в момент реколла чар стоит. Если же реколл осуществляется на ходу или бегу (что обычно и требуется в большинстве скриптов, по крайней мере, на добычу) - такая проверка бесполезна...

Posted: 2004-07-31 21:02:57
by Yoko
проверяй ману, журнал или в радиусе перемещение, хотя на самом деле скрипты с реколом на бегу используются редко

Posted: 2004-08-03 12:01:11
by Lord Ruslan Nightmare
1) заранее где-нибудь запомнить, в какое именно место чар реколлится. Та же проверка смены координат - только он будет ждать, пока не окажется в нужной точке (или поблизости от неё)
2) Сложная проверка через звуки (,set soundecho 1 и дальше uo.injournal). Можно улавливать звук физзла. Реколл состоит из двух звуков, следующих друг за другом: звук накастовавшегося телепорта и звук телепортировавшегося в какое-то место NPC (т.е. тебя).
Ну, и журнал, мана....и прочие приметы :)

Posted: 2004-08-04 03:49:30
by doomhammer
sub recall()
var M1,M2,M # описание переменных: м1 -мана до рекола, М2 - после, М - разница
repeat
M1=uo.mana # Запись в пер. М1 кол-ва маны до рекола
uo.waittargetobject('runebook')
uo.cast('Recall')
wait(1000)
M2=uo.mana # Запись маны после рекола
M=M1-M2 # сравнение
if M>0 then# проверка: потрачена ли мана
uo.print('Recall succesfull')
until M>0
end sub

Если мана потрачена, то рекол был успешным.

Posted: 2004-08-05 04:57:45
by evil_Gremlin
Я всегда успешность каста проверяю по мане или регам

Posted: 2004-08-05 08:05:01
by Lord Ruslan Nightmare

Code: Select all

sub recallto(runebook,runenum)
  var recalled = 0,recallcasted,i,countdown = 0
  uo.set("soundecho","1")
  while not recalled
    if uo.mana < 23 then
      meditate()
    endif
    uo.recall(runebook,runenum)
    i = 0
    while i < 10000 and not uo.injournal("[snd 01FC]")
      wait(100)
      i = i + 1
      if countdown > 0 then
        countdown = countdown - 100
      endif
      if uo.injournal("[snd 01FC]) then
        recallcasted = 1
        countdown = 3000
        uo.deletejournal()
      endif
      if uo.injournal("[snd 01FE]") and countdown > 0 then
        recalled = 1
      endif
    wend
  wend
end sub

набросал на глаз, но вроде правильно... временные промежутки условны - надо подобрать более точно. Весь реколл занимает 10 сек, после того, как накастовался реколл, в течение 3 секунд должна произойти телепортация чара в какую-то местность.