Проблемка... думаю решаемая....

Ask for help

Moderators: Murderator+, Murderator

comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Проблемка... думаю решаемая....

Post by comatoza »

Здравствуйте, многоуважаемые...

начну с начала... играю в данное время на шарде Destiny of Middle-Earth
а ноги у моей проблемки растут оттуда, что для того чтобы использовать одну из абилок класса вор необходимо находиться строго за спиной у оппонента и смотреть с ним в одном направлении...

идея была такая - позиция создаётся ручками - т.е. активный скрипт, который проводит проверку положения и направления собственно своего чара и жертвы... и в момент Х срабатывает абилка... но остановило меня следующее:

Описание: GetDistance •
Синтакс: number uo.GetDistance([object])
Тема: Команды скриптов Ключевые слова: uoscript, objhandling


--------------------------------------------------------------------------------

Возвращает параметр обьекта object (по умолчанию - персонажа игрока) - расстояние до обьекта, которое вычисляется как минимальное из расстояний по осям X и Y.


т.е. если чар находится на расстоянии 1 клетки от жертвы по одной оси и смотрит с ней в одном направлении скрипт срабатывает полюбому... независимо от расстояния по другой....

подскажите - как это сделать иначе?

есть у меня ышо версия с проверкой координат и направления взгляда...
но это 8 на (4(координаты чара и жертвы)+2(куда смотрит чар и жертва)) 48 проверок в секунду.... думаю будет лагать нереально....

ах да.... собственно примерно так выглядит то, что я наваял

Code: Select all

sub navodka()
 var dist, dir, myDir, i
 uo.addobject('my', '0x01380a8a')
 dist=uo.getdistance('zertva')
 dir=uo.getdir('zertva')
 mydir=uo.getDir('my')
 uo.getx('my')
 uo.gety('my')
 while  str(dist)<>1 AND str(dir)<>str(mydir)
  dist=uo.GetDistance('zertva')
  dir=uo.getdir('zertva')
  mydir=uo.getDir('my')
  wait(1)
 wend
 uo.waittargetobject('zertva')
 uo.msg('.ab 1')
end sub

заранее спасибо...
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Нифгига не понял что именно ты хочешь.

подскажите - как это сделать иначе?

Что именно "иначе"?
ЗЫ: Это просто убило:
while str(dist)<>1 AND str(dir)<>str(mydir)
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

DerMeister =) wrote:Нифгига не понял что именно ты хочешь.

подскажите - как это сделать иначе?

Что именно "иначе"?
ЗЫ: Это просто убило:
while str(dist)<>1 AND str(dir)<>str(mydir)


ладно попробую попростому
мне нада проверку что чар находится за спиной у жертвы и смотрит с ней в одну сторону....
а что такого криминального в стой строке ты нашёл?
простая проверка расстояния до жертвы и нарпавления взгляда обоих....
или ты думаешь сравнивать не числа, а переменные будет вернее?
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Это гдеж у тебя числа то?
Если x - число, то str(x) - строка, а ты её пытаешься с числом 1 сравнить... У тебя условие (str(dist)<>1) выполняется всегда так как строка ВСЕГДА НЕравна числу (кроме нулевой строки и числа 0) :lol: ;)

Теперь насчёт твоего вопроса - всё очень просто, надо тока всять и написать по новой, а то то что у тебя это галиматья (без обид ;) ).
Будет время, раскину мозгами.
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

спасибо что объяснил :)
а то я думаю чего это он просто dir yне выводит по print а str(dir) выводит :)
а насчёт галиматьи... это первое что мне пришлось писать после возвращения к УО :)
кстати до миддлы играл на рессе был там такой вор nuDoBKa :)
ЗЫ програмистом не являюсь и никогда им себя не считал :)
но вот поломать голову люблю... и эта задачка засадила меня часов на 6 :)
будет возможность помоги :)
как я уже говорил - заранее спасибо :)
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Нужно маленькое уточнение - За спиной понятно, а вот количество возможных положений чё то не понятно... Вобщем, сколько возможных различных положений "за спиной"... ? наверно я плохо обьяснил... блин... говорила мама - читай книги. =_)
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

чётко за спиной....
т.е. тока так

я->ж->

<-ж<-я

ну и те же вариации вверх вниз и диагональные...
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

comatoza wrote:чётко за спиной....
т.е. тока так

я->ж->

<-ж<-я

ну и те же вариации вверх вниз и диагональные...

Вот решение для диагональной "вариации" (взаимное расположение - на одной оси):

Code: Select all

Скрипт не рабочий!
sub main()
var en
uo.addobject('en') #добавляем врага
  while uo.targeting()
  wait(250)
  wend
while uo.getdir('en')<>uo.getdir() || (uo.getx('en')-uo.getx()<>getorient('x') && uo.gety('en')-uo.gety()<>getorient('y'))
#условие ожидания
wait(200) #Если не будет лагов, то можно и поменьше сделать
wend
uo.waittargetobject('en')
uo.msg('.ab 1')
end sub

