Перейти к содержанию

Заборы для вида?


Рекомендуемые сообщения

 Сегодня, прилетев СОЕ в Хантер, направила перса бежать от ворот (боковые, на взгорке), вниз, к ТП. Чуть-чуть ошиблась направлением. Перс пробегает насквозь изображенный забор и падает в ров. Конечно, сое оттуда достанет, но почему???? Раз уж препятствие - так препятствие, я правильно понимаю?

Ссылка на комментарий
Поделиться на другие сайты

Если долго бежать в стенку, то можно " просочиться " сквозь нее. В других более важных местах было так же ( тот же рб за стеной, можно было так же пройти хД) убрали. А в городе этого особого вреда не приносит.
Ссылка на комментарий
Поделиться на другие сайты

Если долго бежать в стенку, то можно " просочиться " сквозь нее. В других более важных местах было так же ( тот же рб за стеной, можно было так же пройти хД) убрали. А в городе этого особого вреда не приносит.

На бая раньше так же заходили же

Ссылка на комментарий
Поделиться на другие сайты

Сейчас гайка все бросит и будет заборы чинить))

Типа - не лезьте с фигней, гражданка, не до Вас? Вот магов порезать, дроп убавить, ГОД затеять, или еще какую гадость изваять - это важно, а когда перс посреди города в яму, из которой только СОЕ делать, проваливается - это так и должно быть? И "не гавкайте, смерды"? Не удивительно тогда, что онлайн падает... А если ты не представитель администрации - то вообще с какой стати такие реплики подаешь?

Кстати, я (перс) НЕ бежала  долго. В абсолютно обычном режиме, как по чистому месту.

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

 

было бы время - может бы и занялся, но на это надо потратить не то что дни/недели, а месяцы, учитывая с какими объемами почти нечитабельного кода придется работать...

 

З.Ы. вот чисто ради примера, чтобы проникнулись - одна из самых простейших и малейших функций из геодвига, просто проверяющая возможность пройти из одной точки до другой по прямой.

 

	private static int canMove(int __x, int __y, int _z, int __tx, int __ty, int _tz, boolean withCollision, int geoIndex)	{		int _x = __x - World.MAP_MIN_X >> 4;		int _y = __y - World.MAP_MIN_Y >> 4;		int _tx = __tx - World.MAP_MIN_X >> 4;		int _ty = __ty - World.MAP_MIN_Y >> 4;		int diff_x = _tx - _x, diff_y = _ty - _y, diff_z = _tz - _z;		int dx = Math.abs(diff_x), dy = Math.abs(diff_y), dz = Math.abs(diff_z);		float steps = Math.max(dx, dy);		if (steps == 0)			return -5;		int curr_x = _x, curr_y = _y, curr_z = _z;		short[] curr_layers = new short[MAX_LAYERS + 1];		NGetLayers(curr_x, curr_y, curr_layers, geoIndex);		if (curr_layers[0] == 0)			return 0;		float step_x = diff_x / steps, step_y = diff_y / steps;		float next_x = curr_x, next_y = curr_y;		int i_next_x, i_next_y;		short[] next_layers = new short[MAX_LAYERS + 1];		short[] temp_layers = new short[MAX_LAYERS + 1];		short[] curr_next_switcher;		for (int i = 0; i  Config.MAX_Z_DIFF ? dz * 1000 : 0;	}

и как я и сказал выше - это одна из самых простых и понятных, а вообще подобного кода там где-то на сотню килобайт...

  • Голос 1
Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.

Трынделка

Трынделка

    У вас нет разрешения в этот чат.
    ×
    ×
    • Создать...