Yoko

All sides of Injection
It is currently 2024-03-28 11:47:38

All times are UTC+02:00




Post new topic  Reply to topic  [ 118 posts ]  Go to page 1 2 3 4 5 6 Next
Author Message
PostPosted: 2011-06-02 10:52:43 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
Хочу просканировать тайлы вокруг чара в радиусе допустим на 18 тайлов на проходимость, но незнаю как это лучше реализовать.


Top
   
PostPosted: 2011-06-02 13:53:56 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
если выразиться математически то степень геморойности стремиться к невозможности :?

1) можно искать динамические объекты на земле. Но так ты не найдешь тайлы.
2) Можно прозванивать ВСЕ существующие тайлы и сравнивать их с типом проходимых. Будет 2 массива в одном из которых будет около 20-30К элементов (у нас на шарде можно копать тайлы с номерами 13625, 13628 ) => длительность убивает эффективность.
3) можно кидать перед собой монетку - если она упадет на землю и поднимется потом - значит тайл проходимый.
4) как то по другому :roll:

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-06-02 14:40:42 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Самое простое - пешком)
Что нибудь вроде
Code:
If Walker(x,y,0) then
  UO.SetGlobal(str(x) + ',' + str(y), 'ok')
Endif


Top
   
PostPosted: 2011-06-02 14:50:37 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
От блин я чето стормозил :(

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-06-02 15:19:19 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Но не факт, что самое быстрое


Top
   
PostPosted: 2011-06-02 16:00:29 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
Нет такие громадные массивы не нужны, дело будет в лесу, и я примерно знаю тайлы которые будут проходимы.


Top
   
PostPosted: 2011-06-02 16:03:02 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
а вообще я хочу реализовать скрипт, с помощью которого можно будет убивать в лесу цели из лука или магией, поэтому всё это мне нужно.


Top
   
PostPosted: 2011-06-02 16:27:10 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Tiger1989 wrote:
а вообще я хочу реализовать скрипт, с помощью которого можно будет убивать в лесу цели из лука или магией, поэтому всё это мне нужно.


Тогда тебе нужно сканировать тайл через UO.PrivateGetTile(), если дело в лесу, то на динамические объекты сканировать не надо (если только кто-нить не залокает какой-нить маркет-стоун в лесу).

PS точно не помню, но вроде как в ASM'ме была команда, возвращавшая номер тайла


Top
   
PostPosted: 2011-06-02 18:22:16 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
Я примерно понял как эту проверку реализовать, теперь мне надо выбрать траекторию выстрела в цель, дело в том, что надо учитывать деревья и выбирать подходящую траекторию, а как не знаю
Image
Не совсем как в игре но все же примерно так выглядит

Голубым цветом обозначена цель
Синим цветом обозначено препятствие
Красным цветом обозначена зона из которой цель не доступна для атаки
Зеленым цветом обозначена зона из которой цель доступна для атаки


Top
   
PostPosted: 2011-06-02 18:47:37 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Есть вариант перебора всех возможных траекторий.Это долго, но и тут можно начинать искать с тех, что поближе. Так же это можно делать в отдельном потоке...


Top
   
PostPosted: 2011-06-02 18:56:56 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Начинать искать нужно с близжайших координат. Затем прочертить прямую, и сканировать все тайлы, на которых она располагается. Если препятствие следующие координаты. Да и продолжать поиск нужно от цели.


Top
   
PostPosted: 2011-06-02 19:54:17 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Tiger1989, есть какие-либо наработки?


Top
   
PostPosted: 2011-06-02 21:22:01 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Не так все было сложно...

Функция вернёт строку вида '3 1541 123 1541 122 1541 121'
3 - Количество точек, а дальше координаты x,y самих точек.

На мой взгляд наиболее удобно будет

Code:
Sub asd()
  var a, i
  var string = VectorPoints(startx, starty, endx, endy)
  i = GetWord(string, 1)
  For a = 2 to 2 * i step 2
    UO.PrivateGetTile(GetWord(string, a), GetWord(string, a + 1), blablabla)
  Next
Endsub


Ну и сам скрипт...

Code:
Sub VectorPoints(startx, starty, endx, endy)
  var Coordinates = ' ', Amount = 0, Vector, x, y, i, j
  Vector = (str(endx - startx) + ',' + str(endy - starty))
  If startx >= endx then
    i = -1
   else
    i = 1
  Endif
  If starty >= endy then
    j = -1
   else
    j = 1
  Endif
  For x = startx to endx step i
    For y = starty to endy step j
      If IsOnVector(x, y, startx, starty, endx, endy) then
        Amount = Amount + 1
        Coordinates = (Coordinates + str(x) + ' ' + str(y) + ' ')
      Endif
    Next
  Next
  Return (str(Amount) + Coordinates)
Endsub

Sub IsOnVector(x, y, startx, starty, endx, endy)
  var lenAB = GetLength(startx, starty, endx, endy), lenAC = GetLength(startx, starty, x, y), lenBC = GetLength(x, y, endx, endy)
  If lenAB == lenAc + lenBC then
    Return 1
   else
    Return 0
  Endif
Endsub

Sub GetLength(startx, starty, endx, endy)
  var a = Absolute(endx - startx), b = Absolute(endy - starty)
  If a >= b then
    Return a
   else
    Return b
  Endif
Endsub

Sub Absolute(val)
  If val > 0 then
    Return val
   else
    Return -val
  Endif
Endsub


GetWord() Дестракшена располагается в полезностях


Top
   
PostPosted: 2011-06-02 23:51:51 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
Ой как всё не просто....)
завтра попробую что нибудь с ним сделать


