помогите пжслта с атакои

Ask for scripts here

Moderators: Murderator+, Murderator

lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

помогите пжслта с атакои

Post by lavdenis »

Недавно начал разбираться со скриптами так что подскажите пжалста по атаке
Идея такая 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

а то при нажатии снова цель выбирать надо. Как сделать проверку по объекту что он уже определен
вообщем надо чтоб при повторном нажатии цель не выбиралась а сразу шла атака
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Во первых, не советую доставать модераторов двойными темами - могут и по ушам надавать.

Во вторых, ты бы мог без проблем написать этот скрипт сам прочитай ты парочку начальных уроков скриптинга.

В третьих, я сегодне добрый:

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
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Точно я еще и wend забыл СЕНКИ
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Только я не понял че он стрелку после щелчка не кидает а только при повторном клике
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

мож первыи лучше так
Sub war()
uo.print('Select Enemy:')
addObjectWait('Enemy',0)
while uo.targeting()
wait(200)
Wend
uo.Cast('Magic Arrow',Enemy)
uo.attack(Enemy)
endsub
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Извиняюсь, не заметил ошибки в твоём скрипте и поэтому не исправил в своём:

Code: Select all

sub war()
    uo.print('Select Enemy:')
    addObjectWait('Enemy',0)
    uo.Cast('Magic Arrow','Enemy') ;Тут и в следующей строке не хватает кавычек
    uo.attack('Enemy')
endsub
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Тогда Следущии вопрос
Я делаю скрипт чтоб все враги были в переменных.Если им атачить то таргеты в остальных скриптах на атаку будут попадать на врага автоматом так же можно сделать и добавлять друзеи и сразу хил на них в скрипте автоматом работать будет. Только в 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 пишу) но не знаток.И как сделать чтоб проверка и каст был по типу скрола. Спасибо.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

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

В общем лучше делать так (это не рабочий скрипт, а просто пример чтобы понять идею):

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


Вроде всё ответил. Если что пропустил - спрашивай. Люблю помогать тем кто хочет сам что-то понять, а то развелось тут всяких "помогите доработать мининг"...
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

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.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

И так что мы имеем в сумме
#Вопрос по 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

Покатит ли такое просто потестить нет возможности?И вообще если тебе нужен автоскрипт то надо же чтоб он все время работал тогда какова вероятность зависания компа при этом и если тебя одновременно будут атачить не один а человек шесть что тогда
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

1) Насчёт типов, лучше всего описывать такие типы отдельно в самом начале скрипта. Они тогда будут как константы.
К примеру:

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() то тоже крашнет. Все остальные функции обычно стабильно работают.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

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.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Я смотрю тут и из за бугра педалят +)))))
Last edited by lavdenis on 2010-03-28 18:06:24, edited 1 time in total.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

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 у нас две а переменная и значение одно а надо чтоб значения менялись. По моему это элементарно но я че то залип надо наверное отдохнуть. Поиду пивалдер бушлатить +)))))
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

Вроде появилась мысль но моно ли передать переменную между скриптами????. То есть от глобальнои переменнои>>основоному скрипту>>вспомогательному скрипту.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
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Не понял в твоём скрипте какую именно ты переменную хочешь передать и зачем. Опиши подробнее что ты хочешь сделать.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

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
Last edited by lavdenis on 2010-03-29 10:48:48, edited 2 times in total.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

минуточку но вроде ведь все же правильно

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


дак че я парюсь или нет??
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: помогите пжслта с атакои

Post by Beyonder »

Дык я поэтому и спросил, вроде всё есть и всё передаётся, а ты куда-то еще передать её хочешь :)

Всё верно, только в кастскролл я бы передал так:

castScroll(fscroll,ManaNeed,'Enemy')
Зачем в двух местах 20 писать если можно переменную использовать...
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: помогите пжслта с атакои

Post by lavdenis »

То есть если я правильно понял такое тоже покатит? (добавляем еще один каст по скролам)

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
Post Reply