помогите пжслта с атакои
Moderators: Murderator+, Murderator
помогите пжслта с атакои
Недавно начал разбираться со скриптами так что подскажите пжалста по атаке
Идея такая 1) выбираем цель
2) Если пункт 1) существует то кидаем в цель что то
3)пошла атака
4)если цель уже задана коммандои .buy то выполнение с пункта 2
Вот скрипт но как там сделать циклами или как
Var Enemy='Enemy'
sub war()
uo.print('Select Enemy:')
uo.exec('addobject Enemy')
while uo.targeting()
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
а то при нажатии снова цель выбирать надо. Как сделать проверку по объекту что он уже определен
вообщем надо чтоб при повторном нажатии цель не выбиралась а сразу шла атака
Идея такая 1) выбираем цель
2) Если пункт 1) существует то кидаем в цель что то
3)пошла атака
4)если цель уже задана коммандои .buy то выполнение с пункта 2
Вот скрипт но как там сделать циклами или как
Var Enemy='Enemy'
sub war()
uo.print('Select Enemy:')
uo.exec('addobject Enemy')
while uo.targeting()
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
а то при нажатии снова цель выбирать надо. Как сделать проверку по объекту что он уже определен
вообщем надо чтоб при повторном нажатии цель не выбиралась а сразу шла атака
Re: помогите пжслта с атакои
Во первых, не советую доставать модераторов двойными темами - могут и по ушам надавать.
Во вторых, ты бы мог без проблем написать этот скрипт сам прочитай ты парочку начальных уроков скриптинга.
В третьих, я сегодне добрый:
Во вторых, ты бы мог без проблем написать этот скрипт сам прочитай ты парочку начальных уроков скриптинга.
В третьих, я сегодне добрый:
Code: Select all
sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
;Функция работает как инжектовская addObject но ждёт пока игрок не укажет нормальную цель.
;Если ждём дольше timeout - скрипт прерывает работу. Timeout может быть 0 - значит ждать бесконечно
Sub addObjectWait(name, timeout)
var timeLeft
repeat
UO.AddObject(name,0)
if uo.waiting() then
uo.canceltarget()
endif
UO.AddObject(name)
timeLeft = timeout
while (NOT uo.Targeting()) AND (timeLeft > 0)
wait(50)
timeLeft = timeLeft - 50
wend
while (uo.Targeting()) AND (timeLeft > 0)
wait(50)
timeLeft = timeLeft - 50
wend
until ((timeLeft > 0) OR (timeout <= 0)) AND (UO.GetSerial(name) > 0)
return UO.GetSerial(name)
endsub
Re: помогите пжслта с атакои
Точно я еще и wend забыл СЕНКИ
Re: помогите пжслта с атакои
Только я не понял че он стрелку после щелчка не кидает а только при повторном клике
Re: помогите пжслта с атакои
мож первыи лучше так
Sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
while uo.targeting()
wait(200)
Wend
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
Sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
while uo.targeting()
wait(200)
Wend
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
Re: помогите пжслта с атакои
Извиняюсь, не заметил ошибки в твоём скрипте и поэтому не исправил в своём:
Code: Select all
sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
uo.Cast('Magic Arrow','Enemy') ;Тут и в следующей строке не хватает кавычек
uo.attack('Enemy')
endsub
Re: помогите пжслта с атакои
Тогда Следущии вопрос
Я делаю скрипт чтоб все враги были в переменных.Если им атачить то таргеты в остальных скриптах на атаку будут попадать на врага автоматом так же можно сделать и добавлять друзеи и сразу хил на них в скрипте автоматом работать будет. Только в Objects добавить Frends и Enemy.
и так что мы имеем
переменные
Var manap='manap' (мана)
Var fscroll='fscroll' (скролы FlameStrike)
var Enemy='Enemy' (враг)
Var ManaNeed=20 ####На шарде где я играю надо минимум 20 маны чтоб прошел каст FS со скролла
в объекты прописываем fscroll(скролы ФС) manap(тотл маны) и Enemy(враг)
в Hotkey прописываем exec war(берем таргет на врага), exec FSS(фс во врага со сролла),exec castScroll(Общии каст для всех скролов на врага),exec manadrink(пить ману) и забиваем на клавишы
###само взятие цели только каст один черт через раз и лучшеб чтобы таргет не выползал если те опять надо Magic Arrow в него же кинуть. ну тут моно добавить наверно проверку по объекту, то есть если он уже определен тогда сразу кидать Magic Arrow вощем сам наверное разберусь
sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
uo.Cast('Magic Arrow','Enemy') ;
uo.attack('Enemy')
endsub
########дальнеишая атака(Flame Strike со скролов )
sub FSS()
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")#####нет маны у плеиера
endif
if uo.count(fscroll)<>0 then
castScroll('fscroll',20,Enemy)
uo.print('fscroll: '+STR(UO.Count('fscroll')))
else
UO.Print("NO SCROLLS!")
end if
Endsub
##############
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')#######!!!!! Тут не доработка лучше наверное по типу будет или где?
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)#####Тут не доработка лучше наверное по типу будет или где?
UO.UseObject('finditem')
endif
endif
endsub
###############
sub manadrink()#Отдельныи скрипт на питье маны
if uo.count(manap)<>0 then
uo.usetype('manap')
uo.print('manap: '+STR(UO.Count('manap')))
else
uo.print ("NO MANA POTIONS")####тотлы маны кончились
endsub
Вопрос все ли правильно в стуктуре и будет ли работать связка макросов sub Fss()>>sub castScroll()>>sub manadrink() (причем у меня все скрипты в одном фаиле) или как это моно организовать не через exec чтоб на клавиши лишнее не забивать а то я хз вчера только за скрипты сел так вообщем вывожу че куда (на php пишу) но не знаток.И как сделать чтоб проверка и каст был по типу скрола. Спасибо.
Я делаю скрипт чтоб все враги были в переменных.Если им атачить то таргеты в остальных скриптах на атаку будут попадать на врага автоматом так же можно сделать и добавлять друзеи и сразу хил на них в скрипте автоматом работать будет. Только в Objects добавить Frends и Enemy.
и так что мы имеем
переменные
Var manap='manap' (мана)
Var fscroll='fscroll' (скролы FlameStrike)
var Enemy='Enemy' (враг)
Var ManaNeed=20 ####На шарде где я играю надо минимум 20 маны чтоб прошел каст FS со скролла
в объекты прописываем fscroll(скролы ФС) manap(тотл маны) и Enemy(враг)
в Hotkey прописываем exec war(берем таргет на врага), exec FSS(фс во врага со сролла),exec castScroll(Общии каст для всех скролов на врага),exec manadrink(пить ману) и забиваем на клавишы
###само взятие цели только каст один черт через раз и лучшеб чтобы таргет не выползал если те опять надо Magic Arrow в него же кинуть. ну тут моно добавить наверно проверку по объекту, то есть если он уже определен тогда сразу кидать Magic Arrow вощем сам наверное разберусь
sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
uo.Cast('Magic Arrow','Enemy') ;
uo.attack('Enemy')
endsub
########дальнеишая атака(Flame Strike со скролов )
sub FSS()
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")#####нет маны у плеиера
endif
if uo.count(fscroll)<>0 then
castScroll('fscroll',20,Enemy)
uo.print('fscroll: '+STR(UO.Count('fscroll')))
else
UO.Print("NO SCROLLS!")
end if
Endsub
##############
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')#######!!!!! Тут не доработка лучше наверное по типу будет или где?
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)#####Тут не доработка лучше наверное по типу будет или где?
UO.UseObject('finditem')
endif
endif
endsub
###############
sub manadrink()#Отдельныи скрипт на питье маны
if uo.count(manap)<>0 then
uo.usetype('manap')
uo.print('manap: '+STR(UO.Count('manap')))
else
uo.print ("NO MANA POTIONS")####тотлы маны кончились
endsub
Вопрос все ли правильно в стуктуре и будет ли работать связка макросов sub Fss()>>sub castScroll()>>sub manadrink() (причем у меня все скрипты в одном фаиле) или как это моно организовать не через exec чтоб на клавиши лишнее не забивать а то я хз вчера только за скрипты сел так вообщем вывожу че куда (на php пишу) но не знаток.И как сделать чтоб проверка и каст был по типу скрола. Спасибо.
Re: помогите пжслта с атакои
Во первых, не рекоммендую использовать закладки обьектов и типов в инжекте. Лучше все нужные типы прописывать сразу в скрипт. Так будет меньше проблем при передаче сложного скрипта кому-то другому или на другую инжу.
В общем лучше делать так (это не рабочий скрипт, а просто пример чтобы понять идею):
Короче как можно меньше использовать AddObject и AddType.
Если-же цель нужно взять с таргета, то это лучше всего делать так (базовыми средствами инжекта):
Тот-же код с помощью моей addObjectWait:
Кстати да, вот тебе еще в помощь полезная функция addTypeWait. Работает так-же как и addObjectWait но добавляет не обьект а тип:
Но не смотря на мой совет не использовать UO.AddObject, бывают случаи когда лучше всё-же его использовать. Использовать нужно тогда - когда тебе переменную нужно передать между несколькими отдельными скриптами. В твоём случае есть несколько скриптов - на бросание разных заклинаний, аттак и т.д. Так вот для врага лучше задействовать переменную инжекта:
Легко сделать к примеру так:
Тогда везде где нужно можно использовать его примерно так:
Далее:
Опять-же всплыла проблема с тем что ты используешь для хранения свитков - инжектовую переменную. Лучше сделать примерно так:
Думаю так проблема решится. Теперь запустив exec FSS получится такой ход проверок:
1) Если враг уже был кем-то выбран - будем использовать его.
2) Если враг не был выбран или убежал очень далеко (8 тайлов в скрипте выше) - покажем прицел, и игрок выберет нового врага.
3) В этой точке враг у нас уже точно есть (после первых двух пунктов) в переменной. Так что делаем с ним что хотим.
Не вижу почему она не должна работать
Так-же как и везде:
Вроде всё ответил. Если что пропустил - спрашивай. Люблю помогать тем кто хочет сам что-то понять, а то развелось тут всяких "помогите доработать мининг"...
В общем лучше делать так (это не рабочий скрипт, а просто пример чтобы понять идею):
Code: Select all
var fs_scroll_type = "0x1234"
var human_type = "0x4321"
sub kill_human()
UO.FindType(human_type,-1,'ground')
UO.WaitTargetObject('finditem')
UO.UseType(fs_scroll_type)
endsub
Короче как можно меньше использовать AddObject и AddType.
Если-же цель нужно взять с таргета, то это лучше всего делать так (базовыми средствами инжекта):
Code: Select all
sub test()
UO.AddObject('tempObject') #Добавляем таргет в временную инжектовую переменную 'tempObject'
while (not UO.Targeting()) #Ждём появления прицела
wait(50)
wend
while (UO.Targeting()) #Ждём исчезновения прицела (цель выбрана)
wait(50)
wend
var enemy = UO.GetSerial('tempObject') #Записываем наш предмет в нормальную переменную а не в инжектовую кавычковую переменную
UO.Attack(enemy) # Нормально используем её как обычную переменную и забываем о нашем temp Object
endsub
Тот-же код с помощью моей addObjectWait:
Code: Select all
sub test()
var enemy = addObjectWait('tempObject',0)
UO.Attack(enemy)
endsub
Кстати да, вот тебе еще в помощь полезная функция addTypeWait. Работает так-же как и addObjectWait но добавляет не обьект а тип:
Code: Select all
Sub addTypeWait(name,timeout)
var object = addObjectWait('sys_typeobj',timeout)
var objtype = UO.GetGraphics(object)
UO.AddType(name,objtype)
return objtype
endsub
Но не смотря на мой совет не использовать UO.AddObject, бывают случаи когда лучше всё-же его использовать. Использовать нужно тогда - когда тебе переменную нужно передать между несколькими отдельными скриптами. В твоём случае есть несколько скриптов - на бросание разных заклинаний, аттак и т.д. Так вот для врага лучше задействовать переменную инжекта:
Code: Select all
sub selectEnemy()
UO.Print('Select enemy')
addObjectWait('Enemy',0)
UO.Attack('Enemy')
endsub
sub castFS()
UO.Cast('Flamestrike','Enemy')
endsub
ну тут моно добавить наверно проверку по объекту, то есть если он уже определен тогда сразу кидать Magic Arrow вощем сам наверное разберусь
Легко сделать к примеру так:
Code: Select all
sub addOrGetObject(name,distance,timeout)
var oldObject = UO.GetSerial(name) ;Вытягиваем обьект из памяти инжи по его имени
if (oldObject > 0) AND ((UO.GetDistance(oldObject) <= distance) OR (distance == -1)) then ;Если такой обьект есть и расстояние до него меньше указанного
return oldObject ;то его и возвращаем
else
return addObjectWait(name,timeout) ;Иначе добавляем новый обьект (появляется таргет) в указанное имя
endif
endsub
Тогда везде где нужно можно использовать его примерно так:
Code: Select all
sub selectEnemy()
addOrGetObject('Enemy',8,-1) ;Если враг уже есть, и находится на расстоянии 8 клеток - то просто его и используем, иначе - добавляем новый обьект. При этом последний параметр указывает что прицел будет висеть бесконечно
endsub
sub cast_fs()
var enemy = addOrGetObject('Enemy',8,-1)
UO.Cast('FlameStrike',enemy)
endsub
Далее:
...
if uo.count(fscroll)<>0 then
castScroll('fscroll',20,Enemy)
uo.print('fscroll: '+STR(UO.Count('fscroll')))
else
UO.Print("NO SCROLLS!")
end if
Endsub
##############
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')#######!!!!! Тут не доработка лучше наверное по типу будет или где?
...
Опять-же всплыла проблема с тем что ты используешь для хранения свитков - инжектовую переменную. Лучше сделать примерно так:
Code: Select all
sub FSS()
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1) ;Вытягиваем нашего врага или добавляем нового если старый убежал или умер
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy) ;Передаём просто тип свитка и нашего найденного врага
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target) #здесь к нам прийдёт уже не ИД а тип свитка
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target) ;Ничего не надо менять, враг то у нас один, зачем нам его тип?
UO.UseObject('finditem')
endif
endif
endsub
Думаю так проблема решится. Теперь запустив exec FSS получится такой ход проверок:
1) Если враг уже был кем-то выбран - будем использовать его.
2) Если враг не был выбран или убежал очень далеко (8 тайлов в скрипте выше) - покажем прицел, и игрок выберет нового врага.
3) В этой точке враг у нас уже точно есть (после первых двух пунктов) в переменной. Так что делаем с ним что хотим.
Вопрос все ли правильно в стуктуре и будет ли работать связка макросов sub Fss()>>sub castScroll()>>sub manadrink()
Не вижу почему она не должна работать