Top
   
PostPosted: 2011-06-03 09:13:56 
Offline

Joined: 2010-06-19 22:59:51
Posts: 35
Кстати стрела не всегда летит по прямой, это тоже надо учесть как нибудь...


Top
   
PostPosted: 2011-06-03 09:56:15 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
учтено... :? Но и этого скрипта есть минусы


Top
   
PostPosted: 2011-06-03 10:30:43 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
стрела летит всегда по прямой от точки А до точки Б. Другое дело точка Б может передвигаться после выпуска заклинания, но тут уже скриптом ничего не поделаешь. Так что надо рассчитывать положение точки Б в момент начала произнесения заклинания.
Нескромный вопрос - как вы высчитываете траекторию выстрела если
1) стрелять можно только по объекту а не в координату (лук, стрелка, фаерболл)
2) если в момент начала каста (среднее время 1-3 секунды) цель делает 1 шаг за препятствие - каст сбивается - причем с филзом - тратится мана.
3) уж если полетело то ему срать - у нас на шарде стрелка догоняла чара через полтора экрана через лес. То есть выстрел как лазер - лупануло моментально а уж цель почувствовала через пару секунд "дискомфорт".

Весьма специфическая задача у автора стоит. Хотя помоему ничего не получится (по крайней мере в том виде как хочет автор)
Это примерно как идея кидать объект в противоположную сторону от той куда смотрит чар чтобы затормозить преследователей. 50 строк ненужного текста вместо 1 команды на хоткее.

PS мне не совсем понятно где на рисунке с стреляющий?

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-06-03 10:47:52 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Вот как я вижу ситуацию.

Ходим по вайпоинтам в лесу, если нашли цель - найти вектор до неё (мой скрипт возвращает тайлы, принадлежащие вектору). Сканировать тайлы на предмет проходимости, если хотя бы один не алё - прокладываем вектор от другой точки. Если все тайлы алё - идём на точку и стреляем пока: цель не умрёт, цель не приблизится, не умрёт чар, вектор до цели - не алё.

Начинать искать вектор следует подальше от цели, чтобы было время сделать пару выстрелов. Сканирование можно проводить из хайда, чтобы цель не выпендривалась.


Top
   
PostPosted: 2011-06-03 10:50:38 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Разумно будет вывести сканирование в отдельный поток.

Чем сложнее задача - тем она интереснее. Если получится - будет бот-охотник). Тут даже всякие сверхсложные ходилки отдыхают.


Top
   
PostPosted: 2011-06-03 10:57:57 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Видимо не выспался вчера. Только что понял, что скрипт может вернуть не тайлы на векторе, а тайлы на векторе + лишнии тайлы


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 118 posts ]  Go to page 1 2 3 4 5 6 Next

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 23 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited