Page 1 of 1
Время магии
Posted: 2006-06-28 03:41:51
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 секунды. Просто хотелось бы чтобы чар мог распознать задержку на любой спелл. Буду весьма признателен в помощи, хоть и не смогу отблагодарить ничем кроме слов и вечного почёта )))
Re: Время магии
Posted: 2006-06-28 09:56:14
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()
Posted: 2006-06-28 10:42:02
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
Posted: 2006-06-28 13:11:49
by Grin

Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)
Posted: 2006-06-28 13:29:26
by Askaneli
Grin wrote:;) Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)
А зачем нужно время то ?
Важен результат. В данном случае каст.
Неврубаюсь зачем загонятся так ...
Posted: 2006-06-28 13:32:36
by Sebastian
В том скрипте надо чтобы мана равна была инте.
В сотальном же есть просто много фич в инже которые не документированы - или я просто не нашол к ним документации. А атк как по образованию я далеко не програмист и с скриптингом имел дело ещё в далёёёкой школе, то приходится крутится в три раза больше.

Posted: 2006-06-28 13:42:56
by Askaneli
Sebastian wrote:В том скрипте надо чтобы мана равна была инте.
В сотальном же есть просто много фич в инже которые не документированы - или я просто не нашол к ним документации. А атк как по образованию я далеко не програмист и с скриптингом имел дело ещё в далёёёкой школе, то приходится крутится в три раза больше.

В моём примере неважно скока у тебя маны изначально
равна она ИНТ или нет каст пройдёт нормально (если канечно маны достаточно для каста).
Тебе я так полагаю надо друг за другом кастать разные спелы ?
Posted: 2006-06-28 14:12:54
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
Posted: 2006-06-28 14:30:54
by DerMeister =)
Зачем тут пробелы после
уо.мсг??
Code: Select all
uo.msg ("Обкастовываю чара - " +uo.GetName('target'))
uo.msg ("Чар - " +uo.GetName('target') +" полностью обкастован")
Posted: 2006-06-28 15:01:07
by Grin
Askaneli wrote:Grin wrote:;) Уж как минимум автор пронего не забыл;) Речь не об этом
из его скрипта не понятно чье время соответствет действительности. в журнале как я понимаю время меньше чем в реальности... но это как то еще и проверил через тот скрипт что он ему дал хз... по логике он должен был дать точное время;)
А зачем нужно время то ?
Важен результат. В данном случае каст.
Неврубаюсь зачем загонятся так ...
Речь идет отом что н ена всех шардах спел считается с кастованым после изменения маны! Не ясно чего он хочет...
Если с пел скастован после изменения то и твоего скрипта ему достаточно будет
Posted: 2006-06-28 22:28:19
by Edred
Askaneli wrote:Простая проверка на UO.MANA уже видимо не в моде.
Тебе просто не попадались шарды, которые при физле каста снимают ману в том же количестве, как и при успехе каста.
Сравнивать же с Int вообще не корректно, так как Int может спокойно уменьшиться от вражеского каста.
Posted: 2006-06-28 22:37:06
by Edred
Code: Select all
VAR Target='target'
UO.DeleteJournal()
И на фига тебе эта локальная переменная? К тому же еще с именем, совпадающим с объектом? Чтобы легче было запутаться?
И зачем тут трешь журнал? Ты в нем до следующего стирания ничего не проверяешь.
Зачем здесь ждем?
Code: Select all
strtime = GetWord('tmpmessage', 4 )
wend
strtime ты нигде не используешь. Wend лишний вообще, парного while к нему нет.
Posted: 2006-06-28 23:54:43
by Sebastian
Вот когда я поиду изучать програминг хотябы на курсы и позанимаюсь месяцок - можешь спросить снова ))))) Ето все равно что тебя попросит со льда фигурку вырезать.
Posted: 2006-06-29 00:07:10
by Sebastian
Немогу понять вообще (((
Posted: 2006-06-29 00:31:30
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
Но тем не менее хотелось бы понять как сделать вариант с читанием с журнала о времени. Так как инже требуется послекунды чтобы бросить следуюшши таргет с заклинанием на цель - а если бы оно знало время, то можно было ети пол секунды учесть заранее.
Posted: 2006-06-29 01:34:21
by Edred
Sebastian wrote:Вот что вышло с другой стороны.
Не лучший скрипт. Если один из кастов сфизлит - скрипт просто продолжит кастовать следущие. А надо повторять этот каст, по идее.
Posted: 2006-06-29 02:02:08
by Sebastian
Ето я заметил. только вот попытка сделать повторение при физле дала ужасные результаты.
Posted: 2006-06-29 05:41:32
by Askaneli
2Edred
У мня и не сравнивает с INT.
Posted: 2006-06-29 05:45:02
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