Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
06-23-2012, 08:31 PM
(Сообщение последний раз редактировалось: 06-23-2012, 08:40 PM DiagoD.)
iqman Написал:Ну не надо из меня дурака делать и закрывать глаза на вторую часть кода которую я выставил, конструктор пат-фаинд инициализирует массив, так что извини доктор, не то лекарство прописал.
дооо...100%...код смотри внимательней...
когда создается new PathFind(...) на 73 строке есть вот такая шняжка...
path = findPath();, на 99 строке идет вызов метода handleNode(...), далее на 182 строке идет вызов метода getNeighbour(...) в этом методе на строке 347 идет вызов метода addDebugItem(...) собственно внутри которого и вылазит НПЕ...
Так вот, открываем свои глаза и мы видим, что весь этот процесс происходит еще до того как на 76 строке вызывается метод debugPath(...); в которм на 396 строке идет инициализация...
так, что дурака я из тебя не делаю...
Добавлено через 1 минуту
Перед тем как прописать лекарство, доктор не поленился и сделал все необходимые анализы и учел все симптомы:loltt0:
Добавлено через 8 минут
P.S. Предыдущий ответ я начал писать еще до того как ты дописал вторую часть кода, правда это все равно ничего не меняет)
open-team.ru - Freya, HighFive...
Сообщений: 1,883
Тем: 53
Зарегистрирован: Feb 2011
Так доктор продолжаем.
По логу я и так это вижу что куда ведет.
Цитата:Суть проблемы такова гео грузится норм.Но когда начинаешь бегать в игре чар останавливается и приходится начинать движения на стрелочках.
Сейчас смотрим еще глубже:
Код: public boolean moveToLocation(int x_dest, int y_dest, int z_dest, int offset, boolean pathfinding)
Код: if(buildPathTo(x_dest, y_dest, z_dest, offset, pathfinding, false))
Код: ArrayList<ArrayList<Location>> targets = GeoMove.findMovePath(getX(), getY(), getZ(), dest.clone(), this, true, ref);
Код: public static ArrayList<ArrayList<Location>> findMovePath(int x, int y, int z, Location target, L2Object obj, boolean showTrace, int refIndex)
{
return getNodePath(findPath(x, y, z, target, obj, showTrace, refIndex), refIndex);
}
Код: public static ArrayList<Location> findPath(int x, int y, int z, Location target, L2Object obj, boolean showTrace, int refIndex)
Код: PathFind n = new PathFind(x, y, z, target.x, target.y, target.z, obj, refIndex);
Собственно и конструктор, сейчас обьясни мне это как он до движение не инициализирует конструктор ПФ?
p.s. Это путь от момента когда игрок решил двинутся до инициализации ПФ.
Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
А теперь одень очки и посмотри:
Код: public PathFind(int x, int y, int z, int destX, int destY, int destZ, L2Object obj, int refIndex)
{
this.refIndex = refIndex;
Location startpoint = Config.PATHFIND_BOOST == 0 ? new Location(x, y, z) : GeoEngine.moveCheckWithCollision(x, y, z, destX, destY, true, refIndex);
Location native_endpoint = new Location(destX, destY, destZ);
Location endpoint = Config.PATHFIND_BOOST != 2 || Math.abs(destZ - z) > 200 ? native_endpoint.clone() : GeoEngine.moveCheckBackwardWithCollision(destX, destY, destZ, startpoint.x, startpoint.y, true, refIndex);
startpoint.world2geo();
native_endpoint.world2geo();
endpoint.world2geo();
startpoint.z = GeoEngine.NgetHeight(startpoint.x, startpoint.y, startpoint.z, refIndex);
endpoint.z = GeoEngine.NgetHeight(endpoint.x, endpoint.y, endpoint.z, refIndex);
int xdiff = Math.abs(endpoint.x - startpoint.x);
int ydiff = Math.abs(endpoint.y - startpoint.y);
if(xdiff == 0 && ydiff == 0)
{
if(Math.abs(endpoint.z - startpoint.z) < 32)
{
path = new ArrayList<Location>();
path.add(0, startpoint);
}
return;
}
if((buff = PathFindBuffers.alloc(64 + 2 * Math.max(xdiff, ydiff), obj.isPlayable(), startpoint, endpoint, native_endpoint)) != null)
{
if(Config.PATHFIND_DEBUG && obj.isPlayer() && ((L2Player) obj).isGM())
{
if(debugItems != null)
{
for(L2ItemInstance item : debugItems)
item.deleteMe();
debugItems.clear();
}
custom_debug = true;
}
path = findPath();
if(Config.GEODATA_DEBUG && obj.isPlayer())
debugPath((L2Player) obj, buff, path); // TODO дебаг не для лайва!
buff.free();
if(obj.isNpc())
{
L2NpcInstance npc = (L2NpcInstance) obj;
npc.pathfindCount++;
npc.pathfindTime += (System.nanoTime() - buff.useStartedNanos) / 1000000.0;
}
}
}
path = findPath(); вызывается перед тем как debugPath((L2Player) obj, buff, path); // TODO дебаг не для лайва!
собственно весь процесс описанный мною происходит при вызове первого!!!
open-team.ru - Freya, HighFive...
Сообщений: 1,883
Тем: 53
Зарегистрирован: Feb 2011
Все вижу, ты абсалютно прав
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Жесткая битва
|