Yoko
http://forum.yoko.com.ua/

Время магии
http://forum.yoko.com.ua/viewtopic.php?f=20&t=8084
Page 1 of 1

Author:  Sebastian [ 2006-06-28 03:41:51 ]
Post subject:  Время магии

Вобщем я снова со своим бредом лезу сюда. У нас на сервере при касте магии сообщается время каста. К сожалению оно указывается на 0,7 меньше чем спелл кастуется - проверял таким скриптиком.

Code:
sub counter()
var i, time
i=1
UO.DeleteJournal()
UO.Cast('Bless','self') #Поставьте сво спелл
While UO.Mana==UO.Int
           wait(50)
           i=i+1
     wend
wait(500)
Time=i/20
uo.TextOpen()
uo.TextPrint(str(time) + ' ' + 'second')
end sub


У меня такой вопрос - как сделать чтобы чар читал их журнала - определял ето самое время что говорится
Надпись: 'Время каста - 2.1 сек'
прибавлял к нему 0.7 секунд и естественно ждал 2.8 секунды. Просто хотелось бы чтобы чар мог распознать задержку на любой спелл. Буду весьма признателен в помощи, хоть и не смогу отблагодарить ничем кроме слов и вечного почёта )))

Author:  Edred [ 2006-06-28 09:56:14 ]
Post subject:  Re: Время магии

Sebastian wrote:
Надпись: 'Время каста - 2.1 сек'


Этот текст появляется в журнале? Тебе надо его ловить и ждать сколько указано плюс 0.7 сек?

1. После появления сообщения набери в клиенте
,showjournal 100
и проверь какая точно выскакивает мессага в журнале инжекта.

2. Проверь на разных кастах - не отличаются ли по структуре сообщения.

Если сообщения все одинаковые, отличается только время, то принцип такой:

Code:
VAR tmpmes, strtime, realtime
VAR commonmes = 'Время каста'   ; тут совпадающая часть фразы для всех кастов
UO.DeleteJournal()
...кастуем куда что надо...
repeat
   wait(100)
until UO.InJournal( commonmes )
tmpmessage = UO.Journal( UO.InJournal( commonmes ) - 1 )


теперь у тебя в tmpmessage нужная строка из журнала. Выдрать нужную часть можно функцией GetWord(), возьми ее в моей подписи в автолоаде или здесь на форуме, она много где есть... Это будет выглядеть так:

Code:
strtime = GetWord( tmpmessage, 4 )


теперь тебе надо преобразовать строку в число. Поэкспериментируй с val(), сможет ли она тебе преобразовать строку в вещественное число. Не помню. Если нет - ищи по форуму, когда-то где-то здесь были функции подходящие. Или напиши сам - тебе надо выловить точку в строке, разделить слева и справа от нее куски строки, преобразовать их в числа и соответствующим образом сложить потом. Ну и добавить 0.7, умножить на 1000 и ждать сколько получится командой wait()

Author:  Askaneli [ 2006-06-28 10:42:02 ]
Post subject: 

Простая проверка на UO.MANA уже видимо не в моде.
Просто перед кастом запомнить скока маны и палить в цикле что настанет раньше - физл или уменьшение маны.

Code:
var tmana
tmana = uo.mana
uo.deletejournal()
uo.cast('Имя кастуемого спела')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana

Author:  Grin [ 2006-06-28 13:11:49 ]
Post subject: 

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

Author:  Askaneli [ 2006-06-28 13:29:26 ]
Post subject: 

Grin wrote:
;) Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)

А зачем нужно время то ?
Важен результат. В данном случае каст.
Неврубаюсь зачем загонятся так ...

Author:  Sebastian [ 2006-06-28 13:32:36 ]
Post subject: 

В том скрипте надо чтобы мана равна была инте.

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

Author:  Askaneli [ 2006-06-28 13:42:56 ]
Post subject: 

Sebastian wrote:
В том скрипте надо чтобы мана равна была инте.

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


В моём примере неважно скока у тебя маны изначально
равна она ИНТ или нет каст пройдёт нормально (если канечно маны достаточно для каста).

Тебе я так полагаю надо друг за другом кастать разные спелы ?

Author:  Sebastian [ 2006-06-28 14:12:54 ]
Post subject: 

Да я пытаюсь сделать обкаст скрипт вот что было до )

Code:
sub upcast()
VAR Target='target'
   
uo.Print('Укажите цель: ')
uo.Exec('addobject target')
while uo.Targeting()
wait(100)
wend
wait (100)
uo.msg ("Обкастовываю чара - " +uo.GetName('target'))

     
         UO.DeleteJournal()
         UO.Cast('Bless', 'target')
         wait(2300)
         UO.DeleteJournal()
         UO.Cast('Strength', 'target')
         wait(2100)
         UO.DeleteJournal()
         UO.Cast('Cunning', 'target')
         wait(2100)
         UO.DeleteJournal()
         UO.Cast('Agility', 'target')
         wait(2300)

      uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")
