Page 1 of 1

очередной глупый вопрос...

Posted: 2006-10-25 19:23:52
by comatoza
в общем такая тема...

рассмотрим ситуацию...
бежит чар... с какой точностью будут сниматься с него координаты

Code: Select all

uo.getx('enemy')
uo.gety('enemy')


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

и ещё... это уже из области совершенно глупых вопросов....

если мне нада вызвать процедуру или функцию :) я в этом собак не ловлю :)

в общем допустим я вызываю функцию в которую передаю серийник врага и она в ответ должна вернуть его координаты и направление....
как это реализуется?

Code: Select all

sub main
......
get_enemy_coord('enemy')
.....
end sub



sub get_enemycoord('enemy')
.....
return x
return y
return dir
end sub


или я не прав?

Posted: 2006-10-25 20:10:30
by DerMeister =)
Почти...
Нельзя return'ить сразу несколько переменных (как только парсер доходит до ретурна, он сразу же прекращает выполнять процедуру => только первый return сработает.
1)
Мжно так:

Code: Select all

sub main 
......
x=get_enemy_coord('enemy','x')
y=get_enemy_coord('enemy','y')
dir=get_enemy_coord('enemy','dir')
.....
end sub



sub get_enemycoord('enemy','coord')
.....
if coord=='x' then
return x
end if

if coord=='y' then
return y
end if

if coord=='dir' then
return dir
end if
 
end sub

2)
Но на само деле будет быстрее работать, если написать для каждой координаты свою процедуру, тоесть:

Code: Select all

sub get_enemycoord_x('enemy')
...
end sub

sub get_enemycoord_y('enemy')
...
end sub

sub get_enemycoord_dir('enemy')
...
end sub

3)
Еще есть хороший вариант с глобалками, но он хорошь лишь тогда, когда тебе нужны все координаты сразу. В случае если, скажем, координату х ты хочешь узнавать чаще, чем dir, то тогда вариант с вычислением всех координат в одной процедуре нужно реализовывать так: не вычислять все 3 координаты сразу, а "по запросу" (хотя это тоже самое,Ч то и пункт 2, только впрофиль):

Code: Select all

sub get_enemycoord('enemy','coord') 

if coord=='x' then
вычисляем Х
return x
end if

if coord=='y' then
вычисляем У
return y
end if

if coord=='dir' then
вычисляем dir
return dir
end if
 
end sub

Posted: 2006-10-25 20:52:04
by comatoza
а по первой части?
человек бежит его координаты меняются... успевает ли инжа схватывать это? или нет?

Posted: 2006-10-25 21:08:48
by Savage
Инжа успевает. Сам посмотри. Делавем вывод на экран координат чара с паузой 100.

Posted: 2006-10-26 00:37:55
by comatoza

Code: Select all

sub autostab()
var dx,dy,dir
uo.deletejournal()
while not uo.injournal('initial base')
  dx  = uo.getx()-uo.getx('zertva')
  dy  = uo.gety()-uo.gety('zertva')
  dir = uo.getdir('zertva')
 if dir==uo.getdir() then
  if (dir==0 and dx==0 and dy==1) then
   stab()
  else
   if (dir==1 and dx==-1 and dy==1) then
    stab()
   else
    if (dir==2 and dx==-1 and dy==0) then
     stab()
    else
     if (dir==3 and dx==-1 and dy==-1) then   
      stab()
     else
      if (dir==4 and dx==0 and dy==-1) then
       stab()
      else
       if (dir==5 and dx==1 and dy==-1) then
        stab()
       else
        if (dir==6 and dx==1 and dy==0) then
    stab()
        else
         if (dir==7 and dx==1 and dy==1) then
     stab()
         endif
        endif
       endif
      endif
     endif
    endif
   endif
  endif
 endif
wait(100)
wend
end sub


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

Posted: 2006-10-26 09:09:51
by Savage
Может ты неправильно подходишь к решению задачи? Попробуй вдумчивао объяснить, как можно подробнее, что ты хочешь реализавать.

Posted: 2006-10-26 16:53:52
by comatoza
Savage wrote:Может ты неправильно подходишь к решению задачи? Попробуй вдумчивао объяснить, как можно подробнее, что ты хочешь реализавать.


попытаюсь в очередной раз...

есть такая фишка, абилити у класса вор. Находясь в статусе хайд+стелс, он может, находясь чётко за спиной у противника и смотря с ним в одну сторону, и имея в руках оружие класса кинжал - даггер, крисс и скининг найф, произнеся '.ab 1' и кликнув таргетом на противника -нанести ему оЦЦень солидный урон...

т.о. я пытаюсь написать макрос который будет проверять положение меня относительно врага помеченного как 'zertva' и применять эту абилку...

в режиме реального времени руками это сделать очень тяжело...
человеки обучились почти не останавливаться или вставать попой к забору :)
выход - примерно просчитав траекторию по которой побежит человек заранее занять позицию, при которой он вынужден будет пробежать сквозь тебя, смотря при этом с ним в одном направлении - и именно в этот момент и должно сказать "волшебное слово" :)

надеюсь доступно рассказал?

заранее спасибо

Posted: 2006-10-26 23:30:01
by Savage
То есть ты уже занял позицию, смотришь в нужном направлении и ждешь когда тебя растопчут? Тогда неправильный у тя алгоритм. Вычисляешь координаты тайла перед тобой и как только они будут равны координатам жертвы, проверяешь его дирекшн и если все норм, то наносишь удар. Чем меньше будет вызовов, проверок и переходов тем больше скорость.паузы ставишь минимальные, такие чтоб комп токо не тормозил.

Posted: 2006-10-26 23:33:20
by Savage
То есть если я тебя правильно понял, и ты не двигаешься а играешь в кемпер-страйк, то, весь громоздкий алгоритм вычесления координат тайла подходящего для удара выносишь за цикл а проверку делаешь сразу на три подходящих параметра, Х Y и Dir жертвы через AND, если прокатывает то удар.

Posted: 2006-10-27 00:01:03
by comatoza
Savage wrote:То есть если я тебя правильно понял, и ты не двигаешься а играешь в кемпер-страйк, то, весь громоздкий алгоритм вычесления координат тайла подходящего для удара выносишь за цикл а проверку делаешь сразу на три подходящих параметра, Х Y и Dir жертвы через AND, если прокатывает то удар.


не совсем... я постоянно двигаюсь сам, т.к. приходиться занимать позицию постоянно... сразу не угадаешь где кто будет...

даже не так - я сам подхожу к человеку... но и он двигается...
допустим он бежал в одном направлении - развернулся и побежал назад... фсё что мне нужно повернуться... в общем движемся оба...

Posted: 2006-10-27 00:08:42
by Savage
Просил же подробно...
Ну тогда ты постоянно в цикле вычисляешь координаты тайла перед собой, если твои координаты или дирекшн изменились. Как токо координаты жертвы и дирекшн совпадают с местом казни и направлением твоих очей, удар.