08-27-2013, 02:54 PM
Всем доброго дня! О великие Гуру l2 помогите. Пилю Инстанс фреи. Выдернул скрипт из аналогичной сборки в котором на этапе спавна Глакиеса
ругается ГС следующими словами TerritoryTable.getRandomPoint: territory 99911999 not found.
я тут же не долго думая прыгаю в TerritoryTable нахожу функцию getRandomPoint
Я не программист сразу скажу, но предполагаю что идёт расчёт координат спавна Глакиеса относительно зоны вокруг него. Лезу дальше в L2Territory
И вот теперь вопрос. Чего ему не хватает? Сам то Глакиес спавнится, но ошибка меня нервирует, я параноик
Код:
if (spawnTime > 0 && world.Glaciers < 7) {
if (!world._setStop) {
int spawn[] = TerritoryTable.getInstance().getRandomPoint(99911999);
final L2NpcInstance mob = spawn(Glacier, spawn[0], spawn[1], -11200, 0, world);
if (world.controler == null) {
world.controler = spawn(Controler, 114707, -114797, -11199, 0, world);
world.controler.setIsInvul(true);
world.controler.setParalyzed(true);
}
ругается ГС следующими словами TerritoryTable.getRandomPoint: territory 99911999 not found.
я тут же не долго думая прыгаю в TerritoryTable нахожу функцию getRandomPoint
Код:
public int[] getRandomPoint(int terr)
{
L2Territory t = _locations.get(terr);
if(t == null)
{
_log.warning("TerritoryTable.getRandomPoint: territory " + terr + " not found.");
return new int[3];
}
return t.getRandomPoint();
Код:
public int[] getRandomPoint()
{
int i;
int[] p = new int[3];
mainloop: for(i = 0; i < 100; i++)
{
p[0] = Rnd.get(_x_min, _x_max);
p[1] = Rnd.get(_y_min, _y_max);
p[2] = _z_min + (_z_max - _z_min) / 2;
/** Для отлова проблемных территорий, вызывающих сильную нагрузку
if(i == 40)
_log.warning("Heavy territory: " + this + ", need manual correction"); Клиентам это не нужно*/
if(poly.contains(p[0], p[1]))
{
// Не спаунить в зоны, запрещенные для спауна
if(ZoneManager.getInstance().checkIfInZone(ZoneType.no_spawn, p[0], p[1]))
continue;
// Не спаунить в колонны, стены и прочее.
int tempz = GeoEngine.getHeight(p[0], p[1], p[2], 0);
if(_z_min != _z_max)
{
if(tempz < _z_min || tempz > _z_max || _z_min > _z_max)
continue;
}
else if(tempz < _z_min - 200 || tempz > _z_min + 200)
continue;
p[2] = tempz;
int geoX = p[0] - L2World.MAP_MIN_X >> 4;
int geoY = p[1] - L2World.MAP_MIN_Y >> 4;
// Если местность подозрительная - пропускаем
for(int x = geoX - 1; x <= geoX + 1; x++)
for(int y = geoY - 1; y <= geoY + 1; y++)
if(GeoEngine.NgetNSWE(x, y, p[2], 0) != GeoEngine.NSWE_ALL)
continue mainloop;
return p;
}
}
//_log.warning("Can't make point for " + this); Клиентам это не нужно.
return p;
}