end sub


а вот что пытаюсь сделать и не выходит )) пишет парсерные ошибки


Code:
sub upcast()
VAR tmpmessage, strtime, realtime
VAR commonmes = 'Скорость каста:'
VAR Target='target'
UO.DeleteJournal()


   
   
uo.Print('Укажите цель')
uo.Exec('addobject target')
while uo.Targeting()
wait(100)
wend
wait (100)
uo.msg ("Обкастовываю чара - " +uo.GetName('target'))

     
         UO.DeleteJournal()
         UO.Cast('Bless', 'target')
         repeat
   wait(100)
until UO.InJournal( commonmes )
tmpmessage = UO.Journal( UO.InJournal( commonmes ) - 1 )
strtime = GetWord('tmpmessage', 4 )
wend

         
      uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")
end sub


Sub GetWord( st, nom )
; (c) Edred
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            tmpst = mid( st, start, i - start )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub


Author:  DerMeister =) [ 2006-06-28 14:30:54 ]
Post subject: 

Зачем тут пробелы после уо.мсг??
Code:
uo.msg ("Обкастовываю чара - " +uo.GetName('target'))
uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")

Author:  Grin [ 2006-06-28 15:01:07 ]
Post subject: 

Askaneli wrote:
Grin wrote:
;) Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)

А зачем нужно время то ?
Важен результат. В данном случае каст.
Неврубаюсь зачем загонятся так ...

Речь идет отом что н ена всех шардах спел считается с кастованым после изменения маны! Не ясно чего он хочет...
Если с пел скастован после изменения то и твоего скрипта ему достаточно будет

Author:  Edred [ 2006-06-28 22:28:19 ]
Post subject: 

Askaneli wrote:
Простая проверка на UO.MANA уже видимо не в моде.


Тебе просто не попадались шарды, которые при физле каста снимают ману в том же количестве, как и при успехе каста.

Сравнивать же с Int вообще не корректно, так как Int может спокойно уменьшиться от вражеского каста.

Author:  Edred [ 2006-06-28 22:37:06 ]
Post subject: 

Code:
VAR Target='target'
UO.DeleteJournal()


И на фига тебе эта локальная переменная? К тому же еще с именем, совпадающим с объектом? Чтобы легче было запутаться?

И зачем тут трешь журнал? Ты в нем до следующего стирания ничего не проверяешь.

Code:
wend 
wait (100)


Зачем здесь ждем?

Code:
strtime = GetWord('tmpmessage', 4 )
wend


strtime ты нигде не используешь. Wend лишний вообще, парного while к нему нет.

Author:  Sebastian [ 2006-06-28 23:54:43 ]
Post subject: 

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

Author:  Sebastian [ 2006-06-29 00:07:10 ]
Post subject: 

Немогу понять вообще (((

Author:  Sebastian [ 2006-06-29 00:31:30 ]
Post subject: 

Вот что вышло с другой стороны.

Code:
sub upcast()
var tmana

   
uo.Print('Укажите цель: ')
uo.Exec('addobject target')
while uo.Targeting()
wait(100)
wend
uo.msg ("Обкастовываю чара - " +uo.GetName('target'))

     
tmana = uo.mana
uo.deletejournal()
UO.Cast('Bless', 'target')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana 
tmana = uo.mana
uo.deletejournal()
UO.Cast('Strength', 'target')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana       
tmana = uo.mana
uo.deletejournal()
UO.Cast('Agility', 'target')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana       
tmana = uo.mana
uo.deletejournal()
UO.Cast('Cunning', 'target')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana       

      uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")
end sub


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

Author:  Edred [ 2006-06-29 01:34:21 ]
Post subject: 

Sebastian wrote:
Вот что вышло с другой стороны.


Не лучший скрипт. Если один из кастов сфизлит - скрипт просто продолжит кастовать следущие. А надо повторять этот каст, по идее.

Author:  Sebastian [ 2006-06-29 02:02:08 ]
Post subject: 

Ето я заметил. только вот попытка сделать повторение при физле дала ужасные результаты.

Author:  Askaneli [ 2006-06-29 05:41:32 ]
Post subject: 

2Edred
У мня и не сравнивает с INT.

Author:  Askaneli [ 2006-06-29 05:45:02 ]
Post subject: 

Вот один из вариантов перекастовки в случае физла.
Ешо не мешало бы поставить проверку на количество маны и питьё бутылки ТМ ...
Code:
var tmana,flag
repeat
flag=1
tmana = uo.mana
uo.deletejournal()
uo.cast('Имя кастуемого спела')
repeat
   wait(10)
until uo.injournal("The spell fizzles.") or uo.injournal("You lack") or uo.mana<tmana
if uo.injournal("The spell fizzles.") then
flag=0
end if
until flag=1


Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/