Время магии

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Время магии

Post by Sebastian »

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

Code: Select all

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 секунды. Просто хотелось бы чтобы чар мог распознать задержку на любой спелл. Буду весьма признателен в помощи, хоть и не смогу отблагодарить ничем кроме слов и вечного почёта )))
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Re: Время магии

Post by Edred »

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


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

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

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

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

Code: Select all

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: Select all

strtime = GetWord( tmpmessage, 4 )


теперь тебе надо преобразовать строку в число. Поэкспериментируй с val(), сможет ли она тебе преобразовать строку в вещественное число. Не помню. Если нет - ищи по форуму, когда-то где-то здесь были функции подходящие. Или напиши сам - тебе надо выловить точку в строке, разделить слева и справа от нее куски строки, преобразовать их в числа и соответствующим образом сложить потом. Ну и добавить 0.7, умножить на 1000 и ждать сколько получится командой wait()
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

Code: Select all

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
Сделал дело - флуди смело !!!
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

;) Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

А зачем нужно время то ?
Важен результат. В данном случае каст.
Неврубаюсь зачем загонятся так ...
Сделал дело - флуди смело !!!
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

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

В сотальном же есть просто много фич в инже которые не документированы - или я просто не нашол к ним документации. А атк как по образованию я далеко не програмист и с скриптингом имел дело ещё в далёёёкой школе, то приходится крутится в три раза больше. :shock:
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

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


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

Тебе я так полагаю надо друг за другом кастать разные спелы ?
Сделал дело - флуди смело !!!
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

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

Code: Select all

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: Select all

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

DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Зачем тут пробелы после уо.мсг??

Code: Select all

uo.msg ("Обкастовываю чара - " +uo.GetName('target'))
uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")
DerMeister сейчас на нейрале!
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

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

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

Речь идет отом что н ена всех шардах спел считается с кастованым после изменения маны! Не ясно чего он хочет...
Если с пел скастован после изменения то и твоего скрипта ему достаточно будет
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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


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

Сравнивать же с Int вообще не корректно, так как Int может спокойно уменьшиться от вражеского каста.
Last edited by Edred on 2006-06-28 22:42:47, edited 1 time in total.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Code: Select all

VAR Target='target'
UO.DeleteJournal()


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

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

Code: Select all

wend 
wait (100)


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

Code: Select all

strtime = GetWord('tmpmessage', 4 )
wend


strtime ты нигде не используешь. Wend лишний вообще, парного while к нему нет.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

Вот когда я поиду изучать програминг хотябы на курсы и позанимаюсь месяцок - можешь спросить снова ))))) Ето все равно что тебя попросит со льда фигурку вырезать.
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

Немогу понять вообще (((
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

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

Code: Select all

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


Но тем не менее хотелось бы понять как сделать вариант с читанием с журнала о времени. Так как инже требуется послекунды чтобы бросить следуюшши таргет с заклинанием на цель - а если бы оно знало время, то можно было ети пол секунды учесть заранее.
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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


Не лучший скрипт. Если один из кастов сфизлит - скрипт просто продолжит кастовать следущие. А надо повторять этот каст, по идее.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Sebastian
Posts: 44
Joined: 2005-08-07 04:23:56

Post by Sebastian »

Ето я заметил. только вот попытка сделать повторение при физле дала ужасные результаты.
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

2Edred
У мня и не сравнивает с INT.
Сделал дело - флуди смело !!!
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Вот один из вариантов перекастовки в случае физла.
Ешо не мешало бы поставить проверку на количество маны и питьё бутылки ТМ ...

Code: Select all

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

Сделал дело - флуди смело !!!
Post Reply