Page 1 of 1

Сканирование пространства

Posted: 03.11.2014 20:13
by Stels
Всем привет. Есть квадратное замкнутое пространство. Возможно ли как-то просканировать его и знать на каких тайлах есть препятствия, например, стены (тайлы на которые нельзя наступить физически)?

Re: Сканирование пространства

Posted: 03.11.2014 21:26
by drabadan
а зачем?

Re: Сканирование пространства

Posted: 03.11.2014 22:07
by Stels
Если в двух словах: Бот, который может в случае чего убежать за стену и встать в хайд. На рануо если тебя атакуют, то нельзя спрятаться, только если позволяет расстояние или нет прямой видимости.

Re: Сканирование пространства

Posted: 03.11.2014 23:04
by Roman
drabadan wrote:а зачем?
или например если копаешь у скал, и после смерти необходимо отойти на один тайл(чтоб чар который ресает ботов открыл портал на точку раскопки) всторону а не упереться в скалу

Re: Сканирование пространства

Posted: 04.11.2014 0:22
by drabadan
Roman wrote:
drabadan wrote:а зачем?
или например если копаешь у скал, и после смерти необходимо отойти на один тайл(чтоб чар который ресает ботов открыл портал на точку раскопки) всторону а не упереться в скалу
NewMoveXY с параметром 1 в поле точности подхода.

Code: Select all

NewMoveXY(1111,1111, true, 1, true)
Подойдет не ближе 1 тайла к трупу.

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

Re: Сканирование пространства

Posted: 04.11.2014 0:29
by nah nah
Есть такое =) CheckLOS зовётся

тайлы искать каким-нибудь волновым алгоритмом от чара

Re: Сканирование пространства

Posted: 04.11.2014 0:35
by nah nah
Во нашёл в архивах

Code: Select all

    def findcover(self):
        for dist in range(25):
            for x in range(-dist, dist+1):
                if dist == abs(x):
                    step = 1
                else:
                    step = dist * 2
                for y in range(-dist, dist+1, step):
                    tx = PredictedX() + x
                    ty = PredictedY() + y
                    tz = GetSurfaceZ(tx, ty, WorldNum())
                    found = False
                    for enemy in self.enemies:
                        if CheckLOS(enemy.x, enemy.y, enemy.z, tx, ty, zt, WorldNum()):
                            found = False
                            break
                        else:
                            found = True
                    if found and GetPathArray3D(PredictedX(), PredictedY(), PredictedZ(), tx, ty, tz, WorldNum(), 0, 0, True):
                        return (tx, ty, tz)

Re: Сканирование пространства

Posted: 04.11.2014 3:53
by Stels
Это всё хорошо, но немного не то...
В общем, в идеале нужно, что бы в комнате заданного размера, чар не сходя с места просканировал пространство и записал все тайлы (их координаты и размеры) в архив или же во внешний файл, что бы потом можно было бы работать с этими тайлами, ну или пометить их каким-нить способом все для тех же целей :)

И еще, как работает функция CheckLOS в библиотеке отсутствует описание... что она вообще делает?

Re: Сканирование пространства

Posted: 04.11.2014 8:33
by drabadan
Stels wrote:Это всё хорошо, но немного не то...
В общем, в идеале нужно, что бы в комнате заданного размера, чар не сходя с места просканировал пространство и записал все тайлы (их координаты и размеры) в архив или же во внешний файл, что бы потом можно было бы работать с этими тайлами, ну или пометить их каким-нить способом все для тех же целей :)

И еще, как работает функция CheckLOS в библиотеке отсутствует описание... что она вообще делает?
Размер тайлов? О_О...


CheckLos - ето наверно чек ин лайн оф сайт. Я о такой функции не знал...
To Nah Nah - а можно подробней, что такое.

Code: Select all

 tx = PredictedX() + x
 ty = PredictedY() + y

Re: Сканирование пространства

Posted: 04.11.2014 15:30
by nah nah
tx, ty, tz - координаты тайла, проверяющегося чеклос, PredictedX() - возвращает координаты чара, аналогично getx(self), но кто-то мне писал, что лучше пользоваться predicted (это было ещё на 4-ом стелсе, как сейчас - хз)

тут три цикла for
1) от 0 до 25 - "радиус" от чара
2) по x
3) по y

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

Re: Сканирование пространства

Posted: 04.11.2014 15:40
by nah nah
Stels wrote:И еще, как работает функция CheckLOS в библиотеке отсутствует описание... что она вообще делает?

Code: Select all

function CheckLOS(xf, yf : Word; zf : ShortInt; xt, yt : Word; zt : ShortInt; WorldNum : Byte; LOSCheckType : TLOSCheckType; LOSCheckOptions : TLOSCheckOptions) : Boolean;

Code: Select all

  TLOSCheckType = (losSphere = 1, losSphereAdv = 2, losPOL = 3, losRunUO = 4);
  TLOSCheckOption = (losSphereCheckCorners,losPolUseNoShoot,losPolLOSThroughWindow);
  TLOSCheckOptions = set of TLOSCheckOption;
Проверяет, можно кастануть или стрельнуть из точки fx,fy,fz в точку ft,fy,fz