Yoko http://forum.yoko.com.ua/ |
|
помогите пжслта с атакои http://forum.yoko.com.ua/viewtopic.php?f=17&t=15675 |
Page 1 of 4 |
Author: | lavdenis [ 2010-03-27 06:20:23 ] |
Post subject: | помогите пжслта с атакои |
Недавно начал разбираться со скриптами так что подскажите пжалста по атаке Идея такая 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 а то при нажатии снова цель выбирать надо. Как сделать проверку по объекту что он уже определен вообщем надо чтоб при повторном нажатии цель не выбиралась а сразу шла атака |
Author: | Beyonder [ 2010-03-27 10:32:48 ] |
Post subject: | Re: помогите пжслта с атакои |
Во первых, не советую доставать модераторов двойными темами - могут и по ушам надавать. Во вторых, ты бы мог без проблем написать этот скрипт сам прочитай ты парочку начальных уроков скриптинга. В третьих, я сегодне добрый: Code: sub war() |
Author: | lavdenis [ 2010-03-27 13:54:43 ] |
Post subject: | Re: помогите пжслта с атакои |
Точно я еще и wend забыл СЕНКИ |
Author: | lavdenis [ 2010-03-27 14:34:45 ] |
Post subject: | Re: помогите пжслта с атакои |
Только я не понял че он стрелку после щелчка не кидает а только при повторном клике |
Author: | lavdenis [ 2010-03-27 15:27:30 ] |
Post subject: | 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 |
Author: | Beyonder [ 2010-03-27 17:11:40 ] |
Post subject: | Re: помогите пжслта с атакои |
Извиняюсь, не заметил ошибки в твоём скрипте и поэтому не исправил в своём: Code: sub war() |
Author: | lavdenis [ 2010-03-27 19:44:30 ] |
Post subject: | 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 пишу) но не знаток.И как сделать чтоб проверка и каст был по типу скрола. Спасибо. |
Author: | Beyonder [ 2010-03-27 22:30:03 ] |
Post subject: | Re: помогите пжслта с атакои |
Во первых, не рекоммендую использовать закладки обьектов и типов в инжекте. Лучше все нужные типы прописывать сразу в скрипт. Так будет меньше проблем при передаче сложного скрипта кому-то другому или на другую инжу. В общем лучше делать так (это не рабочий скрипт, а просто пример чтобы понять идею): Code: var fs_scroll_type = "0x1234" Короче как можно меньше использовать AddObject и AddType. Если-же цель нужно взять с таргета, то это лучше всего делать так (базовыми средствами инжекта): Code: sub test() Тот-же код с помощью моей addObjectWait: Code: sub test() Кстати да, вот тебе еще в помощь полезная функция addTypeWait. Работает так-же как и addObjectWait но добавляет не обьект а тип: Code: Sub addTypeWait(name,timeout) Но не смотря на мой совет не использовать UO.AddObject, бывают случаи когда лучше всё-же его использовать. Использовать нужно тогда - когда тебе переменную нужно передать между несколькими отдельными скриптами. В твоём случае есть несколько скриптов - на бросание разных заклинаний, аттак и т.д. Так вот для врага лучше задействовать переменную инжекта: Code: sub selectEnemy() Quote: ну тут моно добавить наверно проверку по объекту, то есть если он уже определен тогда сразу кидать Magic Arrow вощем сам наверное разберусь Легко сделать к примеру так: Code: sub addOrGetObject(name,distance,timeout) Тогда везде где нужно можно использовать его примерно так: Code: sub selectEnemy() Далее: Quote: ... 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: sub FSS() Думаю так проблема решится. Теперь запустив exec FSS получится такой ход проверок: 1) Если враг уже был кем-то выбран - будем использовать его. 2) Если враг не был выбран или убежал очень далеко (8 тайлов в скрипте выше) - покажем прицел, и игрок выберет нового врага. 3) В этой точке враг у нас уже точно есть (после первых двух пунктов) в переменной. Так что делаем с ним что хотим. Quote: Вопрос все ли правильно в стуктуре и будет ли работать связка макросов sub Fss()>>sub castScroll()>>sub manadrink() Не вижу почему она не должна работать ![]() Quote: И как сделать чтоб проверка и каст был по типу скрола. Так-же как и везде: Code: UO.FindType(scrollType,scrollColor,container) Вроде всё ответил. Если что пропустил - спрашивай. Люблю помогать тем кто хочет сам что-то понять, а то развелось тут всяких "помогите доработать мининг"... |
Author: | lavdenis [ 2010-03-28 06:36:29 ] |
Post subject: | 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 |
Author: | lavdenis [ 2010-03-28 07:52:57 ] |
Post subject: | 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 Покатит ли такое просто потестить нет возможности?И вообще если тебе нужен автоскрипт то надо же чтоб он все время работал тогда какова вероятность зависания компа при этом и если тебя одновременно будут атачить не один а человек шесть что тогда |
Author: | Beyonder [ 2010-03-28 14:10:11 ] |
Post subject: | Re: помогите пжслта с атакои |
1) Насчёт типов, лучше всего описывать такие типы отдельно в самом начале скрипта. Они тогда будут как константы. К примеру: Code: var scrollType = "0x1234" #Обьявляем вне функций, в начале файла все типы которые нам нужны. 2) Насчёт маны, вроде всё верно, только ты забыл кое-что: Code: Var fscroll='тип скролла' Насчёт автоматики: Code: sub AutoWar() В целом никаких проблем не будет. Всё будет отлично работать. У меня даже когда-то давно был скрипт на полную автоматику, там еще и встроенная ходилка была которая сама бегала за врагом, сбивала стрелками его заклинания, рубила его, лечилась и т.д. Что-то вроде ПвП бота. Тоже никогда не крашила. В инжекте самое опасное место - поиск обьектов на земле и их игнорирование. Тоесть если на земле дофига обьектов, и ты делаешь UO.FindType(...,...,'ground'), то рано или поздно инжа крашнет. Или если ты юзаешь UO.Ignore или UO.IgnoreReset() то тоже крашнет. Все остальные функции обычно стабильно работают. |
Author: | lavdenis [ 2010-03-28 16:13:13 ] |
Post subject: | Re: помогите пжслта с атакои |
Beyonder wrote: У меня даже когда-то давно был скрипт на полную автоматику, там еще и встроенная ходилка была которая сама бегала за врагом, сбивала стрелками его заклинания, рубила его, лечилась и т.д. Что-то вроде ПвП бота. Тоже никогда не крашила. +))))Ж Включил и забыл. Beyonder wrote: В инжекте самое опасное место - поиск обьектов на земле и их игнорирование. Тоесть если на земле дофига обьектов, и ты делаешь UO.FindType(...,...,'ground'), то рано или поздно инжа крашнет. Или если ты юзаешь UO.Ignore или UO.IgnoreReset() то тоже крашнет. Все остальные функции обычно стабильно работают. Интересно что получится у меня с ресом на друга script.dll - не твое добро? Дааа с кавычками виновен |
Author: | lavdenis [ 2010-03-28 16:18:22 ] |
Post subject: | Re: помогите пжслта с атакои |
Я смотрю тут и из за бугра педалят +))))) |
Author: | lavdenis [ 2010-03-28 16:38:06 ] |
Post subject: | 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 у нас две а переменная и значение одно а надо чтоб значения менялись. По моему это элементарно но я че то залип надо наверное отдохнуть. Поиду пивалдер бушлатить +))))) |
Author: | lavdenis [ 2010-03-29 04:46:45 ] |
Post subject: | 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 |
Author: | Beyonder [ 2010-03-29 08:13:07 ] |
Post subject: | Re: помогите пжслта с атакои |
Не понял в твоём скрипте какую именно ты переменную хочешь передать и зачем. Опиши подробнее что ты хочешь сделать. |
Author: | lavdenis [ 2010-03-29 09:28:45 ] |
Post subject: | 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 |
Author: | lavdenis [ 2010-03-29 10:31:11 ] |
Post subject: | 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 дак че я парюсь или нет?? |
Author: | Beyonder [ 2010-03-29 12:08:51 ] |
Post subject: | Re: помогите пжслта с атакои |
Дык я поэтому и спросил, вроде всё есть и всё передаётся, а ты куда-то еще передать её хочешь ![]() Всё верно, только в кастскролл я бы передал так: castScroll(fscroll,ManaNeed,'Enemy') Зачем в двух местах 20 писать если можно переменную использовать... |
Author: | lavdenis [ 2010-03-29 13:09:32 ] |
Post subject: | 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 |
Page 1 of 4 | All times are UTC+02:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |