Несколько вопросов, "готовые скрипты" |
Несколько вопросов, "готовые скрипты" |
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 00:59
Сообщение #1
|
Копаюсь в теме "Готовые скрипты" для интереса, решил подправить этот: - медитация частенько прерывается, не закончившись нормально и не имея шанса прокачаться - даблкасты непонятно откуда - щит постоянно вываливается из рук Доправил примерно до такого: sub mmph() UO.SetArm('def') repeat UO.Cast('Magic Arrow', 'self') UO.DeleteJournal() repeat wait(500) until UO.Life<UO.Str or UO.InJournal('The spell fizzles') or UO.InJournal('You parry the blow') wait(100) repeat while UO.Mana<UO.INT UO.UseSkill('Meditation') wait(500) wend until UO.InJournal('You are at peace') wait(100) Heal() until uo.dead() end sub sub Heal() while UO.Life<UO.STR UO.BandageSelf() wait(100) uo.deletejournal() repeat wait(200) until UO.InJournal('Вы восстановили') or UO.InJournal('Попытка лечения') UO.Arm('def') wend end sub Собственно вопросы: 1. repeat while UO.Mana<UO.INT UO.UseSkill('Meditation') wait(500) wend until UO.InJournal('You are at peace')') Если не вставлять проверку журнала - следующее по ходу скрипта действие отменяет медитацию на показателе в 100 маны, до надписи "You are at peace" и прокачки медитации. Wait(500) зафлуживает экран, бОльший wait - добавляет лишнее время на каждый цикл неудавшейся медитации. Да, это скрипт и на флуд пофиг, но нет ли какого либо оператора, умеющего а) послать скрипт напрямую на какую либо строку кода; б) отслеживающего удачное применение скилла? 2. repeat wait(500) until UO.Life<UO.Str or UO.InJournal('The spell fizzles') or UO.InJournal('You parry the blow') Просто ожидание выполнения действия с подтверждением в журнале. Есть ли оператор, не дающий скрипту выполняться далее без соблюдения условия и искусственного зацикливания, вроде: ждем, пока (условие) 3. В код насована куча коротких wait'ов, без которых начинаются подлагивания, периодические краши клиента и прочие даблкасты. Это "фишка" инжекта, или существует какой-нибудь антилаг-костыль? 4. При стамине недостаточной для применения бинта клиент сразу крашится, это из-за зацикливания попытки лечения? 5. Не могу поймать причину по которой скрипт периодически перестает работать, хотя числится запущенным и исправно работал несколько минут назад. Не вордлсейв. p.s. в .chm копался долго но ничего этакого не нашел |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 01:22
Сообщение #2
|
5. Поймал. При попытке лечения: Выберите цель для наложения бинта Почему то отменяет таргетtargeting cancelled unexpected target info |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 09:27
Сообщение #3
|
Тээээкс... Ну для надо понимать что при отсутствии можератора (кроме как админа проекта) и запрете редактировать свои посты в "Готовых" скриптах не всегда бывают годные решения. И что самое важное (что собственно и видно на примере этого скрипта) многое зависит от уровня умения. Про это покажу ниже. А теперь по вопросам: 1) Кусок на медитацию представлен простенький так как скрипт на уровне качнул-забыл. Нормальную медитацию можно поискать в автолоаде Зомби. Моя старая во время раскачки была типо того: Sub Meditation() Я тоже не особо запаривался всякими таймерами. Использовал скрипт пока не вошел в транс, и выходил когда набирал полную ману. При потере транса входил в него повторно. Но у меня по любасу войдет и домедитирует до полного столба.if uo.mana < uo.int/3 then uo.DeleteJournal() uo.UseSkill('Meditation') while uo.mana < uo.int If uo.injournal("lose|потеряли") then UO.WarMode(0) uo.DeleteJournal() repeat uo.UseSkill('Meditation') wait(100) until uo.injournal("meditative trance|вошли|должны|must wait") else wait(100) end if wend ; wait(500) endif end sub 2) "Есть ли оператор" Он уже есть в примере. until UO.Life<UO.Str. Пока жизнь меньше силы. Даже если проверка на журнал не сработает сработает этот выход из цикла. 3) Это не куча :))) Куча была раньше когда после каждого действия, каждой ловушки ставили wait (10)/(50). Вот тогда была реальная }|{опа. Пауза не должна быть меньше 100 и не обязательно больше 500. Но БЕЗ паузы любой цикл крашнет в течении ближайших миллисекунд. Самое лучшее решение - динамическая пауза - крутить в цикле паузу 100 с проверкой журнала И условия как у тебя в вопросе 2) Можно еще таймер добавить. 4) Надо брать троль серьги, какую нито броньку регенерирующую стамину и добавить пару строк перед UO.BandageSelf() вот таких : while UO.Stamina < 100 wait(100) wend UO.BandageSelf() Либо жрать тоннами рефрешки. 5.1) скрипт периодически перестает работать или начинает сбоить потому что не учитывается уровень скиллов. Например щит падает потому что паринга не ГМ, медитация часто слетает потому что она не ГМ, каст может филзануть или несколько раз пройти потому что умение не ГМ. Паузы при использовании умения или каста уменьшаются пропорционально росту умения. Например 30 магии - каст занимает 3 секунды. 100 магии и эвалюции каст пройдет за 2 секунды. У тебя не хватает уровня умения а пауза при использовании указана на более высокий уровень - вот и слетает. 5.2) У тебя после использования бинтов стоит несколько пауз. Перед делжурналом пауза не нужна кстати. Но вот после Арма если жизни не набрались скрипт перекидывает сразу опять на бинтование -> После арма как раз нужна пауза. Причем около 500-700. Но я бы вынес арм ниже wend - зачем пялить щит если ты не отлечился - ведь он слетит опять и тебе придется ждать пока он не переоденется? ЗЫ Если качать не таким универсальным скриптом а более точечным - стрелка в себя/лечение/медитация кастеды/медитация то скиллы подрастут побыстрее. А паринг лучше вообще при старте выбрать и докачать в катакомбах на крысах или на кукле (втором чаре), вместе с хилингом и боевыми. |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 12:43
Сообщение #4
|
Мощно, спасибо ) sub mmph() UO.SetArm('def') repeat UO.Cast('Magic Arrow', 'self') UO.DeleteJournal() repeat wait(100) until UO.Life < UO.STR or UO.InJournal('The spell fizzles|You parry the blow') wait(100) UO.UseSkill('Meditation') UO.DeleteJournal() repeat if UO.InJournal('You lose') then UO.UseSkill('Meditation') UO.DeleteJournal() wait(100) else wait(100) endif until UO.InJournal('You are at peace') if UO.Stamina<50 then UO.FindType(0x0E24, 0x064F, 2) UO.UseObject('finditem') endif Heal() until uo.dead() end sub sub Heal() wait(100) while UO.Life<UO.STR UO.BandageSelf() wait(100) uo.deletejournal() repeat wait(100) until UO.InJournal('Вы восстановили|Попытка лечения|Targeting Cancelled|Unexpected target info|Не пытайтесь') wend UO.Arm('def') wait(300) end sub Медитацию оптимизировал, убрал зависания на бинтах, натыкал щадящих пауз и динамических пауз, вытащил эквип щита из цикла, проверил на ворлдсейвах и вообще на лаги. Тролль серьги тащат, на более высоких лвлах скилла с быстрыми кастами и шустрой медитацией уже иногда будет срабатывать рефрешка плюс неплохо бы одеть что-либо на реген стамины дополнительно. Цитата: Mirage У тебя не хватает уровня умения а пауза при использовании указана на более высокий уровень - вот и слетает. Я не так что-то понял, или как раз динамические паузы с условиями эту проблему полностью снимают? :)Цитата: Mirage Он уже есть в примере. until UO.Life<UO.Str Нет, я имел ввиду что-то вроде бейсиковского GOTO, который при аккуратном использовании вне циклов очень жизнь упрощает.Цитата: Mirage Если качать не таким универсальным скриптом а более точечным А он и не для кача собственно, просто оптимизация ради оптимизации, как интересную задачу решить. Перфекционизм ) |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 13:12
Сообщение #5
|
Про скилл я имел ввиду основу которую ты использовал sub ProMed() repeat UO.Cast('Magic Arrow', 'self') wait (2000) 2 секунды и неколышит. Лагануло, паузнуло, слетело. А не факт что 2 секунды тратится. goto оператор есть, но его не очень удобно использовать - можно сбить циклы и инжект умрет. 1: if что то там then goto 1 else goto 2 endif 2: Как то исторически сложилось что из if и for выкинуть можно а из циклов лучше не выкидывать. ХЗ мне привычнее понаставлять условий. я бы после каста проверку на ману сделал а не на жизнь. Жизнь может быстро отрегенерить, а мана только после медитации. Ты же не надел обсидиановое ожерелье? ;) И по эстетизме - я бы делал скрипт модулями. sub main_kach() repeat medit() четотамеще() heal() until пока не умер endsub а ниже уже кусочки составлял. А то у тебя лечилка вынесена амедитация раскидана по скрипту. никрасифо |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 13:24
Сообщение #6
|
Ясно, ну от двух секунд я избавился, там теперь тоже динамика стоит. until UO.Life < UO.STR or UO.InJournal('The spell fizzles|You parry the blow') Я предусматривал три варианта развития событий: 1. урон прилетел, хп уменьшилось 2. спелл зафизлился, хп не уменьшилось 3. урон прилетел в блок, хп уменьшилось или не уменьшилось А ты значит вот так просто предлагаешь until UO.Mana < UO.Int после каста и все будет работать. Ну твою же мышь, ну я намудрил... В хелпе инжекта не вижу информации о goto, шлет на номер строки? Цитата: Mirage а ниже уже кусочки составлял. А то у тебя лечилка вынесена амедитация раскидана по скрипту. никрасифо Так лечилка не у меня вынесена, а в том скрипте, я ж его просто правил, феншуем с красивым форматированием пока не маялся.p.s. три часа полета, ни одного сбоя |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 15:01
Сообщение #7
|
Mirage, лови красифость ; В паке: бинты, SA, рефреш банки ; На персе: фул мана, щит в руке, что-либо на реген стамины (тролль серьги и проч.) sub mmph() UO.SetArm('def') repeat Arrow() Med() StCheck() Heal() until uo.dead() end sub sub Arrow() UO.Cast('Magic Arrow', 'self') UO.DeleteJournal() repeat wait(100) until UO.Mana < UO.INT wait(100) end sub sub Med() UO.UseSkill('Meditation') UO.DeleteJournal() repeat if UO.InJournal('You lose') then UO.UseSkill('Meditation') UO.DeleteJournal() wait(100) else wait(100) endif until UO.InJournal('You are at peace') end sub sub StCheck() if UO.Stamina<50 then UO.FindType(0x0E24, 0x064F, 2); тип банок, цвет банок на рефреш стамины UO.UseObject('finditem') endif while UO.Stamina < 20; если со стаминой совсем все плохо wait(100) wend end sub sub Heal() wait(100) while UO.Life<UO.STR UO.BandageSelf() wait(100) uo.deletejournal() repeat wait(100) until UO.InJournal('Вы восстановили|Попытка лечения|Targeting Cancelled|Unexpected target info|Не пытайтесь') wend UO.Arm('def') wait(300) end sub |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 15:51
Сообщение #8
|
Почти но еще не совсем на 5 :) С работы приду покажу еще пару фишек. Подправишь и можно заливать в "готовые" :) |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 16:05
Сообщение #9
|
Указание бутылок на старте и добор из сундука? :D |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 19:59
Сообщение #10
|
Указывать бутылки вроде ненужно. Сережек с бронькой хватить должно за уши. Регов взять 2-3К - на ночь хватить должно. Попробуй вот так скрипт как работать будет Можно еще стопарей добавить - кончились реги, нет щита и т.д. |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 20:40
Сообщение #11
|
Цитата: Mirage until UO.InJournal('You are at peace') or UO.Mana>=UO.Int Нельзя, 100/100 маны это еще не удачное завершение медитации (you are at peace), а скрипт ее обрубит и она не прокачается.Цитата: Mirage UO.Timer()>LastTimer+80 Можно чуть поподробнее - что за стоп в 8 секунд и зачем? На текущий момент у меня сразу после каста (а значит маны стало меньше, даже в случае физзла) стартует следующий шаг, отслеживается динамической паузой, которой лаги не помеха, уже много часов оттарабанил "без единого разрыва".Хилинг вырос в короткие сроки под 95, так что условие хила изменилось на UO.Life<75 (можно поменять автоматом, отслеживаю показатель хилинга, но это уже перебор), а хилит он на 40-60 хп, итого стамины за глаза с одних серьг, без всяких броников, Можно еще заморочиться с вымачиванием бинтов в тазике, так они ж ничего не весят, так что черт с ними. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 20:52
Сообщение #12
|
Цитата: ShakS она не прокачается засчитывается ВХОД (когда мана пошла копиться), а не завершение :) Таймер на предмет неожиданностей в журнале. Поменяется какое нибудь слово, или админ возьмет да руссифицирует игру :)). Я тестил на кукле со всеми скиллами 30 - стамина улетает без дополнительных подкачек. Бинты как и реги весят не много и стоят копейки. Если бы была боевая раскачка где хиты убегают быстрее -> хилишься чаще - > бинтов надо больше тогда имело бы смысл их полоскать. А так - пробежал по овечкам и магазинам и хватит на пару чаров раскачать. |
|
|
|
Сообщений: 43 Рег. 13.10.2015 |
19 сентября 2016 21:20
Сообщение #13
|
Цитата: Mirage засчитывается ВХОД (когда мана пошла копиться), а не завершение :) Да быть того не может, ап скилла идет в конце медитации же? Или что, можно слить ману в ноль, а потом врубать медитацию, обламывая ее через 2 секунд вармодом и прокачать за полчаса?Цитата: Mirage Я тестил на кукле со всеми скиллами 30 - стамина улетает без дополнительных подкачек. Ну тут да, нечистый эксперимент, у моего подопытного анатомия гм |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 сентября 2016 21:40
Сообщение #14
|
ShakS, Про рост в процессе я перепутал, это было на другом сервере. Пардонте |
|
|
|
Сейчас: 23 ноября 2024 22:54 |