Page 1 of 1
очередной глупый вопрос...
Posted: 2006-10-25 19:23:52
by comatoza
в общем такая тема...
рассмотрим ситуацию...
бежит чар... с какой точностью будут сниматься с него координаты
т.е. поднимаю тему старой своей задачки - срабатывания в зависимости от местоположения относительно врага....
и ещё... это уже из области совершенно глупых вопросов....
если мне нада вызвать процедуру или функцию

я в этом собак не ловлю

в общем допустим я вызываю функцию в которую передаю серийник врага и она в ответ должна вернуть его координаты и направление....
как это реализуется?
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
Просил же подробно...
Ну тогда ты постоянно в цикле вычисляешь координаты тайла перед собой, если твои координаты или дирекшн изменились. Как токо координаты жертвы и дирекшн совпадают с местом казни и направлением твоих очей, удар.