sub getorient(axis)
#(c)Der, getorient() beta
var orient=999 #так надо
if axis=='x' then
  if uo.getdir()==9 then
  orient=-1
  endif
  if uo.getdir()==1 then
  orient=1
  endif
end if
if axis=='y' then
  if uo.getdir()==7 then
  orient=-1
  endif
  if uo.getdir()==3 then
  orient=1
  endif
end if
return orient
endsub


Вот что у меня получилось... я не тестил... Если не запустится или будет некорректно работать, то отпишись об этом (как можно подробнее).

ЗЫ: На "вариацию" "всех сторон света" нужно немножко переделать условие и процедуру getorient Но это уже завтра, счас я хочу спать. Вобщем, жду результатов теста.

-----------------------------------------------
Потестил, поговорил с умными людми... Понял, что это работать не может. =_(
Last edited by DerMeister =) on 2006-09-16 14:46:01, edited 2 times in total.
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

работает....
задержка великовата.... но это исправимо :)
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

ох ужас;)
уроки геометрии прошли даром?;) расчитать клетко за спиной подойти на нее...
дистанци проверить просто главное чтобы х и у лежали в пределах [0,1]
единстеное замечание только что GetDir и AddDir работают по разным направления
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Grin wrote:ох ужас;)
уроки геометрии прошли даром?;) расчитать клетко за спиной подойти на нее...
дистанци проверить просто главное чтобы х и у лежали в пределах [0,1]
единстеное замечание только что GetDir и AddDir работают по разным направления


Можно по подробней про по каждому пункту... Особенно по последнему ;)
DerMeister сейчас на нейрале!
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

comatoza wrote:работает....
задержка великовата.... но это исправимо :)



Это работать не может. УЖоС ,а не скрипт...
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

DerMeister =) wrote:
comatoza wrote:работает....
задержка великовата.... но это исправимо :)



Это работать не может. УЖоС ,а не скрипт...


ужас не ужас... а кой что упростил в той версии в которой я тупо перебирал через if все варианты возможные :)
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Твоя задача реализуется очень просто. Если тебе интересно, то я, вернувшись с дачи, напишу "как надо". Еще, тебе может помочь Grin. Если оч. срочно, то к нему.
DerMeister сейчас на нейрале!
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

Grin wrote:ох ужас;)
уроки геометрии прошли даром?;) расчитать клетко за спиной подойти на нее...
дистанци проверить просто главное чтобы х и у лежали в пределах [0,1]
единстеное замечание только что GetDir и AddDir работают по разным направления

если я верно понял говорится о следующем....
должно выполняться условие:
((абсолютное значение от (координата Х жертвы минус координат Х чара) = 1 и абсолютное значение от (координата У жертвы минус координата У чара) = 0) или (абсолютное значение от (координата Х жертвы минус координат Х чара) = 0 и абсолютное значение от (координата У жертвы минус координата У чара) = 1)) И (направление взглядов совпадает)


по-моему так....
вот тока знание инжевской орфографии у меня слабовато.... как взять абсолютную величину?
с остальным сам справлюсь....
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

кстати :)
дальнейшая работа моего извращённого мозга подсказала ышо один тактический ход :)
но! для него мне требуется осуществить прицел в определённые координаты... и если Х,У,Z я вытащить смогу... то как вытащить tilenum? ф смысле не оставнавливаясь и вынимая его из текстового окна :)
т.е. допустим так:

Code: Select all

uo.infotile(x,y,z)
tilenu
uo.waittargettile(tilenum, x,y,z)
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Казалось бы что все что тебе нужно так это infotile
а дальше вот такой скриптик
uo.infotile()
while uo.targeting()
wait(100)
wend
Но так завелось, что это работать небудет;)
Но можно сделать другое змечание info как не страно также заполняет lasttile;)
поэтому делаем такое..
uo.info()
while uo.targeting()
wait(100)
wend
tilenum=uo.LastTile(0)
и тд
читай инфу про uo.LastTile
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

а ларчик просто открывался :)
пасибки :)
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
comatoza
Posts: 76
Joined: 2006-09-10 01:09:20
Location: Russia>>SPb>>Kolpino
Contact:

Post by comatoza »

Code: Select all

sub navodka()
 var i, X, Y
 x=abs(uo.getx()-uo.getx('zertva'))
 y=abs(uo.gety()-uo.gety('zertva'))
 while not (x < 2 AND y < 2 AND uo.getdir()==uo.getdir('zertva'))
  wait(10)
 wend
 uo.waittargetobject('zertva')
 uo.msg('.ab 1')
end sub

получается вот такая бодяга, тока abs он не знает... а как иначе модуль взять?
Твоими пастырями будем мы. Во имя Твоё Господи. Сила снизошла из Твоих рук, наши ноги быстро Твоё слово несут. И прямо к Тебе пусть потёчёт река, наполним душами её. Да будет так!
(с) "Святые из трущоб" перевод камрада Гоблина
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

А чё, самому слабо процедуру написать?

Code: Select all

sub abs(x)
    if (x < 0) then
        x = -x
    end if
    return x
end sub
DerMeister сейчас на нейрале!
Post Reply