И как сделать чтоб проверка и каст был по типу скрола.
Так-же как и везде:
Code: Select all
UO.FindType(scrollType,scrollColor,container)
if (UO.FindCount()) then
UO.WaitTarget....
UO.UseObject('finditem') ;В файндайтеме у нас сидит последний найденный айтем
endif
Вроде всё ответил. Если что пропустил - спрашивай. Люблю помогать тем кто хочет сам что-то понять, а то развелось тут всяких "помогите доработать мининг"...
Re: помогите пжслта с атакои
Beyonder wrote:Во первых, не рекоммендую использовать закладки обьектов и типов в инжекте. Лучше все нужные типы прописывать сразу в скрипт. Так будет меньше проблем при передаче сложного скрипта кому-то другому или на другую инжу.
Согласен скролы и тотлы маны лучше по типу т.к он не меняется
Как я пропишу например тип Flame strike скроллов сразу в скрипт на каст если у меня скрипт на каст для всех скролов один тогда он у меня по одному только скролу кастить будет или ты имеешь ввиду что типы будут уже прописаны в саму атаку со скрола
Например:
sub FSS()
Var fscroll='тип скролла' ############ Здесь что ли?
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print(fscroll+': '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target) #здесь к нам прийдёт уже не ИД а тип свитка
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
sub manadrink() ###и куда тогда прописывать type бутылки маны она ведь этот скрипт общии и должен работать как с отдельнои кнопки так и в связке на все касты
Var manap='тип бутылки' ### и сюда ???? Ну да вообще то все норм Поняна
if uo.count(manap)<>0 then
uo.usetype('manap')
uo.print('manap+': '+STR(UO.Count('manap')))
else
uo.print ("NO MANA POTIONS")
endsub
Оппп в конце вроде допер так и будет похоже или поправь. А как же быть с переменнои ManaNeed ведь она распространяется не только на каст Flame Strike но также задеиствована и в скрипте на каст sub castScroll() и примеру каста Light там будет совсем другое нужное кол-во маны.
Аааа вроде наверно так
sub FSS()
Var fscroll='тип скролла'
Var ManaNeed='нужное колво маны на каст'
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
Last edited by lavdenis on 2010-03-30 18:03:31, edited 2 times in total.
Re: помогите пжслта с атакои
И так что мы имеем в сумме
#Вопрос по ManaNeed
####################################
sub FSS()
Var fscroll='тип скролла'
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
#####################################
sub addOrGetObject(name,distance,timeout)
var oldObject = UO.GetSerial(name)
if (oldObject > 0) AND ((UO.GetDistance(oldObject) <= distance) OR (distance == -1)) then
return oldObject
else
return addObjectWait(name,timeout)
endif
endsub
######################################
sub castScroll(scrolType,ManaNeed,Target)
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
####################################
sub manadrink()
Var manap='тип бутылки'
if uo.count(manap)<>0 then
uo.usetype('manap')
uo.print('manap: '+STR(UO.Count('manap')))
else
uo.print ("NO MANA POTIONS")
endsub
#####################################
Итого связка из 5-ти скриптов (sub war()>>sub FSS()>>sub addOrGetObject(...)>>sub castScroll(...)>>sub manadrink()) только с ManaNeed не все понятно и с взятием таргета sub war() еще разбираюсь. То есть осталось забить на кнопки exec manadrink и exec FSS и по идее должно работать, но потестить пока не могу т.к. работу работаю. Вообщем отпишу.А пока и на этом огромное спасибище за труд.Хммм...Раньше все зависило от быстроты рук теперь от знания програмных языков +)Ж
Сюдаже моно забубенить авто атаку
sub AutoWar()
var Enemy = addTypeWait('Enemy',8,-1) ###Получает тип
repeat
if UO.InJournal("attacking you") Then
Enemy = UO.JournalSerial(UO.InJournal("attacking you")-1)
enif
if (Какая переменная на тип,objtype?) =0x0190 and (objtype???)=0x0191 Then ###Проверка Если человек тогда атачит
UO.Cast('Magic Arrow',Enemy)
uo.attack('Enemy')
UO.DeleteJournal()
endif
Wait(2000)
Else
until false
endsub
Sub addTypeWait(name,distance,timeout)###Определяет тип
var object = addObjectWait('sys_typeobj',timeout)
var objtype = UO.GetGraphics(object)
UO.AddType(name,objtype)
return objtype
endsub
Покатит ли такое просто потестить нет возможности?И вообще если тебе нужен автоскрипт то надо же чтоб он все время работал тогда какова вероятность зависания компа при этом и если тебя одновременно будут атачить не один а человек шесть что тогда
#Вопрос по ManaNeed
####################################
sub FSS()
Var fscroll='тип скролла'
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
#####################################
sub addOrGetObject(name,distance,timeout)
var oldObject = UO.GetSerial(name)
if (oldObject > 0) AND ((UO.GetDistance(oldObject) <= distance) OR (distance == -1)) then
return oldObject
else
return addObjectWait(name,timeout)
endif
endsub
######################################
sub castScroll(scrolType,ManaNeed,Target)
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
####################################
sub manadrink()
Var manap='тип бутылки'
if uo.count(manap)<>0 then
uo.usetype('manap')
uo.print('manap: '+STR(UO.Count('manap')))
else
uo.print ("NO MANA POTIONS")
endsub
#####################################
Итого связка из 5-ти скриптов (sub war()>>sub FSS()>>sub addOrGetObject(...)>>sub castScroll(...)>>sub manadrink()) только с ManaNeed не все понятно и с взятием таргета sub war() еще разбираюсь. То есть осталось забить на кнопки exec manadrink и exec FSS и по идее должно работать, но потестить пока не могу т.к. работу работаю. Вообщем отпишу.А пока и на этом огромное спасибище за труд.Хммм...Раньше все зависило от быстроты рук теперь от знания програмных языков +)Ж
Сюдаже моно забубенить авто атаку
sub AutoWar()
var Enemy = addTypeWait('Enemy',8,-1) ###Получает тип
repeat
if UO.InJournal("attacking you") Then
Enemy = UO.JournalSerial(UO.InJournal("attacking you")-1)
enif
if (Какая переменная на тип,objtype?) =0x0190 and (objtype???)=0x0191 Then ###Проверка Если человек тогда атачит
UO.Cast('Magic Arrow',Enemy)
uo.attack('Enemy')
UO.DeleteJournal()
endif
Wait(2000)
Else
until false
endsub
Sub addTypeWait(name,distance,timeout)###Определяет тип
var object = addObjectWait('sys_typeobj',timeout)
var objtype = UO.GetGraphics(object)
UO.AddType(name,objtype)
return objtype
endsub
Покатит ли такое просто потестить нет возможности?И вообще если тебе нужен автоскрипт то надо же чтоб он все время работал тогда какова вероятность зависания компа при этом и если тебя одновременно будут атачить не один а человек шесть что тогда
Re: помогите пжслта с атакои
1) Насчёт типов, лучше всего описывать такие типы отдельно в самом начале скрипта. Они тогда будут как константы.
К примеру:
2) Насчёт маны, вроде всё верно, только ты забыл кое-что:
Насчёт автоматики:
В целом никаких проблем не будет. Всё будет отлично работать.
У меня даже когда-то давно был скрипт на полную автоматику, там еще и встроенная ходилка была которая сама бегала за врагом, сбивала стрелками его заклинания, рубила его, лечилась и т.д. Что-то вроде ПвП бота. Тоже никогда не крашила.
В инжекте самое опасное место - поиск обьектов на земле и их игнорирование. Тоесть если на земле дофига обьектов, и ты делаешь UO.FindType(...,...,'ground'), то рано или поздно инжа крашнет. Или если ты юзаешь UO.Ignore или UO.IgnoreReset() то тоже крашнет. Все остальные функции обычно стабильно работают.
К примеру:
Code: Select all
var scrollType = "0x1234" #Обьявляем вне функций, в начале файла все типы которые нам нужны.
sub funct()
UO.DoSomething(scrollType)
endsub
2) Насчёт маны, вроде всё верно, только ты забыл кое-что:
Code: Select all
Var fscroll='тип скролла'
sub FSS()
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,Enemy) #### Тут вероятно тоже ManaNeed нужно. Я бы вообще верхний if mana < mananeed перенёс в функцию castscroll...
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
Насчёт автоматики:
Code: Select all
sub AutoWar()
var Enemy ### = addTypeWait('Enemy',8,-1) ## А зачем тебе этот тип? Ты его нигде не используешь :)
repeat
if UO.InJournal("attacking you") Then
Enemy = UO.JournalSerial(UO.InJournal("attacking you")-1)
endif
if (UO.GetGraphics(Enemy) == '0x0190') OR (UO.GetGraphics(Enemy) == '0x0191') Then ###Примерно так. Кстати, типы всегда лучше писать в кавычках.
UO.Cast('Magic Arrow',Enemy)
uo.attack(Enemy) #Без кавычек, ты же обьект атакуешь а не тип
UO.DeleteJournal()
endif
Wait(2000)
until UO.Dead()
endsub
В целом никаких проблем не будет. Всё будет отлично работать.
У меня даже когда-то давно был скрипт на полную автоматику, там еще и встроенная ходилка была которая сама бегала за врагом, сбивала стрелками его заклинания, рубила его, лечилась и т.д. Что-то вроде ПвП бота. Тоже никогда не крашила.
В инжекте самое опасное место - поиск обьектов на земле и их игнорирование. Тоесть если на земле дофига обьектов, и ты делаешь UO.FindType(...,...,'ground'), то рано или поздно инжа крашнет. Или если ты юзаешь UO.Ignore или UO.IgnoreReset() то тоже крашнет. Все остальные функции обычно стабильно работают.
Re: помогите пжслта с атакои
Beyonder wrote:У меня даже когда-то давно был скрипт на полную автоматику, там еще и встроенная ходилка была которая сама бегала за врагом, сбивала стрелками его заклинания, рубила его, лечилась и т.д. Что-то вроде ПвП бота. Тоже никогда не крашила.
+))))Ж Включил и забыл.
Beyonder wrote:В инжекте самое опасное место - поиск обьектов на земле и их игнорирование. Тоесть если на земле дофига обьектов, и ты делаешь UO.FindType(...,...,'ground'), то рано или поздно инжа крашнет. Или если ты юзаешь UO.Ignore или UO.IgnoreReset() то тоже крашнет. Все остальные функции обычно стабильно работают.
Интересно что получится у меня с ресом на друга
script.dll - не твое добро?
Дааа с кавычками виновен
Last edited by lavdenis on 2010-03-28 17:12:25, edited 2 times in total.
Re: помогите пжслта с атакои
Я смотрю тут и из за бугра педалят +)))))
Last edited by lavdenis on 2010-03-28 18:06:24, edited 1 time in total.
Re: помогите пжслта с атакои
Beyonder wrote:Var fscroll='тип скролла'
sub FSS()
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,Enemy) #### Тут вероятно тоже ManaNeed нужно. Я бы вообще верхний if mana < mananeed перенёс в функцию castscroll...
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
Неа.+) Как так то в castScroll у меня ведь каст скролл общии а как скрипт на другои тогда каст допустим молнии там ManaNeed=10 и как быть чет у меня после работа башка не варит вообще не вывожу. Пример
sub Light()
Var lightscroll='тип скролла'
Var ManaNeed=10
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count( lightscroll)<>0 then
castScroll( lightscroll,20,Enemy)
uo.print(' lightscroll: '+STR(UO.Count( lightscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target)
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
он ведь тож будет на CastScroll ссылаться ManaNeed у нас две а переменная и значение одно а надо чтоб значения менялись. По моему это элементарно но я че то залип надо наверное отдохнуть. Поиду пивалдер бушлатить +)))))
Re: помогите пжслта с атакои
Вроде появилась мысль но моно ли передать переменную между скриптами????. То есть от глобальнои переменнои>>основоному скрипту>>вспомогательному скрипту.uo.SetGlobal????
Например:
Var i=ManaNeed
sub FSS()
Var i=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
...
Endsub
sub castScroll(scrolType,ManaNeed,Target)
Var ... ???????????????????????????????
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
Например:
Var i=ManaNeed
sub FSS()
Var i=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
...
Endsub
sub castScroll(scrolType,ManaNeed,Target)
Var ... ???????????????????????????????
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
Re: помогите пжслта с атакои
Не понял в твоём скрипте какую именно ты переменную хочешь передать и зачем. Опиши подробнее что ты хочешь сделать.
Re: помогите пжслта с атакои
sub FSS()
Var fscroll='тип скролла'
Var ManaNeed=20 # одна переменная
If UO.Mana<ManaNeed then #тут проверка на нужное кол-во маны героя
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then # здесь он ману пьет автоматом если кол-во маны героя меньше нужного кол ва маны(так вот скрипт на каст общии а переменная то тут окуда возьмется надо чтоб нужное колво маны передавалось из предидущего или как то по другому)
manadrink()
endif
if UO.Mana>=ManaNeed then ## Тут тоже самое
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
чтоб моно было не париться а сразу допустим
sub Drugoi_kakoinit_kast()
Var fscroll='тип скролла'
Var ManaNeed=10 #### Отсюда и в общий на каст
If UO.Mana<ManaNeed then #тут проверка на нужное кол-во маны героя
UO.Print("NO MANA!")
endif
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then ##### сюда!!!
manadrink()
endif
if UO.Mana>=ManaNeed then#### и сюда!!!
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
вообщем чтоб кол во маны нужнои шло из скриптов на касты в общии каст со скролов sub castScroll Var ManaNeed=10>>>>>>>sub castScroll(scrolID,ManaNeed,Target) ManaNeed
Var fscroll='тип скролла'
Var ManaNeed=20 # одна переменная
If UO.Mana<ManaNeed then #тут проверка на нужное кол-во маны героя
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,Enemy)
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then # здесь он ману пьет автоматом если кол-во маны героя меньше нужного кол ва маны(так вот скрипт на каст общии а переменная то тут окуда возьмется надо чтоб нужное колво маны передавалось из предидущего или как то по другому)
manadrink()
endif
if UO.Mana>=ManaNeed then ## Тут тоже самое
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
чтоб моно было не париться а сразу допустим
sub Drugoi_kakoinit_kast()
Var fscroll='тип скролла'
Var ManaNeed=10 #### Отсюда и в общий на каст
If UO.Mana<ManaNeed then #тут проверка на нужное кол-во маны героя
UO.Print("NO MANA!")
endif
sub castScroll(scrolID,ManaNeed,Target) #отдельныи скрипт на каст со скролов
UO.FindType(scrolID,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then ##### сюда!!!
manadrink()
endif
if UO.Mana>=ManaNeed then#### и сюда!!!
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
вообщем чтоб кол во маны нужнои шло из скриптов на касты в общии каст со скролов sub castScroll Var ManaNeed=10>>>>>>>sub castScroll(scrolID,ManaNeed,Target) ManaNeed
Last edited by lavdenis on 2010-03-29 10:48:48, edited 2 times in total.
Re: помогите пжслта с атакои
минуточку но вроде ведь все же правильно
sub FSS()
Var ManaNeed=20######1)Отсюда
If UO.Mana<ManaNeed then >>>1)Сюда
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,'Enemy') #####2) и отсюда
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target)####2) сюда
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then 2)####### и сюда Тут у меня сомнение
manadrink()
endif
if UO.Mana>=ManaNeed then ####2)и сюда Тут у меня сомнение
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
дак че я парюсь или нет??
sub FSS()
Var ManaNeed=20######1)Отсюда
If UO.Mana<ManaNeed then >>>1)Сюда
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,20,'Enemy') #####2) и отсюда
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target)####2) сюда
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then 2)####### и сюда Тут у меня сомнение
manadrink()
endif
if UO.Mana>=ManaNeed then ####2)и сюда Тут у меня сомнение
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
дак че я парюсь или нет??
Re: помогите пжслта с атакои
Дык я поэтому и спросил, вроде всё есть и всё передаётся, а ты куда-то еще передать её хочешь 
Всё верно, только в кастскролл я бы передал так:
castScroll(fscroll,ManaNeed,'Enemy')
Зачем в двух местах 20 писать если можно переменную использовать...

Всё верно, только в кастскролл я бы передал так:
castScroll(fscroll,ManaNeed,'Enemy')
Зачем в двух местах 20 писать если можно переменную использовать...
Re: помогите пжслта с атакои
То есть если я правильно понял такое тоже покатит? (добавляем еще один каст по скролам)
sub FSS()
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,'Enemy')
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub Light()
Var ManaNeed=10
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,'Enemy')
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target)
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub
sub FSS()
Var ManaNeed=20
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,'Enemy')
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub Light()
Var ManaNeed=10
If UO.Mana<ManaNeed then
UO.Print("NO MANA!")
endif
var Enemy = addOrGetObject('Enemy',8,-1)
if uo.count(fscroll)<>0 then
castScroll(fscroll,ManaNeed,'Enemy')
uo.print('fscroll: '+STR(UO.Count(fscroll)))
else
UO.Print("NO SCROLLS!")
end if
Endsub
sub castScroll(scrolType,ManaNeed,Target)
UO.FindType(scrolType,-1,'my')
if UO.GetQuantity('finditem') then
if UO.Mana<ManaNeed then
manadrink()
endif
if UO.Mana>=ManaNeed then
UO.WaitTargetObject(Target)
UO.UseObject('finditem')
endif
endif
endsub